summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2022-05-30 03:02:45 +0000
committerNorbert Preining <norbert@preining.info>2022-05-30 03:02:45 +0000
commite86bbda34fc68baf4c550857dde06eb51a304c0d (patch)
treeb26b0f9b8af7034d9e27a07270263b38659b2f3a
parentc00656779e19523d32d1d563e37f48709e487ce3 (diff)
CTAN sync 202205300302
-rw-r--r--FILES.byname559
-rw-r--r--FILES.byname.gzbin2436663 -> 2436860 bytes
-rw-r--r--FILES.last07days665
-rw-r--r--macros/generic/xint/CHANGES.html234
-rw-r--r--macros/generic/xint/Makefile2
-rw-r--r--macros/generic/xint/README.md78
-rw-r--r--macros/generic/xint/sourcexint.pdfbin1175167 -> 1182807 bytes
-rw-r--r--macros/generic/xint/xint.dtx11656
-rw-r--r--macros/generic/xint/xint.pdfbin1058714 -> 1060744 bytes
-rw-r--r--macros/latex/contrib/acmart/ACM-Reference-Format.bst6
-rw-r--r--macros/latex/contrib/acmart/README10
-rw-r--r--macros/latex/contrib/acmart/acmart.dtx242
-rw-r--r--macros/latex/contrib/acmart/acmart.pdfbin866366 -> 906902 bytes
-rw-r--r--macros/latex/contrib/acmart/acmguide.pdfbin424543 -> 427386 bytes
-rw-r--r--macros/latex/contrib/acmart/samples/sample-acmengage.pdfbin0 -> 397498 bytes
-rw-r--r--macros/latex/contrib/acmart/samples/sample-acmlarge.pdfbin606012 -> 605879 bytes
-rw-r--r--macros/latex/contrib/acmart/samples/sample-acmsmall-biblatex.pdfbin628553 -> 628602 bytes
-rw-r--r--macros/latex/contrib/acmart/samples/sample-acmsmall-conf.pdfbin1050052 -> 1049943 bytes
-rw-r--r--macros/latex/contrib/acmart/samples/sample-acmsmall-submission.pdfbin618411 -> 618221 bytes
-rw-r--r--macros/latex/contrib/acmart/samples/sample-acmsmall.pdfbin615907 -> 615731 bytes
-rw-r--r--macros/latex/contrib/acmart/samples/sample-acmtog.pdfbin563275 -> 563350 bytes
-rw-r--r--macros/latex/contrib/acmart/samples/sample-authordraft.pdfbin1043258 -> 1043035 bytes
-rw-r--r--macros/latex/contrib/acmart/samples/sample-base.bib10
-rw-r--r--macros/latex/contrib/acmart/samples/sample-lualatex.pdfbin780356 -> 780062 bytes
-rw-r--r--macros/latex/contrib/acmart/samples/sample-manuscript.pdfbin618058 -> 617941 bytes
-rw-r--r--macros/latex/contrib/acmart/samples/sample-sigconf-biblatex.pdfbin615620 -> 615270 bytes
-rw-r--r--macros/latex/contrib/acmart/samples/sample-sigconf-i13n.pdfbin1055507 -> 1054983 bytes
-rw-r--r--macros/latex/contrib/acmart/samples/sample-sigconf.pdfbin1039457 -> 1039228 bytes
-rw-r--r--macros/latex/contrib/acmart/samples/sample-sigplan.pdfbin1048146 -> 1048048 bytes
-rw-r--r--macros/latex/contrib/acmart/samples/sample-xelatex.pdfbin659217 -> 659076 bytes
-rw-r--r--macros/latex/contrib/acmart/samples/samples.dtx264
-rw-r--r--macros/latex/contrib/acmart/samples/samples.ins1
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/beamerthemeamurmaple/LICENSE14
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/beamerthemeamurmaple/README.md30
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/beamerthemeamurmaple/doc/beamer-amurmaple-doc.pdfbin0 -> 348965 bytes
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/beamerthemeamurmaple/doc/beamer-amurmaple-doc.tex577
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/beamerthemeamurmaple/doc/logo.pngbin0 -> 170260 bytes
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/beamerthemeamurmaple/tex/beamerthemeAmurmaple.sty629
-rw-r--r--macros/latex/contrib/fixdif/fixdif.dtx12
-rw-r--r--macros/latex/contrib/fixdif/fixdif.pdfbin324073 -> 324100 bytes
-rw-r--r--macros/latex/contrib/typed-checklist/README.md4
-rw-r--r--macros/latex/contrib/typed-checklist/typed-checklist.dtx49
-rw-r--r--macros/latex/contrib/typed-checklist/typed-checklist.ins52
-rw-r--r--macros/latex/contrib/typed-checklist/typed-checklist.pdfbin356320 -> 697827 bytes
-rw-r--r--macros/unicodetex/latex/nwafuthesis/nwafuthesis.dtx254
-rw-r--r--macros/unicodetex/latex/nwafuthesis/nwafuthesis.pdfbin2340425 -> 2346554 bytes
-rw-r--r--systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl3
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb102
-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.xzbin2382344 -> 2382632 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
55 files changed, 9032 insertions, 6457 deletions
diff --git a/FILES.byname b/FILES.byname
index 730350b206..f4b5a37a9d 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/28 | 106285 | FILES.last07days
+2022/05/29 | 107240 | 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
@@ -188795,7 +188795,7 @@
2018/08/26 | 1014893 | install/macros/generic/tex-locale.tds.zip
2020/06/30 | 1215011 | install/macros/generic/tracklang.tds.zip
2021/09/15 | 585368 | install/macros/generic/unicode-data.tds.zip
-2022/05/18 | 2819401 | install/macros/generic/xint.tds.zip
+2022/05/29 | 2841730 | install/macros/generic/xint.tds.zip
2016/05/15 | 295442 | install/macros/latex/contrib/abc.tds.zip
2018/11/24 | 6522794 | install/macros/latex/contrib/abntex2.tds.zip
2009/09/02 | 160216 | install/macros/latex/contrib/abstract.tds.zip
@@ -203700,13 +203700,13 @@
2010/05/14 | 253 | macros/generic/xcomment/xcomment.sty
2010/05/14 | 5315 | macros/generic/xcomment/xcomment.tex
2010/05/15 | 84896 | macros/generic/xcomment.zip
-2022/05/18 | 142785 | macros/generic/xint/CHANGES.html
-2021/06/13 | 466 | macros/generic/xint/Makefile
-2022/05/18 | 3809 | macros/generic/xint/README.md
-2022/05/18 | 1175167 | macros/generic/xint/sourcexint.pdf
-2022/05/18 | 1890317 | macros/generic/xint/xint.dtx
-2022/05/18 | 1058714 | macros/generic/xint/xint.pdf
-2022/05/18 | 2706904 | macros/generic/xint.zip
+2022/05/29 | 145875 | macros/generic/xint/CHANGES.html
+2022/05/24 | 466 | macros/generic/xint/Makefile
+2022/05/29 | 5251 | macros/generic/xint/README.md
+2022/05/29 | 1182807 | macros/generic/xint/sourcexint.pdf
+2022/05/29 | 1920568 | macros/generic/xint/xint.dtx
+2022/05/29 | 1060744 | macros/generic/xint/xint.pdf
+2022/05/29 | 2728869 | macros/generic/xint.zip
2020/11/11 | 3056 | macros/generic/xlop/doc/history.txt
2020/11/11 | 389668 | macros/generic/xlop/doc/xlop-doc-fr.pdf
2020/11/11 | 108183 | macros/generic/xlop/doc/xlop-doc-fr.tex
@@ -205497,40 +205497,41 @@
2021/01/20 | 1333 | macros/latex/contrib/achemso/README.md
2021/01/20 | 893802 | macros/latex/contrib/achemso.zip
2022/02/20 | 2773 | macros/latex/contrib/acmart/acmart.bib
-2022/04/10 | 264648 | macros/latex/contrib/acmart/acmart.dtx
+2022/05/29 | 272110 | macros/latex/contrib/acmart/acmart.dtx
2021/08/29 | 1016 | macros/latex/contrib/acmart/acmart.ins
-2022/04/10 | 866366 | macros/latex/contrib/acmart/acmart.pdf
+2022/05/29 | 906902 | macros/latex/contrib/acmart/acmart.pdf
2022/04/10 | 20721 | macros/latex/contrib/acmart/acmauthoryear.bbx
2022/04/10 | 6245 | macros/latex/contrib/acmart/acmauthoryear.cbx
2022/04/10 | 1093 | macros/latex/contrib/acmart/acmdatamodel.dbx
-2022/04/10 | 424543 | macros/latex/contrib/acmart/acmguide.pdf
+2022/05/29 | 427386 | macros/latex/contrib/acmart/acmguide.pdf
2022/04/10 | 19840 | macros/latex/contrib/acmart/acmnumeric.bbx
2022/04/10 | 90 | macros/latex/contrib/acmart/acmnumeric.cbx
-2021/11/26 | 90330 | macros/latex/contrib/acmart/ACM-Reference-Format.bst
+2022/05/08 | 90333 | macros/latex/contrib/acmart/ACM-Reference-Format.bst
2022/04/10 | 4658 | macros/latex/contrib/acmart/Makefile
-2022/04/10 | 11727 | macros/latex/contrib/acmart/README
+2022/05/12 | 11967 | macros/latex/contrib/acmart/README
2022/04/10 | 4825 | macros/latex/contrib/acmart/samples/abbrev.bib
-2022/04/10 | 606012 | macros/latex/contrib/acmart/samples/sample-acmlarge.pdf
-2022/04/10 | 628553 | macros/latex/contrib/acmart/samples/sample-acmsmall-biblatex.pdf
-2022/04/10 | 1050052 | macros/latex/contrib/acmart/samples/sample-acmsmall-conf.pdf
-2022/04/10 | 615907 | macros/latex/contrib/acmart/samples/sample-acmsmall.pdf
-2022/04/10 | 618411 | macros/latex/contrib/acmart/samples/sample-acmsmall-submission.pdf
-2022/04/10 | 563275 | macros/latex/contrib/acmart/samples/sample-acmtog.pdf
-2022/04/10 | 1043258 | macros/latex/contrib/acmart/samples/sample-authordraft.pdf
-2022/02/21 | 53302 | macros/latex/contrib/acmart/samples/sample-base.bib
+2022/05/29 | 397498 | macros/latex/contrib/acmart/samples/sample-acmengage.pdf
+2022/05/29 | 605879 | macros/latex/contrib/acmart/samples/sample-acmlarge.pdf
+2022/05/29 | 628602 | macros/latex/contrib/acmart/samples/sample-acmsmall-biblatex.pdf
+2022/05/29 | 1049943 | macros/latex/contrib/acmart/samples/sample-acmsmall-conf.pdf
+2022/05/29 | 615731 | macros/latex/contrib/acmart/samples/sample-acmsmall.pdf
+2022/05/29 | 618221 | macros/latex/contrib/acmart/samples/sample-acmsmall-submission.pdf
+2022/05/29 | 563350 | macros/latex/contrib/acmart/samples/sample-acmtog.pdf
+2022/05/29 | 1043035 | macros/latex/contrib/acmart/samples/sample-authordraft.pdf
+2022/05/29 | 53502 | macros/latex/contrib/acmart/samples/sample-base.bib
2018/12/30 | 95030 | macros/latex/contrib/acmart/samples/sample-franklin.png
-2022/04/10 | 780356 | macros/latex/contrib/acmart/samples/sample-lualatex.pdf
-2022/04/10 | 618058 | macros/latex/contrib/acmart/samples/sample-manuscript.pdf
-2022/04/10 | 39488 | macros/latex/contrib/acmart/samples/samples.dtx
-2022/04/10 | 615620 | macros/latex/contrib/acmart/samples/sample-sigconf-biblatex.pdf
-2022/04/10 | 1055507 | macros/latex/contrib/acmart/samples/sample-sigconf-i13n.pdf
-2022/04/10 | 1039457 | macros/latex/contrib/acmart/samples/sample-sigconf.pdf
-2022/04/10 | 1048146 | macros/latex/contrib/acmart/samples/sample-sigplan.pdf
-2022/04/10 | 1014 | macros/latex/contrib/acmart/samples/samples.ins
+2022/05/29 | 780062 | macros/latex/contrib/acmart/samples/sample-lualatex.pdf
+2022/05/29 | 617941 | macros/latex/contrib/acmart/samples/sample-manuscript.pdf
+2022/05/29 | 52060 | macros/latex/contrib/acmart/samples/samples.dtx
+2022/05/29 | 615270 | macros/latex/contrib/acmart/samples/sample-sigconf-biblatex.pdf
+2022/05/29 | 1054983 | macros/latex/contrib/acmart/samples/sample-sigconf-i13n.pdf
+2022/05/29 | 1039228 | macros/latex/contrib/acmart/samples/sample-sigconf.pdf
+2022/05/29 | 1048048 | macros/latex/contrib/acmart/samples/sample-sigplan.pdf
+2022/05/12 | 1081 | macros/latex/contrib/acmart/samples/samples.ins
2020/10/26 | 439021 | macros/latex/contrib/acmart/samples/sampleteaser.pdf
-2022/04/10 | 659217 | macros/latex/contrib/acmart/samples/sample-xelatex.pdf
+2022/05/29 | 659076 | macros/latex/contrib/acmart/samples/sample-xelatex.pdf
2022/04/10 | 5221 | macros/latex/contrib/acmart/samples/software.bib
-2022/04/11 | 12363170 | macros/latex/contrib/acmart.zip
+2022/05/29 | 12785104 | macros/latex/contrib/acmart.zip
2000/05/18 | 66049 | macros/latex/contrib/acmconf/acmconf.dtx
2000/05/18 | 4408 | macros/latex/contrib/acmconf/acmconf.ins
2008/05/14 | 96012 | macros/latex/contrib/acmconf/acmconf.pdf
@@ -207445,6 +207446,13 @@
2018/10/31 | 201 | macros/latex/contrib/beamer-contrib/themes/beamerdarkthemes/makemagpie.sh
2020/05/10 | 2141 | macros/latex/contrib/beamer-contrib/themes/beamerdarkthemes/README
2020/05/10 | 9637048 | macros/latex/contrib/beamer-contrib/themes/beamerdarkthemes.zip
+2022/05/29 | 348965 | macros/latex/contrib/beamer-contrib/themes/beamerthemeamurmaple/doc/beamer-amurmaple-doc.pdf
+2022/05/29 | 17317 | macros/latex/contrib/beamer-contrib/themes/beamerthemeamurmaple/doc/beamer-amurmaple-doc.tex
+2022/05/29 | 170260 | macros/latex/contrib/beamer-contrib/themes/beamerthemeamurmaple/doc/logo.png
+2022/05/29 | 495 | macros/latex/contrib/beamer-contrib/themes/beamerthemeamurmaple/LICENSE
+2022/05/29 | 1108 | macros/latex/contrib/beamer-contrib/themes/beamerthemeamurmaple/README.md
+2022/05/29 | 19056 | macros/latex/contrib/beamer-contrib/themes/beamerthemeamurmaple/tex/beamerthemeAmurmaple.sty
+2022/05/29 | 526407 | macros/latex/contrib/beamer-contrib/themes/beamerthemeamurmaple.zip
2022/03/09 | 574 | macros/latex/contrib/beamer-contrib/themes/beamertheme-arguelles/beamercolorthemeArguelles.sty
2022/03/09 | 721 | macros/latex/contrib/beamer-contrib/themes/beamertheme-arguelles/beamerfontthemeArguelles.sty
2022/03/09 | 1580 | macros/latex/contrib/beamer-contrib/themes/beamertheme-arguelles/beamerinnerthemeArguelles.sty
@@ -215815,11 +215823,11 @@
2019/08/05 | 201807 | macros/latex/contrib/fixcmex/fixcmex.pdf
2019/08/05 | 810 | macros/latex/contrib/fixcmex/README
2019/08/05 | 203748 | macros/latex/contrib/fixcmex.zip
-2022/05/28 | 20178 | macros/latex/contrib/fixdif/fixdif.dtx
-2022/05/28 | 3061 | macros/latex/contrib/fixdif/fixdif.ins
-2022/05/28 | 324073 | macros/latex/contrib/fixdif/fixdif.pdf
-2022/05/28 | 707 | macros/latex/contrib/fixdif/README.md
-2022/05/28 | 319986 | macros/latex/contrib/fixdif.zip
+2022/05/29 | 20167 | macros/latex/contrib/fixdif/fixdif.dtx
+2022/05/29 | 3061 | macros/latex/contrib/fixdif/fixdif.ins
+2022/05/29 | 324100 | macros/latex/contrib/fixdif/fixdif.pdf
+2022/05/29 | 707 | macros/latex/contrib/fixdif/README.md
+2022/05/29 | 320004 | macros/latex/contrib/fixdif.zip
2010/02/20 | 56191 | macros/latex/contrib/fixfoot/fixfoot.pdf
2007/12/12 | 7792 | macros/latex/contrib/fixfoot/fixfoot.sty
2010/02/20 | 1925 | macros/latex/contrib/fixfoot/fixfoot.tex
@@ -232531,11 +232539,11 @@
2002/04/01 | 1893 | macros/latex/contrib/type1cm/type1cm.ins
2002/04/01 | 6431 | macros/latex/contrib/type1cm/type1cm.txt
2011/03/24 | 328566 | macros/latex/contrib/type1cm.zip
-2019/01/15 | 2362 | macros/latex/contrib/typed-checklist/README.md
-2019/01/15 | 101913 | macros/latex/contrib/typed-checklist/typed-checklist.dtx
-2019/01/15 | 1083 | macros/latex/contrib/typed-checklist/typed-checklist.ins
-2019/01/15 | 356320 | macros/latex/contrib/typed-checklist/typed-checklist.pdf
-2019/01/16 | 371644 | macros/latex/contrib/typed-checklist.zip
+2022/05/29 | 2363 | macros/latex/contrib/typed-checklist/README.md
+2022/05/29 | 101133 | macros/latex/contrib/typed-checklist/typed-checklist.dtx
+2022/05/29 | 1861 | macros/latex/contrib/typed-checklist/typed-checklist.ins
+2022/05/29 | 697827 | macros/latex/contrib/typed-checklist/typed-checklist.pdf
+2022/05/29 | 716617 | macros/latex/contrib/typed-checklist.zip
2013/03/26 | 20995 | macros/latex/contrib/typedref/typedref.dtx
2013/03/26 | 964 | macros/latex/contrib/typedref/typedref.ins
2013/03/26 | 193921 | macros/latex/contrib/typedref/typedref.pdf
@@ -245295,11 +245303,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/05/28 | 62589 | macros/unicodetex/latex/nwafuthesis/nwafuthesis-doc.dtx
-2022/05/28 | 270013 | macros/unicodetex/latex/nwafuthesis/nwafuthesis.dtx
-2022/05/28 | 2340425 | macros/unicodetex/latex/nwafuthesis/nwafuthesis.pdf
+2022/05/29 | 62589 | macros/unicodetex/latex/nwafuthesis/nwafuthesis-doc.dtx
+2022/05/29 | 272913 | macros/unicodetex/latex/nwafuthesis/nwafuthesis.dtx
+2022/05/29 | 2346554 | macros/unicodetex/latex/nwafuthesis/nwafuthesis.pdf
2022/04/04 | 1542 | macros/unicodetex/latex/nwafuthesis/README.md
-2022/05/28 | 3434611 | macros/unicodetex/latex/nwafuthesis.zip
+2022/05/29 | 3442045 | 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
@@ -281971,11 +281979,11 @@
2020/03/04 | 408 | systems/texlive/tlnet/archive/collection-langpolish.r54074.tar.xz
2020/03/04 | 392 | systems/texlive/tlnet/archive/collection-langportuguese.r54074.tar.xz
2020/03/07 | 380 | systems/texlive/tlnet/archive/collection-langspanish.r54141.tar.xz
-2022/05/22 | 6640 | systems/texlive/tlnet/archive/collection-latexextra.r63355.tar.xz
+2022/05/29 | 6640 | systems/texlive/tlnet/archive/collection-latexextra.r63430.tar.xz
2020/12/03 | 696 | systems/texlive/tlnet/archive/collection-latex.r57048.tar.xz
2021/02/24 | 772 | systems/texlive/tlnet/archive/collection-latexrecommended.r57862.tar.xz
2022/04/20 | 804 | systems/texlive/tlnet/archive/collection-luatex.r63081.tar.xz
-2022/05/07 | 1592 | systems/texlive/tlnet/archive/collection-mathscience.r63241.tar.xz
+2022/05/29 | 1600 | systems/texlive/tlnet/archive/collection-mathscience.r63426.tar.xz
2021/06/10 | 548 | systems/texlive/tlnet/archive/collection-metapost.r59531.tar.xz
2021/02/24 | 476 | systems/texlive/tlnet/archive/collection-music.r57878.tar.xz
2022/04/06 | 1516 | systems/texlive/tlnet/archive/collection-pictures.r62930.tar.xz
@@ -284126,6 +284134,9 @@
2019/08/06 | 202740 | systems/texlive/tlnet/archive/fixcmex.doc.r51825.tar.xz
2019/08/06 | 1400 | systems/texlive/tlnet/archive/fixcmex.r51825.tar.xz
2019/08/06 | 2868 | systems/texlive/tlnet/archive/fixcmex.source.r51825.tar.xz
+2022/05/29 | 315224 | systems/texlive/tlnet/archive/fixdif.doc.r63426.tar.xz
+2022/05/29 | 1760 | systems/texlive/tlnet/archive/fixdif.r63426.tar.xz
+2022/05/29 | 6128 | systems/texlive/tlnet/archive/fixdif.source.r63426.tar.xz
2019/02/28 | 50024 | systems/texlive/tlnet/archive/fixfoot.doc.r17131.tar.xz
2019/02/28 | 3280 | systems/texlive/tlnet/archive/fixfoot.r17131.tar.xz
2019/02/28 | 286260 | systems/texlive/tlnet/archive/fixjfm.doc.r47113.tar.xz
@@ -284463,9 +284474,9 @@
2019/02/28 | 2328 | systems/texlive/tlnet/archive/galois.r15878.tar.xz
2019/02/28 | 6452 | systems/texlive/tlnet/archive/galois.source.r15878.tar.xz
2019/02/28 | 219896 | systems/texlive/tlnet/archive/gamebook.doc.r24714.tar.xz
-2021/08/26 | 380608 | systems/texlive/tlnet/archive/gamebooklib.doc.r60318.tar.xz
-2021/08/26 | 3204 | systems/texlive/tlnet/archive/gamebooklib.r60318.tar.xz
-2021/08/26 | 13556 | systems/texlive/tlnet/archive/gamebooklib.source.r60318.tar.xz
+2022/05/29 | 391300 | systems/texlive/tlnet/archive/gamebooklib.doc.r63424.tar.xz
+2022/05/29 | 3616 | systems/texlive/tlnet/archive/gamebooklib.r63424.tar.xz
+2022/05/29 | 15104 | systems/texlive/tlnet/archive/gamebooklib.source.r63424.tar.xz
2019/02/28 | 1696 | systems/texlive/tlnet/archive/gamebook.r24714.tar.xz
2019/02/28 | 4640 | systems/texlive/tlnet/archive/gamebook.source.r24714.tar.xz
2020/09/23 | 3276 | systems/texlive/tlnet/archive/gammas.doc.r56403.tar.xz
@@ -285647,8 +285658,8 @@
2019/02/28 | 139420 | systems/texlive/tlnet/archive/kastrup.doc.r15878.tar.xz
2019/02/28 | 1388 | systems/texlive/tlnet/archive/kastrup.r15878.tar.xz
2019/02/28 | 7392 | systems/texlive/tlnet/archive/kastrup.source.r15878.tar.xz
-2022/04/06 | 987984 | systems/texlive/tlnet/archive/kaytannollista-latexia.doc.r62923.tar.xz
-2022/04/06 | 568 | systems/texlive/tlnet/archive/kaytannollista-latexia.r62923.tar.xz
+2022/05/29 | 988072 | systems/texlive/tlnet/archive/kaytannollista-latexia.doc.r63422.tar.xz
+2022/05/29 | 572 | systems/texlive/tlnet/archive/kaytannollista-latexia.r63422.tar.xz
2021/02/05 | 339680 | systems/texlive/tlnet/archive/kblocks.doc.r57617.tar.xz
2021/02/05 | 8140 | systems/texlive/tlnet/archive/kblocks.r57617.tar.xz
2019/02/28 | 718580 | systems/texlive/tlnet/archive/kdgdocs.doc.r24498.tar.xz
@@ -288116,9 +288127,9 @@
2021/11/24 | 13784 | systems/texlive/tlnet/archive/numspell.r61132.tar.xz
2021/01/16 | 182360 | systems/texlive/tlnet/archive/nunito.doc.r57429.tar.xz
2021/01/16 | 4627580 | systems/texlive/tlnet/archive/nunito.r57429.tar.xz
-2022/05/27 | 2256920 | systems/texlive/tlnet/archive/nwafuthesis.doc.r63407.tar.xz
-2022/05/27 | 19432 | systems/texlive/tlnet/archive/nwafuthesis.r63407.tar.xz
-2022/05/27 | 62024 | systems/texlive/tlnet/archive/nwafuthesis.source.r63407.tar.xz
+2022/05/29 | 2257412 | systems/texlive/tlnet/archive/nwafuthesis.doc.r63429.tar.xz
+2022/05/29 | 19424 | systems/texlive/tlnet/archive/nwafuthesis.r63429.tar.xz
+2022/05/29 | 62048 | systems/texlive/tlnet/archive/nwafuthesis.source.r63429.tar.xz
2022/02/22 | 1321156 | systems/texlive/tlnet/archive/nwejm.doc.r62129.tar.xz
2022/02/22 | 4089520 | systems/texlive/tlnet/archive/nwejm.r62129.tar.xz
2022/02/22 | 49332 | systems/texlive/tlnet/archive/nwejm.source.r62129.tar.xz
@@ -289069,9 +289080,9 @@
2019/02/28 | 1860 | systems/texlive/tlnet/archive/postcards.r21641.tar.xz
2019/02/28 | 93292 | systems/texlive/tlnet/archive/poster-mac.doc.r18305.tar.xz
2019/02/28 | 3152 | systems/texlive/tlnet/archive/poster-mac.r18305.tar.xz
-2022/04/28 | 966184 | systems/texlive/tlnet/archive/postnotes.doc.r63160.tar.xz
-2022/04/28 | 7372 | systems/texlive/tlnet/archive/postnotes.r63160.tar.xz
-2022/04/28 | 20828 | systems/texlive/tlnet/archive/postnotes.source.r63160.tar.xz
+2022/05/29 | 967240 | systems/texlive/tlnet/archive/postnotes.doc.r63425.tar.xz
+2022/05/29 | 7380 | systems/texlive/tlnet/archive/postnotes.r63425.tar.xz
+2022/05/29 | 20824 | systems/texlive/tlnet/archive/postnotes.source.r63425.tar.xz
2021/05/20 | 948160 | systems/texlive/tlnet/archive/powerdot.doc.r59272.tar.xz
2019/11/26 | 280080 | systems/texlive/tlnet/archive/powerdot-fuberlin.doc.r52922.tar.xz
2019/11/26 | 2704 | systems/texlive/tlnet/archive/powerdot-fuberlin.r52922.tar.xz
@@ -289103,6 +289114,8 @@
2019/02/28 | 32696 | systems/texlive/tlnet/archive/prettyref.doc.r15878.tar.xz
2019/02/28 | 1212 | systems/texlive/tlnet/archive/prettyref.r15878.tar.xz
2019/02/28 | 2464 | systems/texlive/tlnet/archive/prettyref.source.r15878.tar.xz
+2022/05/29 | 338204 | systems/texlive/tlnet/archive/prettytok.doc.r63430.tar.xz
+2022/05/29 | 5544 | systems/texlive/tlnet/archive/prettytok.r63430.tar.xz
2022/02/22 | 326124 | systems/texlive/tlnet/archive/preview.doc.r62130.tar.xz
2022/02/22 | 6984 | systems/texlive/tlnet/archive/preview.r62130.tar.xz
2022/02/22 | 22852 | systems/texlive/tlnet/archive/preview.source.r62130.tar.xz
@@ -289609,15 +289622,15 @@
2021/06/06 | 12356 | systems/texlive/tlnet/archive/pxbase.r59473.tar.xz
2021/06/04 | 322528 | systems/texlive/tlnet/archive/pxchfon.doc.r59449.tar.xz
2021/06/04 | 19936 | systems/texlive/tlnet/archive/pxchfon.r59449.tar.xz
-2019/02/28 | 195556 | systems/texlive/tlnet/archive/pxcjkcat.doc.r47266.tar.xz
-2019/02/28 | 7152 | systems/texlive/tlnet/archive/pxcjkcat.r47266.tar.xz
+2022/05/29 | 174752 | systems/texlive/tlnet/archive/pxcjkcat.doc.r63427.tar.xz
+2022/05/29 | 8480 | systems/texlive/tlnet/archive/pxcjkcat.r63427.tar.xz
2019/02/28 | 421672 | systems/texlive/tlnet/archive/pxfonts.doc.r15878.tar.xz
2019/02/28 | 459980 | systems/texlive/tlnet/archive/pxfonts.r15878.tar.xz
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/24 | 152448 | systems/texlive/tlnet/archive/pxjahyper.doc.r63386.tar.xz
-2022/05/24 | 17856 | systems/texlive/tlnet/archive/pxjahyper.r63386.tar.xz
+2022/05/29 | 163868 | systems/texlive/tlnet/archive/pxjahyper.doc.r63423.tar.xz
+2022/05/29 | 19304 | systems/texlive/tlnet/archive/pxjahyper.r63423.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
@@ -291223,7 +291236,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/28 | 406832 | systems/texlive/tlnet/archive/texlive-scripts.doc.r63410.tar.xz
+2022/05/29 | 406832 | systems/texlive/tlnet/archive/texlive-scripts.doc.r63417.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
@@ -291247,7 +291260,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/28 | 109744 | systems/texlive/tlnet/archive/texlive-scripts.r63410.tar.xz
+2022/05/29 | 109744 | systems/texlive/tlnet/archive/texlive-scripts.r63417.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
@@ -293036,9 +293049,9 @@
2022/04/24 | 1049052 | systems/texlive/tlnet/archive/zref-check.doc.r63116.tar.xz
2022/04/24 | 5644 | systems/texlive/tlnet/archive/zref-check.r63116.tar.xz
2022/04/24 | 19376 | systems/texlive/tlnet/archive/zref-check.source.r63116.tar.xz
-2022/04/24 | 1518088 | systems/texlive/tlnet/archive/zref-clever.doc.r63116.tar.xz
-2022/04/24 | 23148 | systems/texlive/tlnet/archive/zref-clever.r63116.tar.xz
-2022/04/24 | 50612 | systems/texlive/tlnet/archive/zref-clever.source.r63116.tar.xz
+2022/05/29 | 1524120 | systems/texlive/tlnet/archive/zref-clever.doc.r63428.tar.xz
+2022/05/29 | 23168 | systems/texlive/tlnet/archive/zref-clever.r63428.tar.xz
+2022/05/29 | 50684 | systems/texlive/tlnet/archive/zref-clever.source.r63428.tar.xz
2022/04/08 | 668676 | systems/texlive/tlnet/archive/zref.doc.r62977.tar.xz
2022/04/08 | 14476 | systems/texlive/tlnet/archive/zref.r62977.tar.xz
2022/04/08 | 37216 | systems/texlive/tlnet/archive/zref.source.r62977.tar.xz
@@ -293060,16 +293073,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/28 | 5799893 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2022/05/28 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2022/05/28 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2022/05/29 | 5800337 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2022/05/29 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2022/05/29 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2021/04/11 | 4945 | systems/texlive/tlnet/install-tl-windows.bat
-2022/05/28 | 20462553 | systems/texlive/tlnet/install-tl-windows.exe
-2022/05/28 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2022/05/28 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2022/05/28 | 25483962 | systems/texlive/tlnet/install-tl.zip
-2022/05/28 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2022/05/28 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2022/05/29 | 20463252 | systems/texlive/tlnet/install-tl-windows.exe
+2022/05/29 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2022/05/29 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2022/05/29 | 25483963 | systems/texlive/tlnet/install-tl.zip
+2022/05/29 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2022/05/29 | 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
@@ -293079,7 +293092,7 @@
2022/02/28 | 1280 | systems/texlive/tlnet/tlpkg/gpg/trustdb.gpg
2022/05/27 | 49794 | systems/texlive/tlnet/tlpkg/installer/config.guess
2010/11/11 | 11651 | systems/texlive/tlnet/tlpkg/installer/COPYING.MinGW-runtime.txt
-2022/05/27 | 7353 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+2022/05/28 | 7333 | 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
@@ -293121,12 +293134,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/28 | 17491798 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
-2022/05/28 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2022/05/29 | 17494461 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2022/05/29 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
2022/04/18 | 86658 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm
-2022/05/28 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
-2022/05/28 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2022/05/28 | 2381568 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2022/05/29 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2022/05/29 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2022/05/29 | 2382344 | 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
@@ -298337,7 +298350,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/28 | 653517 | systems/win32/miktex/tm/packages/files.csv.lzma
+2022/05/29 | 653517 | 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
@@ -299941,9 +299954,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/28 | 278657 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
-2022/05/28 | 1457592 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
-2022/05/28 | 1344434 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2022/05/29 | 278713 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2022/05/29 | 1456951 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2022/05/29 | 1344793 | 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
@@ -300169,191 +300182,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/28 | 653727 | systems/win32/miktex/tm/packages/next/files.csv.lzma
-2022/05/28 | 51557 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
-2022/05/28 | 57330 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
-2022/05/28 | 1021847 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
-2022/05/28 | 1156464 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
-2022/05/28 | 28798 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
-2022/05/28 | 31521 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
-2022/05/28 | 30146 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
-2022/05/28 | 35242 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
-2022/05/28 | 56619 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
-2022/05/28 | 65053 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
-2022/05/28 | 86760 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
-2022/05/28 | 95283 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
-2022/05/28 | 68873 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
-2022/05/28 | 77069 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
-2022/05/28 | 27249 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
-2022/05/28 | 31343 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
-2022/05/28 | 332415 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
-2022/05/28 | 394370 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
-2022/05/28 | 32956 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
-2022/05/28 | 37080 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
-2022/05/28 | 51485 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
-2022/05/28 | 57269 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
-2022/05/28 | 244960 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
-2022/05/28 | 270299 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
-2022/05/28 | 179877 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
-2022/05/28 | 196117 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
-2022/05/28 | 92918 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
-2022/05/28 | 103093 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
-2022/05/28 | 21315 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
-2022/05/28 | 24121 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
-2022/05/28 | 481498 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
-2022/05/28 | 46066 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
-2022/05/28 | 52094 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
-2022/05/28 | 285714 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
-2022/05/28 | 326660 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
-2022/05/28 | 41306 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
-2022/05/28 | 45825 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
-2022/05/28 | 120615 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
-2022/05/28 | 135376 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
-2022/05/28 | 1302483 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
-2022/05/28 | 1454762 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
-2022/05/28 | 99816 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
-2022/05/28 | 113052 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
-2022/05/28 | 43646 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
-2022/05/28 | 48824 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
-2022/05/28 | 25106 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
-2022/05/28 | 28570 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
-2022/05/28 | 56994 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
-2022/05/28 | 63310 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
-2022/05/28 | 135948 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
-2022/05/28 | 155497 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
-2022/05/28 | 73478 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
-2022/05/28 | 78974 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
-2022/05/28 | 72014 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
-2022/05/28 | 81461 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
-2022/05/28 | 259256 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
-2022/05/28 | 296038 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
-2022/05/28 | 22146 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
-2022/05/28 | 25060 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
-2022/05/28 | 97200 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
-2022/05/28 | 112588 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
-2022/05/28 | 64543 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
-2022/05/28 | 73148 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
-2022/05/28 | 96633 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
-2022/05/28 | 115657 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
-2022/05/28 | 38428 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
-2022/05/28 | 43825 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
-2022/05/28 | 484370 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
-2022/05/28 | 565930 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
-2022/05/28 | 203838 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin.tar.lzma
-2022/05/28 | 247334 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin-x64.tar.lzma
-2022/05/28 | 152029 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
-2022/05/28 | 168821 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
-2022/05/28 | 95432 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
-2022/05/28 | 109477 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
-2022/05/28 | 16504 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
-2022/05/28 | 18367 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
-2022/05/28 | 28422 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
-2022/05/28 | 30542 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
-2022/05/28 | 631280 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
-2022/05/28 | 681940 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
-2022/05/28 | 532455 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
-2022/05/28 | 598232 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
-2022/05/28 | 477849 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
-2022/05/28 | 528018 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
-2022/05/28 | 93960 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
-2022/05/28 | 103337 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
-2022/05/28 | 1752147 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
-2022/05/28 | 1982082 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
-2022/05/28 | 68008 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
-2022/05/28 | 74069 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
-2022/05/28 | 27591 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
-2022/05/28 | 32135 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
-2022/05/28 | 7752 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
-2022/05/28 | 8783 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
-2022/05/28 | 190506 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
-2022/05/28 | 208808 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
-2022/05/28 | 251131 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
-2022/05/28 | 286413 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
-2022/05/28 | 99254 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
-2022/05/28 | 104556 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
-2022/05/28 | 126534 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
-2022/05/28 | 139102 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
-2022/05/28 | 288198 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
-2022/05/28 | 325269 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
-2022/05/28 | 199832 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
-2022/05/28 | 181515 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
-2022/05/28 | 49770 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
-2022/05/28 | 55568 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
-2022/05/28 | 31413 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
-2022/05/28 | 35169 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
-2022/05/28 | 38562 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
-2022/05/28 | 43916 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
-2022/05/28 | 43361 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
-2022/05/28 | 47923 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
-2022/05/28 | 45743 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
-2022/05/28 | 52327 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
-2022/05/28 | 197038 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
-2022/05/28 | 213280 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
-2022/05/28 | 36050 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
-2022/05/28 | 41183 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
-2022/05/28 | 755743 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
-2022/05/28 | 824370 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
-2022/05/28 | 200396 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
-2022/05/28 | 202836 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
-2022/05/28 | 210275 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
-2022/05/28 | 245096 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
-2022/05/28 | 79025 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
-2022/05/28 | 88151 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
-2022/05/28 | 1181126 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
-2022/05/28 | 1322742 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
-2022/05/28 | 20184 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
-2022/05/28 | 23945 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
-2022/05/28 | 31585 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
-2022/05/28 | 37375 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
-2022/05/28 | 64710 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
-2022/05/28 | 72884 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
-2022/05/28 | 50799 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
-2022/05/28 | 58663 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
-2022/05/28 | 693067 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin.tar.lzma
-2022/05/28 | 758953 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-x64.tar.lzma
-2022/05/28 | 1357070 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
-2022/05/28 | 1501239 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
-2022/05/28 | 42819 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
-2022/05/28 | 52479 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
-2022/05/28 | 57618 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
-2022/05/28 | 63739 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
-2022/05/28 | 25549 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
-2022/05/28 | 27637 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
-2022/05/28 | 16559 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
-2022/05/28 | 18492 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
-2022/05/28 | 64490 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
-2022/05/28 | 71006 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
-2022/05/28 | 156962 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
-2022/05/28 | 173007 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
-2022/05/28 | 58666 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
-2022/05/28 | 67253 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
-2022/05/28 | 100487 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
-2022/05/28 | 107705 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
-2022/05/28 | 2694875 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
-2022/05/28 | 2820688 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
-2022/05/28 | 55285 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
-2022/05/28 | 62382 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
-2022/05/28 | 37116 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
-2022/05/28 | 41203 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
-2022/05/28 | 28689 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
-2022/05/28 | 34052 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
-2022/05/28 | 67706 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
-2022/05/28 | 73528 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
-2022/05/28 | 316242 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
-2022/05/28 | 351697 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
-2022/05/28 | 55757 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma
-2022/05/28 | 57527 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
-2022/05/28 | 591569 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
-2022/05/28 | 629430 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
-2022/05/28 | 39727 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
-2022/05/28 | 43224 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
-2022/05/28 | 278700 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
-2022/05/28 | 1456234 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
-2022/05/28 | 1344354 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
-2022/05/28 | 13514 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
-2022/05/28 | 14411 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
+2022/05/29 | 653727 | systems/win32/miktex/tm/packages/next/files.csv.lzma
+2022/05/29 | 51558 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
+2022/05/29 | 57330 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
+2022/05/29 | 1021846 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
+2022/05/29 | 1156464 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2022/05/29 | 28798 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
+2022/05/29 | 31521 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
+2022/05/29 | 30146 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
+2022/05/29 | 35242 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2022/05/29 | 56618 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
+2022/05/29 | 65055 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
+2022/05/29 | 86760 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
+2022/05/29 | 95286 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
+2022/05/29 | 68871 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
+2022/05/29 | 77069 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
+2022/05/29 | 27249 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
+2022/05/29 | 31343 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2022/05/29 | 332414 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
+2022/05/29 | 394370 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
+2022/05/29 | 32954 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
+2022/05/29 | 37080 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
+2022/05/29 | 51485 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
+2022/05/29 | 57269 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
+2022/05/29 | 244961 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
+2022/05/29 | 270299 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
+2022/05/29 | 179878 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
+2022/05/29 | 196117 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2022/05/29 | 92917 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
+2022/05/29 | 103093 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2022/05/29 | 21314 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
+2022/05/29 | 24121 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
+2022/05/29 | 481496 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
+2022/05/29 | 46067 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
+2022/05/29 | 52094 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
+2022/05/29 | 285713 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
+2022/05/29 | 326661 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
+2022/05/29 | 41307 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
+2022/05/29 | 45824 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
+2022/05/29 | 120617 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
+2022/05/29 | 135377 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
+2022/05/29 | 1302483 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
+2022/05/29 | 1454763 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2022/05/29 | 99817 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
+2022/05/29 | 113052 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2022/05/29 | 43645 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
+2022/05/29 | 48826 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
+2022/05/29 | 25107 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
+2022/05/29 | 28569 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
+2022/05/29 | 56994 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
+2022/05/29 | 63311 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2022/05/29 | 135949 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
+2022/05/29 | 155498 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
+2022/05/29 | 73480 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
+2022/05/29 | 78975 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
+2022/05/29 | 72014 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
+2022/05/29 | 81461 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2022/05/29 | 259256 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
+2022/05/29 | 296038 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
+2022/05/29 | 22146 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
+2022/05/29 | 25060 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
+2022/05/29 | 97201 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
+2022/05/29 | 112588 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
+2022/05/29 | 64542 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
+2022/05/29 | 73148 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
+2022/05/29 | 96631 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
+2022/05/29 | 115655 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2022/05/29 | 38426 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
+2022/05/29 | 43825 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
+2022/05/29 | 484371 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
+2022/05/29 | 565930 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
+2022/05/29 | 203838 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin.tar.lzma
+2022/05/29 | 247334 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin-x64.tar.lzma
+2022/05/29 | 152032 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
+2022/05/29 | 168820 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
+2022/05/29 | 95432 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
+2022/05/29 | 109479 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2022/05/29 | 16502 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
+2022/05/29 | 18368 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2022/05/29 | 28422 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
+2022/05/29 | 30542 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2022/05/29 | 631280 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
+2022/05/29 | 681940 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
+2022/05/29 | 532454 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
+2022/05/29 | 598231 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2022/05/29 | 477849 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
+2022/05/29 | 528018 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
+2022/05/29 | 93960 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
+2022/05/29 | 103337 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
+2022/05/29 | 1752147 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
+2022/05/29 | 1982085 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
+2022/05/29 | 68009 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
+2022/05/29 | 74069 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2022/05/29 | 27592 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
+2022/05/29 | 32134 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
+2022/05/29 | 7753 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
+2022/05/29 | 8784 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
+2022/05/29 | 190506 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
+2022/05/29 | 208809 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2022/05/29 | 251131 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
+2022/05/29 | 286412 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
+2022/05/29 | 99255 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
+2022/05/29 | 104556 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
+2022/05/29 | 126535 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
+2022/05/29 | 139102 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
+2022/05/29 | 288200 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
+2022/05/29 | 325270 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
+2022/05/29 | 199832 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
+2022/05/29 | 181515 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
+2022/05/29 | 49769 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
+2022/05/29 | 55567 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
+2022/05/29 | 31413 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
+2022/05/29 | 35168 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
+2022/05/29 | 38559 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
+2022/05/29 | 43915 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
+2022/05/29 | 43361 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
+2022/05/29 | 47924 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
+2022/05/29 | 45742 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
+2022/05/29 | 52326 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
+2022/05/29 | 197037 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
+2022/05/29 | 213280 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
+2022/05/29 | 36049 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
+2022/05/29 | 41180 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
+2022/05/29 | 755743 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
+2022/05/29 | 824371 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2022/05/29 | 200397 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
+2022/05/29 | 202837 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
+2022/05/29 | 210275 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
+2022/05/29 | 245095 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
+2022/05/29 | 79025 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
+2022/05/29 | 88151 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2022/05/29 | 1181126 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
+2022/05/29 | 1322744 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2022/05/29 | 20183 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
+2022/05/29 | 23945 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2022/05/29 | 31589 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
+2022/05/29 | 37374 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
+2022/05/29 | 64710 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
+2022/05/29 | 72885 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2022/05/29 | 50799 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
+2022/05/29 | 58664 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
+2022/05/29 | 693067 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin.tar.lzma
+2022/05/29 | 758954 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-x64.tar.lzma
+2022/05/29 | 1357073 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
+2022/05/29 | 1501238 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
+2022/05/29 | 42818 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
+2022/05/29 | 52479 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
+2022/05/29 | 57618 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
+2022/05/29 | 63740 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
+2022/05/29 | 25549 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
+2022/05/29 | 27635 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
+2022/05/29 | 16560 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
+2022/05/29 | 18492 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
+2022/05/29 | 64491 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
+2022/05/29 | 71007 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
+2022/05/29 | 156964 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
+2022/05/29 | 173008 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2022/05/29 | 58666 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
+2022/05/29 | 67253 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2022/05/29 | 100486 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
+2022/05/29 | 107705 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
+2022/05/29 | 2694877 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
+2022/05/29 | 2820685 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
+2022/05/29 | 55285 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
+2022/05/29 | 62381 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2022/05/29 | 37116 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
+2022/05/29 | 41203 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
+2022/05/29 | 28691 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
+2022/05/29 | 34053 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2022/05/29 | 67705 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
+2022/05/29 | 73530 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
+2022/05/29 | 316242 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
+2022/05/29 | 351698 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
+2022/05/29 | 55757 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma
+2022/05/29 | 57525 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
+2022/05/29 | 591568 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
+2022/05/29 | 629430 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
+2022/05/29 | 39727 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
+2022/05/29 | 43226 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2022/05/29 | 278685 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
+2022/05/29 | 1456999 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
+2022/05/29 | 1344577 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
+2022/05/29 | 13512 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
+2022/05/29 | 14412 | 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/28 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
+2022/05/29 | 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
@@ -300824,7 +300837,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/28 | 937 | systems/win32/miktex/tm/packages/pr.ini
+2022/05/29 | 937 | 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
@@ -302688,7 +302701,7 @@
2004/06/04 | 404 | tds/tds.sed
2004/06/23 | 65418 | tds/tds.tex
2019/05/29 | 304264 | tds.zip
-2022/05/29 | 186 | timestamp
+2022/05/30 | 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 d5ac977d49..a11cca7522 100644
--- a/FILES.byname.gz
+++ b/FILES.byname.gz
Binary files differ
diff --git a/FILES.last07days b/FILES.last07days
index 351fc9fdf7..06c75ec46c 100644
--- a/FILES.last07days
+++ b/FILES.last07days
@@ -1,280 +1,346 @@
-2022/05/28 | 99816 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
-2022/05/28 | 99254 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
+2022/05/29 | 99817 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
+2022/05/29 | 99255 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
+2022/05/29 | 988072 | systems/texlive/tlnet/archive/kaytannollista-latexia.doc.r63422.tar.xz
+2022/05/29 | 97201 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
+2022/05/29 | 967240 | systems/texlive/tlnet/archive/postnotes.doc.r63425.tar.xz
+2022/05/29 | 96631 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
+2022/05/29 | 95432 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
+2022/05/29 | 95286 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
+2022/05/29 | 93960 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
+2022/05/29 | 937 | systems/win32/miktex/tm/packages/pr.ini
+2022/05/29 | 92917 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
+2022/05/29 | 906902 | macros/latex/contrib/acmart/acmart.pdf
+2022/05/29 | 88151 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2022/05/29 | 8784 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
+2022/05/29 | 86760 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
+2022/05/29 | 8480 | systems/texlive/tlnet/archive/pxcjkcat.r63427.tar.xz
+2022/05/29 | 824371 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2022/05/29 | 81461 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2022/05/29 | 79025 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
+2022/05/29 | 78975 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
+2022/05/29 | 780062 | macros/latex/contrib/acmart/samples/sample-lualatex.pdf
+2022/05/29 | 7753 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
+2022/05/29 | 77069 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
+2022/05/29 | 758954 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-x64.tar.lzma
+2022/05/29 | 755743 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
+2022/05/29 | 74069 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2022/05/29 | 7380 | systems/texlive/tlnet/archive/postnotes.r63425.tar.xz
+2022/05/29 | 73530 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
+2022/05/29 | 73480 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
+2022/05/29 | 73148 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
+2022/05/29 | 72885 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2022/05/29 | 72014 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
+2022/05/29 | 716617 | macros/latex/contrib/typed-checklist.zip
+2022/05/29 | 71007 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
+2022/05/29 | 707 | macros/latex/contrib/fixdif/README.md
+2022/05/29 | 697827 | macros/latex/contrib/typed-checklist/typed-checklist.pdf
+2022/05/29 | 693067 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin.tar.lzma
+2022/05/29 | 68871 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
+2022/05/29 | 681940 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
+2022/05/29 | 68009 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
+2022/05/29 | 67705 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
+2022/05/29 | 67253 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2022/05/29 | 6640 | systems/texlive/tlnet/archive/collection-latexextra.r63430.tar.xz
+2022/05/29 | 659076 | macros/latex/contrib/acmart/samples/sample-xelatex.pdf
+2022/05/29 | 653727 | systems/win32/miktex/tm/packages/next/files.csv.lzma
+2022/05/29 | 653517 | systems/win32/miktex/tm/packages/files.csv.lzma
+2022/05/29 | 65055 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
+2022/05/29 | 64710 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
+2022/05/29 | 64542 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
+2022/05/29 | 64491 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
+2022/05/29 | 63740 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
+2022/05/29 | 63311 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2022/05/29 | 631280 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
+2022/05/29 | 629430 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
+2022/05/29 | 628602 | macros/latex/contrib/acmart/samples/sample-acmsmall-biblatex.pdf
+2022/05/29 | 62589 | macros/unicodetex/latex/nwafuthesis/nwafuthesis-doc.dtx
+2022/05/29 | 62381 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2022/05/29 | 62048 | systems/texlive/tlnet/archive/nwafuthesis.source.r63429.tar.xz
+2022/05/29 | 618221 | macros/latex/contrib/acmart/samples/sample-acmsmall-submission.pdf
+2022/05/29 | 617941 | macros/latex/contrib/acmart/samples/sample-manuscript.pdf
+2022/05/29 | 615731 | macros/latex/contrib/acmart/samples/sample-acmsmall.pdf
+2022/05/29 | 615270 | macros/latex/contrib/acmart/samples/sample-sigconf-biblatex.pdf
+2022/05/29 | 6128 | systems/texlive/tlnet/archive/fixdif.source.r63426.tar.xz
+2022/05/29 | 605879 | macros/latex/contrib/acmart/samples/sample-acmlarge.pdf
+2022/05/29 | 598231 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2022/05/29 | 591568 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
+2022/05/29 | 58666 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
+2022/05/29 | 58664 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
+2022/05/29 | 5800337 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2022/05/29 | 57618 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
+2022/05/29 | 57525 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
+2022/05/29 | 57330 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
+2022/05/29 | 572 | systems/texlive/tlnet/archive/kaytannollista-latexia.r63422.tar.xz
+2022/05/29 | 57269 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
+2022/05/29 | 56994 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
+2022/05/29 | 56618 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
+2022/05/29 | 565930 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
+2022/05/29 | 563350 | macros/latex/contrib/acmart/samples/sample-acmtog.pdf
+2022/05/29 | 55757 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma
+2022/05/29 | 55567 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
+2022/05/29 | 5544 | systems/texlive/tlnet/archive/prettytok.r63430.tar.xz
+2022/05/29 | 55285 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
+2022/05/29 | 53502 | macros/latex/contrib/acmart/samples/sample-base.bib
+2022/05/29 | 532454 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
+2022/05/29 | 528018 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
+2022/05/29 | 526407 | macros/latex/contrib/beamer-contrib/themes/beamerthemeamurmaple.zip
+2022/05/29 | 5251 | macros/generic/xint/README.md
+2022/05/29 | 52479 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
+2022/05/29 | 52326 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
+2022/05/29 | 52094 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
+2022/05/29 | 52060 | macros/latex/contrib/acmart/samples/samples.dtx
+2022/05/29 | 51558 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
+2022/05/29 | 51485 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
+2022/05/29 | 50799 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
+2022/05/29 | 50684 | systems/texlive/tlnet/archive/zref-clever.source.r63428.tar.xz
+2022/05/29 | 49769 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
+2022/05/29 | 495 | macros/latex/contrib/beamer-contrib/themes/beamerthemeamurmaple/LICENSE
+2022/05/29 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2022/05/29 | 48826 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
+2022/05/29 | 484371 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
+2022/05/29 | 481496 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
+2022/05/29 | 47924 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
+2022/05/29 | 477849 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
+2022/05/29 | 46067 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
+2022/05/29 | 45824 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
+2022/05/29 | 45742 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
+2022/05/29 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2022/05/29 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2022/05/29 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2022/05/29 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2022/05/29 | 43915 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
+2022/05/29 | 43825 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
+2022/05/29 | 43645 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
+2022/05/29 | 43361 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
+2022/05/29 | 43226 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2022/05/29 | 42818 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
+2022/05/29 | 427386 | macros/latex/contrib/acmart/acmguide.pdf
+2022/05/29 | 41307 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
+2022/05/29 | 41203 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
+2022/05/29 | 41180 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
+2022/05/29 | 406832 | systems/texlive/tlnet/archive/texlive-scripts.doc.r63417.tar.xz
+2022/05/29 | 397498 | macros/latex/contrib/acmart/samples/sample-acmengage.pdf
+2022/05/29 | 39727 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
+2022/05/29 | 394370 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
+2022/05/29 | 391300 | systems/texlive/tlnet/archive/gamebooklib.doc.r63424.tar.xz
+2022/05/29 | 38559 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
+2022/05/29 | 38426 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
+2022/05/29 | 37374 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
+2022/05/29 | 37116 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
+2022/05/29 | 37080 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
+2022/05/29 | 3616 | systems/texlive/tlnet/archive/gamebooklib.r63424.tar.xz
+2022/05/29 | 36049 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
+2022/05/29 | 35242 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2022/05/29 | 351698 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
+2022/05/29 | 35168 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
+2022/05/29 | 348965 | macros/latex/contrib/beamer-contrib/themes/beamerthemeamurmaple/doc/beamer-amurmaple-doc.pdf
+2022/05/29 | 3442045 | macros/unicodetex/latex/nwafuthesis.zip
+2022/05/29 | 34053 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2022/05/29 | 338204 | systems/texlive/tlnet/archive/prettytok.doc.r63430.tar.xz
+2022/05/29 | 332414 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
+2022/05/29 | 32954 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
+2022/05/29 | 326661 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
+2022/05/29 | 325270 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
+2022/05/29 | 324100 | macros/latex/contrib/fixdif/fixdif.pdf
+2022/05/29 | 32134 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
+2022/05/29 | 320004 | macros/latex/contrib/fixdif.zip
+2022/05/29 | 316242 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
+2022/05/29 | 31589 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
+2022/05/29 | 315224 | systems/texlive/tlnet/archive/fixdif.doc.r63426.tar.xz
+2022/05/29 | 31521 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
+2022/05/29 | 31413 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
+2022/05/29 | 31343 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2022/05/29 | 3061 | macros/latex/contrib/fixdif/fixdif.ins
+2022/05/29 | 30542 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2022/05/29 | 30146 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
+2022/05/29 | 296038 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
+2022/05/29 | 288200 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
+2022/05/29 | 28798 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
+2022/05/29 | 28691 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
+2022/05/29 | 286412 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
+2022/05/29 | 285713 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
+2022/05/29 | 28569 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
+2022/05/29 | 28422 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
+2022/05/29 | 2841730 | install/macros/generic/xint.tds.zip
+2022/05/29 | 2820685 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
+2022/05/29 | 278713 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2022/05/29 | 278685 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
+2022/05/29 | 27635 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
+2022/05/29 | 27592 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
+2022/05/29 | 272913 | macros/unicodetex/latex/nwafuthesis/nwafuthesis.dtx
+2022/05/29 | 2728869 | macros/generic/xint.zip
+2022/05/29 | 27249 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
+2022/05/29 | 272110 | macros/latex/contrib/acmart/acmart.dtx
+2022/05/29 | 270299 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
+2022/05/29 | 2694877 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
+2022/05/29 | 259256 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
+2022/05/29 | 25549 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
+2022/05/29 | 25483963 | systems/texlive/tlnet/install-tl.zip
+2022/05/29 | 251131 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
+2022/05/29 | 25107 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
+2022/05/29 | 25060 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
+2022/05/29 | 247334 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin-x64.tar.lzma
+2022/05/29 | 245095 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
+2022/05/29 | 244961 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
+2022/05/29 | 24121 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
+2022/05/29 | 23945 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2022/05/29 | 2382344 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2022/05/29 | 2363 | macros/latex/contrib/typed-checklist/README.md
+2022/05/29 | 2346554 | macros/unicodetex/latex/nwafuthesis/nwafuthesis.pdf
+2022/05/29 | 23168 | systems/texlive/tlnet/archive/zref-clever.r63428.tar.xz
+2022/05/29 | 2257412 | systems/texlive/tlnet/archive/nwafuthesis.doc.r63429.tar.xz
+2022/05/29 | 22146 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
+2022/05/29 | 213280 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
+2022/05/29 | 21314 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
+2022/05/29 | 210275 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
+2022/05/29 | 208809 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2022/05/29 | 20824 | systems/texlive/tlnet/archive/postnotes.source.r63425.tar.xz
+2022/05/29 | 20463252 | systems/texlive/tlnet/install-tl-windows.exe
+2022/05/29 | 203838 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin.tar.lzma
+2022/05/29 | 202837 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
+2022/05/29 | 20183 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
+2022/05/29 | 20167 | macros/latex/contrib/fixdif/fixdif.dtx
+2022/05/29 | 200397 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
+2022/05/29 | 199832 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
+2022/05/29 | 1982085 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
+2022/05/29 | 197037 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
+2022/05/29 | 196117 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2022/05/29 | 19424 | systems/texlive/tlnet/archive/nwafuthesis.r63429.tar.xz
+2022/05/29 | 19304 | systems/texlive/tlnet/archive/pxjahyper.r63423.tar.xz
+2022/05/29 | 1920568 | macros/generic/xint/xint.dtx
+2022/05/29 | 19056 | macros/latex/contrib/beamer-contrib/themes/beamerthemeamurmaple/tex/beamerthemeAmurmaple.sty
+2022/05/29 | 190506 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
+2022/05/29 | 1861 | macros/latex/contrib/typed-checklist/typed-checklist.ins
+2022/05/29 | 18492 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
+2022/05/29 | 18368 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2022/05/29 | 181515 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
+2022/05/29 | 179878 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
+2022/05/29 | 1760 | systems/texlive/tlnet/archive/fixdif.r63426.tar.xz
+2022/05/29 | 1752147 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
+2022/05/29 | 17494461 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2022/05/29 | 174752 | systems/texlive/tlnet/archive/pxcjkcat.doc.r63427.tar.xz
+2022/05/29 | 17317 | macros/latex/contrib/beamer-contrib/themes/beamerthemeamurmaple/doc/beamer-amurmaple-doc.tex
+2022/05/29 | 173008 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2022/05/29 | 170260 | macros/latex/contrib/beamer-contrib/themes/beamerthemeamurmaple/doc/logo.png
+2022/05/29 | 168820 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
+2022/05/29 | 16560 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
+2022/05/29 | 16502 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
+2022/05/29 | 163868 | systems/texlive/tlnet/archive/pxjahyper.doc.r63423.tar.xz
+2022/05/29 | 1600 | systems/texlive/tlnet/archive/collection-mathscience.r63426.tar.xz
+2022/05/29 | 156964 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
+2022/05/29 | 155498 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
+2022/05/29 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2022/05/29 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2022/05/29 | 1524120 | systems/texlive/tlnet/archive/zref-clever.doc.r63428.tar.xz
+2022/05/29 | 152032 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
+2022/05/29 | 15104 | systems/texlive/tlnet/archive/gamebooklib.source.r63424.tar.xz
+2022/05/29 | 1501238 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
+2022/05/29 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2022/05/29 | 145875 | macros/generic/xint/CHANGES.html
+2022/05/29 | 1456999 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
+2022/05/29 | 1456951 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2022/05/29 | 1454763 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2022/05/29 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2022/05/29 | 14412 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
+2022/05/29 | 139102 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
+2022/05/29 | 135949 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
+2022/05/29 | 1357073 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
+2022/05/29 | 135377 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
+2022/05/29 | 13512 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
+2022/05/29 | 1344793 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2022/05/29 | 1344577 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
+2022/05/29 | 1322744 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2022/05/29 | 1302483 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
+2022/05/29 | 12785104 | macros/latex/contrib/acmart.zip
+2022/05/29 | 126535 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
+2022/05/29 | 120617 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
+2022/05/29 | 1182807 | macros/generic/xint/sourcexint.pdf
+2022/05/29 | 1181126 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
+2022/05/29 | 115655 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2022/05/29 | 1156464 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2022/05/29 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
+2022/05/29 | 113052 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2022/05/29 | 112588 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
+2022/05/29 | 1108 | macros/latex/contrib/beamer-contrib/themes/beamerthemeamurmaple/README.md
+2022/05/29 | 109744 | systems/texlive/tlnet/archive/texlive-scripts.r63417.tar.xz
+2022/05/29 | 109479 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2022/05/29 | 107705 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
+2022/05/29 | 1060744 | macros/generic/xint/xint.pdf
+2022/05/29 | 1054983 | macros/latex/contrib/acmart/samples/sample-sigconf-i13n.pdf
+2022/05/29 | 1049943 | macros/latex/contrib/acmart/samples/sample-acmsmall-conf.pdf
+2022/05/29 | 1048048 | macros/latex/contrib/acmart/samples/sample-sigplan.pdf
+2022/05/29 | 104556 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
+2022/05/29 | 1043035 | macros/latex/contrib/acmart/samples/sample-authordraft.pdf
+2022/05/29 | 1039228 | macros/latex/contrib/acmart/samples/sample-sigconf.pdf
+2022/05/29 | 103337 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
+2022/05/29 | 103093 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2022/05/29 | 1021846 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
+2022/05/29 | 101133 | macros/latex/contrib/typed-checklist/typed-checklist.dtx
+2022/05/29 | 100486 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
2022/05/28 | 990431 | macros/latex/contrib/postnotes.zip
-2022/05/28 | 97200 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
-2022/05/28 | 96633 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
-2022/05/28 | 95432 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
-2022/05/28 | 95283 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
2022/05/28 | 94903 | macros/latex/contrib/postnotes/postnotes.dtx
-2022/05/28 | 93960 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
-2022/05/28 | 937 | systems/win32/miktex/tm/packages/pr.ini
-2022/05/28 | 92918 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
2022/05/28 | 920224 | systems/texlive/tlnet/archive/hvextern.doc.r63412.tar.xz
2022/05/28 | 881 | macros/latex/contrib/postnotes/README.md
-2022/05/28 | 88151 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
-2022/05/28 | 8783 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
2022/05/28 | 874641 | info/kaytannollista-latexia/kaytannollista-latexia.pdf
2022/05/28 | 86927 | info/kaytannollista-latexia/luku-merkintakieli.tex
-2022/05/28 | 86760 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
2022/05/28 | 824 | macros/latex/contrib/zref-clever/README.md
-2022/05/28 | 824370 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
-2022/05/28 | 81461 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
2022/05/28 | 809579 | macros/latex/contrib/postnotes/postnotes-code.pdf
-2022/05/28 | 79025 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
-2022/05/28 | 78974 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
2022/05/28 | 778 | macros/latex/contrib/postnotes/CHANGELOG.md
-2022/05/28 | 7752 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
-2022/05/28 | 77069 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
-2022/05/28 | 758953 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-x64.tar.lzma
-2022/05/28 | 755743 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
-2022/05/28 | 74069 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
-2022/05/28 | 73528 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
-2022/05/28 | 73478 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
-2022/05/28 | 73148 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
-2022/05/28 | 72884 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
-2022/05/28 | 72014 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
-2022/05/28 | 71006 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
+2022/05/28 | 7333 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2022/05/28 | 70 | macros/latex/contrib/zref-clever/DEPENDS.txt
2022/05/28 | 7081 | language/japanese/pxjahyper/README-ja.md
-2022/05/28 | 707 | macros/latex/contrib/fixdif/README.md
2022/05/28 | 700688 | systems/texlive/tlnet/archive/lua-widow-control.doc.r63413.tar.xz
-2022/05/28 | 693067 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin.tar.lzma
-2022/05/28 | 68873 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
-2022/05/28 | 681940 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
-2022/05/28 | 68008 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
-2022/05/28 | 67706 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
2022/05/28 | 676 | macros/latex/contrib/prettytok/README
-2022/05/28 | 67253 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
-2022/05/28 | 653727 | systems/win32/miktex/tm/packages/next/files.csv.lzma
-2022/05/28 | 653517 | systems/win32/miktex/tm/packages/files.csv.lzma
-2022/05/28 | 65053 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
-2022/05/28 | 64710 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
-2022/05/28 | 64543 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
-2022/05/28 | 64490 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
-2022/05/28 | 63739 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
-2022/05/28 | 63310 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
-2022/05/28 | 631280 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
2022/05/28 | 6300 | info/kaytannollista-latexia/README.md
-2022/05/28 | 629430 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
-2022/05/28 | 62589 | macros/unicodetex/latex/nwafuthesis/nwafuthesis-doc.dtx
-2022/05/28 | 62382 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
2022/05/28 | 6064 | systems/texlive/tlnet/archive/hvextern.r63412.tar.xz
-2022/05/28 | 598232 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
-2022/05/28 | 591569 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
-2022/05/28 | 58666 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
-2022/05/28 | 58663 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
-2022/05/28 | 5799893 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2022/05/28 | 57618 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
-2022/05/28 | 57527 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
-2022/05/28 | 57330 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
-2022/05/28 | 57269 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
-2022/05/28 | 56994 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
-2022/05/28 | 56619 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
2022/05/28 | 56602 | language/japanese/pxjahyper/pxjahyper.sty
-2022/05/28 | 565930 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
-2022/05/28 | 55757 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma
-2022/05/28 | 55568 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
-2022/05/28 | 55285 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
-2022/05/28 | 532455 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
-2022/05/28 | 528018 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
-2022/05/28 | 52479 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
-2022/05/28 | 52327 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
-2022/05/28 | 52094 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
-2022/05/28 | 51557 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
-2022/05/28 | 51485 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
-2022/05/28 | 50799 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
-2022/05/28 | 49770 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
-2022/05/28 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
-2022/05/28 | 48824 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
-2022/05/28 | 484370 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
-2022/05/28 | 481498 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
-2022/05/28 | 47923 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
-2022/05/28 | 477849 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
-2022/05/28 | 46066 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
-2022/05/28 | 45825 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
-2022/05/28 | 45743 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
-2022/05/28 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2022/05/28 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
-2022/05/28 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2022/05/28 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2022/05/28 | 45124 | systems/texlive/tlnet/archive/lua-widow-control.source.r63413.tar.xz
-2022/05/28 | 43916 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
-2022/05/28 | 43825 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
-2022/05/28 | 43646 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
-2022/05/28 | 43361 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
-2022/05/28 | 43224 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
-2022/05/28 | 42819 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
2022/05/28 | 4252 | macros/latex/contrib/prettytok/prettytok.tex
2022/05/28 | 4176 | macros/latex/contrib/zref-clever/CHANGELOG.md
-2022/05/28 | 41306 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
2022/05/28 | 41213 | macros/latex/contrib/pxcjkcat/pxcjkcat.tex
-2022/05/28 | 41203 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
-2022/05/28 | 41183 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
-2022/05/28 | 406832 | systems/texlive/tlnet/archive/texlive-scripts.doc.r63410.tar.xz
-2022/05/28 | 39727 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
-2022/05/28 | 394370 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
2022/05/28 | 39258 | macros/latex/contrib/postnotes/postnotes.tex
-2022/05/28 | 38562 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
-2022/05/28 | 38428 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
2022/05/28 | 3842240 | systems/texlive/tlnet/archive/bidi.doc.r63414.tar.xz
-2022/05/28 | 37375 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
-2022/05/28 | 37116 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
-2022/05/28 | 37080 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
-2022/05/28 | 36050 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
-2022/05/28 | 35242 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
-2022/05/28 | 35169 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
-2022/05/28 | 351697 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
-2022/05/28 | 3434611 | macros/unicodetex/latex/nwafuthesis.zip
2022/05/28 | 342164 | macros/latex/contrib/prettytok.zip
-2022/05/28 | 34052 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
2022/05/28 | 336752 | macros/latex/contrib/zref-clever/zref-clever.dtx
2022/05/28 | 335928 | macros/latex/contrib/prettytok/prettytok.pdf
-2022/05/28 | 332415 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
2022/05/28 | 3306 | language/japanese/pxjahyper/pxjahyper-enc.sty
-2022/05/28 | 32956 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
-2022/05/28 | 326660 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
-2022/05/28 | 325269 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
2022/05/28 | 32503 | macros/latex/contrib/pxcjkcat/pxcjkcat.sty
-2022/05/28 | 324073 | macros/latex/contrib/fixdif/fixdif.pdf
-2022/05/28 | 32135 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
-2022/05/28 | 319986 | macros/latex/contrib/fixdif.zip
2022/05/28 | 316582 | info/kaytannollista-latexia/luku-rakenne.tex
2022/05/28 | 316250 | macros/latex/contrib/zref-clever/zref-clever.pdf
-2022/05/28 | 316242 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
-2022/05/28 | 31585 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
-2022/05/28 | 31521 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
-2022/05/28 | 31413 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
-2022/05/28 | 31343 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
2022/05/28 | 3130 | macros/latex/contrib/pxcjkcat/README.md
2022/05/28 | 3098 | macros/latex/contrib/zref-clever/zref-clever.ins
-2022/05/28 | 3061 | macros/latex/contrib/fixdif/fixdif.ins
-2022/05/28 | 30542 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
-2022/05/28 | 30146 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
2022/05/28 | 29 | info/kaytannollista-latexia/versio.tex
2022/05/28 | 2989 | info/kaytannollista-latexia/kirjallisuutta.bib
-2022/05/28 | 296038 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
-2022/05/28 | 288198 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
-2022/05/28 | 28798 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
-2022/05/28 | 28689 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
-2022/05/28 | 286413 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
-2022/05/28 | 285714 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
-2022/05/28 | 28570 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
2022/05/28 | 2847 | language/japanese/pxjahyper/pxjahyper-uni.def
-2022/05/28 | 28422 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
-2022/05/28 | 2820688 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
-2022/05/28 | 278700 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
-2022/05/28 | 278657 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
-2022/05/28 | 27637 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
-2022/05/28 | 27591 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
-2022/05/28 | 27249 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
-2022/05/28 | 270299 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
-2022/05/28 | 270013 | macros/unicodetex/latex/nwafuthesis/nwafuthesis.dtx
-2022/05/28 | 2694875 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
2022/05/28 | 2633 | info/kaytannollista-latexia/luku-esipuhe.tex
-2022/05/28 | 259256 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
2022/05/28 | 2574 | macros/latex/contrib/postnotes/postnotes.ins
-2022/05/28 | 25549 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
-2022/05/28 | 25483962 | systems/texlive/tlnet/install-tl.zip
-2022/05/28 | 251131 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
-2022/05/28 | 25106 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
-2022/05/28 | 25060 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
-2022/05/28 | 247334 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin-x64.tar.lzma
2022/05/28 | 24620 | language/japanese/pxjahyper/pxjahyper-ajm.def
-2022/05/28 | 245096 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
-2022/05/28 | 244960 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
-2022/05/28 | 24121 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
-2022/05/28 | 23945 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
-2022/05/28 | 2381568 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
-2022/05/28 | 2340425 | macros/unicodetex/latex/nwafuthesis/nwafuthesis.pdf
2022/05/28 | 2314 | language/japanese/pxjahyper/README.md
2022/05/28 | 22 | macros/latex/contrib/prettytok/DEPENDS.txt
-2022/05/28 | 22146 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
-2022/05/28 | 213280 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
-2022/05/28 | 21315 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
-2022/05/28 | 210275 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
-2022/05/28 | 208808 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
2022/05/28 | 20612 | info/kaytannollista-latexia/luku-erikoiset.tex
2022/05/28 | 20558 | info/kaytannollista-latexia/luku-valmistautuminen.tex
-2022/05/28 | 20462553 | systems/texlive/tlnet/install-tl-windows.exe
2022/05/28 | 20392 | language/japanese/pxjahyper/pxjahyper.tex
-2022/05/28 | 203838 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin.tar.lzma
-2022/05/28 | 202836 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
-2022/05/28 | 20184 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
-2022/05/28 | 20178 | macros/latex/contrib/fixdif/fixdif.dtx
-2022/05/28 | 200396 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
-2022/05/28 | 199832 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
-2022/05/28 | 1982082 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
-2022/05/28 | 197038 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
-2022/05/28 | 196117 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
-2022/05/28 | 190506 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
2022/05/28 | 188631 | language/japanese/pxjahyper.zip
2022/05/28 | 185421 | macros/latex/contrib/pxcjkcat.zip
-2022/05/28 | 18492 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
-2022/05/28 | 18367 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
2022/05/28 | 18168 | macros/latex/contrib/prettytok/prettytok.sty
-2022/05/28 | 181515 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
-2022/05/28 | 179877 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
2022/05/28 | 177238 | macros/latex/contrib/postnotes/postnotes.pdf
-2022/05/28 | 1752147 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
-2022/05/28 | 17491798 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
-2022/05/28 | 173007 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
-2022/05/28 | 168821 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
-2022/05/28 | 16559 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
-2022/05/28 | 16504 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
2022/05/28 | 163412 | macros/latex/contrib/pxcjkcat/pxcjkcat.pdf
2022/05/28 | 1626594 | install/macros/latex/contrib/zref-clever.tds.zip
2022/05/28 | 1591326 | macros/latex/contrib/zref-clever.zip
-2022/05/28 | 156962 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
2022/05/28 | 155851 | language/japanese/pxjahyper/pxjahyper.pdf
-2022/05/28 | 155497 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
-2022/05/28 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
2022/05/28 | 1539 | macros/latex/contrib/zref-clever/zref-clever-code.tex
2022/05/28 | 15376 | systems/texlive/tlnet/archive/lua-widow-control.r63413.tar.xz
2022/05/28 | 15339 | info/kaytannollista-latexia/kaytannollista-latexia.tex
-2022/05/28 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2022/05/28 | 152029 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
-2022/05/28 | 1501239 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
2022/05/28 | 14 | macros/latex/contrib/postnotes/DEPENDS.txt
-2022/05/28 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2022/05/28 | 1457592 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
-2022/05/28 | 1456234 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
-2022/05/28 | 1454762 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
-2022/05/28 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
-2022/05/28 | 14411 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
2022/05/28 | 1434 | macros/latex/contrib/postnotes/postnotes-code.tex
-2022/05/28 | 139102 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
2022/05/28 | 137988 | systems/texlive/tlnet/archive/bidi.source.r63414.tar.xz
-2022/05/28 | 135948 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
-2022/05/28 | 1357070 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
2022/05/28 | 1355 | macros/latex/contrib/pxcjkcat/README-ja.md
-2022/05/28 | 135376 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
-2022/05/28 | 13514 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
-2022/05/28 | 1344434 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
-2022/05/28 | 1344354 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
-2022/05/28 | 1322742 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
-2022/05/28 | 1302483 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
-2022/05/28 | 126534 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
2022/05/28 | 1258005 | macros/latex/contrib/zref-clever/zref-clever-code.pdf
2022/05/28 | 122584 | info/kaytannollista-latexia/luku-asetukset.tex
2022/05/28 | 12129 | info/kaytannollista-latexia/tavutusvihjeet.tex
-2022/05/28 | 120615 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
2022/05/28 | 120380 | systems/texlive/tlnet/archive/bidi.r63414.tar.xz
2022/05/28 | 120324 | macros/latex/contrib/zref-clever/zref-clever.tex
-2022/05/28 | 1181126 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
-2022/05/28 | 115657 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
-2022/05/28 | 1156464 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
-2022/05/28 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
-2022/05/28 | 113052 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
-2022/05/28 | 112588 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
-2022/05/28 | 109744 | systems/texlive/tlnet/archive/texlive-scripts.r63410.tar.xz
-2022/05/28 | 109477 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
-2022/05/28 | 107705 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
-2022/05/28 | 104556 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
-2022/05/28 | 103337 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
-2022/05/28 | 103093 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
-2022/05/28 | 1021847 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
2022/05/28 | 1020991 | info/kaytannollista-latexia.zip
-2022/05/28 | 100487 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
2022/05/27 | 937188 | macros/xetex/latex/bidi/bidi.dtx
2022/05/27 | 9077 | macros/luatex/generic/lua-widow-control/lua-widow-control.sty
2022/05/27 | 890924 | systems/texlive/tlnet/archive/beebe.r63404.tar.xz
@@ -282,10 +348,8 @@
2022/05/27 | 787576 | install/macros/luatex/generic/lua-widow-control.tds.zip
2022/05/27 | 786470 | macros/luatex/generic/lua-widow-control.zip
2022/05/27 | 761651 | macros/xetex/latex/bidi/gull.jpg
-2022/05/27 | 7353 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2022/05/27 | 713 | macros/latex/contrib/hvextern/README
2022/05/27 | 6476 | systems/texlive/tlnet/archive/mnotes.source.r63406.tar.xz
-2022/05/27 | 62024 | systems/texlive/tlnet/archive/nwafuthesis.source.r63407.tar.xz
2022/05/27 | 61301 | macros/luatex/generic/lua-widow-control/tb133chernoff-widows.ltx
2022/05/27 | 6101 | macros/xetex/latex/bidi/bidi-doc-latex-pkgsupport.ltx
2022/05/27 | 5939 | macros/xetex/latex/bidi/bidi-doc-plain-basics.ltx
@@ -316,13 +380,11 @@
2022/05/27 | 273926 | macros/latex/contrib/gamebooklib/gamebooklib.pdf
2022/05/27 | 26913 | macros/latex/contrib/hvextern/latex/hvextern.sty
2022/05/27 | 23945 | macros/xetex/latex/bidi/bidi-doc-latex-basics.ltx
-2022/05/27 | 2256920 | systems/texlive/tlnet/archive/nwafuthesis.doc.r63407.tar.xz
2022/05/27 | 2208 | macros/luatex/generic/lua-widow-control/lua-widow-control.tex
2022/05/27 | 2160 | systems/texlive/tlnet/archive/mnotes.r63406.tar.xz
2022/05/27 | 212872 | systems/texlive/tlnet/archive/mnotes.doc.r63406.tar.xz
2022/05/27 | 2108 | macros/xetex/latex/bidi/bidi-doc-title.ltx
2022/05/27 | 1961 | macros/xetex/latex/bidi/bidi-doc-plain-programming.ltx
-2022/05/27 | 19432 | systems/texlive/tlnet/archive/nwafuthesis.r63407.tar.xz
2022/05/27 | 1784 | macros/luatex/generic/lua-widow-control/lua-widow-control.opm
2022/05/27 | 177956 | macros/xetex/latex/bidi/bidi-doc.pdf
2022/05/27 | 1693 | macros/xetex/latex/bidi/picture.jpg
@@ -957,6 +1019,7 @@
2022/05/24 | 52084 | fonts/symbats3/symbats3.sty
2022/05/24 | 513436 | systems/texlive/tlnet/archive/biblatex-swiss-legal.doc.r63386.tar.xz
2022/05/24 | 50500 | systems/texlive/tlnet/archive/uwa-pif.doc.r63386.tar.xz
+2022/05/24 | 466 | macros/generic/xint/Makefile
2022/05/24 | 454 | macros/xetex/latex/xepersian/xepersian-doc.ltx
2022/05/24 | 4506 | fonts/roboto/README
2022/05/24 | 41 | fonts/symbats3/VERSION
@@ -1000,7 +1063,6 @@
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 | 18148 | systems/texlive/tlnet/archive/biblatex-swiss-legal.r63386.tar.xz
-2022/05/24 | 17856 | systems/texlive/tlnet/archive/pxjahyper.r63386.tar.xz
2022/05/24 | 17492 | systems/texlive/tlnet/archive/oup-authoring-template.r63386.tar.xz
2022/05/24 | 17427 | macros/latex/contrib/stex/source/extensions/document-structure.dtx
2022/05/24 | 172989 | fonts/symbats3/symbats3.pdf
@@ -1010,7 +1072,6 @@
2022/05/24 | 15867 | macros/xetex/latex/xepersian/dkun-0.4.py
2022/05/24 | 15628 | systems/texlive/tlnet/archive/njuthesis.r63386.tar.xz
2022/05/24 | 1546 | macros/latex/contrib/stex/doc/packages/stex-metatheory.tex
-2022/05/24 | 152448 | systems/texlive/tlnet/archive/pxjahyper.doc.r63386.tar.xz
2022/05/24 | 14967 | fonts/roboto/latex/roboto.sty
2022/05/24 | 14616 | macros/xetex/latex/xepersian/img/weather/rain.jpg
2022/05/24 | 14048 | systems/texlive/tlnet/archive/pdfpages.r63386.tar.xz
@@ -1066,167 +1127,3 @@
2022/05/23 | 1088032 | systems/texlive/tlnet/archive/gentium-tug.doc.r63367.tar.xz
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/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
-2022/05/22 | 9653 | indexing/makeindexk/ChangeLog
-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 | 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
-2022/05/22 | 85 | indexing/makeindexk/tests/romalpA-6.ind
-2022/05/22 | 85 | indexing/makeindexk/tests/romalpA-5.ind
-2022/05/22 | 8304 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/productsite/charset.md
-2022/05/22 | 82 | indexing/makeindexk/tests/rangeA3.ind
-2022/05/22 | 82 | indexing/makeindexk/tests/rangeA2.ind
-2022/05/22 | 82 | indexing/makeindexk/tests/rangeA1.ind
-2022/05/22 | 824 | graphics/pgf/contrib/pgf-umlcd/demo/package.tex
-2022/05/22 | 809 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/templatepdf.html
-2022/05/22 | 796596 | macros/latex/required/babel/base/locale.zip
-2022/05/22 | 795 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/template.html
-2022/05/22 | 7888 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/charset.md
-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 | 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 | 729252 | macros/latex/required/babel/base/babel.dtx
-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
-2022/05/22 | 663 | graphics/pgf/contrib/pgf-umlcd/demo/association.tex
-2022/05/22 | 6378 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/announcement.md
-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 | 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
-2022/05/22 | 564710 | graphics/pgf/contrib/causets.zip
-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 | 54048 | graphics/pgf/contrib/causets/causet_tikz_example2.pdf
-2022/05/22 | 533226 | indexing/makeindexk/configure.texk
-2022/05/22 | 5275 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/pdftemp/developer.html
-2022/05/22 | 523 | graphics/pgf/contrib/pgf-umlcd/demo/visibility.tex
-2022/05/22 | 519 | graphics/pgf/contrib/pgf-umlcd/demo/unidirectional-association.tex
-2022/05/22 | 5112 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/developer.html
-2022/05/22 | 50361 | support/pkgcheck/src/main.rs
-2022/05/22 | 48377 | indexing/makeindexk/Makefile.in
-2022/05/22 | 4836 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/pdftemp/faq.html
-2022/05/22 | 483657 | graphics/pgf/contrib/causets/causets.pdf
-2022/05/22 | 4782 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/faq.html
-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 | 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 | 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 | 4224 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/about.md
-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 | 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 | 391462 | install/macros/latex/contrib/pdfpages.tds.zip
-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 | 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 | 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 | 3108 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/productsite/faq.md
-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
-2022/05/22 | 300782 | macros/latex/contrib/pdfpages/pdfpages.pdf
-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 | 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 | 2510 | macros/latex/required/babel/base/README.md
-2022/05/22 | 24500 | graphics/pgf/contrib/causets/causets.sty
-2022/05/22 | 2434 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/design.md
-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 | 233921 | graphics/pgf/contrib/pgf-umlcd/pgf-umlcd-manual.pdf
-2022/05/22 | 2332 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/productsite/design.md
-2022/05/22 | 2313 | indexing/makeindexk/tests/makeindex.test
-2022/05/22 | 2259 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/pdftemp/support.html
-2022/05/22 | 2251 | graphics/pgf/contrib/causets/README.md
-2022/05/22 | 2206 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/support.html
-2022/05/22 | 21890 | macros/latex/required/babel/base/bbcompat.dtx
-2022/05/22 | 21813 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/productsite/features.md
-2022/05/22 | 211 | graphics/pgf/contrib/pgf-umlcd/demo/composition.tex
-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 | 1978 | support/pkgcheck/src/messages/fatald.rs
-2022/05/22 | 19595 | fonts/gentium-tug/doc/GentiumPlus-6.101/FONTLOG.txt
-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
-2022/05/22 | 19106 | graphics/pgf/contrib/pgf-umlcd/LICENSE-LPPL1.3c.txt
-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 | 180 | graphics/pgf/contrib/pgf-umlcd/demo/interface.tex
-2022/05/22 | 18092 | graphics/pgf/contrib/pgf-umlcd/LICENSE-GPL2.txt
-2022/05/22 | 178021 | macros/latex/contrib/pdfpages/pdfpages.dtx
-2022/05/22 | 17790 | support/pkgcheck/src/messages/mod.rs
-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 | 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 | 15869 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/source/pdftemp/history.html
-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 | 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 | 1382 | macros/latex/contrib/pdfpages/README
-2022/05/22 | 13706 | fonts/gentium-tug/doc/GentiumPlus-6.101/documentation/charset.html
-2022/05/22 | 12 | macros/latex/contrib/create-theorem/DEPENDS.txt
-2022/05/22 | 12706174 | fonts/gentium-tug.zip
-2022/05/22 | 12470 | macros/latex/contrib/pdfpages/dummy-l.pdf
-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 | 11473 | support/pkgcheck/src/messages/errorsd.rs
-2022/05/22 | 111 | graphics/pgf/contrib/pgf-umlcd/description.html
-2022/05/22 | 106025 | graphics/pgf/contrib/pgf-umlcd/demo/abstract-factory.svg
diff --git a/macros/generic/xint/CHANGES.html b/macros/generic/xint/CHANGES.html
index 7055bf2e04..c55d211a14 100644
--- a/macros/generic/xint/CHANGES.html
+++ b/macros/generic/xint/CHANGES.html
@@ -4,7 +4,7 @@
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
- <meta name="author" content="xint 1.4k" />
+ <meta name="author" content="xint 1.4l" />
<title>CHANGE LOG</title>
<style>
html {
@@ -170,35 +170,44 @@
<body>
<header id="title-block-header">
<h1 class="title">CHANGE LOG</h1>
-<p class="author">xint 1.4k</p>
-<p class="date">2022/05/18</p>
+<p class="author">xint 1.4l</p>
+<p class="date">2022/05/29</p>
</header>
<nav id="TOC" role="doc-toc">
<ul>
+<li><a href="#l-20220529"
+id="toc-l-20220529"><code>1.4l (2022/05/29)</code></a>
+<ul>
+<li><a href="#bug-fixes" id="toc-bug-fixes">Bug fixes</a></li>
+<li><a href="#new-features" id="toc-new-features">New features</a></li>
+<li><a href="#documentation"
+id="toc-documentation">Documentation</a></li>
+</ul></li>
<li><a href="#k-20220518"
id="toc-k-20220518"><code>1.4k (2022/05/18)</code></a>
<ul>
<li><a href="#breaking-changes" id="toc-breaking-changes">Breaking
changes</a></li>
-<li><a href="#bug-fixes" id="toc-bug-fixes">Bug fixes</a></li>
-<li><a href="#new-features" id="toc-new-features">New features</a></li>
+<li><a href="#bug-fixes-1" id="toc-bug-fixes-1">Bug fixes</a></li>
+<li><a href="#new-features-1" id="toc-new-features-1">New
+features</a></li>
</ul></li>
<li><a href="#j-20210713"
id="toc-j-20210713"><code>1.4j (2021/07/13)</code></a>
<ul>
-<li><a href="#bug-fixes-1" id="toc-bug-fixes-1">Bug fixes</a></li>
+<li><a href="#bug-fixes-2" id="toc-bug-fixes-2">Bug fixes</a></li>
</ul></li>
<li><a href="#i-20210611"
id="toc-i-20210611"><code>1.4i (2021/06/11)</code></a>
<ul>
-<li><a href="#new-features-1" id="toc-new-features-1">New
+<li><a href="#new-features-2" id="toc-new-features-2">New
features</a></li>
-<li><a href="#bug-fixes-2" id="toc-bug-fixes-2">Bug fixes</a></li>
+<li><a href="#bug-fixes-3" id="toc-bug-fixes-3">Bug fixes</a></li>
</ul></li>
<li><a href="#h-20210527"
id="toc-h-20210527"><code>1.4h (2021/05/27)</code></a>
<ul>
-<li><a href="#bug-fixes-3" id="toc-bug-fixes-3">Bug fixes</a></li>
+<li><a href="#bug-fixes-4" id="toc-bug-fixes-4">Bug fixes</a></li>
</ul></li>
<li><a href="#g-20210525"
id="toc-g-20210525"><code>1.4g (2021/05/25)</code></a>
@@ -206,54 +215,54 @@ id="toc-g-20210525"><code>1.4g (2021/05/25)</code></a>
<li><a href="#breaking-changes-1" id="toc-breaking-changes-1">Breaking
changes</a></li>
<li><a href="#deprecated" id="toc-deprecated">Deprecated</a></li>
-<li><a href="#new-features-2" id="toc-new-features-2">New
+<li><a href="#new-features-3" id="toc-new-features-3">New
features</a></li>
-<li><a href="#bug-fixes-4" id="toc-bug-fixes-4">Bug fixes</a></li>
+<li><a href="#bug-fixes-5" id="toc-bug-fixes-5">Bug fixes</a></li>
</ul></li>
<li><a href="#f-20210510"
id="toc-f-20210510"><code>1.4f (2021/05/10)</code></a>
<ul>
<li><a href="#breaking-changes-2" id="toc-breaking-changes-2">Breaking
changes</a></li>
-<li><a href="#bug-fixes-5" id="toc-bug-fixes-5">Bug fixes</a></li>
+<li><a href="#bug-fixes-6" id="toc-bug-fixes-6">Bug fixes</a></li>
</ul></li>
<li><a href="#e-20210505"
id="toc-e-20210505"><code>1.4e (2021/05/05)</code></a>
<ul>
<li><a href="#breaking-changes-3" id="toc-breaking-changes-3">Breaking
changes</a></li>
-<li><a href="#new-features-3" id="toc-new-features-3">New
+<li><a href="#new-features-4" id="toc-new-features-4">New
features</a></li>
-<li><a href="#bug-fixes-6" id="toc-bug-fixes-6">Bug fixes</a></li>
+<li><a href="#bug-fixes-7" id="toc-bug-fixes-7">Bug fixes</a></li>
</ul></li>
<li><a href="#d-20210329"
id="toc-d-20210329"><code>1.4d (2021/03/29)</code></a>
<ul>
<li><a href="#breaking-changes-4" id="toc-breaking-changes-4">Breaking
changes</a></li>
-<li><a href="#bug-fixes-7" id="toc-bug-fixes-7">Bug fixes</a></li>
+<li><a href="#bug-fixes-8" id="toc-bug-fixes-8">Bug fixes</a></li>
</ul></li>
<li><a href="#c-20210220"
id="toc-c-20210220"><code>1.4c (2021/02/20)</code></a>
<ul>
-<li><a href="#bug-fixes-8" id="toc-bug-fixes-8">Bug fixes</a></li>
+<li><a href="#bug-fixes-9" id="toc-bug-fixes-9">Bug fixes</a></li>
</ul></li>
<li><a href="#b-20200225"
id="toc-b-20200225"><code>1.4b (2020/02/25)</code></a>
<ul>
<li><a href="#future" id="toc-future">Future</a></li>
-<li><a href="#new-features-4" id="toc-new-features-4">New
+<li><a href="#new-features-5" id="toc-new-features-5">New
features</a></li>
-<li><a href="#bug-fixes-9" id="toc-bug-fixes-9">Bug fixes</a></li>
+<li><a href="#bug-fixes-10" id="toc-bug-fixes-10">Bug fixes</a></li>
</ul></li>
<li><a href="#a-20200219"
id="toc-a-20200219"><code>1.4a (2020/02/19)</code></a>
<ul>
<li><a href="#breaking-changes-5" id="toc-breaking-changes-5">Breaking
changes</a></li>
-<li><a href="#new-features-5" id="toc-new-features-5">New
+<li><a href="#new-features-6" id="toc-new-features-6">New
features</a></li>
-<li><a href="#bug-fixes-10" id="toc-bug-fixes-10">Bug fixes</a></li>
+<li><a href="#bug-fixes-11" id="toc-bug-fixes-11">Bug fixes</a></li>
</ul></li>
<li><a href="#section"
id="toc-section"><code>1.4 (2020/01/31)</code></a>
@@ -263,7 +272,7 @@ changes</a></li>
<li><a href="#improvements-and-new-features"
id="toc-improvements-and-new-features">Improvements and new
features</a></li>
-<li><a href="#bug-fixes-11" id="toc-bug-fixes-11">Bug fixes</a></li>
+<li><a href="#bug-fixes-12" id="toc-bug-fixes-12">Bug fixes</a></li>
<li><a href="#todo" id="toc-todo">TODO</a></li>
</ul></li>
<li><a href="#f-20190910"
@@ -272,7 +281,7 @@ id="toc-f-20190910"><code>1.3f (2019/09/10)</code></a>
<li><a href="#improvements-and-new-features-1"
id="toc-improvements-and-new-features-1">Improvements and new
features</a></li>
-<li><a href="#bug-fixes-12" id="toc-bug-fixes-12">Bug fixes</a></li>
+<li><a href="#bug-fixes-13" id="toc-bug-fixes-13">Bug fixes</a></li>
</ul></li>
<li><a href="#e-20190405"
id="toc-e-20190405"><code>1.3e (2019/04/05)</code></a>
@@ -282,7 +291,7 @@ changes</a></li>
<li><a href="#improvements-and-new-features-2"
id="toc-improvements-and-new-features-2">Improvements and new
features</a></li>
-<li><a href="#bug-fixes-13" id="toc-bug-fixes-13">Bug fixes</a></li>
+<li><a href="#bug-fixes-14" id="toc-bug-fixes-14">Bug fixes</a></li>
</ul></li>
<li><a href="#d-20190106"
id="toc-d-20190106"><code>1.3d (2019/01/06)</code></a>
@@ -292,7 +301,7 @@ changes</a></li>
<li><a href="#improvements-and-new-features-3"
id="toc-improvements-and-new-features-3">Improvements and new
features</a></li>
-<li><a href="#bug-fixes-14" id="toc-bug-fixes-14">Bug fixes</a></li>
+<li><a href="#bug-fixes-15" id="toc-bug-fixes-15">Bug fixes</a></li>
</ul></li>
<li><a href="#c-20180617"
id="toc-c-20180617"><code>1.3c (2018/06/17)</code></a>
@@ -300,7 +309,7 @@ id="toc-c-20180617"><code>1.3c (2018/06/17)</code></a>
<li><a href="#improvements-and-new-features-4"
id="toc-improvements-and-new-features-4">Improvements and new
features</a></li>
-<li><a href="#bug-fixes-15" id="toc-bug-fixes-15">Bug fixes</a></li>
+<li><a href="#bug-fixes-16" id="toc-bug-fixes-16">Bug fixes</a></li>
</ul></li>
<li><a href="#b-20180518"
id="toc-b-20180518"><code>1.3b (2018/05/18)</code></a>
@@ -316,7 +325,7 @@ id="toc-a-20180307"><code>1.3a (2018/03/07)</code></a>
<li><a href="#improvements-and-new-features-6"
id="toc-improvements-and-new-features-6">Improvements and new
features</a></li>
-<li><a href="#bug-fixes-16" id="toc-bug-fixes-16">Bug fixes</a></li>
+<li><a href="#bug-fixes-17" id="toc-bug-fixes-17">Bug fixes</a></li>
</ul></li>
<li><a href="#section-1"
id="toc-section-1"><code>1.3 (2018/03/01)</code></a>
@@ -333,7 +342,7 @@ id="toc-q-20180206"><code>1.2q (2018/02/06)</code></a>
<li><a href="#improvements-and-new-features-8"
id="toc-improvements-and-new-features-8">Improvements and new
features</a></li>
-<li><a href="#bug-fixes-17" id="toc-bug-fixes-17">Bug fixes</a></li>
+<li><a href="#bug-fixes-18" id="toc-bug-fixes-18">Bug fixes</a></li>
</ul></li>
<li><a href="#p-20171205"
id="toc-p-20171205"><code>1.2p (2017/12/05)</code></a>
@@ -343,7 +352,7 @@ changes</a></li>
<li><a href="#improvements-and-new-features-9"
id="toc-improvements-and-new-features-9">Improvements and new
features</a></li>
-<li><a href="#bug-fixes-18" id="toc-bug-fixes-18">Bug fixes</a></li>
+<li><a href="#bug-fixes-19" id="toc-bug-fixes-19">Bug fixes</a></li>
</ul></li>
<li><a href="#o-20170829"
id="toc-o-20170829"><code>1.2o (2017/08/29)</code></a>
@@ -369,7 +378,7 @@ changes</a></li>
<li><a href="#improvements-and-new-features-11"
id="toc-improvements-and-new-features-11">Improvements and new
features</a></li>
-<li><a href="#bug-fixes-19" id="toc-bug-fixes-19">Bug fixes</a></li>
+<li><a href="#bug-fixes-20" id="toc-bug-fixes-20">Bug fixes</a></li>
</ul></li>
<li><a href="#l-20170726"
id="toc-l-20170726"><code>1.2l (2017/07/26)</code></a>
@@ -378,7 +387,7 @@ id="toc-l-20170726"><code>1.2l (2017/07/26)</code></a>
<li><a href="#improvements-and-new-features-12"
id="toc-improvements-and-new-features-12">Improvements and new
features</a></li>
-<li><a href="#bug-fixes-20" id="toc-bug-fixes-20">Bug fixes</a></li>
+<li><a href="#bug-fixes-21" id="toc-bug-fixes-21">Bug fixes</a></li>
</ul></li>
<li><a href="#k-20170106"
id="toc-k-20170106"><code>1.2k (2017/01/06)</code></a>
@@ -388,7 +397,7 @@ changes</a></li>
<li><a href="#improvements-and-new-features-13"
id="toc-improvements-and-new-features-13">Improvements and new
features</a></li>
-<li><a href="#bug-fixes-21" id="toc-bug-fixes-21">Bug fixes</a></li>
+<li><a href="#bug-fixes-22" id="toc-bug-fixes-22">Bug fixes</a></li>
</ul></li>
<li><a href="#j-20161222"
id="toc-j-20161222"><code>1.2j (2016/12/22)</code></a>
@@ -396,7 +405,7 @@ id="toc-j-20161222"><code>1.2j (2016/12/22)</code></a>
<li><a href="#improvements-and-new-features-14"
id="toc-improvements-and-new-features-14">Improvements and new
features</a></li>
-<li><a href="#bug-fixes-22" id="toc-bug-fixes-22">Bug fixes</a></li>
+<li><a href="#bug-fixes-23" id="toc-bug-fixes-23">Bug fixes</a></li>
</ul></li>
<li><a href="#i-20161213"
id="toc-i-20161213"><code>1.2i (2016/12/13)</code></a>
@@ -407,7 +416,7 @@ changes</a></li>
<li><a href="#improvements-and-new-features-15"
id="toc-improvements-and-new-features-15">Improvements and new
features</a></li>
-<li><a href="#bug-fixes-23" id="toc-bug-fixes-23">Bug fixes</a></li>
+<li><a href="#bug-fixes-24" id="toc-bug-fixes-24">Bug fixes</a></li>
</ul></li>
<li><a href="#h-20161120"
id="toc-h-20161120"><code>1.2h (2016/11/20)</code></a>
@@ -415,7 +424,7 @@ id="toc-h-20161120"><code>1.2h (2016/11/20)</code></a>
<li><a href="#improvements-and-new-features-16"
id="toc-improvements-and-new-features-16">Improvements and new
features</a></li>
-<li><a href="#bug-fixes-24" id="toc-bug-fixes-24">Bug fixes</a></li>
+<li><a href="#bug-fixes-25" id="toc-bug-fixes-25">Bug fixes</a></li>
</ul></li>
<li><a href="#g-20160319"
id="toc-g-20160319"><code>1.2g (2016/03/19)</code></a>
@@ -434,7 +443,7 @@ changes</a></li>
<li><a href="#improvements-and-new-features-18"
id="toc-improvements-and-new-features-18">Improvements and new
features</a></li>
-<li><a href="#bug-fixes-25" id="toc-bug-fixes-25">Bug fixes</a></li>
+<li><a href="#bug-fixes-26" id="toc-bug-fixes-26">Bug fixes</a></li>
</ul></li>
<li><a href="#e-20151122"
id="toc-e-20151122"><code>1.2e (2015/11/22)</code></a>
@@ -442,7 +451,7 @@ id="toc-e-20151122"><code>1.2e (2015/11/22)</code></a>
<li><a href="#improvements-and-new-features-19"
id="toc-improvements-and-new-features-19">Improvements and new
features</a></li>
-<li><a href="#bug-fixes-26" id="toc-bug-fixes-26">Bug fixes</a></li>
+<li><a href="#bug-fixes-27" id="toc-bug-fixes-27">Bug fixes</a></li>
</ul></li>
<li><a href="#d-20151118"
id="toc-d-20151118"><code>1.2d (2015/11/18)</code></a>
@@ -450,7 +459,7 @@ id="toc-d-20151118"><code>1.2d (2015/11/18)</code></a>
<li><a href="#improvements-and-new-features-20"
id="toc-improvements-and-new-features-20">Improvements and new
features</a></li>
-<li><a href="#bug-fixes-27" id="toc-bug-fixes-27">Bug fixes</a></li>
+<li><a href="#bug-fixes-28" id="toc-bug-fixes-28">Bug fixes</a></li>
</ul></li>
<li><a href="#c-20151116"
id="toc-c-20151116"><code>1.2c (2015/11/16)</code></a>
@@ -458,12 +467,12 @@ id="toc-c-20151116"><code>1.2c (2015/11/16)</code></a>
<li><a href="#improvements-and-new-features-21"
id="toc-improvements-and-new-features-21">Improvements and new
features</a></li>
-<li><a href="#bug-fixes-28" id="toc-bug-fixes-28">Bug fixes</a></li>
+<li><a href="#bug-fixes-29" id="toc-bug-fixes-29">Bug fixes</a></li>
</ul></li>
<li><a href="#b-20151029"
id="toc-b-20151029"><code>1.2b (2015/10/29)</code></a>
<ul>
-<li><a href="#bug-fixes-29" id="toc-bug-fixes-29">Bug fixes</a></li>
+<li><a href="#bug-fixes-30" id="toc-bug-fixes-30">Bug fixes</a></li>
</ul></li>
<li><a href="#a-20151019"
id="toc-a-20151019"><code>1.2a (2015/10/19)</code></a>
@@ -471,7 +480,7 @@ id="toc-a-20151019"><code>1.2a (2015/10/19)</code></a>
<li><a href="#improvements-and-new-features-22"
id="toc-improvements-and-new-features-22">Improvements and new
features</a></li>
-<li><a href="#bug-fixes-30" id="toc-bug-fixes-30">Bug fixes</a></li>
+<li><a href="#bug-fixes-31" id="toc-bug-fixes-31">Bug fixes</a></li>
</ul></li>
<li><a href="#section-2"
id="toc-section-2"><code>1.2 (2015/10/10)</code></a>
@@ -497,7 +506,7 @@ changes</a></li>
<li><a href="#improvements-and-new-features-24"
id="toc-improvements-and-new-features-24">Improvements and new
features</a></li>
-<li><a href="#bug-fixes-31" id="toc-bug-fixes-31">Bug fixes</a></li>
+<li><a href="#bug-fixes-32" id="toc-bug-fixes-32">Bug fixes</a></li>
</ul></li>
<li><a href="#n-20140401"
id="toc-n-20140401"><code>1.09n (2014/04/01)</code></a></li>
@@ -549,17 +558,68 @@ id="toc-section-9"><code>1.03 (2013/04/14)</code></a></li>
id="toc-section-10"><code>1.0 (2013/03/28)</code></a></li>
</ul>
</nav>
-<pre><code>Source: xint.dtx 1.4k 2022/05/18 (doc 2022/05/18)
+<pre><code>Source: xint.dtx 1.4l 2022/05/29 (doc 2022/05/29)
Author: Jean-Francois Burnol
Info: Expandable operations on big integers, decimals, fractions
License: LPPL 1.3c</code></pre>
+<h2 id="l-20220529"><code>1.4l (2022/05/29)</code></h2>
+<h3 id="bug-fixes">Bug fixes</h3>
+<ul>
+<li><p><strong>xintkernel</strong>: ever since <code>1.4</code>, loading
+anyone of the <code>xint*sty</code> packages left the catcode of the
+character of ascii code <code>1</code> to the internal custom value
+<code>3</code>.</p></li>
+<li><p><strong>xintfrac</strong>: the <code>\xintPFloat</code> checks
+for an output being an integer in decimal notation or a number with a
+one-digit trimmed mantissa could fail if
+<code>\xintPFloatMinTrimmed</code> (added at <code>1.4k</code>) was
+large enough, e.g. equal to the target precision. Then, the outputs
+always kept trailing zeros, as expected in general but not for those
+special cases.</p></li>
+<li><p><strong>xintlog</strong>, <strong>xinttrig</strong>: since
+<code>1.4e</code> the message emitted if
+<code>\usepackage{xintlog}</code> or <code>\usepackage{xinttrig}</code>
+was encountered in place of the correct
+<code>\usepackage{xintexpr}</code> was wrong. It advised to use
+<code>\input xintexpr.sty\relax</code>, which would have failed with
+LaTeX. The warning is corrected and now the macro file in place of
+aborting will (be it with or without LaTeX) trigger the loading of
+<code>xintexpr</code> (hence of itself after it).</p></li>
+<li><p>The possibility to run <code>latex</code> directly on
+<code>xint.dtx</code> had been broken since <code>1.4i</code>.</p></li>
+</ul>
+<h3 id="new-features">New features</h3>
+<ul>
+<li><p><strong>xintfrac</strong>: <code>\xintRawBraced</code> as a
+public alias to an <strong>xintfrac</strong> entry point to its core
+input handler. Experimental additions <code>\xintSignBit</code> and
+<code>\xintFloatBraced</code>. Deprecate <code>\xintTeXfromSci</code> in
+favor of new name <code>\xintTeXFromSci</code>, and remove its
+<code>\expanded</code> wrapper (so it is not f-expandable anymore). Add
+<code>\xintTeXFromScifracmacro</code>.</p></li>
+<li><p><strong>xintfrac</strong>, <strong>xintexpr</strong>:
+<code>\xintFracToSci</code> and <code>\xintFracToDecimal</code> now
+behave like all other <strong>xintfrac</strong> macros in terms of
+allowed arguments and f-expandability and have been moved back to
+<strong>xintfrac</strong>.</p></li>
+</ul>
+<h3 id="documentation">Documentation</h3>
+<ul>
+<li><p>Renewed random shuffling of large parts of the documentation has
+greatly improved it.</p></li>
+<li><p>Simpler build flow to produce a <code>pdf</code> containing both
+user manual and source code. Removal of dependency on <code>grep</code>
+binary for such builds or the one of <code>sourcexint.pdf</code>. Fix of
+various obsoleted comments in extracted files involved in the
+documentation build process.</p></li>
+</ul>
<h2 id="k-20220518"><code>1.4k (2022/05/18)</code></h2>
<h3 id="breaking-changes">Breaking changes</h3>
<ul>
<li><p><strong>xintfrac</strong>: the longstanding (but documented as
undecided and unstable) way of <code>\xintFloat</code> to output the
zero value was <code>0.e0</code> and it has now been modified into
-<code>0.0e0</code>. Customizable via
+<code>0.0e0</code>. Now customizable via
<code>\xintFloatZero</code>.</p></li>
<li><p><strong>xintfrac</strong>/<strong>xintexpr</strong>: the
behaviour of <code>\xintPFloat</code> (hence of
@@ -572,17 +632,17 @@ with a single-digit (trimmed) mantissa, no <code>.0</code> is used.</p>
<code>\xintPFloatLengthOneSuffix</code>, and
<code>\xintPFloatZero</code>.</p>
<p>Also, <code>\xintPFloat</code> trims trailing zeros from the full
-significand only if there are at least <code>4</code> of them, see
-<code>\xintPFloatMinTrimmed</code>.</p></li>
-<li><p><strong>xintfrac</strong>/<strong>xintexpr</strong>: definition
-of <code>\xintFracToSci</code> migrated from the former to the
-latter.</p></li>
+significand only if there are, by default, at least <code>4</code> of
+them, see <code>\xintPFloatMinTrimmed</code>.</p></li>
+<li><p><strong>xintfrac</strong>/<strong>xintexpr</strong>: macro
+definition of <code>\xintFracToSci</code> migrated from the former to
+the latter (see <code>1.4l</code> for update).</p></li>
<li><p><strong>xintexpr</strong>:
<code>\xintexpr{Safe,Restore}Catcodes</code> pairs now behave like a
“last in first out” stack. Check the <code>pdf</code> documentation for
details.</p></li>
</ul>
-<h3 id="bug-fixes">Bug fixes</h3>
+<h3 id="bug-fixes-1">Bug fixes</h3>
<ul>
<li><p><strong>xintexpr</strong>: the
<code>\xintexpr{Safe,Restore}Catcodes</code> were documented at user
@@ -596,7 +656,7 @@ modified).</p></li>
reset the catcodes to their status prior to the sanitization done by the
macro at the start of its execution.</p></li>
</ul>
-<h3 id="new-features">New features</h3>
+<h3 id="new-features-1">New features</h3>
<ul>
<li><p><strong>xintfrac</strong>: <code>\xintPFloatZero</code>,
<code>\xintPFloatIntSuffix</code>,
@@ -609,7 +669,7 @@ expression). Also added <code>\xintFloatZero</code>.</p></li>
<li><p><strong>xintfrac</strong>:
<code>\xintFloatToDecimal</code>.</p></li>
<li><p><strong>xintexpr</strong>: <code>\xintFracToDecimal</code>, an
-alternative to <code>\xintFracToSci</code> for the configuration of
+alternative to the default <code>\xintFracToSci</code> configuration of
<code>\xintexprPrintOne</code>.</p></li>
<li><p><strong>xintexpr</strong>: long awaited syntax
<code>\xintieval[D]{...}</code> and <code>\xintfloateval[Q]{...}</code>
@@ -618,7 +678,7 @@ and <code>\xintfloateval{[Q]...}</code> is kept for backwards
compatibility.</p></li>
</ul>
<h2 id="j-20210713"><code>1.4j (2021/07/13)</code></h2>
-<h3 id="bug-fixes-1">Bug fixes</h3>
+<h3 id="bug-fixes-2">Bug fixes</h3>
<ul>
<li><strong>xinttools</strong>: a brace removal bug affected the
venerable <code>\xintSeq</code> if producing a single number
@@ -626,7 +686,7 @@ venerable <code>\xintSeq</code> if producing a single number
<code>{10}</code>). Thanks to Christophe Poulain for report.</li>
</ul>
<h2 id="i-20210611"><code>1.4i (2021/06/11)</code></h2>
-<h3 id="new-features-1">New features</h3>
+<h3 id="new-features-2">New features</h3>
<ul>
<li><p><strong>xintexpr</strong>: the concept of simultaneous
assignments is extended: in case of more variables than values the
@@ -641,7 +701,7 @@ single numeric argument: since <code>1.4</code> a lone argument had to
be a <code>nutple</code> (which was automatically unpacked). It can now
again be a number.</p></li>
</ul>
-<h3 id="bug-fixes-2">Bug fixes</h3>
+<h3 id="bug-fixes-3">Bug fixes</h3>
<ul>
<li><p><strong>xintexpr</strong>: simultaneous assignments via
<code>\xintdefvar</code> to 10 or more variables was broken if the right
@@ -662,7 +722,7 @@ variables (currently <code>subs()</code>, <code>subsm()</code>,
<code>seq</code>.</p></li>
</ul>
<h2 id="h-20210527"><code>1.4h (2021/05/27)</code></h2>
-<h3 id="bug-fixes-3">Bug fixes</h3>
+<h3 id="bug-fixes-4">Bug fixes</h3>
<ul>
<li><p><strong>xintexpr</strong>: the recent <code>1.4g</code>
introduced a bug breaking input of the type
@@ -697,7 +757,7 @@ way: <code>2^3^4==2^(3^4)</code>.</p></li>
<code>\xintTeXOver</code>, <code>\xintTeXsignedOver</code>. The old
names will emit warnings.</li>
</ul>
-<h3 id="new-features-2">New features</h3>
+<h3 id="new-features-3">New features</h3>
<ul>
<li><p>Messages written to the terminal and log file during the handling
of recovery from exceptions use a new mechanism; when in interactive
@@ -709,7 +769,7 @@ about 7 or 8 years too late) to help typesetting values output by
<code>\xintfloateval</code> in a more useful way than
<code>\xintTeXFrac</code> (formerly <code>\xintFrac</code>).</p></li>
</ul>
-<h3 id="bug-fixes-4">Bug fixes</h3>
+<h3 id="bug-fixes-5">Bug fixes</h3>
<ul>
<li><p><strong>xintexpr</strong>: with <strong>xintbinhex</strong>
loaded, <code>"</code> is recognized as prefix for hexadecimal input;
@@ -777,7 +837,7 @@ powers, see the bug fixes below.</p></li>
<li><p><strong>xintexpr</strong>: the <code>float_()</code> function got
renamed into <code>float_dgt()</code>.</p></li>
</ul>
-<h3 id="bug-fixes-5">Bug fixes</h3>
+<h3 id="bug-fixes-6">Bug fixes</h3>
<ul>
<li><p><strong>xintexpr</strong>: the documentation said
<code>float_()</code> function had been renamed <code>float_dgt()</code>
@@ -863,7 +923,7 @@ pre-rounding to the Digits precision.</p></li>
over the process to <code>\xintPFloat</code> (without the rounding to
Digits, of course).</p></li>
</ul>
-<h3 id="new-features-3">New features</h3>
+<h3 id="new-features-4">New features</h3>
<ul>
<li><p><strong>xintlog</strong>: now working up to <code>62</code>
digits. The legacy faster <code>poormanlog</code>-based macros are kept
@@ -888,7 +948,7 @@ the letter <code>e</code>.</p></li>
like <code>\xintDecToString</code> but starts by removing trailing
zeroes.</p></li>
</ul>
-<h3 id="bug-fixes-6">Bug fixes</h3>
+<h3 id="bug-fixes-7">Bug fixes</h3>
<ul>
<li><strong>xintfrac</strong>, <strong>xintexpr</strong>: it was not
possible to use <code>\xinttheDigits</code> in the right hand side of an
@@ -910,7 +970,7 @@ applied to fractions is now always in lowest terms.</p></li>
around the name. By the way, quotes were never used for function
names.</p></li>
</ul>
-<h3 id="bug-fixes-7">Bug fixes</h3>
+<h3 id="bug-fixes-8">Bug fixes</h3>
<ul>
<li><p>Ever since <code>1.3</code> the <code>quo()</code> and
<code>rem()</code> functions in <code>\xintexpr</code> (not the ones in
@@ -935,7 +995,7 @@ inside an <code>\xintdeffunc</code> caused the defined function to be
broken.</p></li>
</ul>
<h2 id="c-20210220"><code>1.4c (2021/02/20)</code></h2>
-<h3 id="bug-fixes-8">Bug fixes</h3>
+<h3 id="bug-fixes-9">Bug fixes</h3>
<ul>
<li>Fix <code>1.4</code> regression which broke syntax
<code>varname(...)</code> which supposedly is allowed and inserts a
@@ -960,7 +1020,7 @@ so much better names. Besides, since <code>1.4</code>,
<code>\xintexpr</code> can be used directly in typesetting
flow.</p></li>
</ul>
-<h3 id="new-features-4">New features</h3>
+<h3 id="new-features-5">New features</h3>
<ul>
<li><p>Function <code>zip()</code> is modeled on Python’s function of
the same name.</p></li>
@@ -977,7 +1037,7 @@ strangely there was no way to customize the output of
<code>\xintfloateval</code>. The added <code>\xintPFloatE</code> fixes
this.</p></li>
</ul>
-<h3 id="bug-fixes-9">Bug fixes</h3>
+<h3 id="bug-fixes-10">Bug fixes</h3>
<ul>
<li><code>\xintieval{[D]...}</code> with a negative <code>D</code> (a
feature added at <code>1.4a</code>) used erroneously a catcode 12
@@ -991,7 +1051,7 @@ feature added at <code>1.4a</code>) used erroneously a catcode 12
<li>The macros implementing customization of <code>\xintthealign</code>
have modified meanings and names.</li>
</ul>
-<h3 id="new-features-5">New features</h3>
+<h3 id="new-features-6">New features</h3>
<ul>
<li><p><code>\xintthespaceseparated</code> (serves to provide suitable
input to PS-Tricks <code>\listplot</code>).</p></li>
@@ -1004,7 +1064,7 @@ of <code>10^(-D)</code>.</p>
<code>\xintRound</code>, <code>\xintiTrunc</code>, and
<code>\xintiRound</code> macros of <strong>xintfrac</strong>.</p></li>
</ul>
-<h3 id="bug-fixes-10">Bug fixes</h3>
+<h3 id="bug-fixes-11">Bug fixes</h3>
<ul>
<li><p>Usage of <code>round()</code> and <code>trunc()</code> within
<code>\xintdeffunc</code> got broken at <code>1.4</code>.</p></li>
@@ -1234,7 +1294,7 @@ example a correct variable or function name in place of the not
recognized one. But don’t expect miracles when trying to intervene in
the midst of a purely expandable expansion…</p></li>
</ul>
-<h3 id="bug-fixes-11">Bug fixes</h3>
+<h3 id="bug-fixes-12">Bug fixes</h3>
<p>Bugs? Those identified in <code>1.3f</code> were almost features. As
per <code>1.4</code> the code base of <strong>xintexpr</strong> received
multiple successive core refactorings and added numerous new features,
@@ -1271,7 +1331,7 @@ token e.g. <code>\xintDigits := 32\relax</code>.</p>
expressions by <code>\xintdeffunc</code>. And make them usable also
inside macro definitions via <code>\xintNewExpr</code>.</p></li>
</ul>
-<h3 id="bug-fixes-12">Bug fixes</h3>
+<h3 id="bug-fixes-13">Bug fixes</h3>
<ul>
<li><p><strong>xintexpr</strong>: fix bug preventing usage of
<code>\xintdefefunc</code> to define a function without variables.</p>
@@ -1318,7 +1378,7 @@ shortcomings.</p></li>
be negative; it then means to trim (and round) from the output at float
precision that many least significant digits.</p></li>
</ul>
-<h3 id="bug-fixes-13">Bug fixes</h3>
+<h3 id="bug-fixes-14">Bug fixes</h3>
<ul>
<li>Some bugfixes related to user functions with no variables at all;
they were dysfunctional.</li>
@@ -1361,7 +1421,7 @@ value zero),</p></li>
<code>\xinttheexpr...\relax</code> etc…, but with the (comma-separated)
expression as a usual braced macro argument.</p></li>
</ul>
-<h3 id="bug-fixes-14">Bug fixes</h3>
+<h3 id="bug-fixes-15">Bug fixes</h3>
<ul>
<li><strong>xintcore</strong>, <strong>xintexpr</strong> : division in
<code>\xintiiexpr</code> was broken for a zero dividend and a one-digit
@@ -1393,7 +1453,7 @@ work if that catcode is already frozen.</p></li>
<code>sourcexint.pdf</code> is better hyperlinked and includes indices
for the macros defined by each package.</p></li>
</ul>
-<h3 id="bug-fixes-15">Bug fixes</h3>
+<h3 id="bug-fixes-16">Bug fixes</h3>
<ul>
<li><strong>xintfrac</strong>: since <code>1.3</code> release, it loaded
<strong>xintgcd</strong> in contradiction to what the documentation says
@@ -1444,7 +1504,7 @@ inputs having one hundred digits or more.</p></li>
<code>\xintDivFloor</code>, <code>\xintMod</code>,
<code>\xintModTrunc</code>, which had been left out so far.</p></li>
</ul>
-<h3 id="bug-fixes-16">Bug fixes</h3>
+<h3 id="bug-fixes-17">Bug fixes</h3>
<ul>
<li><strong>xintexpr</strong>: the mechanism for adjunction to the
expression parsers of user defined functions was refactored and improved
@@ -1495,7 +1555,7 @@ features</h3>
<li><strong>xintexpr</strong>: tacit multiplication extended to cases
such as <code>3!4!5!</code> or <code>(1+2)3</code>.</li>
</ul>
-<h3 id="bug-fixes-17">Bug fixes</h3>
+<h3 id="bug-fixes-18">Bug fixes</h3>
<ul>
<li><strong>xintcore</strong>: sadly, refactoring at <code>1.2l</code>
of subtraction left an extra character in an inner macro causing
@@ -1543,7 +1603,7 @@ built-in functions. It is associated with floored division, like the
Python language <code>divmod()</code>. Related support macros added to
<strong>xintcore</strong>, and <strong>xintfrac</strong>.</p></li>
</ul>
-<h3 id="bug-fixes-18">Bug fixes</h3>
+<h3 id="bug-fixes-19">Bug fixes</h3>
<ul>
<li><p><strong>xintgcd</strong>: <code>\xintBezout{6}{3}</code> (for
example) expanded to <code>{6}{3}{-0}{-1}{3}</code>, but the
@@ -1656,7 +1716,7 @@ but limited to a few thousand digits. The <code>1.08</code> routines
could handle tens of thousands of digits, but not in a reasonable
time.</li>
</ul>
-<h3 id="bug-fixes-19">Bug fixes</h3>
+<h3 id="bug-fixes-20">Bug fixes</h3>
<ul>
<li><p>user manual: the <code>Changes</code> section wrongly stated at
<code>1.2l</code> that the macros of <strong>xintbinhex</strong> had
@@ -1725,7 +1785,7 @@ in this example a second <code>\relax</code>.</p></li>
interface yet, it is done in preparation for next major release and is
completely unstable and undocumented.</p></li>
</ul>
-<h3 id="bug-fixes-20">Bug fixes</h3>
+<h3 id="bug-fixes-21">Bug fixes</h3>
<ul>
<li><p><strong>xintbinhex</strong>: since <code>1.2 (2015/10/10)</code>,
<code>\xintHexToDec</code> was broken due to an undefined macro (it was
@@ -1784,7 +1844,7 @@ variables.)</p></li>
improved <code>\xintNewExpr</code> compatibility. Also
<code>\xintFirstItem:f:csv</code>.</p></li>
</ul>
-<h3 id="bug-fixes-21">Bug fixes</h3>
+<h3 id="bug-fixes-22">Bug fixes</h3>
<ul>
<li><p>the <code>1.2f</code> half-integer powers computed within
<code>\xintfloatexpr</code> had a silly rounding to the target precision
@@ -1823,7 +1883,7 @@ horizontal and vertical rules which bring the documentation of the
except that implementation of some math functions is still
lacking.</p></li>
</ul>
-<h3 id="bug-fixes-22">Bug fixes</h3>
+<h3 id="bug-fixes-23">Bug fixes</h3>
<ul>
<li>fix two <code>1.2i</code> regressions caused by undefined macros
(<code>\xintNthElt</code> in certain branches and <code>[list][N]</code>
@@ -1893,7 +1953,7 @@ should have been removed long ago) and uses only the more apt “macro”,
as after all, all of <strong>xint</strong> is about expansion of macros
(plus the use of <code>\numexpr</code>).</p></li>
</ul>
-<h3 id="bug-fixes-23">Bug fixes</h3>
+<h3 id="bug-fixes-24">Bug fixes</h3>
<ul>
<li><code>\xintDecSplitL</code> and <code>\xintDecSplitR</code> from
<strong>xint</strong> produced their output in a spurious brace pair
@@ -1913,7 +1973,7 @@ prefix, now <code>\thexintexpr</code>, <code>\thexintiexpr</code>,
<code>\thexintfloatexpr</code>, and <code>\thexintiiexpr</code> are
provided as synonyms to <code>\xinttheexpr</code>, etc…</p></li>
</ul>
-<h3 id="bug-fixes-24">Bug fixes</h3>
+<h3 id="bug-fixes-25">Bug fixes</h3>
<ul>
<li><p>the <code>(cond)?{foo}{bar}</code> operator from
<strong>xintexpr</strong> mis-behaved in certain circumstances (such as
@@ -2026,7 +2086,7 @@ initial <code>\romannumeral</code> anymore.</p></li>
random shuffling of sections and well thought additions; cuts were
considered and even performed.</p></li>
</ul>
-<h3 id="bug-fixes-25">Bug fixes</h3>
+<h3 id="bug-fixes-26">Bug fixes</h3>
<ul>
<li><p>squaring macro <code>\xintSqr</code> from
<strong>xintfrac.sty</strong> was broken due to a misspelled sub-macro
@@ -2056,7 +2116,7 @@ its included code samples has been entirely re-written; the <em>Commands
of the xintexpr package</em> section has been extended and reviewed
entirely.</p></li>
</ul>
-<h3 id="bug-fixes-26">Bug fixes</h3>
+<h3 id="bug-fixes-27">Bug fixes</h3>
<ul>
<li><p>in <strong>xintfrac</strong>: the <code>\xintFloatFac</code> from
release <code>1.2</code> parsed its argument only through
@@ -2082,7 +2142,7 @@ x/(2*y).</p></li>
<li><p>some documentation enhancements, particularly in the chapter on
xintexpr.sty, and also in the code source comments.</p></li>
</ul>
-<h3 id="bug-fixes-27">Bug fixes</h3>
+<h3 id="bug-fixes-28">Bug fixes</h3>
<ul>
<li>in <strong>xintcore</strong>: release <code>1.2c</code> had
inadvertently broken the <code>\xintiiDivRound</code> macro.</li>
@@ -2097,14 +2157,14 @@ features</h3>
<li><p>on-going code improvements and documentation enhancements, but
stopped in order to issue this bugfix release.</p></li>
</ul>
-<h3 id="bug-fixes-28">Bug fixes</h3>
+<h3 id="bug-fixes-29">Bug fixes</h3>
<ul>
<li>in <strong>xintcore</strong>: recent release <code>1.2</code>
introduced a bug in the subtraction (happened when 00000001 was found
under certain circumstances at certain mod 8 locations).</li>
</ul>
<h2 id="b-20151029"><code>1.2b (2015/10/29)</code></h2>
-<h3 id="bug-fixes-29">Bug fixes</h3>
+<h3 id="bug-fixes-30">Bug fixes</h3>
<ul>
<li>in <strong>xintcore</strong>: recent release <code>1.2</code>
introduced a bug in the division macros, causing a crash when the
@@ -2126,7 +2186,7 @@ regarding brace stripping.</p></li>
<code>\romannumeral`&amp;&amp;@</code> (<code>^</code> being used as
letter, had to find another character usable with catcode 7).</p></li>
</ul>
-<h3 id="bug-fixes-30">Bug fixes</h3>
+<h3 id="bug-fixes-31">Bug fixes</h3>
<ul>
<li>in <strong>xintexpr</strong>: recent release <code>1.2</code>
introduced a bad bug in the parsing of decimal numbers and as a result
@@ -2409,7 +2469,7 @@ even number of items to the format expected by the <code>TikZ</code>
standard macro parameter <code>#</code>. Not all constructs are
compatible with <code>\xintNewExpr</code>.</p></li>
</ul>
-<h3 id="bug-fixes-31">Bug fixes</h3>
+<h3 id="bug-fixes-32">Bug fixes</h3>
<ul>
<li><p><code>\xintZapFirstSpaces</code> hence also
<code>\xintZapSpaces</code> from package <strong>xinttools</strong> were
diff --git a/macros/generic/xint/Makefile b/macros/generic/xint/Makefile
index 185090f99d..2bf5aaaeef 100644
--- a/macros/generic/xint/Makefile
+++ b/macros/generic/xint/Makefile
@@ -1,5 +1,5 @@
# Makefile for building and installing xint
-# (C) 2014-2021 Jean-Francois Burnol
+# (C) 2014-2022 Jean-Francois Burnol
# distributed under LPPL 1.3c.
# Tested with GNU Make 3.81 on Mac OS X Mavericks,
diff --git a/macros/generic/xint/README.md b/macros/generic/xint/README.md
index 26efec3af4..b11925c269 100644
--- a/macros/generic/xint/README.md
+++ b/macros/generic/xint/README.md
@@ -1,8 +1,8 @@
% README
-% xint 1.4k
-% 2022/05/18
+% xint 1.4l
+% 2022/05/29
- Source: xint.dtx 1.4k 2022/05/18 (doc 2022/05/18)
+ Source: xint.dtx 1.4l 2022/05/29 (doc 2022/05/29)
Author: Jean-Francois Burnol
Info: Expandable operations on big integers, decimals, fractions
License: LPPL 1.3c
@@ -24,6 +24,14 @@ available up to 62 digits of precision. The syntax supports dummy
variables (to generate sequences of values) and nested structures.
Support for user-declared functions and variables is implemented.
+Here is an example of everyday typical calculation by `xintexpr` users:
+
+ \xinteval{reduce(add(1/i^3, i=1..25))}
+
+It expands to:
+
+ 2560976152652211536408111110189/2131858131361319942957376000000
+
Usage on the command line
=========================
@@ -55,20 +63,49 @@ Installation
[MikTeX](http://www.miktex.org/). Thus, use the package manager to
update your distribution.
-Alternatives:
+The simplest alternative is to download
+[`xint.tds.zip`](http://mirror.ctan.org/install/macros/generic/xint.tds.zip)
+and install the `xint` package files and documentation in a suitable
+TDS-compliant repertory via `unzip`. For example, on a macOS system,
+installation in user repertory:
+
+ unzip xint.tds.zip -d ~/Library/texmf
+
+Admin privileges may be needed when moving the files into the TeX
+installation.
+
+Else, one can download `xint.dtx` and optionally `Makefile` from
+https://www.ctan.org/tex-archive/macros/generic/xint and proceed from
+there. The package files are extracted automatically from
+`etex xint.dtx`. So if one does not need to build the documentation,
+one only has to move the files with extension `.sty` to one's working
+repertory and start using them.
-- download
- [`xint.tds.zip`](http://mirror.ctan.org/install/macros/generic/xint.tds.zip)
- and install in a suitable TDS-compliant repertory via `unzip`. "admin"
- privilges might be needed, as well as a file database rebuild (`texhash`).
- For example, on macos x, installation into user home folder (no `sudo`,
- and no `texhash` as it is recommended to not have a ls-R file there)
+Here are various options to build the documentation, from the more
+automated to the more manual:
- unzip xint.tds.zip -d ~/Library/texmf
+- (with `Makefile`) run `make help` or `make helpless` (on Unix-like
+ systems) for extracting package files and receiving further
+ instructions, or directly `make xint.pdf` to both extract package
+ files and build the user documentation in the current repertory.
+ The commented source code will be obtained from `make sourcexint.pdf`.
+ This process requires `latexmk`. The `CHANGES.html` target requires
+ `pandoc`.
-- all files can be extracted using `etex xint.dtx`, or `make` if the
- `Makefile` included in the CTAN upload is present; see the file `INSTALL`,
- if present, else read the help in extracted file `Makefile.mk`.
+- (without `Makefile`) run `etex xint.dtx` then rename the extracted
+ `Makefile.mk` to `Makefile` and proceed as in the previous item.
+
+- (with no `make`) run `latexmk` on `xint.dtx`. This will both extract
+ package files and build a `dvi` combining the user documentation and
+ the commented source code. Finish with `dvipdfmx xint.dvi`.
+
+- (with no `make`) execute `etex xint.dtx` to extract files then run
+ `latexmk` on `xint.tex` and `sourcexint.tex`, or perhaps on
+ `xint-all.tex` to combine user manual and source code in one `pdf`.
+
+- (with no `make` and no `latexmk`) proceed as in one of the previous
+ two items but with `latex` sufficiently many times in place of
+ `latexmk`. Finish with `dvipdfmx`, or use `pdflatex` initially.
Documentation
=============
@@ -83,12 +120,6 @@ Documentation
`sourcexint.pdf`: commented source code
(`texdoc --list xint` or `texdoc sourcexint`)
-Requirements
-============
-
-Since release `1.4`, `xintexpr` requires the `\expanded` primitive. This
-is a functionality of all major TeX engines since TeXLive 2019.
-
License
=======
@@ -107,9 +138,10 @@ This Work has the LPPL maintenance status `author-maintained`.
The Author of this Work is `Jean-Francois Burnol`.
-This Work consists of the files `Makefile`, `INSTALL`, and `xint.dtx`
-and its extracted and derived files inclusive of the documentation
-files `xint.pdf`, `sourcexint.pdf` and `CHANGES.html`.
+This Work consists of the files `xint.dtx` and `Makefile` and
+extracted files inclusive of the macro files `xint*sty` as
+well as derived documentation files such as `xint.pdf`,
+`sourcexint.pdf` and `CHANGES.html`
See `xint.pdf` for contact information.
diff --git a/macros/generic/xint/sourcexint.pdf b/macros/generic/xint/sourcexint.pdf
index 559adccd36..6c01348a46 100644
--- a/macros/generic/xint/sourcexint.pdf
+++ b/macros/generic/xint/sourcexint.pdf
Binary files differ
diff --git a/macros/generic/xint/xint.dtx b/macros/generic/xint/xint.dtx
index 213000e752..4235de9233 100644
--- a/macros/generic/xint/xint.dtx
+++ b/macros/generic/xint/xint.dtx
@@ -3,27 +3,27 @@
% Extract all files via "etex xint.dtx" and do "make help"
% or follow instructions from extracted README.md.
%<*dtx>
-\def\xintdtxtimestamp {Time-stamp: <18-05-2022 at 20:55:23 CEST>}
+\def\xintdtxtimestamp {Time-stamp: <29-05-2022 at 11:55:32 CEST>}
%</dtx>
-%<*drv>
+%<*xintdrv|sourcedrv|alldrv>
%% ---------------------------------------------------------------
-\def\xintdocdate {2022/05/18}
-\def\xintbndldate{2022/05/18}
-\def\xintbndlversion {1.4k}
-%</drv>
+\def\xintdocdate {2022/05/29}
+\def\xintbndldate{2022/05/29}
+\def\xintbndlversion {1.4l}
+%</xintdrv|sourcedrv|alldrv>
%<readme>% README
%<changes>% CHANGE LOG
-%<readme|changes>% xint 1.4k
-%<readme|changes>% 2022/05/18
+%<readme|changes>% xint 1.4l
+%<readme|changes>% 2022/05/29
%<readme|changes>
-%<readme|changes> Source: xint.dtx 1.4k 2022/05/18 (doc 2022/05/18)
+%<readme|changes> Source: xint.dtx 1.4l 2022/05/29 (doc 2022/05/29)
%<readme|changes> Author: Jean-Francois Burnol
%<readme|changes> Info: Expandable operations on big integers, decimals, fractions
%<readme|changes> License: LPPL 1.3c
%<readme|changes>
%<*!readme&!changes&!dohtmlsh&!makefile>
%% ---------------------------------------------------------------
-%% The xint bundle 1.4k 2022/05/18
+%% The xint bundle 1.4l 2022/05/29
%% Copyright (C) 2013-2022 by Jean-Francois Burnol
%<xintkernel>%% xintkernel: Paraphernalia for the xint packages
%<xinttools>%% xinttools: Expandable and non-expandable utilities
@@ -60,6 +60,14 @@ available up to 62 digits of precision. The syntax supports dummy
variables (to generate sequences of values) and nested structures.
Support for user-declared functions and variables is implemented.
+Here is an example of everyday typical calculation by `xintexpr` users:
+
+ \xinteval{reduce(add(1/i^3, i=1..25))}
+
+It expands to:
+
+ 2560976152652211536408111110189/2131858131361319942957376000000
+
Usage on the command line
=========================
@@ -91,20 +99,50 @@ Installation
[MikTeX](http://www.miktex.org/). Thus, use the package manager to
update your distribution.
-Alternatives:
+The simplest alternative is to download
+[`xint.tds.zip`](http://mirror.ctan.org/install/macros/generic/xint.tds.zip)
+and install the `xint` package files and documentation in a suitable
+TDS-compliant repertory via `unzip`. For example, on a macOS system,
+installation in user repertory:
+
+ unzip xint.tds.zip -d ~/Library/texmf
+
+Admin privileges may be needed when moving the files into the TeX
+installation.
+
+Else, one can download `xint.dtx` and optionally `Makefile` from
+https://www.ctan.org/tex-archive/macros/generic/xint and proceed from
+there. The package files are extracted automatically from
+`etex xint.dtx`. So if one does not need to build the documentation,
+one only has to move the files with extension `.sty` to one's working
+repertory and start using them.
+
+Here are various options to build the documentation, from the more
+automated to the more manual:
+
+- (with `Makefile`) run `make help` or `make helpless` (on Unix-like
+ systems) for extracting package files and receiving further
+ instructions, or directly `make xint.pdf` to both extract package
+ files and build the user documentation in the current repertory.
+ The commented source code will be obtained from `make sourcexint.pdf`.
+ This process requires `latexmk`. The `CHANGES.html` target requires
+ `pandoc`.
-- download
- [`xint.tds.zip`](http://mirror.ctan.org/install/macros/generic/xint.tds.zip)
- and install in a suitable TDS-compliant repertory via `unzip`. "admin"
- privilges might be needed, as well as a file database rebuild (`texhash`).
- For example, on macos x, installation into user home folder (no `sudo`,
- and no `texhash` as it is recommended to not have a ls-R file there)
+- (without `Makefile`) run `etex xint.dtx` then rename the extracted
+ `Makefile.mk` to `Makefile` and proceed as in the previous item.
- unzip xint.tds.zip -d ~/Library/texmf
+- (with no `make`) run `latexmk` on `xint.dtx`. This will both extract
+ package files and build a `dvi` combining the user documentation and
+ the commented source code. Finish with `dvipdfmx xint.dvi`.
+
+- (with no `make`) execute `etex xint.dtx` to extract files then run
+ `latexmk` on `xint.tex` and `sourcexint.tex`, or perhaps on
+ `xint-all.tex` to combine user manual and source code in one `pdf`.
+
+- (with no `make` and no `latexmk`) proceed as in one of the previous
+ two items but with `latex` sufficiently many times in place of
+ `latexmk`. Finish with `dvipdfmx`, or use `pdflatex` initially.
-- all files can be extracted using `etex xint.dtx`, or `make` if the
- `Makefile` included in the CTAN upload is present; see the file `INSTALL`,
- if present, else read the help in extracted file `Makefile.mk`.
Documentation
=============
@@ -119,12 +157,6 @@ Documentation
`sourcexint.pdf`: commented source code
(`texdoc --list xint` or `texdoc sourcexint`)
-Requirements
-============
-
-Since release `1.4`, `xintexpr` requires the `\expanded` primitive. This
-is a functionality of all major TeX engines since TeXLive 2019.
-
License
=======
@@ -143,15 +175,68 @@ This Work has the LPPL maintenance status `author-maintained`.
The Author of this Work is `Jean-Francois Burnol`.
-This Work consists of the files `Makefile`, `INSTALL`, and `xint.dtx`
-and its extracted and derived files inclusive of the documentation
-files `xint.pdf`, `sourcexint.pdf` and `CHANGES.html`.
+This Work consists of the files `xint.dtx` and `Makefile` and
+extracted files inclusive of the macro files `xint*sty` as
+well as derived documentation files such as `xint.pdf`,
+`sourcexint.pdf` and `CHANGES.html`
See `xint.pdf` for contact information.
%</readme>--------------------------------------------------------
%<*changes>-------------------------------------------------------
+`1.4l (2022/05/29)`
+----
+
+### Bug fixes
+
+ - **xintkernel**: ever since `1.4`, loading anyone of the `xint*sty`
+ packages left the catcode of the character of ascii code `1` to
+ the internal custom value `3`.
+
+ - **xintfrac**: the `\xintPFloat` checks for an output being an integer
+ in decimal notation or a number with a one-digit trimmed mantissa
+ could fail if `\xintPFloatMinTrimmed` (added at `1.4k`) was large
+ enough, e.g. equal to the target precision. Then, the outputs always
+ kept trailing zeros, as expected in general but not for those special
+ cases.
+
+ - **xintlog**, **xinttrig**: since `1.4e` the message emitted if
+ `\usepackage{xintlog}` or `\usepackage{xinttrig}` was encountered in
+ place of the correct `\usepackage{xintexpr}` was wrong. It advised
+ to use `\input xintexpr.sty\relax`, which would have failed with
+ LaTeX. The warning is corrected and now the macro file in place of
+ aborting will (be it with or without LaTeX) trigger the loading of
+ `xintexpr` (hence of itself after it).
+
+
+ - The possibility to run `latex` directly on `xint.dtx` had been broken
+ since `1.4i`.
+
+### New features
+
+ - **xintfrac**: `\xintRawBraced` as a public alias to an **xintfrac**
+ entry point to its core input handler. Experimental additions
+ `\xintSignBit` and `\xintFloatBraced`. Deprecate `\xintTeXfromSci`
+ in favor of new name `\xintTeXFromSci`, and remove its `\expanded`
+ wrapper (so it is not f-expandable anymore). Add
+ `\xintTeXFromScifracmacro`.
+
+ - **xintfrac**, **xintexpr**: `\xintFracToSci` and `\xintFracToDecimal`
+ now behave like all other **xintfrac** macros in terms of allowed
+ arguments and f-expandability and have been moved back to
+ **xintfrac**.
+
+### Documentation
+
+ - Renewed random shuffling of large parts of the documentation has
+ greatly improved it.
+
+ - Simpler build flow to produce a `pdf` containing both user manual and
+ source code. Removal of dependency on `grep` binary for such builds or
+ the one of `sourcexint.pdf`. Fix of various obsoleted comments in
+ extracted files involved in the documentation build process.
+
`1.4k (2022/05/18)`
----
@@ -159,7 +244,7 @@ See `xint.pdf` for contact information.
- **xintfrac**: the longstanding (but documented as undecided and
unstable) way of `\xintFloat` to output the zero value was `0.e0` and
- it has now been modified into `0.0e0`. Customizable via
+ it has now been modified into `0.0e0`. Now customizable via
`\xintFloatZero`.
- **xintfrac**/**xintexpr**: the behaviour of `\xintPFloat` (hence of
@@ -173,12 +258,12 @@ See `xint.pdf` for contact information.
`\xintPFloatIntSuffix`, `\xintPFloatLengthOneSuffix`, and
`\xintPFloatZero`.
- Also, `\xintPFloat` trims trailing zeros from the
- full significand only if there are at least `4` of them, see
+ Also, `\xintPFloat` trims trailing zeros from the full significand
+ only if there are, by default, at least `4` of them, see
`\xintPFloatMinTrimmed`.
- - **xintfrac**/**xintexpr**: definition of `\xintFracToSci` migrated
- from the former to the latter.
+ - **xintfrac**/**xintexpr**: macro definition of `\xintFracToSci`
+ migrated from the former to the latter (see `1.4l` for update).
- **xintexpr**: `\xintexpr{Safe,Restore}Catcodes` pairs now behave like
a "last in first out" stack. Check the `pdf` documentation for
@@ -207,8 +292,8 @@ See `xint.pdf` for contact information.
- **xintfrac**: `\xintFloatToDecimal`.
- - **xintexpr**: `\xintFracToDecimal`, an alternative to
- `\xintFracToSci` for the configuration of `\xintexprPrintOne`.
+ - **xintexpr**: `\xintFracToDecimal`, an alternative to the default
+ `\xintFracToSci` configuration of `\xintexprPrintOne`.
- **xintexpr**: long awaited syntax `\xintieval[D]{...}` and
`\xintfloateval[Q]{...}` now implemented. The legacy syntax with
@@ -1720,7 +1805,6 @@ releases. They will all get removed at some future release.
attempted to use with 1+99999999 a subroutine expecting only 8-digits
numbers).
-
`1.2a (2015/10/19)`
----
@@ -2574,6 +2658,74 @@ Initial announcement:
> The packages may be used with Plain and with LaTeX.
%</changes>------------------------------------------------------
+%<*dates>-------------------------------------------------------
+`1.4l (2022/05/29)`
+`1.4k (2022/05/18)`
+`1.4j (2021/07/13)`
+`1.4i (2021/06/11)`
+`1.4h (2021/05/27)`
+`1.4g (2021/05/25)`
+`1.4f (2021/05/10)`
+`1.4e (2021/05/05)`
+`1.4d (2021/03/29)`
+`1.4c (2021/02/20)`
+`1.4b (2020/02/25)`
+`1.4a (2020/02/19)`
+`1.4 (2020/01/31)`
+`1.3f (2019/09/10)`
+`1.3e (2019/04/05)`
+`1.3d (2019/01/06)`
+`1.3c (2018/06/17)`
+`1.3b (2018/05/18)`
+`1.3a (2018/03/07)`
+`1.3 (2018/03/01)`
+`1.2q (2018/02/06)`
+`1.2p (2017/12/05)`
+`1.2o (2017/08/29)`
+`1.2n (2017/08/06)`
+`1.2m (2017/07/31)`
+`1.2l (2017/07/26)`
+`1.2k (2017/01/06)`
+`1.2j (2016/12/22)`
+`1.2i (2016/12/13)`
+`1.2h (2016/11/20)`
+`1.2g (2016/03/19)`
+`1.2f (2016/03/12)`
+`1.2e (2015/11/22)`
+`1.2d (2015/11/18)`
+`1.2c (2015/11/16)`
+`1.2b (2015/10/29)`
+`1.2a (2015/10/19)`
+`1.2 (2015/10/10)`
+`1.1c (2015/09/12)`
+`1.1b (2015/08/31)`
+`1.1a (2014/11/07)`
+`1.1 (2014/10/28)`
+`1.09n (2014/04/01)`
+`1.09m (2014/02/26)`
+`1.09kb (2014/02/13)`
+`1.09k (2014/01/21)`
+`1.09j (2014/01/09)`
+`1.09i (2013/12/18)`
+`1.09h (2013/11/28)`
+`1.09g (2013/11/22)`
+`1.09f (2013/11/04)`
+`1.09e (2013/10/29)`
+`1.09d (2013/10/22)`
+`1.09c (2013/10/09)`
+`1.09b (2013/10/03)`
+`1.09a (2013/09/24)`
+`1.08b (2013/06/14)`
+`1.08a (2013/06/11)`
+`1.08 (2013/06/07)`
+`1.07 (2013/05/25)`
+`1.06b (2013/05/14)`
+`1.06 (2013/05/07)`
+`1.05 (2013/05/01)`
+`1.04 (2013/04/25)`
+`1.03 (2013/04/14)`
+`1.0 (2013/03/28)`
+%</dates>------------------------------------------------------
%<*makefile>------------------------------------------------------
# This file: Makefile.mk (generated from xint.dtx)
# "make --file=Makefile.mk help"
@@ -2611,8 +2763,7 @@ make helpless
displays this help using the less pager.
make doc
- produces all documentation, requires Latexmk and Pandoc,
- (as well as grep and file output redirection ">")
+ produces all documentation, requires Latexmk and Pandoc.
make all
produces all documentation, then creates xint.tds.zip.
@@ -2621,12 +2772,16 @@ make xint.tds.zip
same as "make all"
make xint.pdf
- extracts files and produces xint.pdf, using latex and dvipdfmx.
- Requires Latexmk.
+ extracts files and produces xint.pdf (user manual),
+ using latex and dvipdfmx. Requires Latexmk.
make sourcexint.pdf
- extracts files and produces sourcexint.pdf, using latex, makeindex
- and dvipdfmx. Requires Latexmk (as well as grep and file ">" redirection).
+ extracts files and produces sourcexint.pdf (source code),
+ using latex and dvipdfmx. Requires Latexmk.
+
+make xint-all.pdf
+ extracts files and produces xint-all.pdf (manual + code),
+ using latex and dvipdfmx. Requires Latexmk.
make CHANGES.html
requires Pandoc.
@@ -2692,15 +2847,14 @@ packages = xintkernel.sty xintcore.sty xint.sty xintfrac.sty xintexpr.sty\
# specified. Notice that if "make -f Makefile.mk" is executed, this will
# actually extract again Makefile.mk which will be overwritten but this
# does not seem to be problematic.
-extracted = $(packages) xint.tex xint.ins README.md CHANGES.md doHTMLs.sh
+extracted = $(packages) xint.tex sourcexint.tex xint-all.tex\
+ README.md CHANGES.md xint-dates.txt doHTMLs.sh
filesfortex = $(packages)
filesforsource = xint.dtx Makefile
filesfordoc = xint.pdf sourcexint.pdf README.md CHANGES.html
auxiliaryfiles = xint.dvi xint.aux xint.toc xint.log\
- sourcexint.dvi sourcexint.aux sourcexint.toc sourcexint.log
-xint_cmd = latexmk xint
-sourcexint_cmd = latexmk -jobname=sourcexint\
- -latex='latex %O "\chardef\dosourcexint=1 \input{%S}"' xint.tex
+ sourcexint.dvi sourcexint.aux sourcexint.toc sourcexint.log\
+ xint-all.dvi xint-all.aux xint-all.toc xint-all.log
all: $(extracted) doc xint.tds.zip
@echo 'make all done.'
@@ -2708,21 +2862,21 @@ all: $(extracted) doc xint.tds.zip
$(extracted): xint.dtx
etex xint.dtx
-xint-dates.txt: CHANGES.md
- grep '^`[1-9].* (.*/.*/.*)`$$' CHANGES.md > xint-dates.txt
- rm -f sourcexint.dvi
-
doc: xint.pdf sourcexint.pdf CHANGES.html
@echo 'make doc done.'
xint.pdf: xint.dtx xint.tex
- $(xint_cmd)
+ latexmk xint.tex
dvipdfmx xint.dvi
-sourcexint.pdf: xint.dtx xint.tex xint-dates.txt
- $(sourcexint_cmd)
+sourcexint.pdf: xint.dtx sourcexint.tex
+ latexmk sourcexint.tex
dvipdfmx sourcexint.dvi
+xint-all.pdf: xint.dtx xint-all.tex
+ latexmk xint-all.tex
+ dvipdfmx xint-all.dvi
+
CHANGES.html: CHANGES.md doHTMLs.sh
chmod u+x doHTMLs.sh && ./doHTMLs.sh
@@ -2776,12 +2930,13 @@ uninstalllocal:
clean:
rm -fr auto/ TEMP*/
rm -f $(auxiliaryfiles)\
+ xint-all.fls xint-all.fdb_latexmk\
sourcexint.fls sourcexint.fdb_latexmk\
xint.fls xint.fdb_latexmk
cleanall: clean
rm -f $(extracted) CHANGES.html xint-dates.txt \
- xint.pdf sourcexint.pdf xint.tds.zip xint.zip Makefile.mk
+ xint.pdf sourcexint.pdf xint-all.pdf xint.tds.zip xint.zip Makefile.mk
%</makefile>$-----------------------------------------------------
%<*dohtmlsh>------------------------------------------------------
#! /bin/sh
@@ -2804,42 +2959,94 @@ pandoc -o CHANGES.html -s --toc -V highlighting-css=' body{margin: 0; margin-
#TOC {float: right; position: relative; top: 100px; margin-bottom: 100px; margin-left: 20px;}' CHANGES.md
%</dohtmlsh>------------------------------------------------------
-%<*drv>-----------------------------------------------------------
-%% Extracting files (but you have done that already probably):
-%% - etex xint.dtx
-%%
-%% To produce manually xint.pdf from extracted xint.tex (and other files):
-%% - latex xint.tex (thrice)
-%% - dvipdfmx xint.dvi
-%% Or xelatex thrice on xint.tex, or pdflatex thrice (produces bigger sized
-%% pdf).
+%<*xintdrv>-----------------------------------------------------------
+%% To extract files:
+%% (but this is probably already done as you read this one)
+%% etex xint.dtx
%%
-%% To produce manually sourcexint.pdf from extracted xint.tex (and other files):
-%% - grep '^`[1-9].* (.*/.*/.*)`$' CHANGES.md > xint-dates.txt
-%% - latexmk -jobname=sourcexint\
-%% -latex="latex %O \\\\chardef\\\\dosourcexint=1 \\\\input{%S}"\
-%% xint.tex
-%% - dvipdfmx sourcexint.dvi
+%% Then execute:
+%% make --file=Makefile.mk xint.pdf
%%
+%% Alternative for build without `make':
+%% latexmk xint.tex
+%% dvipdfmx xint.dvi
%% (quoting in the above may need shell-dependant changes)
%%
-%% To get xint.pdf to include also the source code:
-%% - replace 1 by 0 in \chardef\NoSourceCode line below,
-%% - make clean then make xint.pdf
+%% One can also tell latexmk to use xelatex or pdflatex.
+%% Or use one of them directly enough times on xint.tex.
%%
-%% This will use latexmk. Without it execute latex thrice on xint.tex then
-%% dvipdfmx. Don't forget producing xint-dates.txt via the grep command.
+%% To produce the documented source code sourcexint.pdf:
+%% make --file=Makefile.mk sourcexint.pdf
+%% (check sourcexint.tex for alternatives to `make')
+%%
+%% To produce xint-all.pdf with both user doc and source code:
+%% make --file=Makefile.mk xint-all.pdf
+%% (check xint-all.tex for alternatives to `make')
\NeedsTeXFormat{LaTeX2e}
\ProvidesFile{xint.tex}%
-[\xintbndldate\space v\xintbndlversion\space driver file for xint documentation (JFB)]%
-\PassOptionsToClass{a4paper,fontsize=10pt}{scrdoc}
-\chardef\NoSourceCode 1 % set it to 0 if source code inclusion desired
+[\xintbndldate\space v\xintbndlversion\space xint documentation (JFB)]%
+\PassOptionsToClass{a4paper,fontsize=10pt}{scrartcl}
+\chardef\NoSourceCode 1
\input xint.dtx
%%% Local Variables:
%%% mode: latex
%%% TeX-PDF-from-DVI: "Dvipdfmx"
%%% End:
-%</drv>-----------------------------------------------------------
+%</xintdrv>-----------------------------------------------------------
+%<*sourcedrv>-----------------------------------------------------------
+%% To extract files:
+%% (but this is probably already done as you read this one)
+%% etex xint.dtx
+%%
+%% Then execute:
+%% make --file=Makefile.mk sourcexint.pdf
+%%
+%% Alternative for build without `make':
+%% latexmk sourcexint.tex
+%% dvipdfmx sourcexint.dvi
+%%
+%% One can intruct latexmk (see its documentation) to use xelatex
+%% or pdflatex, or use them directly on sourcexint.tex.
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesFile{sourcexint.tex}%
+[\xintbndldate\space v\xintbndlversion\space xint commented code (JFB)]%
+\PassOptionsToClass{a4paper,fontsize=10pt}{scrartcl}
+\chardef\NoSourceCode=0\chardef\dosourcexint=1
+\input xint.dtx
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-PDF-from-DVI: "Dvipdfmx"
+%%% End:
+%</sourcedrv>-----------------------------------------------------------
+%<*alldrv>-----------------------------------------------------------
+%% To extract files:
+%% (but this is probably already done as you read this one)
+%% etex xint.dtx
+%%
+%% Then execute:
+%% make --file=Makefile.mk xint-all.pdf
+%%
+%% Alternative for build without `make':
+%% latexmk xint-all.tex
+%% dvipdfmx xint-all.dvi
+%%
+%% One can intruct latexmk (see its documentation) to use xelatex
+%% or pdflatex, or use them directly on xint-all.tex.
+%%
+%% Another way is to run latex (enough times, then dvipdfmx) or
+%% pdflatex directly on source file xint.dtx. The produced xint.pdf
+%% will then combine user manual and commented source code.
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesFile{xint-all.tex}%
+[\xintbndldate\space v\xintbndlversion\space xint user plus source doc (JFB)]%
+\PassOptionsToClass{a4paper,fontsize=10pt}{scrartcl}
+\chardef\NoSourceCode=0
+\input xint.dtx
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-PDF-from-DVI: "Dvipdfmx"
+%%% End:
+%</alldrv>-----------------------------------------------------------
%<*dtx>-----------------------------------------------------------
^^Bfi^^Begroup
\chardef\noetex 0
@@ -2855,11 +3062,10 @@ pandoc -o CHANGES.html -s --toc -V highlighting-css=' body{margin: 0; margin-
\chardef\extractfiles 1 % 1 = extract and typeset, 2 = only typeset
\chardef\NoSourceCode 0 % 0 = include source code, 1 = do not
\NeedsTeXFormat{LaTeX2e}%
- \PassOptionsToClass{a4paper,fontsize=10pt}{scrdoc}%
+ \PassOptionsToClass{a4paper,fontsize=10pt}{scrartcl}%
\else
- % latex/pdflatex/xelatex on xint.tex
+ % latex/pdflatex/xelatex on xint.tex or sourcexint.tex or xint-all.tex
\chardef\extractfiles 2 % no extractions, but typeset
- % \NoSourceCode is set-up in xint.tex
\fi
\ProvidesFile{xint.dtx}[bundle source (\xintbndlversion, \xintbndldate) %
and documentation (\xintdocdate)]%
@@ -2887,15 +3093,16 @@ pandoc -o CHANGES.html -s --toc -V highlighting-css=' body{margin: 0; margin-
\Msg{* \space\space\space\space xintlog.sty^^J}%
\Msg{*^^J}%
\Msg{* Rename Makefile.mk to Makefile if the latter is absent^^J}%
-\Msg{* (or use --file=Makefile.mk option to "make") then "make help"^^J}%
-\Msg{* provides information on targets. In particular:^^J}%
-\Msg{* - the "doc" target builds all documentation,^^J}%
+\Msg{* (or use --file=Makefile.mk option of "make")^^J}%
+\Msg{* then "make help" will provide information.^^J}%
+\Msg{* In particular:^^J}%
+\Msg{* - the "doc" target builds xint.pdf and sourcexint.pdf,^^J}%
\Msg{* - the "xint.tds.zip" target additionally prepares a TDS-compliant^^J}%
\Msg{*\space\space\space archive.^^J}%
-\Msg{* This requires Latexmk (for xint.pdf and sourcexint.pdf) and Pandoc^^J}%
-\Msg{* (for CHANGES.html).^^J}%
+\Msg{* Building with "make" requires "Latexmk".^^J}%
+\Msg{* The target "CHANGES.html" requires "Pandoc".^^J}%
\Msg{*^^J}%
-\Msg{* Or check instructions in xint.tex for manual compilation.^^J}%
+\Msg{* Instructions for builds without "make" are in file xint.tex.^^J}%
\Msg{*^^J}%
\Msg{* Happy TeXing!^^J}%
\Msg{*^^J}%
@@ -2915,6 +3122,7 @@ pandoc -o CHANGES.html -s --toc -V highlighting-css=' body{margin: 0; margin-
\generate{\nopreamble\nopostamble
\file{README.md}{\from{xint.dtx}{readme}}
\file{CHANGES.md}{\from{xint.dtx}{changes}}
+ \file{xint-dates.txt}{\from{xint.dtx}{dates}}
% pure tex will use ^^I notation for TAB character, don't want that.
% anyway, since 2021/05/30, tex xint.dtx has been made a no-op.
% there is a problem with xelatex, it generates ^^I if not with -8bit
@@ -2922,7 +3130,9 @@ pandoc -o CHANGES.html -s --toc -V highlighting-css=' body{margin: 0; margin-
\file{doHTMLs.sh}{\from{xint.dtx}{dohtmlsh}}
\usepreamble\defaultpreamble
\usepostamble\defaultpostamble
- \file{xint.tex}{\from{xint.dtx}{drv}}
+ \file{xint.tex}{\from{xint.dtx}{xintdrv}}
+ \file{sourcexint.tex}{\from{xint.dtx}{sourcedrv}}
+ \file{xint-all.tex}{\from{xint.dtx}{alldrv}}
\file{xintkernel.sty}{\from{xint.dtx}{xintkernel}}
\file{xinttools.sty}{\from{xint.dtx}{xinttools}}
\file{xintcore.sty}{\from{xint.dtx}{xintcore}}
@@ -2940,6 +3150,12 @@ pandoc -o CHANGES.html -s --toc -V highlighting-css=' body{margin: 0; margin-
\ifnum\extractfiles=0 % no LaTeX, files now extracted. Stop.
\MessageDeFin\expandafter\end
\fi
+\ifnum\extractfiles=1 % direct run on xint.dtx
+ \expandafter\def\expandafter\MessageDeFin\expandafter{\MessageDeFin
+\Msg{* Direct latex run on xint.dtx: please repeat at least 3 times.^^J}%
+\Msg{********************************************************************^^J}%
+}%
+\fi
\ifnum\extractfiles=3 %
\newlinechar10
\errhelp{Extraction must be done via an engine with e-TeX extensions.^^J%
@@ -2954,11 +3170,26 @@ pandoc -o CHANGES.html -s --toc -V highlighting-css=' body{margin: 0; margin-
%-----------------------------------------------------------------
% -*- coding: utf-8; mode: latex, fill-column: 78; -*-
%
-\ifdefined\dosourcexint % this toggle is set from make sourcexint.pdf rule
+\makeatletter
+% counts used in particular in the samples from the documentation of the
+% xintseries.sty package
+\newcount\cnta
+\newcount\cntb
+\newcount\cntc
+
+\ifdefined\dosourcexint
\chardef\NoSourceCode 0
\else
\chardef\dosourcexint 0
\fi
+% \dosourcexint=1 means producing only source code.
+% It is set in sourcexint.tex. Prior to 1.4l it was
+% set in the call with latexmk + \input syntax.
+%
+% \dosourcexint=0 and \NoSourceCode=1 : include only user doc
+% \dosourcexint=0 and \NoSourceCode=0 : combine user doc and source code
+% \dosourcexint=1 and \NoSourceCode=1 : never happens but would mean to do
+% nothing!
% default is to assume latex + dvipdfmx
\chardef\Withdvipdfmx 1
@@ -2976,58 +3207,144 @@ pandoc -o CHANGES.html -s --toc -V highlighting-css=' body{margin: 0; margin-
\fi
% Get rid of HARASSMENT by KOMA-Script
-\makeatletter
\def\class@shoulddisablepackagewarning@list{tocloft.}
-\makeatother
\ifnum\Withdvipdfmx=1
\def\pgfsysdriver{pgfsys-dvipdfm.def}
-\documentclass [dvipdfm, dvipdfmx, dvipdfmx-outline-open]{scrdoc}
+\documentclass [dvipdfm, dvipdfmx, dvipdfmx-outline-open]{scrartcl}
\else
-\documentclass {scrdoc}
+\documentclass {scrartcl}
\fi
+%%% START OF CUSTOM doc.sty LOADING (May 21, 2022)
+%
+% For some legacy reason (because I started like this and it
+% worked to my satisfaction) I had used scrdoc.cls all those
+% years, without in fact needing most of its features.
+%
+% It loads ltxdoc class, from which again I need very little. On
+% testing May 20, 2022 the upcoming LaTeX 2022-06-01 I had some
+% problems with ltxdoc not having suitable interface for rolling
+% back to doc=V2.
+%
+% I did experiment with indices for sourcexint.pdf from 2018 to
+% 2019 but it made the build process significantly lengthier,
+% created heavy-sized PDF, had various issues in my context
+% (possibly the kind of issues doc V3 addresses about indexing
+% non-macro things, hyperlinks,...), and these indices basically
+% had not any real use as PDF search proves efficient enough,
+% and the structures of local tables of contents makes for
+% agreeable enough navigation via the input mark-up using
+% sectioning commands.
+%
+% Thus it turns out I need very little of doc.sty, and almost
+% nothing of ltxdoc.cls and scrdoc.cls.
+%
+% Let's load the doc=V2 version to avoid having to work around
+% hypdoc loading interfering with my use of hyperref and as said
+% above I don't need the hyperlinked cross-referencing as I have
+% it via my own mark-up to a sufficiently good enough extent,
+% and this holds for many many years. And I will not now change
+% my mark-up.
+\ifdefined\IfFormatAtLeastTF
+ \IfFormatAtLeastTF{2022/06/01}%
+ {%
+ \IfFileExists{doc-2021-06-01.sty}%
+ {\usepackage{doc}[=v2]}%
+% Why on earth do I lose my time doing this?
+ {\GenericError
+ {(xint build doc)\@spaces}%
+ {xint build error: %
+ Your LaTeX installation seems to be broken, format is\MessageBreak
+ 2022-06-01 or later but `doc' package in its `v2' version\MessageBreak
+ seems to not be available. \space Will try with `doc' but if\MessageBreak
+ its `v3' is used there will be an option clash error\MessageBreak
+ regarding hyperref.}%
+ {}%
+ {Please make sure `doc' package matches your LaTeX format.}%
+ \usepackage{doc}%
+ }%
+ }%
+ {\usepackage{doc}}%
+\else
+\usepackage{doc}
+\fi
+
+% And let's keep from ltxdoc only some minimal stuff
+% Page geometry is set by geometry package and a4paper option from
+% xint.tex file.
+\AtBeginDocument{\MakeShortVerb{\|}}
+\DeclareFontShape{OT1}{cmtt}{bx}{n}{<-> ssub * cmtt/m/n}{}
+\DeclareFontFamily{OMS}{cmtt}{\skewchar\font 48} % '60
+\DeclareFontShape{OMS}{cmtt}{m}{n}{<-> ssub * cmsy/m/n}{}
+\DeclareFontShape{OMS}{cmtt}{bx}{n}{<-> ssub * cmsy/b/n}{}
+\DeclareFontShape{OT1}{cmss}{m}{it}{<->ssub*cmss/m/sl}{}
+\CodelineNumbered
+\DisableCrossrefs
+\setcounter{StandardModuleDepth}{1}
+\def\cmd#1{\cs{\expandafter\cmd@to@cs\string#1}}
+\def\cmd@to@cs#1#2{\char\number`#2\relax}
+\DeclareRobustCommand\cs[1]{\texttt{\bslash#1}}% was \char`\\
+\providecommand\marg[1]{%
+ {\ttfamily\char`\{}\meta{#1}{\ttfamily\char`\}}}
+\providecommand\oarg[1]{%
+ {\ttfamily[}\meta{#1}{\ttfamily]}}
+\providecommand\parg[1]{%
+ {\ttfamily(}\meta{#1}{\ttfamily)}}
+\@addtoreset{CodelineNo}{part}
+% \def\partname{File}% j'utilise Part défini plus bas
+% Je n'utilise pas d'index en fait
+\gdef\codeline@wrindex#1{\if@filesw
+ \begingroup
+ \let\protect\noexpand
+ \immediate\write\@indexfile
+ {\string\indexentry{#1}%
+ {\filesep\number\c@CodelineNo}}%
+ \endgroup\fi}
+\let\filesep\@empty
+
+% There is very little we seem to need from the scrdoc extras:
+% Page geometry is set by geometry package and a4paper option from
+% xint.tex file. So it seems I only need (perhaps) this hologo thing:
+\usepackage{hologo}
+\DeclareRobustCommand*{\eTeX}{\hologo{eTeX}}%
+%
+%%% END OF CUSTOM LOADING OF PACKAGE doc.sty V2
+
% Remove from sectioning commands insertion of marks, because we
% will do it ourself.
\usepackage{etoolbox}
-\makeatletter
\patchcmd{\@sect}%
{\expandafter\csname#1mark\expandafter\endcsname\expandafter{\@currentheadentry}}%
- {}{}{}
+ {}{}{\Error@CouldNotApplyFirstPatch@sect}
\patchcmd{\@sect}%
{\expandafter\csname#1mark\expandafter\endcsname\expandafter{\@currentheadentry}}%
- {}{}{}
+ {}{}{\Error@CouldNotApplySecondPatch@sect}
% This one now needed too, Jeudi 30 janvier 2020
% \expandafter \ifx \csname #1mark\endcsname \@gobble \@mkboth {}{}\else
% \csname #1mark\expandafter \endcsname \expandafter {\@currentheadentry }\fi
% \@gobble est long donc simplement
\def\partmark #1{}%
-\makeatother
-
-
-\makeatletter
-\PassOptionsToPackage{bookmarks=true}{hyperref}
-
\ifnum\NoSourceCode=1
\OnlyDescription
\fi
-% counts used in particular in the samples from the documentation of the
-% xintseries.sty package
-\newcount\cnta
-\newcount\cntb
-\newcount\cntc
-
\pagestyle{headings}
\ifxetex
\else
\usepackage[T1]{fontenc}
+% je suis passé à utf8 le 28 février 2016
\usepackage[utf8]{inputenc}
+% (2016/12/08): utilisé où ?
+% (2018/05/22): utilisé dans les commentaires de la division de xint.sty
\DeclareUnicodeCharacter{03B4}{\ensuremath{\delta}}%δ
+% pour exemple de \xintnewdummy
\DeclareUnicodeCharacter{03BE}{\ensuremath{\xi}}%ξ
+% (2019/03/31): utilisé dans mes commentaires de xinttrig.sty
\DeclareUnicodeCharacter{03C0}{\ensuremath{\pi}}%π
+% (2019/04/24): utilisé dans un commentaire de xintlog.sty
\DeclareUnicodeCharacter{2260}{\ensuremath{\neq}}%≠
\fi
@@ -3048,6 +3365,7 @@ pandoc -o CHANGES.html -s --toc -V highlighting-css=' body{margin: 0; margin-
\fi
\usepackage{pifont}% for \ding{73} (hollow star)
+% needed also for build of sourcexint.pdf
\usepackage{xinttools}
\usepackage{enumitem}
@@ -3058,8 +3376,14 @@ pandoc -o CHANGES.html -s --toc -V highlighting-css=' body{margin: 0; margin-
\usepackage{graphicx}
\usepackage[english]{babel}
-\usepackage[autolanguage,np]{numprint}
-\AtBeginDocument{\npthousandsep{,\hskip .5pt plus .1pt minus .1pt}}
+
+% 2022/05/24: appears to not be used anywhere anymore in the doc
+% \usepackage[autolanguage,np]{numprint}
+% \AtBeginDocument{\npthousandsep{,\hskip .5pt plus .1pt minus .1pt}}
+
+% But surprisingly it is via numprint that I was loading array package
+% whose extended syntax for tabular preambles is used...
+\usepackage{array}
\usepackage[dvipsnames,svgnames]{xcolor}
\definecolor{xintnamecolor}{RGB}{228,57,0}
@@ -3133,7 +3457,6 @@ pandoc -o CHANGES.html -s --toc -V highlighting-css=' body{margin: 0; margin-
% SNUGFRAMED
% ==========
-\makeatletter
\newenvironment{snugframed}{%
\fboxsep \dimexpr2\fontcharwd\font`X\relax
\advance\linewidth-2\fboxsep
@@ -3146,12 +3469,11 @@ pandoc -o CHANGES.html -s --toc -V highlighting-css=' body{margin: 0; margin-
\MakeFramed {\advance\hsize-\width \@totalleftmargin\z@ \linewidth\hsize
\@setminipage}%
}{\par\unskip\@minipagefalse\endMakeFramed}
-\makeatother
% HYPERREF
% ========
-\usepackage[pdfencoding=unicode]{hyperref}
+\usepackage{hyperref}
\hypersetup{%
linktoc=all,%
@@ -3168,9 +3490,11 @@ pdfpagemode=UseNone,%
}
\usepackage{hypcap}
+
\ifnum\dosourcexint=1
-\hypersetup{pdftitle={The xint packages source code}}
+\hypersetup{pdftitle={The xintexpr and allied packages source code}}
\fi
+
\usepackage{bookmark}
% FONTS
@@ -3179,16 +3503,13 @@ pdfpagemode=UseNone,%
\usepackage[zerostyle=a,straightquotes,scaled=0.95]{newtxtt}
\usepackage{newtxmath}
-\makeatletter
-\makeatother
-
\ifnum\dosourcexint=1
\else
-\renewcommand\familydefault\ttdefault
-\usepackage[noendash]{mathastext}% pas de endash dans newtxtt
+ \renewcommand\familydefault\ttdefault
+ \usepackage[noendash]{mathastext}% pas de endash dans newtxtt
\fi
\frenchspacing
% sans-serif in footnotes, TOC, titles, etc...
@@ -3230,7 +3551,6 @@ pdfpagemode=UseNone,%
\newdimen\margegauchetoc
\AtBeginDocument{\margegauchetoc \dimexpr 5\fontcharwd\font`X\relax}
-\makeatletter
\etocsetstyle{subsection}
{\begingroup\normalfont
\setlength{\premulticols}{0pt}%
@@ -3280,8 +3600,6 @@ pdfpagemode=UseNone,%
\let\HOOKLOCALTOC\empty% quick hack to get style I want in User defined functions
\etocsetlevel{table}{6}
-\makeatother
-
\addtocontents{toc}{\protect\hypersetup{hidelinks}}
% =====================
@@ -3294,27 +3612,27 @@ pdfpagemode=UseNone,%
% \fexpan 22 octobre 2013
\newcommand\fexpan {\hyperref[ssec:expansions]{\textit{f}-expan}}
+% \xexpan ajouté 28 mai 2022
+\newcommand\xexpan {\hyperref[ssec:expansions]{\textit{x}-expan}}
% Septembre 2015
% Address updated to github repo's one, May 2018
+% They did s/master/main/ already a few years back, May 2022
\def\liiibigint
- {\href{https://github.com/latex3/latex3/tree/master/l3trial/l3bigint}{l3bigint}}
+ {\href{https://github.com/latex3/latex3/tree/main/l3trial/l3bigint}{l3bigint}}
+
+% May 2022
+\def\liiistrformat
+% {\href{https://github.com/latex3/latex3/tree/main/l3experimental/l3str}{l3str}}
+ {\href{https://ctan.org/pkg/l3experimental}{l3str-format}}
+%\def\liiistrformatnew
+% {\href{https://github.com/latex3/latex3/tree/main/l3trial/l3str-format-new}{l3str-format-new}}
-% \fixmeaning
-\makeatletter
-% \def\fixmeaning {\expandafter\fix@meaning\meaning}
-% \expandafter\edef\expandafter\fix@meaning
-% \expandafter #\expandafter1\string\romannumeral#2#3%
-% {#1\string\romannumeral`\string^\string^@}
-% Pour 1.4
-\let\fixmeaning\meaning
-\makeatother
% Margin Notes
% ============
% Nothing here can be used in vertical mode directly.
-\makeatletter
\def\MyMarginNote {\@ifnextchar[\@MyMarginNote{\@MyMarginNote[]}}%
\let\inmarg\MyMarginNote
% \smash needs \hbox here since LaTeX 2018/12/01
@@ -3435,7 +3753,6 @@ pdfpagemode=UseNone,%
\kern\dimexpr\FrameSep+\FrameRule\relax}}}%
\vskip\dp\strutbox }\strut\@esphack}
-\makeatother
% \centeredline: OUR OWN LITTLE MACRO FOR CENTERING LINES
% =======================================================
@@ -3452,7 +3769,6 @@ pdfpagemode=UseNone,%
% Note (2020): somewhat obsoleted for many years by my usage of
% everbatim and everbatim* environments.
-\makeatletter
\newif\ifinlefted
\newcommand*\leftedline {%
@@ -3469,15 +3785,12 @@ pdfpagemode=UseNone,%
\bgroup
\aftergroup\leftedline@ }
-\makeatother
-
% verbatim macros and environments
% ================================
%
% June 2013, then October 2014.
% -----------------------------
%
-\makeatletter
\catcode`_ 11
% some of my verbatim environments do not make the space active (\lverb e.g.). Then
@@ -3596,7 +3909,6 @@ pdfpagemode=UseNone,%
\AtBeginDocument {\SetSoftWrapIcon }% ok car ttzfamily déjà fait
\catcode`_ 8
-\makeatother
% everbatim environment
% =====================
@@ -3613,7 +3925,6 @@ pdfpagemode=UseNone,%
% Verbatim with an \everypar hook, mainly to have background color, followed by
% execution of the contents (not limited by a group-scope)
-\makeatletter
\catcode`_ 11
\def\everbatim {\s@everbatim\@everbatim}
@@ -3649,7 +3960,8 @@ pdfpagemode=UseNone,%
}%
\obeylines \@vobeyspaces
}
-\def\everbatimtop {\MacroFont \small}%
+% 27 mai 2022, plus de \small
+\def\everbatimtop {\MacroFont }%
\let\everbatimhook\empty
\def\everbatimeverypar{\strut
{\color{everbatimbgcolor}\vrule\@width\linewidth }%
@@ -3762,6 +4074,8 @@ pdfpagemode=UseNone,%
% source, this can be changed by \everbhook.
% " comme caractère d'échappement. Par exemple pour colorier des parties.
+% Le "" redonne à { et } leurs catcodes normaux mais attention c'est
+% alors à utiliser avec un terminateur ;! pour la partie concernée
\def\restoreeverbhook{\def\everbhook{%
\def\"{\begingroup\catcode123 1 \catcode 125 2 \everbescape }%
\catcode`\" 0 \catcode`\@ 14
@@ -3786,14 +4100,12 @@ pdfpagemode=UseNone,%
}%
\catcode`_8
-\makeatother
% \printnumber
% ============
\catcode`_ 11
-\makeatletter
\catcode`& 3
\def\allowsplits_a {\futurelet\printnumber_token\allowsplits_b }%
\def\allowsplits_b{\ifx\printnumber_token\@sptoken\space\fi\allowsplits_c }
@@ -3808,7 +4120,6 @@ pdfpagemode=UseNone,%
\hyphenpenalty \z@
\catcode`& 4
-\makeatother
\catcode`_ 8
% Parameters for lists
@@ -3882,6 +4193,10 @@ pdfpagemode=UseNone,%
\newcommand\prec[1]{\hyperlink{\detokenize{prec-#1}}{#1}}
\newcommand\precdesc[1]{\item[\texttt{#1}]\hypertarget{\detokenize{prec-#1}}{}\leavevmode}%
+%\let\var\relax % défini par koma-script-source-doc que scrdoc
+ % utilise avec LaTeX 2022/06/01
+ % mais finalement je n'utilise plus scrdoc/ltxdoc
+ % mais doc directement.
\newcommand\var[1]{\hyperlink{\detokenize{var-#1}}{#1}}
\newcommand\vardesc[1]{\item[#1]\hypertarget{\detokenize{var-#1}}{}}%
@@ -3922,7 +4237,6 @@ pdfpagemode=UseNone,%
{TOC}%
\xspace }%
-\makeatletter
\protected\def\MakeNameUp#1{%
\ifcsname #1nameUp\endcsname
\expandafter\@firstoftwo\else
@@ -3932,7 +4246,6 @@ pdfpagemode=UseNone,%
{\ifinheader\fbox{\textup{#1}}\else#1\fi}%
{#1}%
}
-\makeatother
\newif\ifinheader
% doit être protégé
\protected\def\inheadertrue{\let\ifinheader\iftrue}
@@ -3957,18 +4270,19 @@ pdfpagemode=UseNone,%
% ===============
% \ttzfamily done at begin document
-\newcommand\ctanpackage[1]{\href{https://ctan.org/pkg/#1}{#1}}
+\DeclareRobustCommand\ctanpackage[1]{\href{https://ctan.org/pkg/#1}{#1}}
+\makeatother
\begin{document}\thispagestyle{empty}
\pdfbookmark[1]{Title page}{TOP}
\def\partname{Part}
\addto\captionsenglish{\def\partname{Part}}
{%
-\normalfont\Large\parindent0pt \parfillskip 0pt\relax
- \leftskip 2cm plus 1fil \rightskip 2cm plus 1fil
+\normalfont\Huge\parindent0pt \parfillskip 0pt\relax
+ \leftskip 0cm plus 1fil \rightskip 0cm plus 1fil
\ifnum\dosourcexint=1
- The \xintnameimp packages source code\par
+ The \xintexprnameimp and allied packages source code\par
\gdef\DOCxintfrontpage
{\texorpdfstring
{\hyperref[frontpage]{\relax{\color{xintnameimpcolor}TOC}}}%
@@ -4001,8 +4315,9 @@ pdfpagemode=UseNone,%
\def\DOCxintexprmacros
{\texorpdfstring
- {\hyperref[sec:oldxintexpr]{\relax{\color{xintnamecolor}\MakeNameUp{xintexpr}}}}%
- {xintexpr}%
+ {\hyperref[sec:oldxintexpr]{\relax{\color{xintnamecolor}\MakeNameUp{xintexpr
+ (old doc)}}}}%
+ {xintexpr (old doc)}%
\xspace }%
\def\DOCexamples
@@ -4024,11 +4339,18 @@ pdfpagemode=UseNone,%
\DOCxintfrontpage,
\DOCxintexprintro,
\xintexprname,
+ \DOCxintexprmacros,
\xinttrigname,
\xintlogname,
+ \xinttoolsname,
+ \DOCexamples,
\csname xint bundlename\endcsname}}
\markboth{\makebox[0pt]{\xintRunningHeader}}{\makebox[0pt]{\xintRunningHeader}}
+% 18 mai 2019, turned into an environment 27 mai 2022
+\newenvironment{TeXnote}{\par\small\medskip\noindent\textbf{\TeX hackers note:
+ }}{\par\medskip}
+
% Skips safely.
\ifnum\dosourcexint=1
\catcode`+ 0 \catcode0 9 % n'importe quoi sauf 15 (car ^^@)
@@ -4036,8 +4358,7 @@ pdfpagemode=UseNone,%
+expandafter+iffalse+fi
\fi
%
-
-\newcommand\TeXnote{\par\smallskip\textbf{\TeX hackers note: }}
+\makeatletter
\etocsetlevel{toctobookmark}{6}
@@ -4061,26 +4382,116 @@ pdfpagemode=UseNone,%
\etocsettagdepth {implementation}{none}
\etocsettocdepth{subsection}
+%% Legacy etoc style for part, we add an improvement to get "Part" hyperlinked
+%% `part':
+\etocsetstyle{part}
+ {\addpenalty\@M\etocskipfirstprefix}
+ {\addpenalty\@secpenalty}
+ {\begingroup
+ \etocfontminusone
+ \addvspace{\etocsepminusone}%
+ \parindent \z@
+ \leftskip \etocminusoneleftmargin
+ \rightskip \etocminusonerightmargin
+ \parfillskip \@flushglue
+ % original from etoc :
+ %\vbox{\etocifnumbered{\etocpartname\enspace\etocnumber.\quad}{}...}
+ \vbox{\etocifnumbered{\etoclink{\etocpartname\enspace\etocthenumber.}\quad}{}%
+ \etocname
+ \baselineskip\etocbaselinespreadminusone\baselineskip
+ \par}%
+ \addpenalty\@M\addvspace{\etocsepzero}%
+ \endgroup}
+ {}%
+
+% THIS IS THE FIRST HALF OF THE TOC ON PAGE 1
\tableofcontents
+
+% May 23 2022, some hack to replace the \etocmulticolstyle and
+% have same output except that Part line will use full line width
+%
+% Formerly I used this but the Part was then folded...
+% \etocmulticolstyle [2]{\parskip\z@skip%\raggedcolumns
+% \setlength{\columnsep}{\leftmarginii}%
+% \setlength{\columnseprule}{0pt}%
+% }%
+%
+\etocsetstyle{part}% @minusone in etoc.sty
+ {\addpenalty\@M\etocskipfirstprefix}
+% May 23, 2022
+% Small hack to configure to our taste the TOC for the pdf combining
+% the user manual and the source code. We want a Part III in the TOC,
+% and the sections of Part II with a multicols. We can not open the
+% multicols in the `part' style and have it closed in the 4th argument
+% of \etocsettyle, as it needs to be closed when Part III will be
+% typeset. Thanks to \etocskipfirstprefix we can simply close it
+% in the "EtocPrefix", this \end{multicols} will be skipped for the
+% first one.
+%
+% However, as this closes a group we will use \etocglobaldefs for this
+% toc else \etocname, etc... would not have the good meanings. I think
+% there must be some hack like this in etoc manual.
+ {\end{multicols}%
+ \addpenalty\@secpenalty\addvspace{\etocbelowtocskip}%
+ }
+ {\begingroup % from etoc.sty default Part style
+ \etocfontminusone
+ \addvspace{\etocsepminusone}%
+ \parindent \z@
+ \leftskip \etocminusoneleftmargin
+ \rightskip \etocminusonerightmargin
+ \parfillskip \@flushglue
+ % \etoclink is handy else only the number get hyperlinked
+ \vbox{\etocifnumbered{\etoclink{\etocpartname\enspace\etocthenumber.\quad}}{}\etocname
+ \baselineskip\etocbaselinespreadminusone\baselineskip
+ \par}%
+ \addpenalty\@M\addvspace{\etocsepzero}%
+ \endgroup
+ % now emulate what \etocmulticolstyle would have set-up
+ \let\etocoldpar\par% surely fishy by now but I am copying from
+ % how \etocsettocstyle is used by \etocmulticolstyle
+ \addvspace{\etocabovetocskip}% configured below
+ \multicolpretolerance\etocmulticolpretolerance
+ \multicoltolerance\etocmulticoltolerance
+ \setlength{\columnsep}{\etoccolumnsep}%
+ \setlength{\multicolsep}{\etocmulticolsep}%
+ \begin{multicols}{2}[\parskip\z@skip%\raggedcolumns
+ \setlength{\columnsep}{\leftmarginii}%
+ \setlength{\columnseprule}{0pt}%
+ \etocoldpar
+ %\addvspace{\etocinnertopsep}
+ \addvspace{\etocabovetocskip}]%
+ }%
+ {\end{multicols}\addvspace{\etocbelowtocskip}}%
+
+% this macro is defined by etoc for use in its own display styles
+% like the one from \etocmulticolstyle. We use it manually above.
\renewcommand*\etocabovetocskip{\bigskipamount}
-\makeatletter
-\etocmulticolstyle [2]{\parskip\z@skip%\raggedcolumns
- \setlength{\columnsep}{\leftmarginii}%
- \setlength{\columnseprule}{0pt}%
-}%
+
\makeatother
+
+\etocsettocstyle{}{}
+
\etocsettagdepth {part1A}{none}
\etocsettagdepth {part1B}{none}
\etocsettagdepth {macros} {section}
\ifnum\NoSourceCode=1
\etocsettagdepth {implementation}{none}
\else
- \etocsettagdepth {implementation}{section}
+ \ifnum\dosourcexint=1
+ \etocsettagdepth {implementation}{section}
+ \else
+ \etocsettagdepth {implementation}{part}
+ \fi
\fi
-\vspace*{2\baselineskip}
+% seems unneeded now
+%\vspace*{2\baselineskip}
+% THIS IS THE SECOND HALF OF THE TOC ON PAGE 1, WITH PARTS II AND III
+\etocglobaldefs
\tableofcontents
+\etoclocaldefs
\etocignoredepthtags
@@ -4258,7 +4669,7 @@ pdfpagemode=UseNone,%
precision. It works both with Plain \TeX\ and with \LaTeX.
\xinttrigname and \xintlogname are loaded automatically by \xintexprname;
- they can not be loaded directly via a separate |\usepackage| (in \LaTeX).
+ they should not be loaded directly via a separate |\usepackage| (in \LaTeX).
\ctanpackage{poormanlog} is a \TeX{} and
\LaTeX{} package by the author which is loaded automatically by \xintlogname.
@@ -4272,7 +4683,6 @@ pdfpagemode=UseNone,%
\vfill
\clearpage
-
\etocdepthtag.toc {part1A}
\csname Start herenameUp\endcsname
@@ -4282,49 +4692,102 @@ pdfpagemode=UseNone,%
\etocsetnexttocdepth{section}
\localtableofcontents
-\section {Introduction and changes}
+\section {Introduction}
+
+\localtableofcontents
+
+\begin{framed}
+ \emph{\emph{\textsc{Jürgen Gilg}}'s interest into what he called
+ \emph{|"XINT"|} was instrumental in keeping the author motivated
+ over the years.
+% \emph pas compatible avec plusieurs paragraphes !
+ We exchanged on many topics extending beyond \TeX{} and often reacted
+ similarly to private and public events. I knew he was a very kind
+ and devoted person, who took care of the needs of others prior to
+ his own, although he never mentioned it.
+%
+ Jürgen suffered a sudden, unexpected, and deadly stroke in
+ May 2022. I will miss his friendship profundly.}
+\end{framed}
+
+\subsection{Basic usage and purpose}
\begin{itemize}
\item To use with |etex|, |pdftex|, ..., i.e.\@ with \TeX{} engines activating
the e\TeX{} extensions:
\begin{everbatim}
\input xintexpr.sty
-\xintfloateval{sqrt(13), cos(1), exp(13.3)}% uses 16 digits per default
-\xintDigits*:=32;% reload log and trig libraries
-\xintfloateval{sqrt(13), cos(1), exp(13.3)}% now with 32 digits
-\xinteval{2^1000}% exact computations
-\xinteval{reduce(add(1/i, i=1..50))}% dummy variables
\end{everbatim}
\item To use with the \LaTeX{} macro layer (|latex|, |pdflatex|, ...):
\begin{everbatim}
\usepackage{xintexpr}
-% and here you have to wait for \begin{document}...
-% or rather you can start playing immediately:
-\typeout{\xinteval{sqrt(13, 60)}}
\end{everbatim}
\end{itemize}
-\xintexprname is a package to do expandable computations, either exactly with
-arbitrarily big inputs (fractions, arbitrarily long decimal expansions, ...),
-or in the sense of floating point numbers (logarithm, exponential, sine,
-cosine, ...). The math functions are implemented up to \dtt{62} digits of
-precision. The square root (as well of course as the four operations) achieve
-correct rounding in arbitrary precision.
+Some random examples:
+\begin{everbatim*}
+$\sqrt{13}, \cos(1), \exp(13.3) = \xintfloateval{sqrt(13), cos(1), exp(13.3)}$\par
+\end{everbatim*}
+\begin{everbatim*}
+\begin{center}
+ \xintDigits*:=32;% this sets the precision to 32 digits for the math functions
+ \begin{minipage}{34\fontcharwd\font`0}
+ \xintfloateval{sqrt(13), cos(1), exp(13.3)}\par
+ \end{minipage}%
+\end{center}
+\end{everbatim*}
+\begin{everbatim*}
+$2^{1000}=\printnumber{\xinteval{2^1000}}$\par% exact computations
+\end{everbatim*}
+\begin{everbatim*}
+% dummy variables
+\[\sum_{i=1}^{50}\frac1i=\xintTeXFrac{\xinteval{reduce(add(1/i, i=1..50))}}\]
+\end{everbatim*}
+\begin{everbatim*}
+\[\sum_{i=1}^{50}\frac1{i^2}=\xintTeXFrac{\xinteval{reduce(add(1/i^2, i=1..50))}}\]
+\end{everbatim*}
+Computations are done expandably. This means that for example
+\begin{everbatim}
+\typeout{\xinteval{sqrt(13, 70)}}
+\end{everbatim}
+will compute on the fly while writing out to the log file (|\typeout| is
+the \LaTeX\ idiom), here the square root of \dtt{13} correctly rounded
+to \dtt{70} significant digits.
+
+Indeed, \xintexprname is a package to do expandable computations, either
+exactly with arbitrarily big inputs (fractions, arbitrarily long decimal
+expansions, ...), or in the sense of floating point numbers (logarithm,
+exponential, sine, cosine, ...). The math functions are implemented up
+to \dtt{62} digits of precision. The square root (as well of course as
+the four operations) achieve correct rounding in arbitrary precision
+(i.e.\@ even with more than \dtt{62} digits, and may even handle
+thousands of digits but reasonable range is not beyond a few hundreds).
The syntax to modify the precision used for floating point evaluations is
\begin{everbatim}
\xintDigits*:= <Number>;
-\end{everbatim}
-Use the |*| (\csbxint{Digits*}), else the scientific libraries will not be
-reloaded. The current precision is available as \csbxint{theDigits},
+\end{everbatim}\smallskip
+\begin{footnotesize}
+ For reasons of the history of the package, one usually will want to
+ use indeed the |*| (see \csbxint{Digits}), as the more lightweight
+ variant without it does let the four operations and the square root
+ obey the new setting but it does not recalibrate the \xinttrigname and
+ \xintlogname libraries and their built-in constants.\par
+\end{footnotesize}
+The current precision is available as \csbxint{theDigits}, and defaults
+to \dtt{16},
but in this documentation I might be using simply |Digits| to refer to it.
-The tables of the built-in
-\hyperref[tab:precedences]{operators} and \hyperref[tab:functions]{functions}
+The table of \hyperref[tab:precedences]{built-in operators}
+and the one of \hyperref[tab:functions]{built-in functions}
will give a quick overview of the available syntax.
-The simplest way\footnote{I am assuming here Mac OS or Linux,
-adapt to your environment} to test the syntax is to work interactively on the command line
-(this feature is available since April 2021, the version of
+
+\subsection{\ctanpackage{xintsession}}
+
+The simplest way\footnote{I am assuming here in the displayed example a
+ Unixen system, i.e. Mac OS or Linux, adapt to your environment.} to
+test the syntax is to work interactively on the command line (this
+feature is available since April 2021, the version of
\ctanpackage{xintsession} used here is |1.3a|):
\begin{everbatim}
rlwrap etex xintsession
@@ -4366,384 +4829,36 @@ No pages of output.
Transcript written on xintsession.log.
\end{everbatim}
-\medskip
-
-Warning: I don't have the time to maintain perfectly such large documentation.
-In preparing the |1.4| release I may have missed updating some bits
-which got randomly shuffled to new places (at least I did delete large
-sections, which was a hard decision to take, almost breaking the palimpsest
-quality of the document). Reports welcome.%
-%
-\footnote{Thanks to Jürgen Gilg for keeping the author motivated and helping
- proof-read the 1.4 documentation. Sadly, Jürgen passed away unexpectedly in
- 2022. His enthusiasm, kindness, and friendship will be profundly missed.}
-
-\subsection{Breaking changes since the \texttt{1.4} release}
-
-\subsubsection{Breaking changes at the \texttt{1.4k} release}
-
-\begin{enumerate}[noitemsep]
- \item Changed behaviour for nested
- \csbxint{exprSafeCatcodes}/\csbxint{exprRestoreCatcodes}.
- \item The output format of \csbxint{floateval}, which by default is produced
- by \csbxint{PFloat}, has changed once more (!): integers (without
- scientific exponent) get now printed without a trailing "\dtt{.0}".
- Furthermore trailing zeros in the significand are removed only if there are
- at least \dtt{4} of them. This changed behaviour is reversible
- via customizing macros.
- \item \csbxint{Float} now outputs the zero value as
- "\dtt{\xintFloat{0}}". Customizable via \csbxint{FloatZero}.
-\end{enumerate}
-
-\subsubsection{Breaking changes at the \texttt{1.4g} release}
-
-\begin{enumerate}[noitemsep]
- \item Power operators |**| and |^| are now parsed
- in a right associative way:%
-%
- \footnote{Don't try |2^3^4^5| at home. This is BIG.}
-\begin{everbatim*}
-$${({(5^4)}^3)}^2=5^{4\cdot3\cdot2}=\xinteval{((5^4)^3)^2}=\xinteval{5^24}$$
-$$5^{4^{3^2}} = 5^{262144}\approx \xintTeXfromSci{\xintfloateval{5^4^3^2}}$$
-\end{everbatim*}
-
- \item Single character operators |&|, \verb=|=, and |=| (which were
- deprecated since |1.1|) have been removed. Use |&&|, \verb=||= and |==|
- respectively.
-\end{enumerate}
-
-\subsubsection{Breaking changes at the \texttt{1.4f} release}
-
-\begin{enumerate}[noitemsep]
-\item \csbxint{ieval}|{[-D]...}|\IMPORTANT{}
- which quantizes to a multiple of |1eD| when
- |D| is positive now does \emph{NOT append the |D| trailing zeroes anymore}!
-\item \func{float\string_dgt} is the new name of |float_()|, as already
- documented but
- not yet done at |1.4e|.
-\item Powers in \csbxint{floateval} with big exponents are computed with more
- accuracy.
-\item For |Digits| at most \dtt{8}, powers in \csbxint{floateval} with integer
- or half-integer exponents do not use \func{log10}/\func{pow10} method but
- (as for |Digits| at least \dtt{9}) the \csbxint{FloatPower} based approach,
- allowing very big integer of half-integer exponents while keeping accuracy.
-\item Computations with math functions in \csbxint{floateval} at a setting of
- |Digits| higher than \dtt{62} will produce an output limited to the smallest
- of |Digits| and \dtt{64} digits.
-\end{enumerate}
-
-\subsubsection{Breaking changes at the \texttt{1.4e} release}
-
-In principle, I try for breaking changes regarding output to happen only at
-major releases. But it is not as if I had a gigantic user base, and sometimes
-it is needed to move forward; and as the \TeX\ world does not have a
-``pinning'' mechanism like Python's world, the distinction between minor and
-major releases is a bit rhetorical. So |1.4e| behaves like a major release.
-It is not one because a complete rework of the foundations of floating point
-support is needed...
-
-|1.4e| changes the output format used by \csbxint{eval}, \csbxint{ieval}, and
-\csbxint{floateval} (in short all is modified!).
-
-\begin{itemize}
-\item \csbxint{floateval} output macro \csbxint{PFloat} has been modified. In
- particular mantissas are trimmed of trailing zeros.
- {\setbox8\hbox{Integers are printed with a zero after the decimal mark.}%
- \rule[0.5ex]{\wd8}{1pt}\kern-\wd8\box8}\CHANGED{1.4k again}
-\item \csbxint{eval} output macro \csbxint{FracToSci} has been modified,
- regarding the handling of numbers involving a decimal exponent; rather than
- printing out an integer mantissa, it uses scientific notation,
- i.e.\@ more specifically it uses the same conventions as
- \csbxint{PFloat}, but of course without pre-rounding to the |Digits| precision.
- The \csa{xintFracToSciE} macro was removed because \csbxint{PFloatE}
- is used in its place.
-
- Notice though that fractions are still not automatically reduced to lowest
- terms even on output. I hesitated about this, but when for example the
- computation is a large power of an already known to be irreducible fraction,
- it would be a very costly operation to apply \csbxint{Irr} or \csbxint{PIrr}
- to it.
-\item \csbxint{ieval} was modified to use on output
- \csbxint{DecToString}, not \csbxint{FracToSci}.
-
- This means than in case of usage of the |[D]| optional argument with a
- negative |D| (i.e.\@ rounding the output to a multiple of a positive power
- of ten) the output does not use scientific notation but is an integer ending
- with explicit zeros.
-
- Update: at |1.4f| this was changed again.\IMPORTANT{} Now no trailing zeroes
- are added at all!
-
- Nothing was changed to output for the case of a positive |[D]| (i.e.\@
- rounding to |D| figures after decimal point). One now only needs to
- configure the new \csbxint{iexprPrintOne} to be \csbxint{DecToStringREZ} in
- order for trailing zeros in decimal expansions to get trimmed rather than
- there being always exactly |D| figures after decimal point.
-\item Fractional powers are now allowed in \csbxint{eval}; powers with integer
- exponents are still computed exactly of course, except that if the integer
- exponent is \dtt{10000} or more, or if it is is
- evaluated that the output will contain more than (about) \dtt{10000} digits
- (separately for the numerator and denominator),
- then the floating-point branch is taken forcedly. More details on fractional
- powers are available in \xintlogname.
-\item \csa{poormanloghack} is now a no-op; to use the logarithm,
- exponential, and powers based on \ctanpackage{poormanlog}, set Digits to at
- most \dtt{8}. Don't forget the |*| in the |\xintDigits*:=8;| syntax.
- \item The \csbxint{floatexprPrintOne} macro interface has changed, it is now
- to be used with (an expandable) macro either allowing or requiring the
- rounding precision to be present as |[P]|, not |{P}|. Its default
- is the user level \csbxint{PFloat} whose behaviour has changed.
-\end{itemize}
-
-\begin{framed}
- STARTING FROM HERE THE DOCUMENTATION MAY NOT BE UP-TO-DATE AT |1.4e|
- RELEASE, IT MAY CONTAIN OBSOLETE INFORMATION
-\end{framed}
-
-\subsection{Features added since the \texttt{1.4} release}
-
-For bugfixes and possibly more details check |CHANGES.html|:
-\centeredline{|texdoc --list xint|}
-
-
-\begin{itemize}
-\item The most important has been the improved support for logarithm, exponential,
-sine, etc...\@ added at the \texttt{1.4e} release of \texttt{2021/05/05}:
-
-They\NewWith{1.4e !!} are now supported up to \dtt{62} digits and achieve «correct rounding»%
-%
-\footnote{This means that the produced value is the rounding to |Digits|
- significant digits of the theoretical exact mathematical value. The
- rounding mode is currently not customizable and is «rounding to nearest,
- ties go to infinity of same sign».}
-%
-at least
-in \dtt{99\%} of cases%
-%
-\footnote{It is even better than that, but depends a bit on how |Digits| is
- located relative to some thresholds governing Taylor series
- or other approximation means.}
-%
-for |Digits| being at least \dtt{9}.
-
-For Digits up to \dtt{8}, a special more approximate implementation is used,
-and the functions achieve the correct rounding (particularly at |Digits|
-equal to \dtt{8} or \dtt{7}) less often, but are significantly faster
-(especially logarithm, exponential, powers) than working with \dtt{9} digits
-or more. The achieved precision is largely enough for plots.
-
-See \xintlogname and \xinttrigname for some additional information.
-
-\item The long awaited\NewWith{1.4k} syntax \csbxint{ieval}|[D]{...}| and
- \csbxint{floateval}|[Q]{...}| has been implemented. The legacy
- \csbxint{ieval}|{[D]...}| and \csbxint{floateval}|{[Q]...}| syntax is kept
- for backwards compatibility.
-
-\item \csbxint{FloatToDecimal}, \csbxint{FracToDecimal}.\NewWith{1.4k}
-
-\item \csbxint{PFloat}\NewWith{1.4k} is customizable via \csbxint{PFloatZero},
- \csbxint{PFloatIntSuffix}, \csbxint{PFloatLengthOneSuffix},
- \csbxint{PFloatNoSciEmax}, \csbxint{PFloatNoSciEmin} and
- \csbxint{PFloatMinTrimmed}.
-
-\item \csbxint{FloatZero}.\NewWith{1.4k}
-
-\item The concept of simultaneous assignments is extended:\NewWith{1.4i} in
- case of more variables than values the extraneous variables do not cause an
- error message but are simply set to the |nil| value; in case of more values
- than variables, the last variable is defined to be the ople concatenating
- all the extra values. See \csbxint{defvar}.
-
-\item Built-in\NewWith{1.4i} functions usable with arbitrarily many arguments
- such as \func{max}, \func{gcd}, or \func{len} are now again usable with a
- single numeric argument: since |1.4| a lone argument had to be a |nutple|
- (which was automatically unpacked). It can now again be a number.
-
- \item \csbxint{TeXfromSci}\NewWith{1.4g}
-
- \item The constraints for the replacement macro to be used for
- \csbxint{exprPrintOne} have been much simplified. See the
- documentation of \csbxint{FracToSci} which is the package default.
- %\NewWith{1.4e}
-
- \item \csbxint{iexprPrintOne} was added, with default
- \csbxint{DecToString}.%\NewWith{1.4e}
-
- \item \csbxint{DecToStringREZ} was added.%\NewWith{1.4e}
-
- \item The function \func{zip}.
-
- \item The function \func{flat}.
-
- \item Chaining of \hyperlink{\detokenize{prec-10}}{comparison operators} à la
- Python (no short-circuit, though) and |l3fp|.
-
- \item \csbxint{PFloatE} to specify like \csa{xintFracToSciE} (now defunct at
- |1.4e|) does for
- \csbxint{eval} since |1.4| the separator to use between mantissa and
- exponent in the output of \csbxint{floateval} output.
-
- \item \csbxint{thespaceseparated} (serves to provide suitable input
- to PS-Tricks |\listplot|).
-
- \item The optional argument |[D]| to \csbxint{iexpr} (or \csbxint{ieval})
- can be negative, with about the same meaning as the non-negative case, i.e.
- rounding to an integer multiple of |1e-D|. But attention that at |1.4f|,
- for |D<0|, this is now interpreted as the rounded quotient by |1e-D| (no
- trailing zeros appended, no scientific exponent either).
-
- \item Also the second argument of \func{trunc} and \func{round} can be
- negative (but then it enacts quantization, e.g |trunc(1234,-2)| produces
- \dtt{\xinteval{trunc(1234,-2)}}). Matching updates to the support
- macros \csbxint{Trunc}, \csbxint{Round}, \csbxint{iTrunc}, and
- \csbxint{iRound}.
-
- \item Support by \func{add} and \func{mul} for \keyword{omit}, \keyword{abort}
- and \func{break}.%
-%
-
-\end{itemize}
-
-\subsection{The \texttt{1.4} release of \texttt{2020/01/31}}
-
-|1.4| brought some new features (involving significant evolution of the
-\xintexprname.sty source code) and a few (but important) breaking changes.
-See |CHANGES.html| which contains information which may not yet have been
-included into this PDF documentation.
-
-The main new feature was (initial) support for nested structures. For a quick
-idea of already available related abilities check for example \func{ndseq} or
-\csbxint{defufunc}. See also \csbxint{thealign}. However, please grant the
-author a few decades to finish absorbing Python/NumPy.
-
-\begin{framed}
- The main breaking changes were:
- \begin{itemize}
- \item \xintexprname |1.4| requires the |\expanded| primitive, which is
- provided by all major \TeX{} engines since \TeX Live 2019. The macro
- packages \xintname, \xintfracname, \xinttoolsname et al.\@ do not (yet)
- require |\expanded|.
-
- It is probable also |\pdfstrcmp| (|\strcmp|) will be required at some point
- but it has been provided by major \TeX{} engines for a long time already.
-
- \item \csbxint{eval} (and \csbxint{expr}) output does not use anymore the
- \xintfracname ``raw'' format |A/B[N]|, rather it uses scientific notation
- |AeN/B|, dropping the exponent and/or denominator if they are
- respectively \dtt{0} and/or \dtt{1}. This means that output can now be
- copied pasted directly to competing software on the market, such as Python
- or Maple. The output format of \csbxint{floatexpr} (which uses macro
- \csbxint{PFloat}) was left un-modified although the prettifying done by it
- is not necessarily the best choice when displaying a nested structure via
- \csbxint{thealign} (perhaps next major release will reconsider that
- choice); and the way the zero value is output by \csbxint{floateval},
- currently \dtt{\xintfloateval{0}} is yet to be chosen definitely. The
- used (\emph{expandable}) macro for output can be specified by user.
-
- \item Syntax such as |x*[a, b, c]| or |[a, b, c]+x| for itemwise operation
- on «lists» has been (provisorily) dropped. Indeed, the brackets |[...]|
- are now genuine constructors of nestable structures, and implementing the
- feature (analogous to NumPy's concepts) will require overloading all
- scalar infix operators. Alternative already exist in the syntax for
- example |seq(x*y, y = a,b,c)|. Actually in future |x*[a, b, c]| will be
- as |[x*a, x*b, x*c]| i.e.\@ will keep the brackets, which prior to |1.4|
- on their own were no different from parentheses.
- \end{itemize}
-\end{framed}
-
-\subsection{Known bugs/features (last updated at \texttt{1.4j})}
-
-\begin{description}
-\item[if(100>0,(100,125),(100,128)) breaks my code:]
-%
- This is a feature. This is a syntax error, as the comma serves to contatenate
- "oples" (see \autoref{oples}), and parentheses do not create analogs of
- "tuples", so this input is parsed the same as
-\begin{everbatim}
- if(100>0,100,125,100,128)
-\end{everbatim}
- which is an error as \func{if} requires exactly three arguments, not
- five. Use:
-\begin{everbatim}
- if(100>0,[100,125],[100,128])
-\end{everbatim}
- which will expand to the "tuple" |[100,125]|.
-\item[{\detokenize{\xintdeffunc foo(x):= gcd((x>0)?{[x,125]}{[x,128]});}
- creates a broken function:}]
-%
- Bug. Normally \func{gcd} (and other
- multi-arguments functions) work both with open lists of arguments or
- bracketed lists ("nutples") and the above syntax would work perfectly fine
- in numerical context. But the presence of the \oper{?} breaks in
- \csbxint{deffunc} context the flexibility of \func{gcd}.
-
- Currently working alternatives:
-\begin{everbatim}
-\xintdeffunc foo(x) := gcd(if(x>0, [x,125], [x,128]));
-\xintdeffunc foo(x) := if(x>0, gcd(x,125), gcd(x,128));
-\xintdeffunc foo(x) := if(x>0, gcd([x,125]), gcd([x,128]));
-\xintdeffunc foo(x) := gcd((x>0)?{x,125}{x,128});
-\xintdeffunc foo(x) := (x>0)?{gcd(x,125)}{gcd(x,128)};
-\xintdeffunc foo(x) := (x>0)?{gcd([x,125])}{gcd([x,128])};
-\end{everbatim}
- The same problem will arise with an \oper{??} nested inside \func{gcd} or
- similar functions, in an \csbxint{deffunc}.
-
- \item[{\detokenize{\xinteval{0^-.5}} says "0 raised to power -1"}]
-%
- Feature. Half integer exponents are handled via a square-root extraction, so
- here \xintexprname wanted to first raise \dtt{0} to power \dtt{-1}, as
- reported.
+\subsection{\ctanpackage{polexpr}}
- \item[{Comparison operator \detokenize{==} crashes with nutples}]
-%
- Not yet implemented...
+The package \ctanpackage{polexpr} enriches the \csbxint{eval} syntax
+(but not the one of \csbxint{floateval}) with a polynomial type with
+associated constructor |pol([c0,c1,...])|, and polynomial specific
+functions such as |polgcd(pol1, pol2, ...)|.
- \item[{I liked the ``broadcasting'' \detokenize{[1..10]^10} syntax, but it
- was removed at 1.4}]
-%
- Patience...\@ |seq(x^10,x=1..10)| is alternative (add external |[..]| to get
- a nutple).
- \item[{\detokenize{1e\numexpr5+2\relax} crashes}]
-%
- Not clear yet if bug or feature.
- The syntax accepted in the scientific part is limited, and failure
- is expected: hitting a |\numexpr|
- when parsing a number triggers insertion of a tacit multiplication and then
- |1e| is missing the scientific exponent. The same happens with |1e(2+3)|.
- Use syntax such as |1e\the\numexpr5+2\relax|, or |1e\xinteval{5+2}|
- (although here this relies on output format of |\xinteval| using integer
- notation with no decoration in this case).
+Full usage of polynomials (and algebraic notations |c_0 + c_1 x + c_2
+x^2 + ...| for input and also output) goes through a dedicated |\poldef|
+parser which is based upon \csbxint{defvar}/\csbxint{deffunc} and is a
+necessary step to then access via a dedicated macro interface operations
+such as identifying all rational roots and isolating all real roots to
+arbitrary precision.
- \item[{seq(1e-i,i=1..5) crashes}]
-%
- Not clear if bug or feature. Use |seq(1e\xinteval{-i},i=1..5)| or, as a
- possibly faster way |seq(1e\xintiieval{-i},i=\xintiiexpr1..5\relax)|.
+The simplest manner to experiment with \ctanpackage{polexpr} is via the
+|&pol| mode of \ctanpackage{xintsession}.
- \item[{omit/abort if nested and not last in the sub-expression cause a crash}]
-%
- For example |seq(subs((i)?{i}{abort},t=i)+10, i=-2, -1, 0, 1)| crashes, due
- to the presence of the |+10|. This is a longstanding limitation, applying
- ever since |omit/abort| were added to the syntax at |1.1|. Even without
- the |+10| the nested case was broken by a |1.4| regression and got fixed
- only at |1.4h|. The non-nested case |seq((i)?{i}{abort}+10, i=-2, -1, 0,
- 1)| works and the «must be last in expression if nested» limitation is
- currently considered a feature.
+\subsection{\ctanpackage{bnumexpr}}
-\item[{seq([i,i\string^2], i=1..10) crashes with Ooops, looks like we are missing a
- ]. Aborting!}]
-%
- The cause is that the square brackets do not hide the comma from |seq()|
- parsing. This will probably remain ``wont-fix''. Work-arounds: either use
- an extra pair of parentheses |seq(([i,i^2]), ...)| or hide the inner
- comma within braces |seq([i{,}i^2], ...)|.
-\end{description}
+This small package loads \xintcorename and provides the functionality of
+the integer-only \csbxint{iiexpr}/\csbxint{iieval} parser, but dropping
+support for nested structures, functions, variables, boolean branching,
+etc...\@ It includes by default support for hexadecimal input (with |"|
+prefix) and output based upon \xintbinhexname. Compared to
+|\the\numexpr| it adds support for arbitrarily large integers, powers
+with |**| and |^|, factorials via |!| postfix operator, floored division
+and associated modulo, and comma separated multi-item expressions.
-The list stops here, but there are certainly other pending bugs in my bug-log,
-and many more I am not yet aware of. In particular it is already mentioned in
-the \csbxint{deffunc} documentation that it can not parse currently the
-entirety of the available purely numerical syntax, some (documented or not,
-known or not) limitations apply.
+It also offers a user-level interface to add extra infix or postfix
+operators.
\subsection{License and installation instructions}
@@ -4759,50 +4874,72 @@ Else, \href{https://ctan.org/pkg/xint}{CTAN} access provides |xint.tds.zip|
which has all source code and documentation in a TDS-compliant archive, only
waiting to be |unzip -d <DIR>| into some suitable hierarchical structure.
-Else, |etex xint.dtx| extracts all source code. A |Makefile| is also provided
-with targets such as |xint.pdf| or |sourcexint.pdf|. Even if your system does
-not allow executing |make|, the rules it contains can be imitated manually
-(if possible using |Latexmk|).
+Check |README.md| for more possibilities.
-With \TeX\ distributions providing a |"texdoc"| or similar utility,
-\centeredline{|texdoc --list xint|}
-gives the choice to display one of:
-\begin{itemize}[nosep]
-\item |xint.pdf| (this file),
-\item |sourcexint.pdf| (source code),
-\item |README.md|,
-\item |CHANGES.html|.
-\end{itemize}
+% Else, |etex xint.dtx| extracts all source code. A |Makefile| is also provided
+% with targets such as |xint.pdf| or |sourcexint.pdf|. Even if your system does
+% not allow executing |make|, the rules it contains can be imitated manually
+% (if possible using |Latexmk|).
\subsection{Printing big numbers on the page}\label{ssec:printnumber}
+
When producing very long numbers there is the question of printing them on
the page, without going beyond the page limits. In this document, I have most
- of the time made use of these macros (not provided by the package:)
-
-%
+ of the time made use of a ``|\printnumber|'' macros, not provided by
+ the package, and which is coded like this (with some extra decorations):
\everb|@
\def\allowsplits #1{\ifx #1\relax \else #1\hskip 0pt plus 1pt\relax
\expandafter\allowsplits\fi}%
\def\printnumber #1{\expandafter\allowsplits \romannumeral-`0#1\relax }%
-% \printnumber thus first ``fully'' expands its argument.
|
-It may be used like this:
+This macro triggers ``\fexpan sion'' of its argument (and indeed
+\csbxint{eval} and friends expand completely under such triggering),
+then it goes through the computation result character by character
+inserting \TeX\ potential break points in-between them.
%
\begin{everbatim*}
\printnumber{\xintiieval{100!^3}}\newline
\end{everbatim*}%
-The rendering here uses extra decoration.
+
+\subsection{The package documentation}
+
+With \TeX\ distributions providing a |"texdoc"| or similar utility,
+\centeredline{|texdoc --list xint|}
+will offer the choice to visualize one of those files:
+\begin{enumerate}[nosep]
+\item |xint.pdf| (this file)
+\item |sourcexint.pdf| (commented (hmm...) source code)
+\item |CHANGES.html|
+\item |README.md|
+\end{enumerate}
+
+Warning: I don't have the time to maintain perfectly such large
+documentation. It currently combines old documentation which never
+really got updated and may be locally obsolete with more recent stuff
+mostly written on occasion of the |1.4| release of January 2020 and the
+|1.4e| one of May 2021, and the intervening changes might also have made
+some of it not completely accurate, despite my best efforts. Bug
+reports and feature requests are most welcome.
+
+The section formerly included with this documentation and documenting
+the changes since the |1.4| release has been removed as it was too
+time-consuming to maintain it here. Please refer to |CHANGES.html| for
+the detailed listing: \centeredline{|texdoc CHANGES.html|} On the
+internet:
+\centeredline{\url{http://mirrors.ctan.org/macros/generic/xint/CHANGES.html}}
+%
+A one-page condensed ``timeline'' is to be found at the start of
+|sourcexint.pdf|.
\clearpage
\expandafter\let\csname Start herenameUp\endcsname\undefined
\csname xintexprnameUp\endcsname
-\section{\xintexprname syntax reference and user guide}
+\section{Syntax reference and user guide}
\RaisedLabel{sec:expr}
\localtableofcontents
-
\subsection{The three parsers}
\xintexprname provides three numerical expression parsers corresponding to
@@ -4893,7 +5030,8 @@ the output be formatted with such separators.
would be a bit cumbersome in a \TeX{} workflow, if only for matters of
syntax highlighting in \TeX-aware text editors).
\begin{everbatim*}
-\xintiieval{add((i/:7)?{omit}{i^5}, i=1000..1020)}% only add fifth powers of multiples of 7
+% add the i^5 only if i is a multiple of 7
+\xintiieval{add((i/:7)?{omit}{i^5}, i=1000..1020)}
\end{everbatim*}
\item \csbxint{floateval}\oarg{Q}\marg{expression} does floating point
@@ -4912,6 +5050,8 @@ the output be formatted with such separators.
last, this is not required anymore.\NewWith{1.4k} The legacy syntax is
and will keep being allowed.
+
+
The infix operator \oper{/} will compute the correct rounding of the exact
fraction. The operator \oper{//} is floored division and \oper{/:} is its
associated modulo (see also \func{divmod}).
@@ -5001,31 +5141,107 @@ is \csbxint{floateval} and \csbxint{floatexpr}.
\label{xintfloatexprPrintOne}
\label{xintboolexprPrintOne}
-The package provides only minimal facilities for formatting the numeric
-output. A possibly not up-to-date list is (the first two use math
-mode mark-up): \csbxint{TeXfromSci}, \csbxint{TeXFrac}, \csbxint{DecToString},
-\csbxint{PRaw}, \csbxint{FracToSci}, \csbxint{FracToDecimal},
-\csbxint{PFloat} and
-\csbxint{FloatToDecimal}. More advanced formatting is left for the user to
-provide by own macros or possibly using third-party packages.
+The package provides only minimal facilities for formatting the output
+from \csbxint{eval} or \csbxint{floateval} or\dots. And this output may
+well consist of comma separated values, even nested ones with, by
+default, square brackets. See the section about \csbxint{thealign} and
+its customization possibilities.
-It is indeed possible to configure the parsers to use custom macros for output.
-Here are the default package definitions:
+Rather to condemn the user customization to have to employ macros able
+to handle such comma separated lists, possibly nested, the package
+provides an interface to customize the handling of individual numerical
+leaves. Here are the default definitions to this effect:
\begin{everbatim}
-\def\xintexprEmptyItem{[]}
-\def\xintexprPrintOne{\xintFracToSci}
-\def\xintiexprPrintOne{\xintDecToString}
-\def\xintiiexprPrintOne #1{#1}
-\def\xintfloatexprPrintOne{\xintPFloat}
+\def\xintexprEmptyItem{[]} % (all parsers)
+\def\xintexprPrintOne #1{\xintFracToSci{#1}} % \xinteval
+\def\xintiexprPrintOne #1{\xintDecToString{#1}} % \xintieval
+\def\xintiiexprPrintOne#1{#1} % \xintiieval
+\def\xintfloatexprPrintOne [#1]#2{\xintPFloat[#1]{#2}} % \xintfloateval
\def\xintboolexprPrintOne#1{\xintiiifNotZero{#1}{True}{False}}
\end{everbatim}
-The typesetter for \csa{xintiiexpr} simply prints ``as is'', but this
-may change in future, if some internal format is used requiring a
-conversion step. Users can copy the above (\LaTeX\ users may want to
-use |\renewcommand|) and modify the chosen macros.
+They can be re-defined to one's wishes. \LaTeX\ users will want to use
+|\renewcommand| for this.
+\begin{TeXnote}
+ \begin{itemize}
+ \item Actually, the defaults are more done in the style
+\begin{everbatim}
+\let\xintexprPrintOne\xintFracToSci
+\end{everbatim}
+ thus sparing grabbing the argument |#1|. And one can do
+\begin{everbatim}
+\def\xintexprPrintOne{\xintFracToSci}
+\end{everbatim}
+ too.
+ \item |\xintexprPrintOne| defaults in truth to some private variant of
+ \csbxint{FracToSci} with exactly the same output but able to understand
+ only certain limited types of inputs as used internally. This private
+ variant is not \fexpan dable.
+ \item |\xintfloatexprPrintOne| defaults in fact to a private variant of
+ \csbxint{PFloat} which assumes the optional argument |[P]| is present as
+ it will be the case always in this context. This optional argument
+ |[P]| is the optional argument |[Q]| of \csbxint{floateval} (or
+ |Digis+Q| if |Q<0|).
+ \item The typesetter for \csbxint{iiexpr} simply prints ``as is'', but this
+ may change in future, if some internal format is used requiring a
+ conversion step.
+ \end{itemize}
+\end{TeXnote}
-Regarding the current behaviour of \csbxint{floateval}, here is the
-default configuration of \csbxint{PFloat}:
+Here is a possibly not up-to-date list of macros of interest, whose
+documentations you might consider reading (the first two require math
+mode):
+\begin{itemize}[nosep]
+\item \csbxint{TeXFromSci},
+\item \csbxint{TeXFrac},
+\item \csbxint{DecToString},
+\item \csbxint{PRaw},
+\item \csbxint{FracToSci},
+\item \csbxint{FracToDecimal},
+\item \csbxint{PFloat},
+\item and \csbxint{FloatToDecimal}.
+\end{itemize}
+Naming scheme, as one can see, has been pretty much incoherent, apologies.
+
+Among packages providing macros formatting numeric values, there are
+\ctanpackage{numprint} and its macro |\np| (or |\numprint| without the
+option |np|), and \ctanpackage{siunitx}
+and its |\num|, and possibly more packages not known to the author.%
+%
+\footnote{There does not seems to be yet a \LaTeX\ user level interface to the
+ \liiistrformat\ package, part of |l3experimental|, which provides an
+ implementation of the Python |format| function.}
+%
+These macros are suitable in combination with \csbxint{Float} as in the
+example below to customize the \csbxint{floateval} output.
+% 27 mai 2022, en effet \num{1/7} ne marche pas et \numprint{1/7} non plus
+Numerical output from \csbxint{eval} is more challenging as
+individual values may naturally contain the |/| character for fractions which the
+above mentioned packages will not know how to handle, as far as I know.
+
+
+Example, with \LaTeX\ and |\num| from \ctanpackage{siunitx}:
+\begin{everbatim}
+\def\printwithnum[#1]#2{\num{\xintFloat[#1]{#2}}}
+\renewcommand\xintfloatexprPrintOne{\printwithnum}
+\end{everbatim}
+We used |\def| with delimited parameters to define |\printwithnum|
+because the optional argument will always be present at time of use, and
+further the macro will be submitted to |\expanded|, but \LaTeX2e
+commands with optional arguments defined via |\newcommand| are not
+compatible with being submitted to |\expanded|.
+\begin{TeXnote}
+ |\num| is a |\protected| macro, hence it will remain intact in the
+ |\expanded| phase. The argument |\xintFloat[#1]{#2}| will thus expand
+ before |\num| itself. In the case at hand |\num| is a macro which would
+ anyhow have triggered expansion of its argument before further processing.
+\end{TeXnote}
+
+
+The current behaviour of \csbxint{floateval} corresponds to this set-up:
+\begin{everbatim}
+\def\xintfloatexprPrintOne [#1]#2{\xintPFloat[#1]{#2}}
+\end{everbatim}
+and to this default configuration of \csbxint{PFloat}:
\begin{everbatim}
\def\xintPFloatE{e}
\def\xintPFloatZero{0}
@@ -5035,39 +5251,35 @@ default configuration of \csbxint{PFloat}:
\def\xintPFloatNoSciEmin{-4}
\def\xintPFloatMinTrimmed{4}
\end{everbatim}
-With the custom
+
+With the custom replacement
\begin{everbatim}
\def\xintfloatexprPrintOne{\xintFloatToDecimal}
\end{everbatim}
-the \csbxint{floateval} output wil use decimal fixed point notation,
+the \csbxint{floateval} output will use decimal fixed point notation,
i.e.\@ no scientific exponents, and as many zeros as are needed (but no
more, as trailing zeros will be removed from the significant digits).
-Here is an example with the
-default configuration and then when using \csbxint{FloatToDecimal}:
+Here is an example comparing outputs from the
+default configuration and custom ones:
\begingroup % DÉBUT DU GROUPE POUR DES EXEMPLES
\begin{everbatim*}
-\xintfloateval{exp(-32.456)/2000}\newline
+\xintfloateval{exp(-32.456)/2000} (default, i.e. PFloat)\newline
\def\xintfloatexprPrintOne{\xintFloatToDecimal}%
-\xintfloateval{exp(-32.456)/2000}\par
+\xintfloateval{exp(-32.456)/2000} (FloatToDecimal)\newline
+\def\xintfloatexprPrintOne[#1]#2{\xintTeXFromSci{\xintFloat[#1]{#2}}}%
+$\xintfloateval{exp(-32.456)/2000}$ (TeXFromSci on Float)\par % math mode required
\end{everbatim*}
-Similarly, with
-\begin{everbatim}
-\def\xintexprPrintOne{\xintFracToDecimal}
-\end{everbatim}
-the \csbxint{eval} output will use decimal fixed point notation (for the
-numerators; the denominators are simply post-fixed with a |/|
-delimiter). See \csbxint{FracToDecimal}, which like \csbxint{FracToSci}
-however is not really a user level macro, it is restricted on its input
-format, it understands only what is needed for the internal structure
-currently used by \csbxint{eval}. Here is with the same input as above:
-\begin{everbatim*}
-\xinteval{exp(-32.456)/2000}\newline
+Some examples showing now the effect of sensible customizations on \csbxint{eval}:
+\begin{everbatim*}
+\xinteval{exp(-32.456)/2000} (default, i.e. FracToSci)\newline
\def\xintexprPrintOne{\xintFracToDecimal}%
-\xinteval{exp(-32.456)/2000}\par
+\xinteval{exp(-32.456)/2000} (FracToDecimal)\newline
+\def\xintexprPrintOne#1{\xintTeXFromSci{\xintFracToSci{#1}}}%
+$\xinteval{exp(-32.456)/2000}$ (TexFromSci on FracToSci)\par % math mode required
\end{everbatim*}
Notice that the |/2000| denominator remains ``as is'' in the
-output in both cases, in conformity with the documented behaviour of
+output, in conformity with the documented behaviour of
\csbxint{FracToSci} in the first example and of \csbxint{FracToDecimal}
for the second example. This has not changed since |1.4| (the handling
of the numerator part has changed at |1.4e| and again slightly at
@@ -5075,15 +5287,22 @@ of the numerator part has changed at |1.4e| and again slightly at
\dtt{0} or \dtt{0.0} depending on the input) but is to be considered
unstable and undecided so far.
-A more costly typesetter could be for example:
+A slightly more costly typesetter could be for example:
\begin{everbatim}
\def\xintexprPrintOne#1{\xintDecToStringREZ{\xintIrr{#1}}}
\end{everbatim}
-Then the fraction (inclusive of its power of ten part) will be reduced
-to lowest terms (see \csbxint{Irr}), next the trailing zeros will be
-moved as an exponent (positive or negative) to the numerator, and
-finally this numerator with a power of ten part will be printed in
-decimal fixed point notation, with as few zeros as are needed. With the
+Then
+\begin{itemize}[nosep]
+\item the fraction (inclusive of its power of ten part) will be reduced
+ to lowest terms (see \csbxint{Irr}),
+\item next the trailing zeros will be moved as an exponent (positive or
+ negative) to the numerator,
+\item this numerator with a power of ten part will be printed in decimal
+ fixed point notation, with as few zeros as are needed,
+\item and finally the denominator |B|, which has been trimmed of trailing
+ zeros, will be printed as |/B| or not at all if |B=1|.
+\end{itemize}
+With the
use case above:
\begin{everbatim*}
\def\xintexprPrintOne#1{\xintDecToStringREZ{\xintIrr{#1}}}
@@ -5098,82 +5317,99 @@ educated to identify its presence and handle it. Slightly faster (see
\end{everbatim}
which with the used example produces the same output.
+One can also consider this for math mode:
+\begin{everbatim*}
+\def\xintexprPrintOne#1{\xintTeXFromSci{\xintDecToStringREZ{\xintIrr{#1}}}}
+$\xinteval{exp(-32.456)/2000}$\par
+\end{everbatim*}
+See our hesitations about what \csbxint{TeXFromSci} should do with
+denominators.
+
+\begin{TeXnote}
+ One can hope that in future \csbxint{DecToString} will identify
+ denominators being products of only two's and five's, but even then of
+ course \csbxint{TeXFromSci} will have to decide how to handle other
+ denominators.
+\end{TeXnote}
+
\endgroup % FIN DU GROUPE POUR LES EXEMPLES
-\medskip
-Nested structures (for full internal details, see \autoref{oples})
-are rendered by default using left and right brackets,
-commas and spaces in a non-customizable way, except via
-\csa{xintexprEmptyItem}. For full customizability, use
-\csbxint{thealign}, which is described in the next section.
% The \csbxint{PFloatE} is now allowed to a be macro with an argument delimited
% by a dot, this argument will be the exponent.\NewWith{1.4e} The output must be produced
% \fexpan dably and again be delimited by a dot. The default does not grab the
% exponent and simply inserts the letter |e|.
-\paragraph{\TeX hackers note:}
-Attention! The macros used in place of \csbxint{FracToSci} and
-\csbxint{PFloat} must currently understand the raw \xintfracname format
-|A/B[N]|, with the |/B| and |[N]| parts being optional. These requirements
-may change at any release.
-
-Currently the interface for the macro used by
-\csbxint{floatexprPrintOne} % changed at |1.4e|.\CHANGED{1.4e}
-must be the same as
-\csbxint{PFloat}. %, i.e. the target precision is |[P]| not a
-%braced argument.
-But it will always be employed with the |[P|] present hence does not
-have to consider it to be optional.
-
-The replacement macros must be compatible with expansion-only context, but do not
-have to be \fexpan dable.
-
-% % pour mémoire
-% \footnote{The constraints on any replacement to \csbxint{FracToSci} are much
-% simplified at |1.4e|. Previously it had to be able to accept also input in
-% fixed point notation, and in scientific notation with a catcode 12 |e|.}
-% %
+\begin{TeXnote}
+ The macro used as customization of \csbxint{exprPrintOne} (whose default is
+ a private variant of \csbxint{FracToSci} with exactly same output) must
+ understand the internal \xintfracname format |A/B[N]|, but with the |/B| and
+ |[N]| parts being only optional. This is not a problem when using for this
+ task (nested) macros of \xintfracname, as they of course accept such
+ inputs as argument and in fact much more general ones.
+
+ In particular one can benefit from \csbxint{Raw}, or \csbxint{RawBraced}, to
+ convert the argument into a well defined shape (|A/B[N]| for the former and
+ |{N}{A}{B}| for the latter) and then work from there.
+
+ The macro used by \csbxint{floatexprPrintOne} has the guarantee that the
+ |[P]| will be always present at expansion time.
-\subsubsection{\csh{xintthealign} for multiple items outputs}
+ The customization should be compatible with being exposed to |\expanded|
+ (which is like expansion in an |\edef|), either from being completely
+ expandable or at the opposite from being |\protected|. \LaTeX2e commands
+ defined via |\newcommand| as macros with one optional parameter are not
+ compatible with this requirement.
+
+ Attention! The interface requirements described above for the macros
+ customizing the behaviours of \csbxint{exprPrintOne} and
+ \csbxint{floatexprPrintOne} may change at any release... as they
+ depend on some internal structures and it is not certain backwards
+ compatiblity will be maintained systematically in case of evolution.
+\end{TeXnote}
+
+
+\subsubsection{\csh{xintthealign} for general oples and nutples}
\label{xintthealign}
With \csbxint{thealign} one can get nested data use a \TeX{} alignment in the
-output. Attention, this must be followed by \csbxint{expr} et al., never by
-\csbxint{theexpr} or \csbxint{eval}.
-Here is an example :
+output. Here is an example :
\begin{everbatim*}
\xintthealign\xintexpr ndseq(1/(i+j), i = 1..10; j=1..10)\relax
\end{everbatim*}
+Attention, this \csa{xintthealign} must be a prefix to \csbxint{expr},
+or \csbxint{floatexpr} etc..., but there will be low-level \TeX\ errors
+if it is used to prefix \csbxint{eval} et al. or \csbxint{theexpr} et al.
-It is possible to customize the behaviour of |\xintthealign|.\CHANGED{1.4a}
-The helper macros, apart from |\xintexpralignbegin| and |\xintexpralignend|
-will be subjected to a complete (|\expanded|) expansion (once).%
-%
-\footnote{\csa{xintexpralignend} is expanded once, after the body has been
- submitted to exhaustive expansion, and prior to the expansion of
- \csa{xintexpralignbegin}.}
-%
-The package
-uses here |\protected| with no strong reason, as the replacement tokens are
-not expanding anyhow, but the idea is that this allows to define a macro in an
-|\edef| and later change the meaning of the auxiliary macros depending on what
-one wants to do with the expansion result. See also further down the \LaTeX{}
-example with a matrix environment, where |\noexpand| rather than |\protected|
-is used.
+It is possible to customize the behaviour of |\xintthealign|. For example:\CHANGED{1.4a}
\begin{everbatim}
\protected\def\xintexpralignbegin {\halign\bgroup\tabskip2ex\hfil##&&##\hfil\cr}%
\def\xintexpralignend {\crcr\egroup}% removed \protected at 1.4c
\protected\def\xintexpralignlinesep {,\cr}% separates "lines"
-\protected\def\xintexpralignleftsep {&}% at left of first item in a "line" (after brackets)
+\protected\def\xintexpralignleftsep {&}% at left of first item in a "line"
+ % (after "left bracket")
\protected\def\xintexpraligninnersep {,&}% at the left of non-first items
-\protected\def\xintexpralignrightsep {&}% at right of last item in a "line" (before brackets)
+\protected\def\xintexpralignrightsep {&}% at right of last item in a "line"
+ % (before "right bracket")
\protected\def\xintexpralignleftbracket {[}%
\protected\def\xintexpralignrightbracket{]}%
\end{everbatim}
-Although we will try to keep stable the way «regular arrays» are
-rendered,\UNSTABLE{} the |\xintthealign| macro (and its associated customizability) is
-considered work-in-progress and may experience breaking changes.
+The above definitions use |\protected| with no strong reason, as the
+replacement tokens are not expanding anyhow, but the idea is that this
+allows to execute a computation via an |\edef| and later one can change
+the meaning of the auxiliary macros depending on what one wants to do
+with the expansion result.
+
+\begin{TeXnote}
+ \csa{xintexpralignend} is expanded once, after the body has been submitted
+ to exhaustive expansion (|\expanded| induced), and prior to the expansion of
+ \csa{xintexpralignbegin}.
+\end{TeXnote}
+
+Although we will try to keep stable the way «regular arrays» as in the
+above example are rendered by default,\UNSTABLE{} the |\xintthealign|
+macro (and its associated customizability) is to be considered
+work-in-progress and may experience breaking changes.
Use for example this for outputting to a file or a terminal:
\begin{everbatim}
@@ -5189,12 +5425,10 @@ Use for example this for outputting to a file or a terminal:
\def\xintexpralignrightbracket{]}%
\end{everbatim}
-\medskip
-
-And here is an example using a |pmatrix| environment. But it will not break
+In the \LaTeX{} example next using a |pmatrix| environment, |\noexpand|
+rather than |\protected| is used. This environment will not break
across pages, contrarily to the display produced by the default
\csbxint{thealign} configuration which uses \TeX{}'s |\halign|.
-
%\kern10\baselineskip
%\hbox{Big empty space here}
%\kern-11\baselineskip
@@ -5545,7 +5779,8 @@ precedence, use parentheses for disambiguation.
remaining conditionals will still be evaluated.
\begin{everbatim*}
-\xintifboolexpr{1<=2!=3<4>1}{true}{\error}, \xintifboolexpr{1<=2>=3<4>1}{\error}{false},
+\xintifboolexpr{1<=2!=3<4>1}{true}{\error},
+\xintifboolexpr{1<=2>=3<4>1}{\error}{false},
\xintifboolexpr{3 != 3! == 6 != 4! == 24}{true}{\error}
\end{everbatim*}
@@ -6692,7 +6927,8 @@ like extracting directly), but it is leaner to drop the extra «packing».
implementation of the Brent-Salamin algorithm for the computation of $\pi$:
\begin{everbatim*}
\xintDigits:= 87\relax % we target 84 digits, and use 3 guard digits
-\xintdeffloatfunc BS(a, b, t, p):= 0.5*(a+b), sqrt(a*b), t-p*sqr(a-b), \xintiiexpr 2p\relax;
+\xintdeffloatfunc BS(a, b, t, p):= 0.5*(a+b), sqrt(a*b), t-p*sqr(a-b),
+ \xintiiexpr 2p\relax;
\xinteval
{trunc(% I feel truncation is better than rounding to display decimals of π
\xintfloatexpr
@@ -6802,7 +7038,8 @@ An optional final semi-colon in the input before the closing parenthesis is
allowed.
\begin{everbatim*}
\begin{multicols}{2}
-\xintthealign\xintexpr ndseq(a+b+c+d, a=1000,2000,3000; b=100,200,300; c=10,20,30; d=1,2,3;)\relax
+\xintthealign\xintexpr ndseq(a+b+c+d, a=1000,2000,3000; b=100,200,300;
+ c=10,20,30; d=1,2,3;)\relax
\end{multicols}% in case of page break, this makes amusing zigzag rendering
\end{everbatim*}
@@ -6966,7 +7203,8 @@ from Python with \emph{tuple} or \emph{list} types:
rules (inclusive of negative indices). Notice though that stepping is
currently not supported.
\begin{everbatim*}
-\xinttheiiexpr (1..20)[6:13]\relax\ = \xinttheiiexpr (1..20)[6-20:13-20]\relax\newline
+\xinttheiiexpr (1..20)[6:13]\relax\ = \xinttheiiexpr (1..20)[6-20:13-20]\relax
+\newline
\xinttheiiexpr [1..20][6:13]\relax\ = \xinttheiiexpr [1..20][6-20:13-20]\relax
\end{everbatim*}
@@ -7074,7 +7312,8 @@ part, or hexadecimal input), or is looking for an infix operator, and:
impacts only situations with a division operator as the last seen
operator, as multiplication is mathematically associative.
\begin{everbatim*}
-\xinttheexpr 1/(3)5, (1+2)/(3+4)(5+6), 2/x(10), 2/10x, 3/y\xintiiexpr 5+6\relax, 1/x(y)\relax\
+\xinttheexpr 1/(3)5, (1+2)/(3+4)(5+6), 2/x(10), 2/10x,
+ 3/y\xintiiexpr 5+6\relax, 1/x(y)\relax\
differ from\newline\xinttheexpr 1/3*5, (1+2)/(3+4)*(5+6), 2/x*(10), 2/10*x,
3/y*\xintiiexpr 5+6\relax, 1/x*(y)\relax\par
\end{everbatim*}
@@ -7131,11 +7370,13 @@ Simultaneous assignments\NewWith{1.4i} with more variables than values do not
raise an error but simply set the extra variables to the \dtt{nil} value.
\begin{everbatim*}
\xintdefiivar a, b, c := [1, 2];% will be automatically unpacked
-The value of a is \xinteval{a}, the one of b is \xinteval{b} and the one of c is \xinteval{c}.
+The value of a is \xinteval{a}, the one of b is \xinteval{b} and
+the one of c is \xinteval{c}.
\end{everbatim*}
\begin{everbatim*}
\xintdefiivar a, b, c := 314;%
-The value of a is \xinteval{a}, the one of b is \xinteval{b} and the one of c is \xinteval{c}.
+The value of a is \xinteval{a}, the one of b is \xinteval{b} and
+the one of c is \xinteval{c}.
\end{everbatim*}
Notice that \dtt{nil} variables must be used with caution as they break
@@ -7260,15 +7501,19 @@ it is encountered in the typesetting flow, the print-out will be rounded to
\xintfloatexpr
2.7182818284590452353602874713526624977572470936999595749669676
\relax
-\relax\newline % but we can see via the \xintexpr wrapper all the digits were there
-% rounding can be forced using an extra 0+, the float() function, or the [D] option.
-% tidbit: comparison operators do not pre-round, so 1.2345678 is not same as (1.2345678+0)
-% in low precision.
-\begingroup\xintDigits:=4;% with 2 guard digits, this makes 4+2=6 digits from "0+" rounding
+\relax\newline
+%
+% but we can see via the \xintexpr wrapper all the digits were there rounding
+% can be forced using an extra 0+, the float() function, or the [D] option.
+% tidbit: comparison operators do not pre-round, so 1.2345678 is not same as
+% (1.2345678+0) in low precision.
+%
+\begingroup\xintDigits:=4;%
4) \xintifboolfloatexpr{1.2345 == 1.23456}
{\error}{Different! Comparisons do not pre-round to Digits precision.}\newline
5) \xintifboolfloatexpr{1.2345 == 1.2345 + 0}
- {\error}{Different! Right hand side rounded from operation, left hand side not rounded.}\par
+ {\error}{Different! Right hand side rounded from operation,
+ left hand side not rounded.}\par
\endgroup
\end{everbatim*}
@@ -7560,11 +7805,11 @@ illustrate to make thinks clear. We start with this:
It produces in the log:
\begin{everbatim}
-Package xintexpr Info: (on line 10)
+Package xintexpr Info: (on line 2)
Function foo for \xintexpr parser associated to \XINT_expr_userfunc_foo wit
h meaning macro:#1#2#3->{\xintAdd {\xintAdd {\xintAdd {#1}{#2}}{#3}}{\xintPow {
\xintAdd {\xintAdd {#1}{#2}}{#3}}{2}}}
-Package xintexpr Info: (on line 11)
+Package xintexpr Info: (on line 3)
Function bar for \xintexpr parser associated to \XINT_expr_userfunc_bar wit
h meaning macro:#1#2#3->\expanded \bgroup \expanded {\unexpanded {\XINT_expr_se
q:_b {\xintbareeval S + S^2\relax !S}}{\xintAdd {\xintAdd {#1}{#2}}{#3}}^}
@@ -7840,7 +8085,7 @@ dimension):
\def\xintexprPrintOne #1{\xintTeXFrac{#1}}%
\def\xintexpralignbegin {\begin{pmatrix}}%
\def\xintexpralignend {\end{pmatrix}}%
-\def\xintexpralignlinesep {\noexpand\\[2\jot]}% needed to counteract an internal \expanded
+\def\xintexpralignlinesep {\noexpand\\[2\jot]}% counteract an internal \expanded
\def\xintexpraligninnersep {&}%
\let\xintexpralignleftbracket\empty \let\xintexpralignleftsep\empty
\let\xintexpralignrightbracket\empty \let\xintexpralignrightsep\empty
@@ -7875,7 +8120,8 @@ precision for the evaluation.
\def\CR{\cr}
\halign
{\tabskip1ex
-\hfil\bfseries#&\xintDigits:=\xintiloopindex\relax \xintthefloatexpr Rump(77617,33096)#\cr
+\hfil\bfseries#&\xintDigits:=\xintiloopindex\relax
+ \xintthefloatexpr Rump(77617,33096)#\cr
\xintiloop [8+1]
\xintiloopindex &\relax\CR
\ifnum\xintiloopindex<40 \repeat
@@ -8428,16 +8674,1390 @@ expansion.
never-ending one-dimensional one...\par
\end{footnotesize}
+\subsection{Known bugs/features (last updated at \texttt{1.4j})}
+
+\begin{description}
+\item[if(100>0,(100,125),(100,128)) breaks my code:]
+%
+ This is a feature. This is a syntax error, as the comma serves to contatenate
+ "oples" (see \autoref{oples}), and parentheses do not create analogs of
+ "tuples", so this input is parsed the same as
+\begin{everbatim}
+ if(100>0,100,125,100,128)
+\end{everbatim}
+ which is an error as \func{if} requires exactly three arguments, not
+ five. Use:
+\begin{everbatim}
+ if(100>0,[100,125],[100,128])
+\end{everbatim}
+ which will expand to the "tuple" |[100,125]|.
+\item[{\detokenize{\xintdeffunc foo(x):= gcd((x>0)?{[x,125]}{[x,128]});}
+ creates a broken function:}]
+%
+ Bug. Normally \func{gcd} (and other
+ multi-arguments functions) work both with open lists of arguments or
+ bracketed lists ("nutples") and the above syntax would work perfectly fine
+ in numerical context. But the presence of the \oper{?} breaks in
+ \csbxint{deffunc} context the flexibility of \func{gcd}.
+
+ Currently working alternatives:
+\begin{everbatim}
+\xintdeffunc foo(x) := gcd(if(x>0, [x,125], [x,128]));
+\xintdeffunc foo(x) := if(x>0, gcd(x,125), gcd(x,128));
+\xintdeffunc foo(x) := if(x>0, gcd([x,125]), gcd([x,128]));
+\xintdeffunc foo(x) := gcd((x>0)?{x,125}{x,128});
+\xintdeffunc foo(x) := (x>0)?{gcd(x,125)}{gcd(x,128)};
+\xintdeffunc foo(x) := (x>0)?{gcd([x,125])}{gcd([x,128])};
+\end{everbatim}
+ The same problem will arise with an \oper{??} nested inside \func{gcd} or
+ similar functions, in an \csbxint{deffunc}.
+
+ \item[{\detokenize{\xinteval{0^-.5}} says "0 raised to power -1"}]
+%
+ Feature. Half integer exponents are handled via a square-root extraction, so
+ here \xintexprname wanted to first raise \dtt{0} to power \dtt{-1}, as
+ reported.
+
+ \item[{Comparison operator \detokenize{==} crashes with nutples}]
+%
+ Not yet implemented...
+
+ \item[{I liked the ``broadcasting'' \detokenize{[1..10]^10} syntax, but it
+ was removed at 1.4}]
+%
+ Patience...\@ |seq(x^10,x=1..10)| is alternative (add external |[..]| to get
+ a nutple).
+ \item[{\detokenize{1e\numexpr5+2\relax} crashes}]
+%
+ Not clear yet if bug or feature.
+ The syntax accepted in the scientific part is limited, and failure
+ is expected: hitting a |\numexpr|
+ when parsing a number triggers insertion of a tacit multiplication and then
+ |1e| is missing the scientific exponent. The same happens with |1e(2+3)|.
+ Use syntax such as |1e\the\numexpr5+2\relax|, or |1e\xinteval{5+2}|
+ (although here this relies on output format of |\xinteval| using integer
+ notation with no decoration in this case).
+
+ \item[{seq(1e-i,i=1..5) crashes}]
+%
+ Not clear if bug or feature. Use |seq(1e\xinteval{-i},i=1..5)| or, as a
+ possibly faster way |seq(1e\xintiieval{-i},i=\xintiiexpr1..5\relax)|.
+
+ \item[{omit/abort if nested and not last in the sub-expression cause a crash}]
+%
+ For example |seq(subs((i)?{i}{abort},t=i)+10, i=-2, -1, 0, 1)| crashes, due
+ to the presence of the |+10|. This is a longstanding limitation, applying
+ ever since |omit/abort| were added to the syntax at |1.1|. Even without
+ the |+10| the nested case was broken by a |1.4| regression and got fixed
+ only at |1.4h|. The non-nested case |seq((i)?{i}{abort}+10, i=-2, -1, 0,
+ 1)| works and the «must be last in expression if nested» limitation is
+ currently considered a feature.
+
+\item[{seq([i,i\string^2], i=1..10) crashes with Ooops, looks like we are missing a
+ ]. Aborting!}]
+%
+ The cause is that the square brackets do not hide the comma from |seq()|
+ parsing. This will probably remain ``wont-fix''. Work-arounds: either use
+ an extra pair of parentheses |seq(([i,i^2]), ...)| or hide the inner
+ comma within braces |seq([i{,}i^2], ...)|.
+\end{description}
+
+The list stops here, but there are certainly other pending bugs in my bug-log,
+and many more I am not yet aware of. In particular it is already mentioned in
+the \csbxint{deffunc} documentation that it can not parse currently the
+entirety of the available purely numerical syntax, some (documented or not,
+known or not) limitations apply.
+
+
\clearpage
\etocdepthtag.toc {part1B}
\let\xintexprnameUp\undefined
+\csname xintexpr (old doc)nameUp\endcsname
+\section{The macros of \xintexprname (ancient documentation, mostly)}%
+\RaisedLabel{sec:oldxintexpr}
+
+\localtableofcontents
+
+The \xintexprname package was first released with version |1.07|
+(|2013/05/25|) of the \xintname bundle. It was substantially enhanced with
+release |1.1| from |2014/10/28|.
+
+The |1.4| release from |2020/01/31| maintains the same general architecture
+but needed adapting all the code base for the switch from |\csname| to
+|\expanded| techniques. On this occasion the mechanism for defining functions
+was substantially strengthened. The parser core mechanisms were improved too.
+
+The package loads automatically \xintfracname and \xinttoolsname.
+
+This section should be trimmed to contain only information not
+already covered in \autoref{sec:expr}.
+
+\subsection{The \csh{xintexpr} expressions}
+\label{xintexpr}
+\label{xinttheexpr}
+\label{thexintexpr}
+\label{xintthe}
+
+An \xintexprname{}ession is a construct
+\csbxint{expr}\meta{expandable\_expression}|\relax|\etype{x} where the
+expandable expression is read and completely expanded from left to right.
+
+An |\xintexpr...\relax| \emph{must} end in a |\relax| (which will be absorbed).
+Contrarily to a |\numexpr| expression, it is printable\CHANGED{1.4} as is without a prefix
+|\the| or |\number| (don't use them with |\xintexpr| this will raise an
+error).
+
+But one can use |\xintthe| prefix if one does need the explicit digits and
+other characters as in the final typesetted result.
+
+As an alternative and equivalent syntax to
+\begin{everbatim}
+\xintexpr round(<expression>, D)\relax
+\end{everbatim}
+there is
+\begin{everbatim}
+\xintiexpr [D] <expression> \relax
+\end{everbatim}
+For |D>0| this produces a decimal number with |D| figures after the decimal
+mark, which is the rounding of the expression. For |D=0| the rounding to an
+integer is produced. For |D<0| (and this was changed at |1.4f|), the rounded
+quotient of the expression by \verb=1e|D|= is produced.
+\begin{itemize}
+\item the expression may contain arbitrarily many levels of nested parenthesized
+ sub-expressions,
+\item the expression may contain explicitely or from a macro expansion a
+ sub-expression |\xintexpr...\relax|, which itself may contain a
+ sub-expressions etc\dots
+\item to let sub-contents evaluate as a sub-unit it should thus be either
+ \begin{enumerate}
+ \item parenthesized,
+ \item or a sub-expression |\xintexpr...\relax|.
+ \end{enumerate}
+ \item to use an expression as argument to macros from \xintfracname,
+ or more generally to macros which expand their arguments, one must use the
+ |\xinttheexpr...\relax| or |\xintthe\xintexpr...\relax| forms.
+ \item one should not use |\xintthe\xintexpr...\relax| as a sub-constituent of
+ another expression but only the
+ |\xintexpr...\relax| form which is more efficient in this context.
+ \item each \xintexprname{}ession, whether prefixed or not with |\xintthe|, is
+ completely expandable and obtains its result in two expansion steps.
+\end{itemize}
+
+The information now following is possibly in need of updates.
+
+\begin{itemize}[parsep=0pt, labelwidth=\leftmarginii,
+ itemindent=0pt, listparindent=\leftmarginiii, leftmargin=\leftmarginii]
+\item An expression is built the standard way with opening and closing
+ parentheses, infix operators, and (big) numbers, with possibly a fractional
+ part, and/or scientific notation (except for \csbxint{iiexpr} which only
+ admits big integers). All variants work with comma separated expressions. On
+ output each comma will be followed by a space. A decimal number must have
+ digits either before or after the decimal mark.
+
+\item As everything gets expanded, the characters |.|, |+|, |-|, |*|, |/|, |^|,
+ |!|, |&|, \verb+|+, |?|, |:|, |<|, |>|, |=|, |(|, |)|, |"|, |]|, |[|, |@|
+ and the comma |,| should not (if used in the expression) be active. For
+ example, the French language in |Babel| system, for pdf\LaTeX, activates |!|,
+ |?|, |;| and |:|. Turn off the activity before expressions using such characters.
+
+ Alternatively the macro \csbxint{exprSafeCatcodes} resets all
+ characters potentially needed by \csbxint{expr} to their standard catcodes
+ and \csbxint{exprRestoreCatcodes} restores the former status.
+
+\item Count registers and |\numexpr|-essions are accepted (LaTeX{}'s counters
+ can be inserted using |\value|) natively without |\the| or |\number| as
+ prefix. Also dimen registers and control sequences, skip registers and
+ control sequences (\LaTeX{}'s lengths), |\dimexpr|-essions,
+ |\glueexpr|-essions are automatically unpacked using |\number|, discarding
+ the stretch and shrink components and giving the dimension value in |sp|
+ units ($1/65536$th of a \TeX{} point). Furthermore, tacit multiplication is
+ implied, when the (count or dimen or glue) register or variable, or the
+ (|\numexpr| or |\dimexpr| or |\glueexpr|) expression is immediately prefixed
+ by a (decimal) number. See \autoref{ssec:tacit multiplication} for the complete rules
+ of tacit multiplication.\IMPORTANT
+
+\item With a macro |\x| defined like this:
+ %
+ \leftedline{|\def\x {\xintexpr \a + \b \relax}| or |\edef\x {\xintexpr
+ \a+\b\relax}|}
+ %
+ one may then do |\xintthe\x|, either for printing the result on the page or
+ to use it in some other macros expanding their arguments. The |\edef| does
+ the computation immediately but keeps it in a protected form.
+ Naturally, the |\edef| is only possible if |\a| and |\b| are already
+ defined. With both approaches the |\x| can be inserted in other expressions,
+ as for example (assuming naturally as we use an |\edef| that in the
+ `yet-to-be computed' case the |\a| and |\b| now have some suitable meaning):
+ %
+ \leftedline {|\edef\y {\xintexpr \x^3\relax}|}
+
+\item There is also \csbxint{boolexpr}| ... \relax| and
+ \csbxint{theboolexpr}| ... \relax|.
+
+\item See also
+ \csbxint{ifboolexpr} (\autoref{xintifboolexpr}) and the
+ \func{bool} and \func{togl} functions
+ in \autoref{sec:expr}. Here is an example. Well in fact the
+ example ended up using only \csbxint{boolexpr} so it
+ was modified to use \csbxint{ifboolexpr}.
+\catcode`| 12 %
+\begin{everbatim*}
+\xintdeffunc A(p,q,r) = p && (q || r) ;
+\xintdeffunc B(p,q,r) = p || (q && r) ;
+\xintdeffunc C(p,q,r) = xor(p, q, r) ;
+
+\centeredline{\normalcolor
+\begin{tabular}{ccrclcl}
+ \xintFor* #1 in {{False}{True}} \do {%
+ \xintFor* #2 in {{False}{True}} \do {%
+ \xintFor* #3 in {{False}{True}} \do {%
+ #1 &AND &(#2 &OR &#3)&is&\textcolor[named]{OrangeRed}
+ {\xintifboolexpr{A(#1,#2,#3)}{true}{false}}\\
+ #1 &OR &(#2 &AND &#3)&is&\textcolor[named]{OrangeRed}
+ {\xintifboolexpr{B(#1,#2,#3)}{yes}{no}}\\
+ #1 &XOR & #2 &XOR &#3 &is&\textcolor[named]{OrangeRed}
+ {\xintifboolexpr{C(#1,#2,#3)}{oui}{non}}\\
+}}}
+\end{tabular}%
+}
+\end{everbatim*}\catcode`| 13
+
+\item See also \csbxint{ifsgnexpr}.
+
+\item There is \csbxint{floatexpr}| ... \relax| where the algebra is done
+ in floating point approximation (also for each intermediate result). Use the
+ syntax |\xintDigits:=N\relax| to set the precision. Default: $16$ digits.
+ %
+ \leftedline{|\xintthefloatexpr 2^100000\relax:| \dtt{\xintthefloatexpr
+ 2^100000\relax }}
+ %
+ The square-root operation can be used in |\xintexpr|, it is computed
+ as a float with the precision set by |\xintDigits| or by the optional
+ second argument:
+ %
+\begin{everbatim*}
+\xinttheexpr sqrt(2,60)\relax\newline
+Here the [60] is to avoid truncation to |\xinttheDigits| of precision on output.
+\newline
+\printnumber{\xintthefloatexpr [60] sqrt(2,60)\relax}
+\end{everbatim*}
+
+ Floats are quickly indispensable when using the power function, as exact
+ results will easily have hundreds, even thousands of digits.
+ %
+\begin{everbatim*}
+\xintDigits:=48\relax \xintthefloatexpr 2^100000\relax
+\end{everbatim*}
+
+ Only integer and (in |\xintfloatexpr...\relax|) half-integer exponents are
+ allowed.
+
+\item if one uses \emph{macros} within |\xintexpr..\relax| one should
+ obviously take into account that the parser will \emph{not} see the macro
+ arguments, hence one cannot use the syntax there, except if the arguments
+ are themselves wrapped as |\xinttheexpr...\relax| and assuming the macro
+ \fexpan ds these arguments.
+\end{itemize}
+\subsection{\texorpdfstring{\texttt{\protect\string\numexpr}}{\textbackslash
+ numexpr} or \texorpdfstring{\texttt{\protect\string\dimexpr}}{\textbackslash
+ dimexpr} expressions, count and dimension registers and variables}
+\label{ssec:countinexpr}
+
+Count registers, count control sequences, dimen registers, dimen control
+sequences (like |\parindent|), skips and skip control sequences, |\numexpr|,
+|\dimexpr|, |\glueexpr|, |\fontdimen| can be inserted directly, they will be
+unpacked using |\number| which gives the internal value in terms of scaled
+points for the dimensional variables: $1$\,|pt|${}=65536$\,|sp| (stretch and
+shrink components are thus discarded).
+
+Tacit multiplication (see \autoref{ssec:tacit multiplication}) is implied,
+when a number or decimal number prefixes such a register or control sequence.
+\LaTeX{} lengths are skip control sequences and \LaTeX{} counters should be
+inserted using |\value|.
+
+Release |1.2| of the |\xintexpr| parser also recognizes and prefixes with
+|\number| the |\ht|, |\dp|, and |\wd| \TeX{} primitives as well as the
+|\fontcharht|, |\fontcharwd|, |\fontchardp| and |\fontcharic| \eTeX{}
+primitives.
+
+In the case of numbered registers like |\count255| or |\dimen0| (or |\ht0|),
+the resulting digits will be re-parsed, so for example |\count255 0| is like
+|100| if |\the\count255| would give |10|. The same happens with inputs such
+as |\fontdimen6\font|. And |\numexpr 35+52\relax| will be exactly as if |87|
+as been encountered by the parser, thus more digits may follow: |\numexpr
+35+52\relax 000| is like |87000|. If a new |\numexpr| follows, it is treated
+as what would happen when |\xintexpr| scans a number and finds a non-digit: it
+does a tacit multiplication.
+\begin{everbatim*}
+\xinttheexpr \numexpr 351+877\relax\numexpr 1000-125\relax\relax{} is the same
+as \xinttheexpr 1228*875\relax.
+\end{everbatim*}
+
+Control sequences however (such as |\parindent|) are picked up as a whole by
+|\xintexpr|, and the numbers they define cannot be extended extra digits, a
+syntax error is raised if the parser finds digits rather than a legal
+operation after such a control sequence.
+
+A token list variable must be prefixed by |\the|, it will not be unpacked
+automatically (the parser will actually try |\number|, and thus fail). Do not
+use |\the| but only |\number| with a dimen or skip, as the |\xintexpr| parser
+doesn't understand |pt| and its presence is a syntax error. To use a dimension
+expressed in terms of points or other \TeX{} recognized units, incorporate it in
+|\dimexpr...\relax|.
+
+Regarding how dimensional expressions are converted by \TeX{} into scaled points
+see also \autoref{sec:Dimensions}.
+
+\subsection{Catcodes and spaces}
+
+The main problems are caused by active characters, because \csbxint{expr} et
+al.\@ expand forward whatever comes from token stream; they apply |\string|
+only in a second step. For example the catcode of |&| from |&&| Boolean
+disjunction is not really important as long as it is not active, or comment,
+or escape...\@ or brace...\@ or ignored...\@ in brief, as long as it is reasonable,
+and in particular whether |@| is of catcode letter or other does not matter.
+
+It is always possible to insert manually the |\string| in the expression
+before a problematic (but reasonable) character catcode, or even to use
+|\detokenize| for a big chunk.
+
+\subsubsection{\csh{xintexprSafeCatcodes}}
+\label{xintexprSafeCatcodes}
+
+Some problems with active characters can be resolved on the fly by prefixing
+them by |\string| but some aspects of the parsing done by \csbxint{expr}
+involves delimited macros which need the comma, equality sign and closing
+parenthesis to have their standard catcodes.
+
+So \csbxint{exprSafeCatcodes} is provided as a utility to set in one go
+catcodes of many characters to \csbxint{expr}-safely compatible values. This
+is a non-expandable step as it changes catcodes.
+% This is used
+% internally by \csbxint{NewExpr} (restoring the catcodes on exit), hence it
+% does not have to be protected against active characters when used at
+% top-level.
+
+\csbxint{defvar}, \csbxint{deffunc}, et al., use it, and then they restore
+catcodes to the prior state via \csbxint{exprRestoreCatcodes}.
+
+% As \csbxint{NewExpr} and \csbxint{deffunc} and variants use internally some
+% |\scantokens|, they will (reasonably) succeed in sanitizing catcodes in the
+% expressions, even if all is from the replacement text of some macro whose
+% definition was done under some special catcode regime.
+
+% \csbxint{deffunc} is more lenient than \csbxint{defvar} regarding catcodes of
+% characters in expression bodies as it does some |\scantokens| which will reset
+% compatible catcodes.
+
+% Even if used in a context where catcodes are already set, \csbxint{deffunc},
+% \csbxint{defvar} and variants ignore completely the colon in |:=| so it can
+% have any (reasonable) catcode. Moreover it is optional.
+
+% The semi-colon in the syntax of \csbxint{Digits} is no real problem either
+% (cf. \csbxint{Digits} documentation).
+
+\subsubsection{\csh{xintexprRestoreCatcodes}}
+\label{xintexprRestoreCatcodes}
+
+Restores the catcodes to the state prevailing at the time of the last executed
+\csbxint{exprSafeCatcodes} (if located at the same \LaTeX\ environment or
+\TeX\ grouping level).
+
+Prior to |1.4k|, in a situation like the following:
+\begin{everbatim}
+\xintexprSafeCatcodes
+....stuff possibly changing catcodes
+\xintexprSafeCatcodes
+....stuff possibly changing catcodes
+\xintexprSafeCatcodes
+....stuff possibly changing catcodes
+\xintexprRestoreCatcodes
+\end{everbatim}
+On exit, the catcodes recovered their status as prior to the \emph{first}
+\csbxint{exprSafeCatcodes}. Since |1.4k|, they are set to what they were
+prior to the \emph{last} \csbxint{exprSafeCatcodes}, i.e. the mechanism is now
+similar to a ``last in, first out'' stack.
+
+Note that no global assignments are made so the behaviour can be modified
+by usage of \TeX\ groups or \LaTeX\ environments: e.g. if an
+\csbxint{exprSafeCatcodes} is issued inside a \LaTeX\ environment it does not
+have to be paired by \csbxint{exprRestoreCatcodes} explicitly, the catcode
+scope is limited by the environment.
+
+\bigskip
+
+Spaces inside an |\xinttheexpr...\relax| should mostly be
+innocuous (except inside macro arguments).
+
+|\xintexpr| and |\xinttheexpr| are for the most part agnostic regarding
+catcodes, % (unbraced) digits, binary operators, minus and plus signs as
+% prefixes, dot as decimal mark, parentheses, may be indifferently of catcode
+% letter or other or subscript or superscript, ..., except that they
+% should not be \emph{active}, as for example are |!?;:| with |babel-french|.%
+% %
+% \footnote{Furthermore, although \csbxint{expr} uses \csa{string}, it is
+% escape-char agnostic. It should work with any \csa{escapechar} setting
+% including -1.}
+but the characters
+% |+|, |-|, |*|, |/|, |^|, |!|, |&|, \verb+|+, |?|, |:|, |<|, |>|,
+%|=|, |(|, |)|, |"|, |[|, |]|, |;|,
+in the expression should not be «active» (except on purpose) as everything is
+expanded along the way, and |\xintexpr| will choke on typesetting related
+commands. One can use |\string| to prefix a problematic character.
+
+
+Digits, slash, square brackets, minus sign, in the output from an
+|\xinttheexpr| are all of catcode 12. For |\xintthefloatexpr| the `e' in the
+output has its standard catcode ``letter''.
+
+
+
+
+\subsection{Expandability, \csh{xintexpro}}
+
+As is the case with all other package macros |\xintexpr| \fexpan ds (in two
+steps) to its final (somewhat protected) result; and |\xinttheexpr| \fexpan ds
+(in two steps) to the chain of digits (and possibly minus sign |-|, decimal
+mark |.|, fraction slash |/|, scientific |e|, square brackets |[|, |]|)
+representing the result.
+
+The once expanded |\xintexpr| is |\romannumeral0\xintexpro|. And there
+are similarly |\xintiexpro| |\xintiiexpro| and |\xintfloatexpro|. For an
+example see \autoref{ssec:fibonacci}.
+
+An expression can only be legally finished by a |\relax| token, which
+will be absorbed.
+
+It is quite possible to nest expressions among themselves; for example, if one
+needs inside an |\xintiiexpr...\relax| to do some computations with fractions,
+rounding the final result to an integer, one just has to insert
+|\xintiexpr...\relax|. The functioning of the infix operators will not be in
+the least affected from the fact that the outer ``environment'' is the
+|\xintiiexpr| one.
+
+
+\subsection{\csh{xintDigits*}, \csh{xintSetDigits*}}
+\label{xintDigits*}
+\label{xintSetDigits*}
+
+These starred variants of \csbxint{Digits} and \csbxint{SetDigits} execute
+\csbxint{reloadxinttrig} and \csbxint{reloadxintlog}.
+
+\subsection{\csh{xintiexpr}, \csh{xinttheiexpr}}
+\label{xintiexpr}\label{xinttheiexpr}\label{thexintiexpr}
+
+Equivalent\etype{x} to doing |\xintexpr round(...)\relax| (more precisely,
+|round| is applied to each leaf item of the |ople| independently of its
+depth).
+
+Intermediate calculations are exact, only the final output gets
+rounded. Half integers are rounded towards $+\infty$ for positive
+numbers and towards $-\infty$ for negative ones.
+
+An optional parameter |D| within brackets, immediately after |\xintiexpr| is
+allowed: it instructs (for |D>0|) the expression to do its final rounding to
+the nearest value with that many digits after the decimal mark, i.e.\@
+|\xintiexpr [D] <expression>\relax| is equivalent (in case of a single
+expression) to |\xintexpr round(<expression>, D)\relax|.
+
+|\xintiexpr [0] ...| is the same as |\xintiexpr ...| and rounds to an integer.
+
+The case of negative |D| gives quantization to an integer multiple of
+\dtt{1e-D}.\NewWith{1.4a} This was modified at |1.4f| and the produced value
+is now the rounded quotient by \dtt{1e-D} (i.e. no trailing zeros nor
+scientific exponent in the output).
+
+If truncation rather than rounding is needed on can use |\xintexpr
+trunc(...)\relax| for truncation to an integer or |\xintexpr
+trunc(...,D)\relax| for quantization to an integer multiple or \dtt{1eD} (if
+|D>0|, for |D<0| the analog would be |trunc((...)/1e-D)|). But
+this works only for a single scalar value.
+
+\begin{framed}
+ When defining a macro doing something such as |\xintiexpr #1\relax|,
+ it is recommended to rather use |\xintiexpr\empty #1\relax|, as the
+ |#1| may start with a |[| which without the |\empty| would be
+ interpreted by |\xintiexpr| as the start of the optional |[D]|.
+\end{framed}
+
+\subsection{\csh{xintiiexpr}, \csh{xinttheiiexpr}}
+\label{xintiiexpr}\label{xinttheiiexpr}\label{thexintiiexpr}
+
+This variant\etype{x} does not know fractions. It deals almost only with long
+integers. Comma separated lists of expressions are allowed.
+
+\begin{framed}
+ It maps |/| to the \emph{rounded} quotient. The operator
+ |//| is, like in |\xintexpr...\relax|, mapped to \emph{truncated} division.
+ The Euclidean quotient (which for positive operands is like the truncated
+ quotient) was, prior to release |1.1|, associated to |/|. The function
+ |quo(a,b)| can still be employed.
+\end{framed}
+
+The \csbxint{iiexpr}-essions use the `ii' macros for addition, subtraction,
+multiplication, power, square, sums, products, Euclidean quotient and
+remainder.
+
+The |round|, |trunc|, |floor|, |ceil| functions are still available, and are
+about the only places where fractions can be used, but |/| within, if not
+somehow hidden will be executed as integer rounded division. To avoid this one
+can wrap the input in \dtt{qfrac}: this means however that none of the normal
+expression parsing will be executed on the argument.
+
+To understand the illustrative examples, recall that |round| and |trunc| have
+a second (non negative) optional argument. In a normal \csbxint{expr}-essions,
+|round| and |trunc| are mapped to \csbxint{Round} and \csbxint{Trunc}, in
+\csbxint{iiexpr}-essions, they are mapped to \csbxint{iRound} and
+\csbxint{iTrunc}.
+
+
+\begin{everbatim*}
+\xinttheiiexpr 5/3, round(5/3,3), trunc(5/3,3), trunc(\xintDiv {5}{3},3),
+trunc(\xintRaw {5/3},3)\relax{} are problematic, but
+%
+\xinttheiiexpr 5/3, round(qfrac(5/3),3), trunc(qfrac(5/3),3), floor(qfrac(5/3)),
+ceil(qfrac(5/3))\relax{} work!
+\end{everbatim*}
+
+On the other hand decimal numbers and scientific numbers can be used directly
+as arguments to the |num|, |round|, or any function producing an integer.
+
+\begin{framed}
+ Scientific numbers will be
+ represented with as many zeroes as necessary, thus one does not want to
+ insert \dtt{num(1e100000)} for example in an \csa{xintiiexpr}ession!
+\end{framed}
+
+%
+\begin{everbatim*}
+\xinttheiiexpr num(13.4567e3)+num(10000123e-3)\relax
+% should (num truncates) compute 13456+10000
+\end{everbatim*}
+%
+
+The |reduce| function is not available and will raise an error. The |frac|
+function also. The |sqrt| function is mapped to \csbxint{iiSqrt} which gives
+a truncated square root. The |sqrtr| function is mapped to \csbxint{iiSqrtR}
+which gives a rounded square root.
+
+One can use the Float macros if one is careful to use |num|, or |round|
+etc\dots on their output.
+
+\begin{everbatim*}
+\xinttheiiexpr \xintFloatSqrt [20]{2},
+ \xintFloatSqrt [20]{3}\relax % no operations
+\end{everbatim*}
+The above went through because no actual operations were carried out. But it
+is dangerous because the ``printer'' for \csbxint{theiiexpr} could choke on
+such values. By default however it does nothing.
+
+In the next example there will be an addition. So we firt apply |round| to
+get integers (the second argument of |round| and |trunc| tells how many digits
+from after the decimal mark one should keep.)
+\begin{everbatim*}
+\xinttheiiexpr round(\xintFloatSqrt [20]{2},19) +
+ round(\xintFloatSqrt [20]{3},19)\relax
+\end{everbatim*}
+
+The whole point of \csbxint{iiexpr} is to gain some speed in
+\emph{integer-only} algorithms, and the above explanations related to how to
+nevertheless use fractions therein are a bit peripheral. We observed
+(2013/12/18) of the order of $30$\% speed gain when dealing with numbers with
+circa one hundred digits (1.2: this info may be obsolete).
+
+
+\subsection{\csh{xintboolexpr}, \csh{xinttheboolexpr}}
+\label{xintboolexpr}\label{xinttheboolexpr}\label{thexintboolexpr}
+
+Equivalent\etype{x} to doing |\xintexpr ...\relax| and returning $True$ if the
+result does not vanish, and $False$ if the result is zero. As |\xintexpr|, this
+can be used on comma separated lists of expressions, and even bracketed lists.
+\CHANGED{1.4}
+
+It can be customized, one only needs to modify the following:
+\begin{everbatim}
+\def\xintboolexprPrintOne#1{\xintiiifNotZero{#1}{True}{False}}%
+\end{everbatim}
+Not only are |True| and |False| usable in input, also |true| and |false| are
+pre-declared variables.
+
+Maybe obsolete:
+
+There is slight quirk in case it is used as a sub-expression: the boolean
+expression needs at least one logic operation else the value is not
+standardized to |1| or |0|, for example we get from
+\begin{everbatim*}
+\xinttheexpr \xintboolexpr 1.23\relax\relax\newline
+\end{everbatim*}which is to be compared with
+\begin{everbatim*}
+\xinttheboolexpr 1.23\relax
+\end{everbatim*}
+
+% A related issue existed with
+% |\xinttheexpr \xintiexpr 1.23\relax\relax|, which was fixed with |1.1|
+% release, and I decided back then not to add the needed overhead also to the
+% |\xintboolexpr| context, as one only needs to use |?(1.23)| for example or
+% involve the |1.23| in any logic operation like |1.23 'and' 3.45|, or involve
+% the |\xintboolexpr ..\relax | itself with any logical operation, contrarily to
+% the sub-|\xintiexpr| case where |\xinttheexpr 1+\xintiexpr 1.23\relax\relax|
+% did behave contrarily to expectations until |1.1|.
+
+
+\subsection{\csh{xintfloatexpr},
+ \csh{xintthefloatexpr}}
+\label{xintfloatexpr}\label{xintthefloatexpr}\label{thexintfloatexpr}
+
+\csbxint{floatexpr}|...\relax|\etype{x} is exactly like |\xintexpr...\relax|
+but with the four binary operations and the power function mapped to
+\csa{xintFloatAdd}, \csa{xintFloatSub}, \csa{xintFloatMul}, \csa{xintFloatDiv}
+and \csa{xintFloatPower}, respectively.\footnote{Since |1.2f| the \string^
+ handles half-integer exponents, contrarily to \csa{xintFloatPower}.}
+
+The target precision for the computation is from the
+current setting of |\xintDigits|. Comma separated lists of expressions are
+allowed.
+
+An optional parameter within brackets |[Q]| is allowed at the very start
+of the expression:
+\begin{itemize}
+\item if positive it instructs the macro to round the result to that
+ many digits of precision. It thus makes sense to employ it only if
+ this parameter is less than the \csbxint{theDigits} precision.
+\item if negative it means to trim off that many digits (of course, in
+ the sense of rounding the values to shorter mantissas). Don't use it
+ to trim all digits (or more than all)!
+\end{itemize}
+
+Since |1.2f| all float operations first round their arguments; a parsed number
+is not rounded prior to its use as operand to such a float operation.
+
+
+|\xintDigits:=36\relax|\xintDigits:=36\relax
+%
+\leftedline{|\xintthefloatexpr
+ (1/13+1/121)*(1/179-1/173)/(1/19-1/18)\relax|}
+%
+\leftedline{\dtt{\xintthefloatexpr
+ (1/13+1/121)*(1/179-1/173)/(1/19-1/18)\relax}}
+% 0.00564487459334466559166166079096852897
+%
+\leftedline{|\xintthefloatexpr\xintexpr
+ (1/13+1/121)*(1/179-1/173)/(1/19-1/18)\relax\relax|}
+%
+\leftedline{\dtt{\xintthefloatexpr\xintexpr
+ (1/13+1/121)*(1/179-1/173)/(1/19-1/18)\relax\relax}}
+
+\xintDigits := 16;
+
+The latter is the rounding of the exact result. The former one has
+its last three digits wrong due to the cumulative effect of rounding errors
+in the intermediate computations, as compared to exact evaluations.
+
+
+
+
+I recall here from \autoref{ssec:floatingpoint} that with release |1.2f| the
+float macros for addition, subtraction, multiplication and division round
+their arguments first to |P| significant places with |P| the asked-for
+precision of the output; and similarly the power macros and the
+square root macro. This does not modify anything for computations with
+arguments having at most |P| significant places already.
+
+\begin{framed}
+ When defining a macro doing something such as |\xintfloatexpr #1\relax|,
+ it is recommended to rather use |\xintfloatexpr\empty #1\relax|, as the
+ |#1| may start with a |[| which without the |\empty| would be
+ interpreted by |\xintfloatexpr| as the start of the optional |[Q]|.
+\end{framed}
+
+\subsection{\csh{xinteval}, \csh{xintieval}, \csh{xintiieval},
+ \csh{xintfloateval}}
+\label{xinteval}\label{xintieval}\label{xintiieval}\label{xintfloateval}
+
+\csbxint{eval}\etype{x} is an \fexpan dable macro which is basically
+defined in such a way that |\xinteval|\marg{expression} behaves like
+\csbxint{theexpr}\marg{expression}|\relax|. It expands completely in
+two steps and delivers its output using digits, the dot |.| as decimal
+separator, the letter |e| for scientific notation, the slash |/| for
+fractions, as well as commas in case of multi-items expression and
+square brackets |[| and |]| for nesting.
+
+\csbxint{ieval}\etype{x} is similarly related to \csbxint{theiexpr}. It
+admits an optional argument |[D]| which may be located in the expected
+location from conventions of \LaTeX2e macros with optional argument, but
+had been long constrained (until |1.4k|) to be inside the braces at the
+start of the expression.
+\begin{everbatim*}
+\xintieval[7]{355/113} = \xintieval{[7]355/113}
+\end{everbatim*}
+\begin{framed}
+ When defining a macro doing something such as |\xintieval{#1}|,
+ it is recommended to rather use |\xintieval{\empty #1}|, as the
+ |#1| may start with a |[| which without the |\empty| would be
+ interpreted by |\xintieval| as the start of the optional |[D]|.
+\end{framed}
+
+\csbxint{iieval}\etype{x} is similarly related to \csbxint{theiiexpr}.
+% \begin{everbatim*}
+% \xintiieval{add(x^2, x = 100..110), add(x^3, x = 100..110)}
+% \end{everbatim*}
+
+\csbxint{floateval}\etype{x} is similarly related to
+\csbxint{thefloatexpr}. It admits an optional argument |[Q]| which
+may be located either outside (since |1.4k|) or inside the braces.
+\begin{everbatim*}
+\xintfloateval [7]{355/113} = \xintfloateval{[7] 355/113}
+\end{everbatim*}
+
+When negative, the optional argument tells how many digits to remove
+from the prevailing precision:
+\begin{everbatim*}
+\xintfloateval[-2]{355/113}=
+\xintfloateval{[-2]355/113} has \xinttheDigits\ minus 2 digits.
+\end{everbatim*}
+
+\begin{framed}
+ When defining a macro doing something such as |\xintfloateval{#1}|,
+ it is recommended to rather use |\xintfloateval{\empty #1}|, as the
+ |#1| may start with a |[| which without the |\empty| would be
+ interpreted by |\xintfloateval| as the start of the optional |[Q]|.
+\end{framed}
+
+
+The \csbxint{eval} et al. macros have the advantage that they can be
+nested within things such as the |\num| macro of
+\href{http://ctan.org/pkg/siunitx}{siunitx}, which would choke on some
+of the syntax elements which are allowed inside
+\csb{xinttheexpr}|...\relax|, such as brackets. Hidden inside the
+braces as argument to \csbxint{eval} et al., they do not cause a
+breakage of |\num| anymore.
+
+And regarding \csbxint{ieval} and \csbxint{floateval} one sees here the
+advantage that their respective optional arguments can (and had to until
+|1.4k|) be located within the braces too...
+
+\subsection{Using an expression parser within another one}
+
+This was already illustrated before. In the following:
+\begin{everbatim*}
+\xintfloatexpr \xintexpr add(1/i, i=1234..1243)\relax ^100\relax
+\end{everbatim*},
+the inner sum is computed exactly. Then it will be rounded to |\xinttheDigits|
+significant digits, and then its power will be evaluated as a float operation.
+One should avoid the "|\xintthe|" parsers in inner positions as this induces
+digit by digit parsing of the inner computation result by the outer parser.
+Here is the same computation done with floats all the way:
+\begin{everbatim*}
+\xintfloatexpr add(1/i, i=1234..1243)^100\relax
+\end{everbatim*}
+
+Not surprisingly this differs from the previous one which was exact until
+raising to the |100|th power.
+
+The fact that the inner expression occurs inside a bigger one has nil
+influence on its behaviour. There is the limitation though that the outputs
+from \csbxint{expr} and \csbxint{floatexpr} can not be used directly in
+\csbxint{theiiexpr} integer-only parser. But one can do:
+\begin{everbatim*}
+\xintiiexpr round(\xintfloatexpr 3.14^10\relax)\relax % or trunc
+\end{everbatim*}
+
+
+\subsection{The \csh{xintthecoords} macro}
+\label{xintthecoords}
+
+It converts (in two expansion steps) the expansion result of
+\csbxint{floatexpr} (or \csbxint{expr} or \csbxint{iiexpr}) into the |(a, b)
+(c, d) ...| format for list of coordinates as expected by the |TikZ|
+|coordinates| syntax.%
+\begin{everbatim*}
+\begin{figure}[htbp]
+\centering\begin{tikzpicture}[scale=10]\xintDigits:=8\relax
+ \clip (-1.1,-.25) rectangle (.3,.25);
+ \draw [blue] (-1.1,0)--(1,0);
+ \draw [blue] (0,-1)--(0,+1);
+ \draw [red] plot[smooth] coordinates {%
+%%% \xintthecoords converts output of next expression into the
+%%% (x1, y1) (x2, y2) ...
+%%% format
+ \xintthecoords\xintfloatexpr
+%%% This syntax -1+[0..4]/2 is currenty dropped at xint 1.4
+%%% seq((x^2-1,mul(x-t,t=-1+[0..4]/2)),x=-1.2..[0.1]..+1.2)\relax
+%%% Use this:
+ seq((x^2-1,mul(x-t,t=seq(-1+u/2, u=0..4))),x=-1.2..[0.1]..+1.2)
+ \relax
+ };
+\end{tikzpicture}
+\caption{Coordinates with \cs{xintthecoords}.}
+\end{figure}
+\end{everbatim*}
+
+% Notice: if x goes not take exactly value 1 or -1, the origin appears slightly
+% off the curve, not MY fault!!!
+It is currently undecided how \csa{xintthecoords} should handle bracketed
+data.\UNSTABLE{} Currently, it (or |TikZ|) will break it the input contains
+nested structures. One can use it with \func{flat} which removes all nesting.
+And in combination with \func{zip} it is easy to plot data given by some
+mechanism in separate
+lists of x- and y-coordinates (see an example in next section)
+
+\subsection{The \csh{xintthespaceseparated} macro}
+\label{xintthespaceseparated}
+
+It converts (in two expansion steps)\NewWith{1.4a} the expansion result of
+\csbxint{floatexpr} (or \csbxint{expr} or \csbxint{iiexpr}) into the space
+separated format suitable for usage with |PS-Tricks| |\listplot| macro.
+
+Here is for example some syntax (the replacement text of |\foo|, which is used
+here only to show that indeed complete expansion is attained in two steps)
+which can be used as argument to |\listplot|. Using 4 fractional decimal
+digits is sufficient when unit is the centimeter (it gives a fixed point
+precision of one micron, amply enough for plots...).
+\begin{everbatim*}
+\oodef\foo{%
+\xintthespaceseparated
+\xintiexpr[4]\xintfloatexpr seq((i, log10(i)), i=1..[0.5]..10)\relax\relax
+}\meaning\foo
+\end{everbatim*}
+
+Here we don't really need the inner |\xintfloatexpr...\relax| because the
+\func{log10} function works the same in the exact parser |\xintexpr| but in
+general this is recommended.
+
+It is currently undecided how \csa{xintthespaceseparated} should handle
+bracketed data.\UNSTABLE{} Currently, it (or |\listplot|) will break if the
+input contains nested structures. One can use it with \func{flat} which
+removes all nesting. And in combination with \func{zip} it is easy to plot
+data given by some mechanism in separate lists of x- and y-coordinates.
+
+\begin{everbatim*}
+% let's imagine we have something like this
+\def\Xcoordinates{1, 3, 5, 7, 9}
+\def\Ycoordinates{1, 9, 25, 49, 81}
+% then:
+|\xintthespaceseparated\xintexpr flat(zip([\Xcoordinates], [\Ycoordinates]))\relax|
+is suitable to use as argument to |\listplot|, as it expands to
+\xintthespaceseparated\xintexpr flat(zip([\Xcoordinates], [\Ycoordinates]))\relax
+\end{everbatim*}
+
+\subsection{\csh{xintifboolexpr}, \csh{xintifboolfloatexpr}, \csh{xintifbooliiexpr}}
+\label{xintifboolexpr}
+\label{xintifboolfloatexpr}
+\label{xintifbooliiexpr}
+
+\csh{xintifboolexpr}\marg{expr}\marg{YES}\marg{NO}\etype{xnn} does
+\csbxint{theexpr}<expr>|\relax| and then executes the \meta{YES} or the
+\meta{NO} branch depending on whether the outcome was non-zero or zero. Thus
+one can read \emph{if bool expr} as meaning \emph{if not zero}:
+\centeredline{if \meta{expr}-ession does not vanish do \meta{YES} else do
+ \meta{NO}}
+
+The expression is not limited to using only comparison operators and Boolean
+logic (|<|, |>|, |==|, |!=|, |&&|, \verb+||+, \func{all}, \func{any},
+\func{xor}, \func{bool}, \func{togl}, ...), it can be the most general
+computation.
+
+\csh{xintifboolfloatexpr}\marg{expr}\marg{YES}\marg{NO}\etype{xnn} does
+\csbxint{thefloatexpr}\meta{expr}|\relax| and then executes the \meta{YES} or the
+\meta{NO} branch depending on whether the outcome was non zero or zero.
+
+\csh{xintifbooliiexpr}\marg{expr}\marg{YES}\marg{NO}\etype{xnn} does
+\csbxint{theiiexpr}\meta{expr}|\relax| and then executes the \meta{YES} or the
+\meta{NO} branch depending on whether the outcome was non zero or zero.
+
+The expression argument must be a single one, comma separated sub-expressions
+will cause low-level errors.
+
+\subsection{\csh{xintifsgnexpr}, \csh{xintifsgnfloatexpr}, \csh{xintifsgniiexpr}}
+\label{xintifsgnexpr}
+\label{xintifsgnfloatexpr}
+\label{xintifsgniiexpr}
+
+\csh{xintifsgnexpr}\marg{expr}\marg{<0}\marg{=0}\marg{>0}\etype{xnnn} evaluates
+the \csbxint{expr}ession and chooses the branch corresponding to its sign.
+
+\csh{xintifsgnfloatexpr}\marg{expr}\marg{<0}\marg{=0}\marg{>0}\etype{xnnn} evaluates
+the \csbxint{floatexpr}ession and chooses the branch corresponding to its sign.
+
+\csh{xintifsgniiexpr}\marg{expr}\marg{<0}\marg{=0}\marg{>0}\etype{xnnn} evaluates
+the \csbxint{iiexpr}ession and chooses the branch corresponding to its sign.
+
+The expression argument must be a single one, comma separated sub-expressions
+will cause low-level errors.
+
+\subsection{The \csh{xintNewExpr}, \csh{xintNewIIExpr},
+ \csh{xintNewFloatExpr}, \csh{xintNewIExpr}, and \csh{xintNewBoolExpr}
+ macros}
+\label{xintNewExpr}
+\label{xintNewIIExpr}
+\label{xintNewFloatExpr}
+\label{xintNewIExpr}
+\label{xintNewBoolExpr}
+
+\csbxint{NewExpr} macro is used as:
+%
+\leftedline{|\xintNewExpr{\myformula}[n]|\marg{stuff}, where}
+\begin{itemize}
+\item \meta{stuff} will be inserted inside |\xinttheexpr . . . \relax|,
+\item |n| is an integer between zero and nine, inclusive, which is the number
+ of parameters of |\myformula|,
+\item the placeholders |#1|, |#2|, ..., |#n| are used inside \meta{stuff} in
+ their usual r\^ole,%
+%
+\catcode`# 12
+\footnote{if \csa{xintNewExpr} is used inside a macro,
+ the |#|'s must be doubled as usual.}
+ \footnote{the |#|'s will in pratice have their usual
+ catcode, but category code other |#|'s are accepted too.}
+\catcode`# 6
+%
+\item the |[n]| is \emph{mandatory}, even for |n=0|.%
+\footnote{there is some use for \csa{xintNewExpr}|[0]| compared to an
+ \csa{edef} as \csa{xintNewExpr} has some built-in catcode protection.}
+\item the macro |\myformula| is defined without checking if it already exists,
+ \LaTeX{} users might prefer to do first |\newcommand*\myformula {}| to get a
+ reasonable error message in case |\myformula| already exists,
+\item the protection against active characters is done automatically (as long
+ as the whole thing has not already been fetched as a macro argument and
+ the catcodes correspondingly already frozen).
+\end{itemize}
+
+It (if it succeeds) will be a completely expandable macro entirely built-up using |\xintAdd|,
+|\xintSub|, |\xintMul|, |\xintDiv|, |\xintPow|, etc\dots as corresponds to the
+expression written with the infix operators.
+Macros created by |\xintNewExpr| can thus be nested.
+
+\begin{everbatim*}
+ \xintNewFloatExpr \FA [2]{(#1+#2)^10}
+ \xintNewFloatExpr \FB [2]{sqrt(#1*#2)}
+\begin{enumerate}[nosep]
+ \item \FA {5}{5}
+ \item \FB {30}{10}
+ \item \FA {\FB {30}{10}}{\FB {40}{20}}
+\end{enumerate}
+\end{everbatim*}
+
+The documentation is much shortened here because \csbxint{NewExpr} and \csbxint{deffunc}
+are very much related one with the other.
+
+\begin{framed}
+ ATTENTION!
+
+ The original spirit of \csbxint{NewExpr} was to define a (possibly very big)
+ macro using only \xintfracname, and this means in particular that it must be
+ used only with arguments compatible with the \xintfracname input
+ format.\IMPORTANTf
+
+ Thus an |\xintexpr| declared variable has no chance to work, it must be
+ wrapped explicitly in |\xinteval{...}| to be fetched as argument to a macro
+ constructed by \csbxint{NewExpr}.
+\end{framed}
+
+They share essentially the same limitations.
+
+Notice though that \csbxint{NewFloatExpr} accepts and recognizes the optional
+argument |[Q]| of \csbxint{floatexpr}, contrarily to \csbxint{deffloatfunc}.
+Use an |\empty| in case the contents are not known in advance.
+
+
+Historical note: prior to |1.4|, \xintexprname used a |\csname..\endcsname|
+encapsulation technique which impacted the string pool memory. The
+\csbxint{NewExpr} was designed as a method to pre-parse the expression and
+produce one single, gigantic, nested usage of the relevant \xintfracname
+macros. This way, only those macros were expanded which had nil impact on the
+\TeX{} string pool.
+
+Later on it was found that this mechanism could be employed to define
+functions. Basically underneath |98%| of \csbxint{NewExpr} and
+\csbxint{deffunc} are using the same shared code.
+
+\xintDigits:= 16\relax
+
+\subsection{Analogies and differences of \csh{xintiiexpr} with \csh{numexpr}}
+
+\csbxint{iiexpr}|..\relax| is a parser of expressions knowing only (big)
+integers. There are, besides the enlarged range of allowable inputs, some
+important differences of syntax between |\numexpr| and |\xintiiexpr| and
+variants:
+\begin{itemize}
+\item Contrarily to |\numexpr|, the |\xintiiexpr| parser will stop expanding
+ only after having encountered (and swallowed) a \emph{mandatory} |\relax|
+ token.
+\item In particular, spaces between digits (and not only around infix
+ operators or parentheses) do not stop |\xintiiexpr|, contrarily to the
+ situation with |numexpr|: |\the\numexpr 7 + 3 5\relax| expands (in one
+ step)%
+%
+\footnote {The |\numexpr| triggers continued expansion after the space
+ following the |3| to check if some operator like |+| is upstream. But
+ after having found the |5| it treats it as and end-marker.}
+%
+ to \dtt{\detokenize\expandafter{\the\numexpr 7 + 3 5\relax}\unskip}, whereas
+ |\xintthe\xintiiexpr 7 + 3 5\relax| expands (in two steps) to
+ \dtt{\detokenize\expandafter\expandafter\expandafter {\xintthe\xintiiexpr 7
+ + 3 5\relax}}.%
+%
+\footnote {Since |1.2l| one can also use the underscore |_| to separate digits
+for readability of long numbers.}
+
+\item Inside an |\edef|, an expression |\xintiiexpr...\relax| get fully
+ evaluated, whereas |\numexpr| without |\the| or |\number| prefix would not,
+ if not itself embedded in another |\the\numexpr| or similar context.
+\item (ctd.) The private format to which |\xintiiexpr...\relax| (et al.)
+ evaluates may use |\xintthe| prefix to turn into explicit digits,
+ (for example in arguments to some macros which expand their arguments). The |\the| \TeX\ primitive prefix would
+ not work here.
+\item (ctd.) One can embed a |\numexpr...\relax| (with its |\relax|!) inside an
+ |\xintiiexpr...\relax| without |\the| or |\number|, but the reverse situation
+ requires usage of |\xintthe| or \csbxint{eval} user interface,
+\item |\numexpr -(1)\relax| is illegal. In contrast |\xintiiexpr -(1)\relax| is
+ perfectly legal and gives the expected result (what else ?).
+\item |\numexpr 2\cnta\relax| is illegal (with |\cnta| a |\count| register.)
+ In contrast
+ |\xintiiexpr 2\cnta\relax| is perfectly legal and will do the tacit
+ multiplication.
+\item |\the\numexpr| or |\number\numexpr| expands in one step, but
+ |\xintthe\xintiiexpr| or |\xinttheiiexpr| needs two steps.
+\end{itemize}
+
+\subsection{Chaining expressions for expandable algorithmics}
+\label{ssec:fibonacci}
+
+We will see in this section how to chain |\xintexpr|-essions with
+|\expandafter|'s, like it is possible with |\numexpr|. For this it is
+convenient to use |\romannumeral0\xintexpro| which is the once-expanded form of
+|\xintexpr|, as we can then chain using only one |\expandafter| each time.
+
+For example, here is the code employed
+on the title page to compute (expandably, of course!) the 1250th Fibonacci
+number:
+
+\begin{everbatim*}
+\catcode`_ 11
+\def\Fibonacci #1{% \Fibonacci{N} computes F(N) with F(0)=0, F(1)=1.
+ \expandafter\Fibonacci_a\expandafter
+ {\the\numexpr #1\expandafter}\expandafter
+ {\romannumeral0\xintiiexpro 1\expandafter\relax\expandafter}\expandafter
+ {\romannumeral0\xintiiexpro 1\expandafter\relax\expandafter}\expandafter
+ {\romannumeral0\xintiiexpro 1\expandafter\relax\expandafter}\expandafter
+ {\romannumeral0\xintiiexpro 0\relax}}
+%
+\def\Fibonacci_a #1{%
+ \ifcase #1
+ \expandafter\Fibonacci_end_i
+ \or
+ \expandafter\Fibonacci_end_ii
+ \else
+ \ifodd #1
+ \expandafter\expandafter\expandafter\Fibonacci_b_ii
+ \else
+ \expandafter\expandafter\expandafter\Fibonacci_b_i
+ \fi
+ \fi {#1}%
+}% * signs are omitted from the next macros, tacit multiplications
+\def\Fibonacci_b_i #1#2#3{\expandafter\Fibonacci_a\expandafter
+ {\the\numexpr #1/2\expandafter}\expandafter
+ {\romannumeral0\xintiiexpro sqr(#2)+sqr(#3)\expandafter\relax
+ \expandafter}\expandafter
+ {\romannumeral0\xintiiexpro (2#2-#3)#3\relax}%
+}% end of Fibonacci_b_i
+\def\Fibonacci_b_ii #1#2#3#4#5{\expandafter\Fibonacci_a\expandafter
+ {\the\numexpr (#1-1)/2\expandafter}\expandafter
+ {\romannumeral0\xintiiexpro sqr(#2)+sqr(#3)\expandafter\relax
+ \expandafter}\expandafter
+ {\romannumeral0\xintiiexpro (2#2-#3)#3\expandafter\relax\expandafter}\expandafter
+ {\romannumeral0\xintiiexpro #2#4+#3#5\expandafter\relax\expandafter}\expandafter
+ {\romannumeral0\xintiiexpro #2#5+#3(#4-#5)\relax}%
+}% end of Fibonacci_b_ii
+% code as used on title page:
+%\def\Fibonacci_end_i #1#2#3#4#5{\xintthe#5}
+%\def\Fibonacci_end_ii #1#2#3#4#5{\xinttheiiexpr #2#5+#3(#4-#5)\relax}
+% new definitions:
+\def\Fibonacci_end_i #1#2#3#4#5{{#4}{#5}}% {F(N+1)}{F(N)} in \xintexpr format
+\def\Fibonacci_end_ii #1#2#3#4#5%
+ {\expandafter
+ {\romannumeral0\xintiiexpro #2#4+#3#5\expandafter\relax
+ \expandafter}\expandafter
+ {\romannumeral0\xintiiexpro #2#5+#3(#4-#5)\relax}}% idem.
+% \FibonacciN returns F(N) (in encapsulated format: needs \xintthe for printing)
+\def\FibonacciN {\expandafter\xint_secondoftwo\romannumeral-`0\Fibonacci }%
+\catcode`_ 8
+\end{everbatim*}
+
+
+The macro |\Fibonacci| produces not one specific value |F(N)| but a pair of
+successive values |{F(N)}{F(N+1)}| which can then serve as starting point of
+another routine devoted to compute a whole sequence |F(N), F(N+1),
+F(N+2),....|. Each of |F(N)| and |F(N+1)| is kept in the encapsulated internal
+\xintexprname format.
+
+|\FibonacciN| produces the single |F(N)|. It also keeps it in the private
+format; thus printing it will need the |\xintthe| prefix.
+
+\begingroup\footnotesize\sffamily\baselineskip 10pt
+Here a code snippet which
+checks the routine via a \string\message\ of the first $51$ Fibonacci
+numbers (this is not an efficient way to generate a sequence of such
+numbers, it is only for validating \csa{FibonacciN}).
+%
+\begin{everbatim}
+\def\Fibo #1.{\xintthe\FibonacciN {#1}}%
+\message{\xintiloop [0+1] \expandafter\Fibo\xintiloopindex.,
+ \ifnum\xintiloopindex<49 \repeat \xintthe\FibonacciN{50}.}
+\end{everbatim}
+\endgroup
+
+The way we use |\expandafter|'s to chain successive |\xintiiexpro| evaluations
+is exactly analogous to what is possible with |\numexpr|. The various
+|\romannumeral0\xintiiexpro| could very well all have been |\xintiiexpr|'s but
+then we would have needed |\expandafter\expandafter\expandafter| each
+time.
+
+\begin{framed}
+ There is a difference though: |\numexpr| does \emph{NOT} expand inside an
+ |\edef|, and to force its expansion we must prefix it with |\the| or
+ |\number| or |\romannumeral| or another |\numexpr| which is itself prefixed,
+ etc\dots.
+
+ But |\xintexpr|, |\xintiexpr|, ..., expand fully in an |\edef|, with the
+ completely expanded
+ result encapsulated in a private format.
+
+ Using |\xintthe| as prefix is necessary to print the result (like |\the| or
+ |\number| in the case of |\numexpr|), but it is not necessary to get the
+ computation done (contrarily to the situation with |\numexpr|).
+\end{framed}
+
+
+Our |\Fibonacci| expands completely under \fexpan sion, so we can use
+\hyperref[fdef]{\ttfamily\char92fdef} rather than |\edef| in a situation such
+as
+%
+\leftedline {|\fdef \X {\FibonacciN {100}}|\;,}
+%
+but it is usually about as efficient to employ |\edef|. And if we want
+%
+\leftedline{|\edef \Y {(\FibonacciN{100},\FibonacciN{200})}|\;,}
+%
+then |\edef| is necessary.
+
+Allright, so let's now give the code to generate |{F(N)}{F(N+1)}{F(N+2)}...|,
+using |\Fibonacci| for the first two and then using the standard recursion
+|F(N+2)=F(N+1)+F(N)|:
+
+\catcode`_ 11
+\def\FibonacciSeq #1#2{%#1=starting index, #2>#1=ending index
+ \expandafter\Fibonacci_Seq\expandafter
+ {\the\numexpr #1\expandafter}\expandafter{\the\numexpr #2-1}%
+}%
+\def\Fibonacci_Seq #1#2{%
+ \expandafter\Fibonacci_Seq_loop\expandafter
+ {\the\numexpr #1\expandafter}\romannumeral0\Fibonacci {#1}{#2}%
+}%
+\def\Fibonacci_Seq_loop #1#2#3#4{% standard Fibonacci recursion
+ {#3}\unless\ifnum #1<#4 \Fibonacci_Seq_end\fi
+ \expandafter\Fibonacci_Seq_loop\expandafter
+ {\the\numexpr #1+1\expandafter}\expandafter
+ {\romannumeral0\xintiiexpro #2+#3\relax}{#2}{#4}%
+}%
+\def\Fibonacci_Seq_end\fi\expandafter\Fibonacci_Seq_loop\expandafter
+ #1\expandafter #2#3#4{\fi {#3}}%
+\catcode`_ 8
+
+\begingroup
+\everb|@
+\catcode`_ 11
+\def\FibonacciSeq #1#2{%#1=starting index, #2>#1=ending index
+ \expandafter\Fibonacci_Seq\expandafter
+ {\the\numexpr #1\expandafter}\expandafter{\the\numexpr #2-1}%
+}%
+\def\Fibonacci_Seq #1#2{%
+ \expandafter\Fibonacci_Seq_loop\expandafter
+ {\the\numexpr #1\expandafter}\romannumeral0\Fibonacci {#1}{#2}%
+}%
+\def\Fibonacci_Seq_loop #1#2#3#4{% standard Fibonacci recursion
+ {#3}\unless\ifnum #1<#4 \Fibonacci_Seq_end\fi
+ \expandafter\Fibonacci_Seq_loop\expandafter
+ {\the\numexpr #1+1\expandafter}\expandafter
+ {\romannumeral0\xintiiexpro #2+#3\relax}{#2}{#4}%
+}%
+\def\Fibonacci_Seq_end\fi\expandafter\Fibonacci_Seq_loop\expandafter
+ #1\expandafter #2#3#4{\fi {#3}}%
+\catcode`_ 8
+|
+\endgroup
+
+This |\FibonacciSeq| macro is
+completely expandable but it is not \fexpan dable.
+
+This is not a problem in the next example which uses \csbxint{For*} as the
+latter applies repeatedly full expansion to what comes next each time it
+fetches an item from its list argument. Thus \csbxint{For*} still manages to
+generate the list via iterated full expansion.
+
+
+\begin{figure*}[ht!]
+ \phantomsection\label{fibonacci}
+ \newcounter{myindex}
+ \fdef\Fibxxx{\FibonacciN {30}}%
+ \setcounter{myindex}{30}%
+\centeredline{\tabskip 1ex
+\vbox{\halign{\bfseries#.\hfil&#\hfil &\hfil #\cr
+ \xintFor* #1 in {\FibonacciSeq {30}{59}}\do
+ {\themyindex &\xintthe#1 &
+ \xintiiRem{\xintthe#1}{\xintthe\Fibxxx}\stepcounter{myindex}\cr }}%
+}\vrule
+\vbox{\halign{\bfseries#.\hfil&#\hfil &\hfil #\cr
+ \xintFor* #1 in {\FibonacciSeq {60}{89}}\do
+ {\themyindex &\xintthe#1 &
+ \xintiiRem{\xintthe#1}{\xintthe\Fibxxx}\stepcounter{myindex}\cr }}%
+}\vrule
+\vbox{\halign{\bfseries#.\hfil&#\hfil &\hfil #\cr
+ \xintFor* #1 in {\FibonacciSeq {90}{119}}\do
+ {\themyindex &\xintthe#1 &
+ \xintiiRem{\xintthe#1}{\xintthe\Fibxxx}\stepcounter{myindex}\cr }}%
+}}%
+%
+\centeredline{Some Fibonacci numbers together with their residues modulo
+ |F(30)|\dtt{=\xintthe\Fibxxx}}
+\end{figure*}
+
+\begingroup
+\def\everbhook{\catcode`@ 14 }%
+% à propos après donc de nombreuses années j'ai fait finalement
+% un bug report https://github.com/latex3/latex2e/issues/823
+\everb|@
+\newcounter{myindex}% not "index", which would overwrite theindex environment!
+% (many have probably been bitten by this trap)
+\tabskip 1ex
+ \fdef\Fibxxx{\FibonacciN {30}}%
+ \setcounter{myindex}{30}%
+\vbox{\halign{\bfseries#.\hfil&#\hfil &\hfil #\cr
+ \xintFor* #1 in {\FibonacciSeq {30}{59}}\do
+ {\themyindex &\xintthe#1 &
+ \xintiiRem{\xintthe#1}{\xintthe\Fibxxx}\stepcounter{myindex}\cr }}%
+}\vrule
+\vbox{\halign{\bfseries#.\hfil&#\hfil &\hfil #\cr
+ \xintFor* #1 in {\FibonacciSeq {60}{89}}\do
+ {\themyindex &\xintthe#1 &
+ \xintiiRem{\xintthe#1}{\xintthe\Fibxxx}\stepcounter{myindex}\cr }}%
+}\vrule
+\vbox{\halign{\bfseries#.\hfil&#\hfil &\hfil #\cr
+ \xintFor* #1 in {\FibonacciSeq {90}{119}}\do
+ {\themyindex &\xintthe#1 &
+ \xintiiRem{\xintthe#1}{\xintthe\Fibxxx}\stepcounter{myindex}\cr }}%
+}%
+|
+\endgroup
+
+This produces the Fibonacci numbers from |F(30)| to |F(119)|, and
+computes also all the
+congruence classes modulo |F(30)|. The output has
+been put in a \hyperref[fibonacci]{float}, which appears
+\vpageref[above]{fibonacci}. I leave to the mathematically inclined
+readers the task to explain the visible patterns\dots |;-)|.
+
+\subsection{When expandability is too much}
+
+Let's use the macros of \autoref{ssec:fibonacci} related to Fibonacci numbers.
+Notice that the $47$th Fibonacci number is \dtt{\xintthe\FibonacciN {47}} thus
+already too big for \TeX{} and \eTeX{}.
+
+
+The |\FibonacciN| macro found in \autoref{ssec:fibonacci} is completely
+expandable, it is even \fexpan dable. We need a wrapper with |\xintthe|
+prefix
+\begin{everbatim*}
+\def\theFibonacciN{\xintthe\FibonacciN}
+\end{everbatim*}
+to print in the document or to use within |\message| (or \LaTeX\ |typeout|) to
+write to the log and terminal.
+
+\begingroup
+ \def\A {1859} \def\B {1573}
+ \edef\X {\theFibonacciN\A} \edef\Y {\theFibonacciN\B}
+ \edef\GCDAB {\xintiiGCD\A\B}\edef\Z {\theFibonacciN\GCDAB}
+ \edef\GCDXY{\xintiiGCD\X\Y}
+
+ The |\xintthe| prefix also allows its use it as argument to the \xintname
+ macros: for example if we are interested in knowing how many digits
+ $F(1250)$ has, it suffices to issue |\xintLen {\theFibonacciN {1250}}|
+ (which expands to \dtt{\xintLen {\theFibonacciN {1250}}}). Or if we want to
+ check the formula $gcd(F(1859),F(1573))=F(gcd(1859,1573))=F(143)$, we only
+ need%
+%
+\footnote{The
+ \csa{xintiiGCD} macro is provided by both the \xintgcdname package (since
+ |1.0|) and by the \xintname package (since |1.3d|).}
+%
+\begin{everbatim}
+$\xintiiGCD{\theFibonacciN{1859}}{\theFibonacciN{1573}}=%
+ \theFibonacciN{\xintiiGCD{1859}{1573}}$
+\end{everbatim}
+%
+which produces:
+%
+\leftedline{$\dtt{\xintiiGCD{\X}{\Y}}=\dtt{\theFibonacciN{\GCDAB}}$}
+
+The |\theFibonacciN| macro expanded its |\xintiiGCD{1859}{1573}| argument via the
+services of |\numexpr|: this step allows only things obeying the \TeX{} bound,
+naturally! (but \dtt{F(\xintiiPow2{31}}) would be rather big anyhow...).
+
+This is very convenient but of course it repeats the complete evaluation each
+time it is done. In practice, it is often useful to store the result of such
+evaluations in macros. Any |\edef| will break expandability, but if the goal
+is at some point to print something to the |dvi| or |pdf| output, and not only
+to the |log| file, then expandability has to be broken one day or another!
+
+Hence, in practice, if we want to print in the document some computation
+results, we can proceed like this and avoid having to repeat identical
+evaluations:
+\begin{everbatim}
+\begingroup
+ \def\A {1859} \def\B {1573}
+ \edef\X {\theFibonacciN\A} \edef\Y {\theFibonacciN\B}
+ \edef\GCDAB {\xintiiGCD\A\B}\edef\Z {\theFibonacciN\GCDAB}
+ \edef\GCDXY{\xintiiGCD\X\Y}
+The identity $\gcd(F(\A),F(\B))=F(\gcd(\A,\B))$ can be checked via evaluation
+of both sides: $\gcd(F(\A),F(\B))=\gcd(\printnumber\X,\printnumber\Y)=
+\printnumber{\GCDXY} = F(\gcd(\A,\B)) = F(\GCDAB) =\printnumber\Z$.\par
+ % some further computations involving \A, \B, \X, \Y
+\endgroup % closing the group removes assignments to \A, \B, ...
+% or choose longer names less susceptible to overwrite something.
+% Note: there is no LaTeX \newecommand which would be to \edef like
+% \newcommand is to \def
+\end{everbatim}
+The identity $\gcd(F(\A),F(\B))=F(\gcd(\A,\B))$ can be checked via evaluation
+of both sides: $\gcd(F(\A),F(\B))=\gcd(\printnumber\X,\printnumber\Y)=
+\printnumber{\GCDXY} = F(\gcd(\A,\B)) = F(\GCDAB) =\printnumber\Z$.\par
+\endgroup
+
+One may legitimately ask the author: why expandability
+to such extremes, for things such as big fractions or floating point numbers
+(even continued fractions...) which anyhow can not be used directly within
+\TeX's primitives such as |\ifnum|? Why insist on a concept
+which is foreign to the vast majority of \TeX\ users and even programmers?
+
+I have no answer: it made definitely sense at the start of \xintname (see
+\autoref{ssec:origins}) and once started I could not stop.
+
+
+\subsection{Acknowledgements (2013/05/25)}
+
+I was greatly helped in my preparatory thinking, prior to producing such an
+expandable parser, by the commented source of the
+\href{https://ctan.org/pkg/l3kernel}{l3fp} package, specifically the
+|l3fp-parse.dtx| file (in the version of April-May 2013; I think there was in
+particular a text called ``roadmap'' which was helpful). Also the source of the
+|calc| package was instructive, despite the fact that here for |\xintexpr| the
+principles are necessarily different due to the aim of achieving expandability.
+
+\clearpage
+\expandafter\let\csname xintexpr (old doc)nameUp\endcsname\undefined
\csname xinttrignameUp\endcsname
-\def\n{|{N}|}
-\def\m{|{M}|}
-\def\x{|{x}|}
-\section{Macros of the \xinttrigname package}
+\section{The \xinttrigname package}
\RaisedLabel{sec:trig}
\localtableofcontents
@@ -8662,6 +10282,7 @@ precision (recall that |*| is mapped to exact multiplication in
\noindent
\begin{everbatim*}
\xintDigits* := 48\relax
+Digits at \xinttheDigits:\newline
$sind(17)\approx\xintfloateval{sind(17)}$\newline
$cosd(17)\approx\xintfloateval{cosd(17)}$\newline
$tand(17)\approx\xintfloateval{tand(17)}$\newline
@@ -8674,6 +10295,7 @@ $atand(3)\approx\xintfloateval{atand(3)}$\newline
$tan(atan(7))\approx\xintfloateval{tan(atan(7))}$\newline
$asind(sind(25))\approx\xintfloateval{asind(sind(25))}$\par\medskip
\noindent\xintDigits* := 24\relax
+Digits at \xinttheDigits:\newline
$sind(17)\approx\xintfloateval{sind(17)}$\newline
$cosd(17)\approx\xintfloateval{cosd(17)}$\newline
$tand(17)\approx\xintfloateval{tand(17)}$\newline
@@ -8695,7 +10317,7 @@ $asind(sind(25))\approx\xintfloateval{asind(sind(25))}$\par
\def\m{|{M}|}
\def\x{|{x}|}
-\section{Macros of the \xintlogname package}
+\section{The \xintlogname package}
\RaisedLabel{sec:log}
This package provides logarithms, exponentials and fractional powers for use
@@ -8785,13 +10407,13 @@ The reason is that the log/exp approach loses accuracy for very big
exponents (say for exponents of the order of \dtt{100000000} or more). Here is
an example of a precise computation with a very large exponent (\dtt{\xintiieval{12^16}}):
\begin{everbatim*}
-$\xintTeXfromSci{\xintfloateval{1.00000001^\xintiiexpr 12^16\relax}}$\newline
+$\xintTeXFromSci{\xintfloateval{1.00000001^\xintiiexpr 12^16\relax}}$\newline
\xintDigits:=48;%\xintreloadxintlog is not done as log10/pow10 will not be used
-$\xintTeXfromSci{\xintfloateval{1.00000001^12^16}}$\newline
+$\xintTeXFromSci{\xintfloateval{1.00000001^12^16}}$\newline
\xintDigits:=64;%\xintreloadxintlog is not done as log10/pow10 will not be used
-$\xintTeXfromSci{\xintfloateval{1.00000001^12^16}}$\newline
+$\xintTeXFromSci{\xintfloateval{1.00000001^12^16}}$\newline
\xintDigits:=80;%\xintreloadxintlog is not done as log10/pow10 will not be used
-$\xintTeXfromSci{\xintfloateval{1.00000001^12^16}}$
+$\xintTeXFromSci{\xintfloateval{1.00000001^12^16}}$
\xintDigits:=16;%
\end{everbatim*}
@@ -8886,6 +10508,2730 @@ anecdotical evidence showing it is good.
\clearpage
\let\xintlognameUp\undefined
+\csname xinttoolsnameUp\endcsname
+\def\n{|{N}|}
+\def\m{|{M}|}
+\def\x{|{x}|}
+\section{Macros of the \xinttoolsname package}
+
+\RaisedLabel{sec:tools}
+
+These utilities used to be provided within the \xintname package; since |1.09g|
+(|2013/11/22|) they have been moved to an independently usable package
+\xinttoolsname, which has none of the \xintname facilities regarding big
+numbers. Whenever relevant release |1.09h| has made the macros |\long| so they
+accept |\par| tokens on input.
+
+The completely expandable utilities (up to \csbxint{iloop}) are documented
+first, then the non expandable utilities.
+
+\autoref{sec:examples}
+gives additional (some quite dated) examples of use of macros of this package.
+
+\xinttoolsname is automatically loaded by \xintexprname.
+
+\localtableofcontents
+
+\subsection{\csh{xintRevWithBraces}}\label{xintRevWithBraces}
+
+%{\small New in release |1.06|.\par}
+
+\edef\X{\xintRevWithBraces{12345}}
+\edef\y{\xintRevWithBraces\X}
+\expandafter\def\expandafter\w\expandafter
+ {\romannumeral0\xintrevwithbraces{{\A}{\B}{\C}{\D}{\E}}}
+
+%
+\csa{xintRevWithBraces}\marg{list}\etype{f} first does the \fexpan sion of its
+argument then it reverses the order of the tokens, or braced material, it
+encounters, maintaining existing braces and adding a brace pair around each
+naked token encountered. Space tokens (in-between top level braces or naked
+tokens) are gobbled. This macro is mainly thought out for use on a \meta{list}
+of such braced material; with such a list as argument the \fexpan sion will only
+hit against the first opening brace, hence do nothing, and the braced stuff may
+thus be macros one does not want to expand.
+%
+\leftedline{|\edef\x{\xintRevWithBraces{12345}}|}
+%
+\leftedline{|\meaning\x:|\dtt{\meaning\X}}
+%
+\leftedline{|\edef\y{\xintRevWithBraces\x}|}
+%
+\leftedline{|\meaning\y:|\dtt{\meaning\y}}
+%
+The examples above could be defined with |\edef|'s because the braced material
+did not contain macros. Alternatively:
+%
+\leftedline{|\expandafter\def\expandafter\w\expandafter|}
+%
+\leftedline{|{\romannumeral0\xintrevwithbraces{{\A}{\B}{\C}{\D}{\E}}}|}
+%
+\leftedline{|\meaning\w:|\dtt{\meaning\w}}
+%
+The macro \csa{xintReverseWithBracesNoExpand}\etype{n} does the same job
+without the initial expansion of its argument.
+
+
+\subsection{\csh{xintZapFirstSpaces}, \csh{xintZapLastSpaces}, \csh{xintZapSpaces}, \csh{xintZapSpacesB}}
+\label{xintZapFirstSpaces}
+\label{xintZapLastSpaces}
+\label{xintZapSpaces}
+\label{xintZapSpacesB}
+%{\small New with release |1.09f|.\par}
+
+\csa{xintZapFirstSpaces}\marg{stuff}\etype{n} does not do \emph{any} expansion
+of its argument, nor brace removal of any sort, nor does it alter \meta{stuff}
+in anyway apart from stripping away all \emph{leading} spaces.
+
+This macro will be mostly of interest to programmers who will know what I will
+now be talking about. \emph{The essential points, naturally, are the complete
+ expandability and the fact that no brace removal nor any other alteration is
+ done to the input.}
+
+\TeX's input scanner already converts consecutive blanks into single space
+tokens, but |\xintZapFirstSpaces| handles successfully also inputs with
+consecutive multiple space tokens.
+However, it is assumed that \meta{stuff} does not contain (except inside braced
+sub-material) space tokens of character code distinct from $32$.
+
+It expands in two steps, and if the goal is to apply it to the
+expansion text of |\x| to define |\y|, then one can do:
+|\odef\y{\romannumeral0\expandafter\xintzapfirstspaces\expandafter{\x}}|
+(one can also define a wrapper macro to |\xintZapFirstSpaces| in order to
+expand once the argument first, but \xinttoolsname not being a programming
+layer, it provides no «Generate Variants» facilities).
+
+Other use case: inside a macro which received a parameter |#1|, one can do
+|\oodef\x{\xintZapFirstSpaces {#1}}|, or, if |#1|, after leading spaces have
+been stripped can accept |\edef| expansion, one can do
+|\edef\x{\xintZapFirstSpaces{#1}}|.
+
+\begingroup
+\def\x { \a { \X } { \b \Y } }
+%
+\leftedline{|\xintZapFirstSpaces { \a { \X } { \b \Y } }->|%
+\dtt{\color{magenta}{}\expandafter\detokenize\expandafter
+{\romannumeral0\expandafter\xintzapfirstspaces\expandafter{\x}}}+++}
+\endgroup
+
+\medskip
+
+\noindent\csbxint{ZapLastSpaces}\marg{stuff}\etype{n} does not do \emph{any} expansion of
+its argument, nor brace removal of any sort, nor does it alter \meta{stuff} in
+anyway apart from stripping away all \emph{ending} spaces. The same remarks as
+for \csbxint{ZapFirstSpaces} apply.
+
+\begingroup
+\def\x { \a { \X } { \b \Y } }
+%
+\leftedline{|\xintZapLastSpaces { \a { \X } { \b \Y } }->|%
+\dtt{\color{magenta}{}\expandafter\detokenize\expandafter
+{\romannumeral0\expandafter\xintzaplastspaces\expandafter{\x}}}+++}
+\endgroup
+
+\medskip
+
+\noindent\csbxint{ZapSpaces}\marg{stuff}\etype{n} does not do \emph{any}
+expansion of its
+argument, nor brace removal of any sort, nor does it alter \meta{stuff} in
+anyway apart from stripping away all \emph{leading} and all \emph{ending}
+spaces. The same remarks as for \csbxint{ZapFirstSpaces} apply.
+
+\begingroup
+\def\x { \a { \X } { \b \Y } }
+%
+\leftedline{|\xintZapSpaces { \a { \X } { \b \Y } }->|%
+\dtt{\color{magenta}{}\expandafter\detokenize\expandafter
+{\romannumeral0\expandafter\xintzapspaces\expandafter{\x}}}+++}
+\endgroup
+
+\medskip
+
+\noindent\csbxint{ZapSpacesB}\marg{stuff}\etype{n} does not do \emph{any}
+expansion of
+its argument, nor does it alter \meta{stuff} in anyway apart from stripping away
+all leading and all ending spaces and possibly removing one level of braces if
+\meta{stuff} had the shape |<spaces>{braced}<spaces>|. The same remarks as for
+\csbxint{ZapFirstSpaces} apply.
+
+\begingroup
+\def\x { \a { \X } { \b \Y } }
+%
+\leftedline{|\xintZapSpacesB { \a { \X } { \b \Y } }->|%
+\dtt{\color{magenta}{}\expandafter\detokenize\expandafter
+{\romannumeral0\expandafter\xintzapspacesb\expandafter{\x}}}+++}
+\def\x { { \a { \X } { \b \Y } } }
+%
+\leftedline{|\xintZapSpacesB { { \a { \X } { \b \Y } } }->|%
+\dtt{\color{magenta}{}\expandafter\detokenize\expandafter
+{\romannumeral0\expandafter\xintzapspacesb\expandafter{\x}}}+++}
+\endgroup
+ The spaces here at the start and end of the output come from the braced
+ material, and are not removed (one would need a second application for that;
+ recall though that the \xintname zapping macros do not expand their argument).
+
+\subsection{\csh{xintCSVtoList}}
+\label{xintCSVtoList}
+\label{xintCSVtoListNoExpand}
+
+
+\csa{xintCSVtoList}|{a,b,c...,z}|\etype{f} returns |{a}{b}{c}...{z}|. A
+\emph{list} is by
+convention in this manual simply a succession of tokens, where each braced thing
+will count as one item (``items'' are defined according to the rules of \TeX{}
+for fetching undelimited parameters of a macro, which are exactly the same rules
+as for \LaTeX{} and macro arguments [they are the same things]). The word
+`list' in `comma separated list of items' has its usual linguistic meaning,
+and then an ``item'' is what is delimited by commas.
+
+So \csa{xintCSVtoList} takes on input a `comma separated list of items' and
+converts it into a `\TeX{} list of braced items'. The argument to
+|\xintCSVtoList| may be a macro: it will first be
+\hyperref[ssec:expansions]{\fexpan ded}. Hence the item before the first comma,
+if it is itself a macro, will be expanded which may or may not be a good thing.
+A space inserted at the start of the first item serves to stop that expansion
+(and disappears). The macro \csbxint{CSVtoListNoExpand}\etype{n} does the same
+job without
+the initial expansion of the list argument.
+
+Apart from that no expansion of the items is done and the list items may thus be
+completely arbitrary (and even contain perilous stuff such as unmatched |\if|
+and |\fi| tokens).
+
+Contiguous spaces and tab characters, are collapsed by \TeX{}
+into single spaces. All such spaces around commas%
+%
+\footnote{and multiple space tokens are not a problem; but those at the
+ top level (not hidden inside braces) \emph{must} be of character code
+ |32|.}
+%
+\fbox{are removed}, as well as
+the spaces at the start and the spaces at the end of the list.%
+%
+\footnote{let us recall that this is all done completely expandably...
+ There is absolutely no alteration of any sort of the item apart from
+ the stripping of initial and final space tokens (of character code
+ |32|) and brace removal if and only if the item apart from intial and
+ final spaces (or more generally multiple |char 32| space tokens) is
+ braced.}
+%
+The items may contain explicit |\par|'s or
+empty lines (converted by the \TeX{} input parsing into |\par| tokens).
+
+\begingroup
+
+\edef\X{\xintCSVtoList { 1 ,{ 2 , 3 , 4 , 5 }, a , {b,T} U , { c , d } , { {x ,
+ y} } }}
+
+%
+\leftedline{|\xintCSVtoList { 1 ,{ 2 , 3 , 4 , 5 }, a , {b,T} U , { c , d } ,
+ { {x , y} } }|}
+%
+\leftedline{|->|%
+{\makeatletter\dtt{\expandafter\strip@prefix\meaning\X}}}
+
+One sees on this example how braces protect commas from
+sub-lists to be perceived as delimiters of the top list. Braces around an entire
+item are removed, even when surrounded by spaces before and/or after. Braces for
+sub-parts of an item are not removed.
+
+We observe also that there is a slight difference regarding the brace stripping
+of an item: if the braces were not surrounded by spaces, also the initial and
+final (but no other) spaces of the \emph{enclosed} material are removed. This is
+the only situation where spaces protected by braces are nevertheless removed.
+
+From the rules above: for an empty argument (only spaces, no braces, no comma)
+the output is
+\dtt{\expandafter\detokenize\expandafter{\romannumeral0\xintcsvtolist { }}}
+(a list with one empty item),
+for ``|<opt. spaces>{}<opt.
+spaces>|'' the output is
+\dtt{\expandafter\detokenize\expandafter
+ {\romannumeral0\xintcsvtolist { {} }}}
+(again a list with one empty item, the braces were removed),
+for ``|{ }|'' the output is
+\dtt{\expandafter\detokenize\expandafter
+ {\romannumeral0\xintcsvtolist {{ }}}}
+(again a list with one empty item, the braces were removed and then
+the inner space was removed),
+for ``| { }|'' the output is
+\dtt{\expandafter\detokenize\expandafter
+{\romannumeral0\xintcsvtolist { { }}}} (again a list with one empty item, the initial space served only to stop the expansion, so this was like ``|{ }|'' as input, the braces were removed and the inner space was stripped),
+for ``\texttt{\ \{\ \ \}\ }'' the output is
+\dtt{\expandafter\detokenize\expandafter
+{\romannumeral0\xintcsvtolist { { } }}} (this time the ending space of the first
+item meant that after brace removal the inner spaces were kept; recall though
+that \TeX{} collapses on input consecutive blanks into one space token),
+for ``|,|'' the output consists of two consecutive
+empty items
+\dtt{\expandafter\detokenize\expandafter{\romannumeral0\xintcsvtolist
+ {,}}}. Recall that on output everything is braced, a |{}| is an ``empty''
+item.
+%
+Most of the above is mainly irrelevant for every day use, apart perhaps from the
+fact to be noted that an empty input does not give an empty output but a
+one-empty-item list (it is as if an ending comma was always added at the end of
+the input).
+
+\def\y { \a,\b,\c,\d,\e}
+\expandafter\def\expandafter\Y\expandafter{\romannumeral0\xintcsvtolist{\y}}
+\def\t {{\if},\ifnum,\ifx,\ifdim,\ifcat,\ifmmode}
+\expandafter\def\expandafter\T\expandafter{\romannumeral0\xintcsvtolist{\t}}
+
+%
+\leftedline{|\def\y{ \a,\b,\c,\d,\e} \xintCSVtoList\y->|%
+ {\makeatletter\dtt{\expandafter\strip@prefix\meaning\Y}}}
+%
+\leftedline{|\def\t {{\if},\ifnum,\ifx,\ifdim,\ifcat,\ifmmode}|}
+%
+\leftedline
+{|\xintCSVtoList\t->|\makeatletter\dtt{\expandafter\strip@prefix\meaning\T}}
+%
+The results above were automatically displayed using \TeX's primitive
+\csa{meaning}, which adds a space after each control sequence name. These spaces
+are not in the actual braced items of the produced lists. The first items |\a|
+and |\if| were either preceded by a space or braced to prevent expansion. The
+macro \csa{xintCSVtoListNoExpand} would have done the same job without the
+initial expansion of the list argument, hence no need for such protection but if
+|\y| is defined as |\def\y{\a,\b,\c,\d,\e}| we then must do:
+%
+\leftedline{|\expandafter\xintCSVtoListNoExpand\expandafter {\y}|} Else, we
+may have direct use: %
+%
+\leftedline{|\xintCSVtoListNoExpand
+ {\if,\ifnum,\ifx,\ifdim,\ifcat,\ifmmode}|}
+%
+\leftedline{|->|\dtt{\expandafter\detokenize\expandafter
+ {\romannumeral0\xintcsvtolistnoexpand
+ {\if,\ifnum,\ifx,\ifdim,\ifcat,\ifmmode}}}}
+%
+Again these spaces are an artefact from the use in the source of the document of
+\csa{meaning} (or rather here, \csa{detokenize}) to display the result of using
+\csa{xintCSVtoListNoExpand} (which is done for real in this document
+source).
+
+For the similar conversion from comma separated list to braced items list, but
+without removal of spaces around the commas, there is
+\csa{xintCSVtoListNonStripped}\etype{f} and
+\csa{xintCSVtoListNonStrippedNoExpand}\etype{n}.
+
+\endgroup
+
+\subsection{\csh{xintNthElt}}\label{xintNthElt}
+
+
+\def\macro #1{\the\numexpr 9-#1\relax}
+
+\csa{xintNthElt\x}\marg{list}\etype{\numx f} gets (expandably) the |x|th
+item of the \meta{list}. A braced item will lose one level of brace
+pairs. The token list is first \fexpan ded.
+
+Items are counted starting at one.
+
+\leftedline{|\xintNthElt {3}{{agh}\u{zzz}\v{Z}}| is
+ \texttt{\xintNthElt {3}{{agh}\u{zzz}\v{Z}}}}
+%
+\leftedline{|\xintNthElt {3}{{agh}\u{{zzz}}\v{Z}}| is
+ \texttt{\expandafter\expandafter\expandafter
+ \detokenize\expandafter\expandafter\expandafter {\xintNthElt
+ {3}{{agh}\u{{zzz}}\v{Z}}}}}
+%
+\leftedline{|\xintNthElt {2}{{agh}\u{{zzz}}\v{Z}}| is
+ \texttt{\expandafter\expandafter\expandafter
+ \detokenize\expandafter\expandafter\expandafter {\xintNthElt
+ {2}{{agh}\u{{zzz}}\v{Z}}}}}
+%
+\leftedline{|\xintNthElt {37}{\xintiiFac {100}}|\dtt{=\xintNthElt
+ {37}{\xintiiFac {100}}} is the thirty-seventh digit of $100!$.}
+%
+\leftedline{|\xintNthElt {10}{\xintFtoCv
+ {566827/208524}}|\dtt{=\xintNthElt {10}{\xintFtoCv
+ {566827/208524}}}}
+\leftedline{is the tenth convergent of $566827/208524$ (uses \xintcfracname
+ package).}
+%
+\leftedline{|\xintNthElt {7}{\xintCSVtoList {1,2,3,4,5,6,7,8,9}}|%
+ \dtt{=\xintNthElt {7}{\xintCSVtoList {1,2,3,4,5,6,7,8,9}}}}
+%
+\leftedline{|\xintNthElt {0}{\xintCSVtoList {1,2,3,4,5,6,7,8,9}}|%
+ \dtt{=\xintNthElt {0}{\xintCSVtoList {1,2,3,4,5,6,7,8,9}}}}
+%
+\leftedline{|\xintNthElt {-3}{\xintCSVtoList {1,2,3,4,5,6,7,8,9}}|%
+ \dtt{=\xintNthElt {-3}{\xintCSVtoList {1,2,3,4,5,6,7,8,9}}}}
+
+If |x=0|,
+the macro returns the \emph{length} of the expanded list: this is not equivalent
+to \csbxint{Length} which does no pre-expansion. And it is different from
+\csbxint{Len} which is to be used only on integers or fractions.
+
+If |x<0|, the macro returns the \verb+|x|+th element from the end of the list.
+Thus for example |x=-1| will fetch the last item of the list.
+%
+\leftedline {|\xintNthElt {-5}{{{agh}}\u{zzz}\v{Z}}| is
+ \texttt{\expandafter\expandafter\expandafter \detokenize
+ \expandafter\expandafter\expandafter{\xintNthElt {-5}{{{agh}}\u{zzz}\v{Z}}}}}
+
+The macro \csa{xintNthEltNoExpand}\etype{\numx n} does the same job but without
+first expanding the list argument: |\xintNthEltNoExpand {-4}{\u\v\w T\x\y\z}| is
+\xintNthEltNoExpand {-4}{\a\b\c\u\v\w T\x\y\z}.
+
+If |x| is strictly larger (in absolute value) than the length of the list
+then |\xintNthElt| produces empty contents.
+
+\subsection{\csh{xintNthOnePy}}
+\label{xintNthOnePy}
+
+\csa{xintNthOnePy\x}\marg{list}\etype{\numx f} gets (expandably) the |x|th
+item of the \meta{list}, adding a brace pair if there wasn't one.\NewWith{1.4}
+
+Attention, items are counted starting at zero. For negative index, behaves
+as \csbxint{NthElt}.
+
+If the index is out of range, the empty output is returned. If the input list
+was empty (had no items) the empty output is returned.
+
+\subsection{\csh{xintKeep}}\label{xintKeep}
+
+\csa{xintKeep\x}\marg{list}\etype{\numx f} expands the token list argument |L|
+and produces a new list, depending on the value of |x|:
+\begin{itemize}[nosep]
+\item if |x>0|, the new list contains the first |x| items from |L| (counting
+ starts at one.) \emph{Each
+ such item will be output within a brace pair.} Use \csbxint{KeepUnbraced} if
+ this is not desired. This means that if the list item was braced to start
+ with, there is no modification, but if it was a token without braces,
+ then it acquires them.
+\item if |x>=length(L)|, the new list is the old one with all its items now
+ braced.
+\item if |x=0| the empty list is returned.
+\item if |x<0| the last \verb+|x|+ elements compose the output in the same
+ order as in the initial list; as the macro proceeds by removing head items
+ the kept items end up in output as they were in input: no added braces.
+\item if |x<=-length(L)| the output is identical with the input.
+\end{itemize}
+
+\csa{xintKeepNoExpand} does the same without first \fexpan ding its list
+argument.
+%
+\begin{everbatim*}
+\fdef\test {\xintKeep {17}{\xintKeep {-69}{\xintSeq {1}{100}}}}\meaning\test\par
+\noindent\fdef\test {\xintKeep {7}{{1}{2}{3}{4}{5}{6}{7}{8}{9}}}\meaning\test\par
+\noindent\fdef\test {\xintKeep {-7}{{1}{2}{3}{4}{5}{6}{7}{8}{9}}}\meaning\test\par
+\noindent\fdef\test {\xintKeep {7}{123456789}}\meaning\test\par
+\noindent\fdef\test {\xintKeep {-7}{123456789}}\meaning\test\par
+\end{everbatim*}
+
+
+\subsection{\csh{xintKeepUnbraced}}\label{xintKeepUnbraced}
+
+Same as \csbxint{Keep} but no brace pairs are added around the kept items from
+the head of the list in the case |x>0|: each such item will lose one level of
+braces. Thus, to remove braces from all items of the list, one can use
+\csbxint{KeepUnbraced} with its first argument larger than the length of the
+list; the same is obtained from \csbxint{ListWithSep}|{}|\marg{list}. But the
+new list will then have generally many more items than the original ones,
+corresponding to the unbraced original items.
+
+For |x<0| the macro is no different from \csbxint{Keep}. Hence the name is a
+bit misleading because brace removal will happen only if |x>0|.
+
+\csa{xintKeepUnbracedNoExpand} does the same without first \fexpan ding
+its list argument.
+%
+\begin{everbatim*}
+\fdef\test {\xintKeepUnbraced {10}{\xintSeq {1}{100}}}\meaning\test\par
+\noindent\fdef\test {\xintKeepUnbraced {7}{{1}{2}{3}{4}{5}{6}{7}{8}{9}}}%
+ \meaning\test\par
+\noindent\fdef\test {\xintKeepUnbraced {-7}{{1}{2}{3}{4}{5}{6}{7}{8}{9}}}%
+ \meaning\test\par
+\noindent\fdef\test {\xintKeepUnbraced {7}{123456789}}\meaning\test\par
+\noindent\fdef\test {\xintKeepUnbraced {-7}{123456789}}\meaning\test\par
+\end{everbatim*}
+
+\subsection{\csh{xintTrim}}\label{xintTrim}
+
+\csa{xintTrim\x}\marg{list}\etype{\numx f} expands the list argument and
+gobbles its first |x| elements.
+\begin{itemize}[nosep]
+\item if |x>0|, the first |x| items from |L| are gobbled. The remaining items
+ are not modified.
+\item if |x>=length(L)|, the returned list is empty.
+\item if |x=0| the original list is returned (with no added braces.)
+\item if |x<0| the last \verb+|x|+ items of the list are removed. \emph{The
+ head items end up braced in the output.} Use \csbxint{TrimUnbraced} if
+ this is not desired.
+\item if |x<=-length(L)| the output is empty.
+\end{itemize}
+
+\csa{xintTrimNoExpand} does the same without first \fexpan ding its list
+argument.
+\begin{everbatim*}
+\fdef\test {\xintTrim {17}{\xintTrim {-69}{\xintSeq {1}{100}}}}\meaning\test\par
+\noindent\fdef\test {\xintTrim {7}{{1}{2}{3}{4}{5}{6}{7}{8}{9}}}\meaning\test\par
+\noindent\fdef\test {\xintTrim {-7}{{1}{2}{3}{4}{5}{6}{7}{8}{9}}}\meaning\test\par
+\noindent\fdef\test {\xintTrim {7}{123456789}}\meaning\test\par
+\noindent\fdef\test {\xintTrim {-7}{123456789}}\meaning\test\par
+\end{everbatim*}
+
+\subsection{\csh{xintTrimUnbraced}}\label{xintTrimUnbraced}
+
+Same as \csbxint{Trim} but in case of a negative |x| (cutting items from
+the tail), the kept items from the head are not enclosed in brace pairs. They
+will lose one level of braces. The name is a bit misleading
+because when |x>0| there is no brace-stripping done on the kept items, because
+the macro works simply by gobbling the head ones.
+
+\csa{xintTrimUnbracedNoExpand} does the same without first \fexpan ding its list
+argument.
+
+\begin{everbatim*}
+\fdef\test {\xintTrimUnbraced {-90}{\xintSeq {1}{100}}}\meaning\test\par
+\noindent\fdef\test {\xintTrimUnbraced {7}{{1}{2}{3}{4}{5}{6}{7}{8}{9}}}%
+ \meaning\test\par
+\noindent\fdef\test {\xintTrimUnbraced {-7}{{1}{2}{3}{4}{5}{6}{7}{8}{9}}}%
+ \meaning\test\par
+\noindent\fdef\test {\xintTrimUnbraced {7}{123456789}}\meaning\test\par
+\noindent\fdef\test {\xintTrimUnbraced {-7}{123456789}}\meaning\test\par
+\end{everbatim*}
+
+\subsection{\csh{xintListWithSep}}\label{xintListWithSep}
+
+
+\def\macro #1{\the\numexpr 9-#1\relax}
+
+\csa{xintListWithSep}\marg{sep}\marg{list}\etype{nf} inserts the separator
+\meta{sep} in-between all items of the given list of braced items (or
+individual tokens). The items are fetched as does \TeX\ with undelimited macro
+arguments, thus they end up unbraced in output. If the \meta{list} is only one
+(or multiple) space tokens, the output is empty.
+
+The list argument \meta{list} gets \fexpan ded first (thus if it is a macro
+whose contents are braced items, the first opening brace stops the expansion,
+and it is as if the macro had been expanded once.) The separator \meta{sep} is
+not pre-expanded, it ends up as is in the output (if the \meta{list} contained
+at least two items.)
+
+The variant \csa{xintListWithSepNoExpand}\etype{nn} does the same
+job without the initial expansion of the \meta{list} argument.
+\begin{everbatim*}
+\edef\foo{\xintListWithSep{, }{123456789{10}{11}{12}}}\meaning\foo\newline
+\edef\foo{\xintListWithSep{:}{\xintiiFac{20}}}\meaning\foo\newline
+\oodef\FOO{\xintListWithSepNoExpand{\FOO}{\bat\baz\biz\buz}}\meaning\FOO\newline
+% a braced item or a space stops the f-expansion:
+\oodef\foo{\xintListWithSep{\FOO}{{\bat}\baz\biz\buz}}\meaning\foo\newline
+\oodef\foo{\xintListWithSep{\FOO}{ \bat\baz\biz\buz}}\meaning\foo\par
+\end{everbatim*}
+
+\subsection{\csh{xintApply}}\label{xintApply}
+
+
+\def\macro #1{\the\numexpr 9-#1\relax}
+
+\csa{xintApply}|{\macro}|\marg{list}\etype{ff} expandably applies the one
+parameter macro |\macro| to each item in the \meta{list} given as second
+argument and returns a new list with these outputs: each item is given one after
+the other as parameter to |\macro| which is expanded at that time (as usual,
+\emph{i.e.\@} fully for what comes first), the results are braced and output
+together as a succession of braced items (if |\macro| is defined to start with a
+space, the space will be gobbled and the |\macro| will not be expanded; it is
+allowed to have its own arguments, the list items serve as last arguments to
+|\macro|). Hence |\xintApply{\macro}{{1}{2}{3}}| returns
+|{\macro{1}}{\macro{2}}{\macro{3}}| where all instances of |\macro| have been
+already \fexpan ded.
+
+Being expandable, |\xintApply| is useful for example inside alignments where
+implicit groups make standard loops constructs usually fail. In such situation
+it is often not wished that the new list elements be braced, see
+\csbxint{ApplyUnbraced}. The |\macro| does not have to be expandable:
+|\xintApply| will try to expand it, the expansion may remain partial.
+
+The \meta{list} may
+itself be some macro expanding (in the previously described way) to the list of
+tokens to which the macro |\macro| will be applied. For example, if the
+\meta{list} expands to some positive number, then each digit will be replaced by
+the result of applying |\macro| on it. %
+%
+\leftedline{|\def\macro #1{\the\numexpr
+ 9-#1\relax}|} %
+%
+\leftedline{|\xintApply\macro{\xintiiFac
+ {20}}|\dtt{=\xintApply\macro{\xintiiFac {20}}}}
+
+The macro \csa{xintApplyNoExpand}\etype{fn} does the same job without the first
+initial expansion which gave the \meta{list} of braced tokens to which |\macro|
+is applied.
+
+\subsection{\csh{xintApplyUnbraced}}\label{xintApplyUnbraced}
+
+
+\csa{xintApplyUnbraced}|{\macro}|\marg{list}\etype{ff} is like \csbxint{Apply}.
+The difference is that after having expanded its list argument, and applied
+|\macro| in turn to each item from the list, it reassembles the outputs without
+enclosing them in braces. The net effect is the same as doing
+%
+\leftedline{|\xintListWithSep {}{\xintApply {\macro}|\marg{list}|}|} This is
+useful for preparing a macro which will itself define some other macros or make
+assignments, as the scope will not be limited by brace pairs.
+%
+\begin{everbatim*}
+\def\macro #1{\expandafter\def\csname myself#1\endcsname {#1}}
+\xintApplyUnbraced\macro{{elta}{eltb}{eltc}}
+\begin{enumerate}[nosep,label=(\arabic{*})]
+\item \meaning\myselfelta
+\item \meaning\myselfeltb
+\item \meaning\myselfeltc
+\end{enumerate}
+\end{everbatim*}
+
+%
+The macro \csa{xintApplyUnbracedNoExpand}\etype{fn} does the same job without
+the first initial expansion which gave the \meta{list} of braced tokens to which
+|\macro| is applied.
+
+\subsection{\csh{xintSeq}}\label{xintSeq}
+
+\csa{xintSeq}|[d]{x}{y}|\etype{{{\upshape[\numx]}}\numx\numx} generates
+expandably |{x}{x+d}...| up to and possibly including |{y}| if |d>0| or down
+to and including |{y}| if |d<0|. Naturally |{y}| is omitted if |y-x| is not a
+multiple of |d|. If |d=0| the macro returns |{x}|. If |y-x| and |d| have
+opposite signs, the macro returns nothing. If the optional argument |d| is
+omitted it is taken to be the sign of |y-x|. Hence |\xintSeq {1}{0}| is not
+empty but |{1}{0}|. But |\xintSeq [1]{1}{0}| is empty.
+
+
+The arguments |x| and |y| are expanded inside a |\numexpr| so they may be
+count registers or a \LaTeX{} |\value{countername}|, or arithmetic with such
+things.
+
+%
+\begin{everbatim*}
+\xintListWithSep{,\hskip2pt plus 1pt minus 1pt }{\xintSeq {12}{-25}}
+\end{everbatim*}
+%
+\begin{everbatim*}
+\xintiiSum{\xintSeq [3]{1}{1000}}
+\end{everbatim*}
+
+When the macro is used without the optional argument |d|, it can only generate
+up to about $5000$ numbers\IMPORTANT, the precise value depends upon some
+\TeX{} memory parameter (input save stack).
+
+With the optional argument |d| the macro proceeds differently (but less
+efficiently) and does not stress the input save stack.
+
+
+
+\subsection{\csh{xintloop}, \csh{xintbreakloop}, \csh{xintbreakloopanddo}, \csh{xintloopskiptonext}}
+\label{xintloop}
+\label{xintbreakloop}
+\label{xintbreakloopanddo}
+\label{xintloopskiptonext}
+
+|\xintloop|\meta{stuff}|\if<test>...\repeat|\xtype{} is an expandable loop
+compatible with nesting. However to break out of the loop one almost always need
+some un-expandable step. The cousin \csbxint{iloop} is \csbxint{loop} with an
+embedded expandable mechanism allowing to exit from the loop. The iterated
+macros may contain |\par| tokens or empty lines.
+
+If a sub-loop is to be used all the material from the start of the main loop and
+up to the end of the entire subloop should be braced; these braces will be
+removed and do not create a group. The simplest to allow the nesting of one or
+more sub-loops is to brace everything between \csa{xintloop} and \csa{repeat},
+being careful not to leave a space between the closing brace and |\repeat|.
+
+As this loop and \csbxint{iloop} will primarily be of interest to experienced
+\TeX{} macro programmers, my description will assume that the user is
+knowledgeable enough. Some examples in this document will be perhaps more
+illustrative than my attemps at explanation of use.
+
+One can abort the loop with \csbxint{breakloop}; this should not be used inside
+the final test, and one should expand the |\fi| from the corresponding test
+before. One has also \csbxint{breakloopanddo} whose first argument will be
+inserted in the token stream after the loop; one may need a macro such as
+|\xint_afterfi| to move the whole thing after the |\fi|, as a simple
+|\expandafter| will not be enough.
+
+One will usually employ some count registers to manage the exit test from the
+loop; this breaks expandability, see \csbxint{iloop} for an expandable integer
+indexed loop. Use in alignments will be complicated by the fact that cells
+create groups, and also from the fact that any encountered unexpandable material
+will cause the \TeX{} input scanner to insert |\endtemplate| on each encountered
+|&| or |\cr|; thus |\xintbreakloop| may not work as expected, but the situation
+can be resolved via |\xint_firstofone{&}| or use of |\TAB| with |\def\TAB{&}|.
+It is thus simpler for alignments to use rather than \csbxint{loop} either the
+expandable \csbxint{ApplyUnbraced} or the non-expandable but alignment
+compatible \csbxint{ApplyInline}, \csbxint{For} or \csbxint{For*}.
+
+As an example, let us suppose we have two macros |\A|\marg{i}\marg{j} and
+|\B|\marg{i}\marg{j} behaving like (small) integer valued matrix entries, and we
+want to define a macro |\C|\marg{i}\marg{j} giving the matrix product (|i| and
+|j| may be count registers). We will assume that |\A[I]| expands to the number
+of rows, |\A[J]| to the number of columns and want the produced |\C| to act in
+the same manner. The code is very dispendious in use of |\count| registers, not
+optimized in any way, not made very robust (the defined macro can not have the
+same name as the first two matrices for example), we just wanted to quickly
+illustrate use of the nesting capabilities of |\xintloop|.%
+%
+\footnote{for a more sophisticated implementation of matrix
+ multiplication, inclusive of determinants, inverses, and display
+ utilities, with entries big integers or decimal numbers or even
+ fractions see some code online posted
+ from
+ November 11, 2013.}
+%
+
+
+\begin{everbatim*}
+\newcount\rowmax \newcount\colmax \newcount\summax
+\newcount\rowindex \newcount\colindex \newcount\sumindex
+\newcount\tmpcount
+\makeatletter
+\def\MatrixMultiplication #1#2#3{%
+ \rowmax #1[I]\relax
+ \colmax #2[J]\relax
+ \summax #1[J]\relax
+ \rowindex 1
+ \xintloop % loop over row index i
+ {\colindex 1
+ \xintloop % loop over col index k
+ {\tmpcount 0
+ \sumindex 1
+ \xintloop % loop over intermediate index j
+ \advance\tmpcount \numexpr #1\rowindex\sumindex*#2\sumindex\colindex\relax
+ \ifnum\sumindex<\summax
+ \advance\sumindex 1
+ \repeat }%
+ \expandafter\edef\csname\string#3{\the\rowindex.\the\colindex}\endcsname
+ {\the\tmpcount}%
+ \ifnum\colindex<\colmax
+ \advance\colindex 1
+ \repeat }%
+ \ifnum\rowindex<\rowmax
+ \advance\rowindex 1
+ \repeat
+ \expandafter\edef\csname\string#3{I}\endcsname{\the\rowmax}%
+ \expandafter\edef\csname\string#3{J}\endcsname{\the\colmax}%
+ \def #3##1{\ifx[##1\expandafter\Matrix@helper@size
+ \else\expandafter\Matrix@helper@entry\fi #3{##1}}%
+}%
+\def\Matrix@helper@size #1#2#3]{\csname\string#1{#3}\endcsname }%
+\def\Matrix@helper@entry #1#2#3%
+ {\csname\string#1{\the\numexpr#2.\the\numexpr#3}\endcsname }%
+\def\A #1{\ifx[#1\expandafter\A@size
+ \else\expandafter\A@entry\fi {#1}}%
+\def\A@size #1#2]{\ifx I#23\else4\fi}% 3rows, 4columns
+\def\A@entry #1#2{\the\numexpr #1+#2-1\relax}% not pre-computed...
+\def\B #1{\ifx[#1\expandafter\B@size
+ \else\expandafter\B@entry\fi {#1}}%
+\def\B@size #1#2]{\ifx I#24\else3\fi}% 4rows, 3columns
+\def\B@entry #1#2{\the\numexpr #1-#2\relax}% not pre-computed...
+\makeatother
+\MatrixMultiplication\A\B\C \MatrixMultiplication\C\C\D
+\MatrixMultiplication\C\D\E \MatrixMultiplication\C\E\F
+\begin{multicols}2
+ \[\begin{pmatrix}
+ \A11&\A12&\A13&\A14\\
+ \A21&\A22&\A23&\A24\\
+ \A31&\A32&\A33&\A34
+ \end{pmatrix}
+ \times
+ \begin{pmatrix}
+ \B11&\B12&\B13\\
+ \B21&\B22&\B23\\
+ \B31&\B32&\B33\\
+ \B41&\B42&\B43
+ \end{pmatrix}
+ =
+ \begin{pmatrix}
+ \C11&\C12&\C13\\
+ \C21&\C22&\C23\\
+ \C31&\C32&\C33
+ \end{pmatrix}\]
+ \[\begin{pmatrix}
+ \C11&\C12&\C13\\
+ \C21&\C22&\C23\\
+ \C31&\C32&\C33
+ \end{pmatrix}^2 = \begin{pmatrix}
+ \D11&\D12&\D13\\
+ \D21&\D22&\D23\\
+ \D31&\D32&\D33
+ \end{pmatrix}\]
+ \[\begin{pmatrix}
+ \C11&\C12&\C13\\
+ \C21&\C22&\C23\\
+ \C31&\C32&\C33
+ \end{pmatrix}^3 = \begin{pmatrix}
+ \E11&\E12&\E13\\
+ \E21&\E22&\E23\\
+ \E31&\E32&\E33
+ \end{pmatrix}\]
+ \[\begin{pmatrix}
+ \C11&\C12&\C13\\
+ \C21&\C22&\C23\\
+ \C31&\C32&\C33
+ \end{pmatrix}^4 = \begin{pmatrix}
+ \F11&\F12&\F13\\
+ \F21&\F22&\F23\\
+ \F31&\F32&\F33
+ \end{pmatrix}\]
+\end{multicols}
+\end{everbatim*}
+
+
+\subsection{\csh{xintiloop}, \csh{xintiloopindex}, \csh{xintouteriloopindex},
+ \csh{xintbreakiloop}, \csh{xintbreakiloopanddo}, \csh{xintiloopskiptonext},
+\csh{xintiloopskipandredo}}
+\label{xintiloop}
+\label{xintbreakiloop}
+\label{xintbreakiloopanddo}
+\label{xintiloopskiptonext}
+\label{xintiloopskipandredo}
+\label{xintiloopindex}
+\label{xintouteriloopindex}
+
+\csa{xintiloop}|[start+delta]|\meta{stuff}|\if<test> ... \repeat|\xtype{} is a
+completely expandable nestable loop. complete expandability depends naturally on
+the actual iterated contents, and complete expansion will not be achievable
+under a sole \fexpan sion, as is indicated by the hollow star in the margin;
+thus the loop can be used inside an |\edef| but not inside arguments to the
+package macros. It can be used inside an |\xintexpr..\relax|. The
+|[start+delta]| is mandatory, not optional.
+
+This loop benefits via \csbxint{iloopindex} to (a limited access to) the integer
+index of the iteration. The starting value |start| (which may be a |\count|) and
+increment |delta| (\emph{id.}) are mandatory arguments. A space after the
+closing square bracket is not significant, it will be ignored. Spaces inside the
+square brackets will also be ignored as the two arguments are first given to a
+|\numexpr...\relax|. Empty lines and explicit |\par| tokens are accepted.
+
+As with \csbxint{loop}, this tool will mostly be of interest to advanced users.
+For nesting, one puts inside braces all the
+material from the start (immediately after |[start+delta]|) and up to and
+inclusive of the inner loop, these braces will be removed and do not create a
+loop. In case of nesting, \csbxint{outeriloopindex} gives access to the index of
+the outer loop. If needed one could write on its model a macro giving access to
+the index of the outer outer loop (or even to the |nth| outer loop).
+
+The \csa{xintiloopindex} and \csa{xintouteriloopindex} can not be used inside
+braces, and generally speaking this means they should be expanded first when
+given as argument to a macro, and that this macro receives them as delimited
+arguments, not braced ones. Or, but naturally this will break expandability, one
+can assign the value of \csa{xintiloopindex} to some |\count|. Both
+\csa{xintiloopindex} and \csa{xintouteriloopindex} extend to the litteral
+representation of the index, thus in |\ifnum| tests, if it comes last one has to
+correctly end the macro with a |\space|, or encapsulate it in a
+|\numexpr..\relax|.
+
+When the repeat-test of the loop is, for example, |\ifnum\xintiloopindex<10
+\repeat|, this means that the last iteration will be with |\xintiloopindex=10|
+(assuming |delta=1|). There is also |\ifnum\xintiloopindex=10 \else\repeat| to
+get the last iteration to be the one with |\xintiloopindex=10|.
+
+One has \csbxint{breakiloop} and \csbxint{breakiloopanddo} to abort the loop.
+The syntax of |\xintbreakiloopanddo| is a bit surprising, the sequence of tokens
+to be executed after breaking the loop is not within braces but is delimited by
+a dot as in:
+%
+\leftedline{|\xintbreakiloopanddo <afterloop>.etc.. etc... \repeat|}
+%
+The reason is that one may wish to use the then current value of
+|\xintiloopindex| in |<afterloop>| but it can't be within braces at the time it
+is evaluated. However, it is not that easy as |\xintiloopindex| must be expanded
+before, so one ends up with code like this:
+%
+\leftedline
+{|\expandafter\xintbreakiloopanddo\expandafter\macro\xintiloopindex.%|}
+%
+\leftedline{|etc.. etc.. \repeat|}
+%
+As moreover the |\fi| from the test leading to the decision of breaking out of
+the loop must be cleared out of the way, the above should be
+a branch of an expandable conditional test, else one needs something such
+as:
+%
+\leftedline
+{|\xint_afterfi{\expandafter\xintbreakiloopanddo\expandafter\macro\xintiloopindex.}%|}
+%
+\leftedline{|\fi etc..etc.. \repeat|}
+
+There is \csbxint{iloopskiptonext} to abort the current iteration and skip to
+the next, \hyperref[xintiloopskipandredo]{\ttfamily\hyphenchar\font45 \char92
+ xintiloopskip\-and\-redo} to skip to the end of the current iteration and redo
+it with the same value of the index (something else will have to change for this
+not to become an eternal loop\dots ).
+
+Inside alignments, if the looped-over text contains a |&| or a |\cr|, any
+un-expandable material before a \csbxint{iloopindex} will make it fail because
+of |\endtemplate|; in such cases one can always either replace |&| by a macro
+expanding to it or replace it by a suitable |\firstofone{&}|, and similarly for
+|\cr|.
+
+\phantomsection\label{edefprimes}
+As an example, let us construct an |\edef\z{...}| which will define |\z| to be a
+list of prime numbers:
+\begin{everbatim*}
+\begingroup
+\edef\z
+{\xintiloop [10001+2]
+ {\xintiloop [3+2]
+ \ifnum\xintouteriloopindex<\numexpr\xintiloopindex*\xintiloopindex\relax
+ \xintouteriloopindex,
+ \expandafter\xintbreakiloop
+ \fi
+ \ifnum\xintouteriloopindex=\numexpr
+ (\xintouteriloopindex/\xintiloopindex)*\xintiloopindex\relax
+ \else
+ \repeat
+ }% no space here
+ \ifnum \xintiloopindex < 10999 \repeat }%
+\meaning\z\endgroup
+\end{everbatim*}and we should have taken
+some steps to not have a trailing comma, but
+the point was to show that one can do that in an |\edef|\,! See also
+\autoref{ssec:primesII} which extracts from this code its way of testing
+primality.
+
+Let us create an alignment where each row will contain all divisors of its
+first entry.
+Here is the output, thus obtained without any count register:
+\begin{everbatim*}
+\begin{multicols}2
+\tabskip1ex \normalcolor
+\halign{&\hfil#\hfil\cr
+ \xintiloop [1+1]
+ {\expandafter\bfseries\xintiloopindex &
+ \xintiloop [1+1]
+ \ifnum\xintouteriloopindex=\numexpr
+ (\xintouteriloopindex/\xintiloopindex)*\xintiloopindex\relax
+ \xintiloopindex&\fi
+ \ifnum\xintiloopindex<\xintouteriloopindex\space % CRUCIAL \space HERE
+ \repeat \cr }%
+ \ifnum\xintiloopindex<30
+ \repeat
+}
+\end{multicols}
+\end{everbatim*}
+We wanted this first entry in bold face, but |\bfseries| leads to
+unexpandable tokens, so the |\expandafter| was necessary for |\xintiloopindex|
+and |\xintouteriloopindex| not to be confronted with a hard to digest
+|\endtemplate|. An alternative way of coding:
+%
+\begin{everbatim}
+\tabskip1ex
+\def\firstofone #1{#1}%
+\halign{&\hfil#\hfil\cr
+ \xintiloop [1+1]
+ {\bfseries\xintiloopindex\firstofone{&}%
+ \xintiloop [1+1] \ifnum\xintouteriloopindex=\numexpr
+ (\xintouteriloopindex/\xintiloopindex)*\xintiloopindex\relax
+ \xintiloopindex\firstofone{&}\fi
+ \ifnum\xintiloopindex<\xintouteriloopindex\space % \space is CRUCIAL
+ \repeat \firstofone{\cr}}%
+ \ifnum\xintiloopindex<30 \repeat }
+\end{everbatim}
+
+\begin{framed}
+ The next utilities are not compatible with expansion-only context.
+\end{framed}
+
+\subsection{\csh{xintApplyInline}}\label{xintApplyInline}
+
+
+\csa{xintApplyInline}|{\macro}|\marg{list}\ntype{o{\lowast f}} works non
+expandably. It applies the one-parameter |\macro| to the first element of the
+expanded list (|\macro| may have itself some arguments, the list item will be
+appended as last argument), and is then re-inserted in the input stream after
+the tokens resulting from this first expansion of |\macro|. The next item is
+then handled.
+
+This is to be used in situations where one needs to do some repetitive
+things. It is not expandable and can not be completely expanded inside a
+macro definition, to prepare material for later execution, contrarily to what
+\csbxint{Apply} or \csbxint{ApplyUnbraced} achieve.
+
+\begin{everbatim*}
+\def\Macro #1{\advance\cnta #1 , \the\cnta}
+\cnta 0
+0\xintApplyInline\Macro {3141592653}.
+\end{everbatim*}
+The first argument |\macro| does not have to be an expandable macro.
+
+\csa{xintApplyInline} submits its second, token list parameter to an
+\hyperref[ssec:expansions]{\fexpan
+sion}. Then, each \emph{unbraced} item will also be \fexpan ded. This provides
+an easy way to insert one list inside another. \emph{Braced} items are not
+expanded. Spaces in-between items are gobbled (as well as those at the start
+or the end of the list), but not the spaces \emph{inside} the braced items.
+
+\csa{xintApplyInline}, despite being non-expandable, does survive to
+contexts where the executed |\macro| closes groups, as happens inside
+alignments with the tabulation character |&|.
+This tabular provides an example:\par
+\begin{everbatim*}
+\centerline{\normalcolor\begin{tabular}{ccc}
+ $N$ & $N^2$ & $N^3$ \\ \hline
+ \def\Row #1{ #1 & \xintiiSqr {#1} & \xintiiPow {#1}{3} \\ \hline }%
+ \xintApplyInline \Row {\xintCSVtoList{17,28,39,50,61}}
+\end{tabular}}\medskip
+\end{everbatim*}
+
+We see that despite the fact that the first encountered tabulation character in
+the first row close a group and thus erases |\Row| from \TeX's memory,
+|\xintApplyInline| knows how to deal with this.
+
+Using \csbxint{ApplyUnbraced} is an alternative: the difference is that
+this would have prepared all rows first and only put them back into the
+token stream once they are all assembled, whereas with |\xintApplyInline|
+each row is constructed and immediately fed back into the token stream: when
+one does things with numbers having hundreds of digits, one learns that
+keeping on hold and shuffling around hundreds of tokens has an impact on
+\TeX{}'s speed (make this ``thousands of tokens'' for the impact to be
+noticeable).
+
+One may nest various |\xintApplyInline|'s. For example (see the
+\hyperref[float]{table} \vpageref{float}):\par
+\begin{everbatim*}
+\begin{figure*}[ht!]
+ \centering\phantomsection\label{float}
+ \def\Row #1{#1:\xintApplyInline {\Item {#1}}{0123456789}\\ }%
+ \def\Item #1#2{&\xintiiPow {#1}{#2}}%
+ \centeredline {\begin{tabular}{ccccccccccc} &0&1&2&3&4&5&6&7&8&9\\ \hline
+ \xintApplyInline \Row {0123456789}
+ \end{tabular}}
+\end{figure*}
+\end{everbatim*}
+
+One could not move the definition of |\Item| inside the tabular,
+as it would get lost after the first |&|. But this
+works:
+\everb|@
+\begin{tabular}{ccccccccccc}
+ &0&1&2&3&4&5&6&7&8&9\\ \hline
+ \def\Row #1{#1:\xintApplyInline {&\xintiiPow {#1}}{0123456789}\\ }%
+ \xintApplyInline \Row {0123456789}
+\end{tabular}
+|
+
+A limitation is that, contrarily to what one may have expected, the
+|\macro| for an |\xintApplyInline| can not be used to define
+the |\macro| for a nested sub-|\xintApplyInline|. For example,
+this does not work:\par
+\everb|@
+ \def\Row #1{#1:\def\Item ##1{&\xintiiPow {#1}{##1}}%
+ \xintApplyInline \Item {0123456789}\\ }%
+ \xintApplyInline \Row {0123456789} % does not work
+|
+\noindent But see \csbxint{For}.
+
+\subsection{\csh{xintFor}, \csh{xintFor*}}\label{xintFor}\label{xintFor*}
+
+\csbxint{For}\ntype{on} is a new kind of for loop.\footnote{first introduced
+ with \xintname |1.09c| of |2013/10/09|.} Rather than using macros
+for encapsulating list items, its behaviour is like a macro with parameters:
+|#1|, |#2|, \dots, |#9| are used to represent the items for up to nine levels of
+nested loops. Here is an example:
+%
+\everb|@
+\xintFor #9 in {1,2,3} \do {%
+ \xintFor #1 in {4,5,6} \do {%
+ \xintFor #3 in {7,8,9} \do {%
+ \xintFor #2 in {10,11,12} \do {%
+ $$#9\times#1\times#3\times#2=\xintiiPrd{{#1}{#2}{#3}{#9}}$$}}}}
+|
+\noindent This example illustrates that one does not have to use |#1| as the
+first one:
+the order is arbitrary. But each level of nesting should have its specific macro
+parameter. Nine levels of nesting is presumably overkill, but I did not know
+where it was reasonable to stop. |\par| tokens are accepted in both the comma
+separated list and the replacement text.
+
+\begin{framed}
+ \TeX nical notes:
+
+\begin{itemize}
+ \item The |#1| is replaced in the iterated-over text exactly as in general
+ \TeX\ macros or \LaTeX\ commands. This spares the user quite a few
+ |\expandafter|'s or other tricks needed with loops which have the
+ values encapsulated in macros, like \LaTeX's |\@for| and |\@tfor|.
+
+ \item \csa{xintFor} (and \csa{xintFor*}) isn't purely expandable: one can
+ not use it inside an |\edef|. But it may be used, as will be shown in
+ examples, in some contexts such as \LaTeX's |tabular| which are usually
+ hostile to non-expandable loops.
+
+ \item \csa{xintFor} (and \csa{xintFor*}) does some assignments prior to
+ executing each iteration of the replacement text, but it acts purely
+ expandably after the last iteration, hence if for example the replacement
+ text ends with a |\\|, the loop can be used insided a tabular and be
+ followed by a |\hline| without creating the dreaded ``|Misplaced
+ \noalign|'' error.
+
+ \item As stated in previous item the first iteration follows some
+ non-expandable internal dealings. This means for example that in \LaTeX{},
+ one can not inject a |\multicolumn| in the first iteration. Sometimes one
+ way work around this by injecting father |&\multicolumn| or |\\
+ \multicolumn|.
+
+ \item It does not create groups.
+
+ \item It makes no global assignments.
+
+ \item The iterated replacement text may close a group which was opened even
+ before the start of the loop (typical example being with |&| in
+ alignments).
+\begin{everbatim*}
+\begin{tabular}{rccccc}
+ \hline
+ \xintFor #1 in {A, B, C} \do {%
+ #1:\xintFor #2 in {a, b, c, d, e} \do {&($ #2 \to #1 $)}\\ }%
+ \hline
+\end{tabular}
+\end{everbatim*}
+
+ \item There is no facility provided which would give access to a count of
+ the number of iterations as it is technically not easy to do so it in a
+ way working with nested loops while maintaining the ``expandable after
+ done'' property; something in the spirit of \csbxint{iloopindex} is
+ possible but this approach would bring its own limitations and
+ complications. Hence the user is invited to update her own count or
+ \LaTeX{} counter or macro at each iteration, if needed.
+
+ \item A |\macro| whose definition uses internally an \csbxint{For} loop
+ may be used inside another \csbxint{For} loop even if the two loops both
+ use the same macro parameter. The loop definition inside |\macro|
+ must use |##| as is the general rule for definitions done inside macros.
+
+ \item \csbxint{For} is for comma separated values and \csbxint{For*} for
+ lists of braced items; their respective expansion policies differ. They
+ are described later.
+\end{itemize}
+\unskip
+\end{framed}
+
+\noindent Regarding \csbxint{For}:
+\begin{itemize}[nosep, listparindent=\leftmarginiii]
+\item the spaces between the various declarative elements are all optional,
+\item in the list of comma separated values, spaces around the commas or at
+ the start and end are ignored,
+\item if an item must contain itself its own commas, then it should
+ be braced, and the braces will be removed before feeding the iterated-over
+ text,
+\item the list may be a macro, it is expanded only once,
+\item items are not pre-expanded. The first item should be braced or start
+ with a space if the list is explicit and the item should not be
+ pre-expanded,
+\item empty items give empty |#1|'s in the replacement text, they are not
+ skipped,
+\item an empty list executes once the replacement text with an empty parameter
+ value,
+\item the list, if not a macro, \fbox{must be braced.}
+\end{itemize}
+
+\noindent Regarding \csbxint{For*}:\ntype{{\lowast f}n}
+\begin{itemize}[nosep, listparindent=\leftmarginiii]
+\item it handles lists of braced items (or naked tokens),
+\item it \hyperref[ssec:expansions]{\fexpan ds} the list,
+\item and more generally it \hyperref[ssec:expansions]{\fexpan ds} each naked
+ token encountered
+ before assigning the |#1| values (gobbling spaces in the process);
+ this
+ makes it easy to simulate concatenation of multiple lists|\x|, |\y|:
+ if |\x| expands to |{1}{2}{3}| and |\y| expands to |{4}{5}{6}| then |{\x\y}|
+ as argument to |\xintFor*| has the same effect as |{{1}{2}{3}{4}{5}{6}}|.
+
+ For a further illustration see the use of |\xintFor*| at the end of
+ \autoref{ssec:fibonacci}.
+\item spaces at the start, end, or in-between items are gobbled (but naturally
+ not the spaces inside \emph{braced} items),
+\item except if the list argument is a macro (with no parameters), \fbox{it
+ must be braced.},
+\item an empty list leads to an empty result.
+\end{itemize}
+
+The macro \csbxint{Seq} which generates arithmetic sequences is to be used
+with \csbxint{For*} as its output consists of successive braced numbers (given
+as digit tokens).
+\begin{everbatim*}
+\xintFor* #1 in {\xintSeq [+2]{-7}{+2}}\do {stuff
+ with #1\xintifForLast{\par}{\newline}}
+\end{everbatim*}
+
+
+When nesting \csa{xintFor*} loops, using \csa{xintSeq} in the inner loops is
+inefficient, as the arithmetic sequence will be re-created each time. A more
+efficient style is:
+%
+\begin{everbatim}
+ \edef\innersequence {\xintSeq[+2]{-50}{50}}%
+ \xintFor* #1 in {\xintSeq {13}{27}} \do
+ {\xintFor* #2 in \innersequence \do {stuff with #1 and #2}%
+ .. some other macros .. }
+\end{everbatim}
+
+This is a general remark applying for any nesting of loops, one should avoid
+recreating the inner lists of arguments at each iteration of the outer loop.
+
+
+When the loop is defined inside a macro for later execution the |#| characters
+must be doubled.%
+%
+\footnote{sometimes what seems to be a macro argument isn't really; in
+ \csa{raisebox\{1cm\}\{}\csa{xintFor \#1 in \{a,b,c\} }\csa{do
+ \{\#1\}\}} no doubling should be done.}
+%
+For example:
+%
+\begin{everbatim*}
+\def\T{\def\z {}%
+ \xintFor* ##1 in {{u}{v}{w}} \do {%
+ \xintFor ##2 in {x,y,z} \do {%
+ \expandafter\def\expandafter\z\expandafter {\z\sep (##1,##2)} }%
+ }%
+}%
+\T\def\sep {\def\sep{, }}\z
+\end{everbatim*}
+
+Similarly when the replacement text
+of |\xintFor| defines a macro with parameters, the macro character |#| must be
+doubled.
+
+
+The iterated macros as well as the list items are allowed to contain explicit
+|\par| tokens.
+
+
+\subsection{\csh{xintifForFirst}, \csh{xintifForLast}}
+\label{xintifForFirst}\label{xintifForLast}
+
+\csbxint{ifForFirst}\,\texttt{\{YES branch\}\{NO branch\}}\etype{nn}
+ and \csbxint{ifForLast}\,\texttt{\{YES
+ branch\}\hskip 0pt plus 0.2em \{NO branch\}}\etype{nn} execute the |YES| or
+|NO| branch
+if the
+\csbxint{For}
+or \csbxint{For*} loop is currently in its first, respectively last, iteration.
+
+Designed to work as expected under nesting (but see frame next.) Don't forget
+an empty brace pair |{}| if a branch is to do nothing. May be used multiple
+times in the replacement text of the loop.
+
+\begin{framed}
+ \noindent Pay attention to these implementation features:
+ \begin{itemize}[nosep, listparindent=\leftmarginiii]
+ \item \emph{if an inner \csbxint{For} loop is positioned before the
+ \csb{xintifForFirst} or \csb{xintifForLast} of the outer loop it will
+ contaminate their settings. This applies also naturally if the inner loop
+ arises from the expansion of some macro located before the outer
+ conditionals.}
+
+ One fix is to make sure that the outer conditionals are expanded before the
+ inner loop is executed, e.g. this will be the case if the inner loop is
+ located inside one of the branches of the conditional.
+
+ Another approach is to enclose, if feasible, the inner loop in a group of
+ its own.
+ \item \emph{if the replacement text closes a group (e.g. from a |&| inside an
+ alignment), the conditionals will lose their ascribed meanings and end up
+ possibly undefined, depending whether there is some outer loop whose
+ execution started before the opening of the group.}
+
+ The fix is to arrange things so that the conditionals are expanded
+ before \TeX\ encounters the closing-group token.
+ \end{itemize}
+\end{framed}
+
+\subsection{ \csh{xintBreakFor}, \csh{xintBreakForAndDo}}
+\label{xintBreakFor}\label{xintBreakForAndDo}
+
+One may immediately terminate an \csbxint{For} or \csbxint{For*} loop with
+\csbxint{BreakFor}.
+
+\begin{framed}
+ As it acts by clearing up all the rest of the replacement text when
+ encountered, it will not work from inside some |\if...\fi| without
+ suitable |\expandafter| or swapping technique.
+
+ Also it can't be used from inside braces as from there it can't see the end
+ of the replacement text.
+\end{framed}
+
+There is also \csbxint{BreakForAndDo}. Both are illustrated by various examples
+in the next section which is devoted to ``forever'' loops.
+
+\subsection{\csh{xintintegers}, \csh{xintdimensions}, \csh{xintrationals}}
+\label{xintegers}\label{xintintegers}
+\label{xintdimensions}\label{xintrationals}
+
+If the list argument to \csbxint{For} (or \csbxint{For*}, both are equivalent in
+this context) is \csbxint{integers} (equivalently \csbxint{egers}) or more
+generally \csbxint{integers}|[||start|\allowbreak|+|\allowbreak|delta||]|
+(\emph{the whole within braces}!)%
+%
+\footnote{the |start+delta| optional specification may have extra spaces
+ around the plus sign of near the square brackets, such spaces are
+ removed. The same applies with \csa{xintdimensions} and
+ \csa{xintrationals}.},
+%
+then \csbxint{For} does an infinite iteration where
+|#1| (or |#2|, \dots, |#9|) will run through the arithmetic sequence of (short)
+integers with initial value |start| and increment |delta| (default values:
+|start=1|, |delta=1|; if the optional argument is present it must contains both
+of them, and they may be explicit integers, or macros or count registers). The
+|#1| (or |#2|, \dots, |#9|) will stand for |\numexpr <opt sign><digits>\relax|,
+and the litteral representation as a string of digits can thus be obtained as
+\fbox{\csa{the\#1}} or |\number#1|. Such a |#1| can be used in an |\ifnum| test
+with no need to be postfixed with a space or a |\relax| and one should
+\emph{not} add them.
+
+If the list argument is \csbxint{dimensions} or more generally
+\csbxint{dimensions}|[||start|\allowbreak|+|\allowbreak|delta||]| (\emph{within
+ braces}!), then
+\csbxint{For} does an infinite iteration where |#1| (or |#2|, \dots, |#9|) will
+run through the arithmetic sequence of dimensions with initial value
+|start| and increment |delta|. Default values: |start=0pt|, |delta=1pt|; if
+the optional argument is present it must contain both of them, and they may
+be explicit specifications, or macros, or dimen registers, or length macros
+in \LaTeX{} (the stretch and shrink components will be discarded). The |#1|
+will be |\dimexpr <opt sign><digits>sp\relax|, from which one can get the
+litteral (approximate) representation in points via |\the#1|. So |#1| can be
+used anywhere \TeX{} expects a dimension (and there is no need in conditionals
+to insert a |\relax|, and one should \emph{not} do it), and to print its value
+one uses \fbox{\csa{the\#1}}. The chosen representation guarantees exact
+incrementation with no rounding errors accumulating from converting into
+points at each step.
+
+
+
+
+
+
+If the list argument to \csbxint{For} (or \csbxint{For*}) is \csbxint{rationals}
+or more generally
+\csbxint{rationals}|[||start|\allowbreak|+|\allowbreak|delta||]| (\emph{within
+ braces}!), then \csbxint{For} does an infinite iteration where |#1| (or |#2|,
+\dots, |#9|) will run through the arithmetic sequence of \xintfracname fractions
+with initial value |start| and increment |delta| (default values: |start=1/1|,
+|delta=1/1|). This loop works \emph{only with \xintfracname loaded}. if the
+optional argument is present it must contain both of them, and they may be given
+in any of the formats recognized by \xintfracname (fractions, decimal
+numbers, numbers in scientific notations, numerators and denominators in
+scientific notation, etc...) , or as macros or count registers (if they are
+short integers). The |#1| (or |#2|, \dots, |#9|) will be an |a/b| fraction
+(without a |[n]| part), where
+the denominator |b| is the product of the denominators of
+|start| and |delta| (for reasons of speed |#1| is not reduced to irreducible
+form, and for another reason explained later |start| and |delta| are not put
+either into irreducible form; the input may use explicitely \csa{xintIrr} to
+achieve that).
+\begin{everbatim*}
+\begingroup\small
+\noindent\parbox{\dimexpr\linewidth-3em}{\color[named]{OrangeRed}%
+\xintFor #1 in {\xintrationals [10/21+1/21]} \do
+{#1=\xintifInt {#1}
+ {\textcolor{blue}{\xintTrunc{10}{#1}}}
+ {\xintTrunc{10}{#1}}% display in blue if an integer
+ \xintifGt {#1}{1.123}{\xintBreakFor}{, }%
+ }}
+\endgroup\smallskip
+\end{everbatim*}
+
+\smallskip The example above confirms that computations are done exactly, and
+illustrates that the two initial (reduced) denominators are not multiplied when
+they are found to be equal. It is thus recommended to input |start| and |delta|
+with a common smallest possible denominator, or as fixed point numbers with the
+same numbers of digits after the decimal mark; and this is also the reason why
+|start| and |delta| are not by default made irreducible. As internally the
+computations are done with numerators and denominators completely expanded, one
+should be careful not to input numbers in scientific notation with exponents in
+the hundreds, as they will get converted into as many zeroes.
+
+\begin{everbatim*}
+\noindent\parbox{\dimexpr.7\linewidth}{\raggedright
+\xintFor #1 in {\xintrationals [0.000+0.125]} \do
+{\edef\tmp{\xintTrunc{3}{#1}}%
+ \xintifInt {#1}
+ {\textcolor{blue}{\tmp}}
+ {\tmp}%
+ \xintifGt {#1}{2}{\xintBreakFor}{, }%
+ }}\smallskip
+\end{everbatim*}
+
+We see here that \csbxint{Trunc} outputs (deliberately) zero as $0$, not (here)
+$0.000$, the idea being not to lose the information that the truncated thing was
+truly zero. Perhaps this behaviour should be changed? or made optional? Anyhow
+printing of fixed points numbers should be dealt with via dedicated packages
+such as |numprint| or |siunitx|.\par
+
+
+\subsection{\csh{xintForpair}, \csh{xintForthree}, \csh{xintForfour}}\label{xintForpair}\label{xintForthree}\label{xintForfour}
+
+The syntax\ntype{on} is illustrated in this
+example. The notation is the usual one for |n|-uples, with parentheses and
+commas. Spaces around commas and parentheses are ignored.
+%
+\begin{everbatim*}
+{\centering\begin{tabular}{cccc}
+ \xintForpair #1#2 in { ( A , a ) , ( B , b ) , ( C , c ) } \do {%
+ \xintForpair #3#4 in { ( X , x ) , ( Y , y ) , ( Z , z ) } \do {%
+ $\Biggl($\begin{tabular}{cc}
+ -#1- & -#3-\\
+ -#4- & -#2-\\
+ \end{tabular}$\Biggr)$&}\\\noalign{\vskip1\jot}}%
+\end{tabular}\\}
+\end{everbatim*}
+
+\csbxint{Forpair} must be followed by either |#1#2|, |#2#3|, |#3#4|, \dots, or
+|#8#9| with |#1| usable as an alias for |#1#2|, |#2| as alias for |#2#3|,
+etc \dots\ and similarly for \csbxint{Forthree} (using |#1#2#3| or simply
+|#1|, |#2#3#4| or simply |#2|, \dots) and \csbxint{Forfour} (with |#1#2#3#4|
+etc\dots).
+
+Nesting works as long as the macro parameters are distinct among |#1|, |#2|,
+..., |#9|. A macro which expands to an \csa{xintFor} or a
+\csa{xintFor(pair,three,four)} can be used in another one with no constraint
+about using distinct macro parameters.
+
+|\par| tokens are accepted in both the comma separated list and the
+replacement text.
+
+
+\subsection{\csh{xintAssign}}\label{xintAssign}
+
+\csa{xintAssign}\meta{braced things}\csa{to}%
+\meta{as many cs as they are things} %\ntype{{(f$\to$\lowast [x)}{\lowast N}}
+%
+defines (without checking if something gets overwritten) the control sequences
+on the right of \csa{to} to expand to the successive tokens or braced items
+located to the left of \csa{to}. \csa{xintAssign} is not an expandable macro.
+
+\fexpan sion is first applied to the material in front of \csa{xintAssign}
+which is fetched as one argument if it is braced. Then the expansion of this
+argument is examined and successive items are assigned to the macros following
+|\to|. There must be exactly as many macros as items. No check is done. The
+macro assignments are done with removal of one level of brace pairs from each
+item.
+
+After the initial \fexpan sion, each assigned (brace-stripped) item will be
+expanded according to the setting of the optional parameter.
+
+For example |\xintAssign [e]...| means that all assignments are done using
+|\edef|. With |[f]| the assignments will be made using
+\hyperref[fdef]{\ttfamily\char92fdef}. The default is simply to make the
+definitions with |\def|, corresponding to an empty optional paramter |[]|.
+Possibilities for the optional parameter are: |[], [g], [e], [x], [o], [go],
+[oo], [goo], [f], [gf]|. For example |[oo]| means a double expansion.
+\begin{everbatim*}
+\xintAssign \xintiiDivision{1000000000000}{133333333}\to\Q\R
+\meaning\Q\newline
+\meaning\R\newline
+\xintAssign {{\xintiiDivision{1000000000000}{133333333}}}\to\X
+\meaning\X\newline
+\xintAssign [oo]{{\xintiiDivision{1000000000000}{133333333}}}\to\X
+\meaning\X\newline
+\xintAssign \xintiiPow{7}{13}\to\SevenToThePowerThirteen
+\meaning\SevenToThePowerThirteen\par
+\end{everbatim*}
+
+Two special cases:
+\begin{itemize}[nosep]
+\item if after this initial expansion no brace is found immediately after
+ \csa{xintAssign}, it is assumed that there is only one control sequence
+ following |\to|, and this control sequence is then defined via |\def| (or
+ what is set-up by the optional parameter) to expand to the material between
+ \csa{xintAssign} and \csa{to}.
+\item if the material between \csa{xintAssign} and |\to| is enclosed in two
+ brace pairs, the first brace pair is removed, then the \fexpan sion is
+ immediately stopped by the inner brace pair, hence \csa{xintAssign} now
+ finds a unique item and thus defines only a single macro to be this item,
+ which is now stripped of the second pair of braces.
+\end{itemize}
+
+
+\emph{Note:} prior to release |1.09j|, |\xintAssign| did an |\edef| by default
+for each item assignment but it now does |\def| corresponding to no or empty
+optional parameter.
+
+It is allowed for the successive braced items to be separated by spaces. They
+are removed during the assignments. But if a single macro is defined (which
+happens if the argument after \fexpan sion does not start with a brace),
+naturally the scooped up material has all intervening spaces, as it is
+considered a
+single item. But an upfront initial space will have been absorbed by \fexpan
+sion.
+\begin{everbatim*}
+\def\X{ {a} {b} {c} {d} }\def\Y { u {a} {b} {c} {d} }
+\xintAssign\X\to\A\B\C\D
+\xintAssign\Y\to\Z
+\meaning\A, \meaning\B, \meaning\C, \meaning\D+++\newline
+\meaning\Z+++\par
+\end{everbatim*}
+As usual successive space characters in input make for a single \TeX\ space token.
+
+
+\subsection{\csh{xintAssignArray}}\label{xintAssignArray}
+
+\xintAssignArray \xintBezout {1000}{113}\to\Bez
+
+\csa{xintAssignArray}\meta{braced things}\csa{to}\csa{myArray}
+%
+%\ntype{{(f$\to$\lowast x)}N}
+%
+first expands fully what comes immediately after |\xintAssignArray| and
+expects to find a list of braced things |{A}{B}...| (or tokens). It then
+defines \csa{myArray} as a macro with one parameter, such that \csa{myArray\x}
+expands to give the |x|th braced thing of this original
+list (the argument \texttt{\x} itself is fed to a |\numexpr| by |\myArray|,
+and |\myArray| expands in two steps to its output). With |0| as parameter,
+\csa{myArray}|{0}| returns the number |M| of elements of the array so that the
+successive elements are \csa{myArray}|{1}|, \dots, \csa{myArray}|{M}|.
+%
+\leftedline{|\xintAssignArray \xintBezout {1000}{113}\to\Bez|} will set
+|\Bez{0}| to \dtt{\Bez0}, |\Bez{1}| to \dtt{\Bez1}, |\Bez{2}| to
+\dtt{\Bez2}, and |\Bez{3}| to \dtt{\Bez3}:
+\dtt{$\Bez1\times1000+\Bez2\times113=\Bez3$.}
+This macro is incompatible with expansion-only contexts.
+
+\csa{xintAssignArray} admits an optional parameter, for example
+|\xintAssignArray [e]| means that the definitions of the macros will be made
+with |\edef|. The empty optional parameter (default) means that definitions
+are done with |\def|. Other possibilities: |[], [o], [oo], [f]|. Contrarily to
+\csbxint{Assign} one can not use the |g| here to make the definitions global.
+For this, one should rather do |\xintAssignArray| within a group starting with
+|\globaldefs 1|.
+
+
+\subsection{\csh{xintDigitsOf}}\label{xintDigitsOf}
+
+This is a synonym for \csbxint{AssignArray},\ntype{fN} to be used to define
+an array giving all the digits of a given (positive, else the minus sign will
+be treated as first item) number.
+\begingroup\xintDigitsOf\xintiiPow {7}{500}\to\digits
+%
+\leftedline{|\xintDigitsOf\xintiiPow {7}{500}\to\digits|}
+\noindent $7^{500}$ has |\digits{0}=|\digits{0} digits, and the 123rd among them
+(starting from the most significant) is
+|\digits{123}=|\digits{123}.
+\endgroup
+
+\subsection{\csh{xintRelaxArray}}\label{xintRelaxArray}
+
+\csa{xintRelaxArray}\csa{myArray} %\ntype{N}
+%
+(globally) sets to \csa{relax} all macros which were defined by the previous
+\csa{xintAssignArray} with \csa{myArray} as array macro.
+
+\clearpage
+\let\xinttoolsnameUp\undefined
+\def\n{|{N}|}
+\def\m{|{M}|}
+\def\x{|{x}|}
+
+\csname ExamplesnameUp\endcsname
+\section {Additional (old) examples with \xinttoolsname or \xintexprname or both}
+\RaisedLabel{sec:examples}
+
+Note: \xintexprname.sty automatically loads \xinttoolsname.sty.
+
+The examples given here start to feel dated and are currently in need of some
+rewrite to better illustrate newer features of the package.
+
+
+\localtableofcontents
+
+\subsection{More examples with dummy variables}
+\label{ssec:moredummies}
+
+These examples were first added to this manual at the time of the |1.1|
+release (|2014/10/29|).
+
+\begin{everbatim*}
+Prime numbers are always cool
+\xinttheiiexpr seq((seq((subs((x/:m)?{(m*m>x)?{1}{0}}{-1},m=2n+1))
+ ??{break(0)}{omit}{break(1)},n=1++))?{x}{omit},
+ x=10001..[2]..10200)\relax
+\end{everbatim*}
+
+The syntax in this last example may look a bit involved (...\@ and it is so I
+admit). First |x/:m| computes |x modulo m| (this is the modulo with respect to
+floored division). The |(x)?{yes}{no}| construct checks if |x| (which
+\emph{must} be within parentheses) is true or false, i.e.\@ non zero or zero. It
+then executes either the |yes| or the |no| branch, the non chosen branch is
+\emph{not} evaluated. Thus if |m| divides |x| we are in the second (``false'')
+branch. This gives a |-1|. This |-1| is the argument to a |??| branch which is
+of the type |(y)??{y<0}{y=0}{y>0}|, thus here the |y<0|, i.e.\@, |break(0)| is
+chosen. This |0| is thus given to another |?| which consequently chooses
+|omit|, hence the number is not kept in the list. The numbers which survive
+are the prime numbers.
+
+\begin{everbatim*}
+The first Fibonacci number beyond |2^64|, |2^64|, and the index are respectively
+\xinttheiiexpr subs(iterr(0,1;(@1>N)?{break(@1,N,i)}{@1+@2},i=1++),N=2^64)\relax.
+\end{everbatim*}
+
+% A006877 In the `3x+1' problem, these values for the starting value set new
+% records for number of steps to reach 1. (Formerly M0748) 14 1, 2, 3, 6, 7,
+% 9, 18, 25, 27, 54, 73, 97, 129, 171, 231, 313, 327, 649, 703, 871, 1161,
+% 2223, 2463, 2919, 3711, 6171, 10971, 13255, 17647, 23529, 26623, 34239,
+% 35655, 52527, 77031, 106239, 142587, 156159, 216367, 230631, 410011, 511935,
+% 626331, 837799
+
+One more recursion:
+\begin{everbatim*}
+\def\syr #1{\xinttheiiexpr
+ rseq(#1; (@<=1)?{break(i)}{odd(@)?{3@+1}{@//2}},i=0++)\relax}
+The 3x+1 problem: \syr{231}\par
+\end{everbatim*}
+
+OK, a final one:%
+\begin{everbatim*}
+\def\syrMax #1{\xintiiexpr iterr(#1,#1;even(i)?
+ {(@2<=1)?{break(@1,i//2)}
+ {odd(@2)?{3@2+1}{@2//2}}}
+ {(@1>@2)?{@1}{@2}},i=0++)\relax }
+With initial value 1161, the maximal intermediate value and the number of steps
+needed to reach 1 are respectively \syrMax{1161}.\par
+\end{everbatim*}
+
+Look at the
+ \hyperlink{BrentSalamin}{Brent-Salamin algorithm implementation} for a more
+ interesting recursion.
+
+% \begin{everbatim*}
+% \newcommand\Factors [1]{\xinttheiiexpr
+% subs(seq((i/:3=1)?{omit}{[L][i]},i=0..len(L)-1),
+% L=rseq(#1;(p^2>[@][0])?{([@][0]>1)?{break(1,[@][0],1)}{abort}}
+% {(([@][0])/:p)?{omit}
+% {iter(([@][0])//p; (@/:p)?{break(@,p,e)}{@//p},e=1++)}},p=2++))\relax }
+% \Factors {41^4*59^2*29^3*13^5*17^8*29^2*59^4*37^6}
+% \end{everbatim*}
+
+% This might look a bit scary, I admit.%
+% %
+% \footnote{Look at the
+% \hyperlink{BrentSalamin}{Brent-Salamin algorithm implementation} for a much
+% saner example.}
+% %
+
+% \xintexprname has minimal tools and
+% is obstinate about doing everything expandably! We are hampered by absence of a
+% notion of ``nuple''. The algorithm divides |N| by |2| until no more possible,
+% then by |3|, then by |4| (which is silly), then by |5|, then by |6| (silly
+% again), \dots.
+
+% The variable |L=rseq(#1;...)| expands, if one follows the steps, to a comma
+% separated list starting with the initial (evaluated) |N=#1| and then
+% pseudo-triplets where the first item is |N| trimmed of small primes, the
+% second item is the last prime divisor found, and the third item is its
+% exponent in original |N|.
+
+% The algorithm needs to keep handy the last computed quotient by prime powers,
+% hence all of them, but at the very end it will be cleaner to get rid of them
+% (this corresponds to the first line in the code above). This is achieved in a
+% cumbersome inefficient way; indeed each item extraction |[L][i]| is costly: it
+% is not like accessing an array stored in memory, due to expandability, nothing
+% can be stored in memory! Nevertheless, this step could be done here in a far
+% less inefficient manner if there was a variant of |seq| which, in the spirit
+% of \csbxint{iloopindex}, would know how many steps it had been through so far.
+% This is a feature to be added to |\xintexpr|! (as well as a |++| construct
+% allowing a non unit step).
+
+% Notice that in |iter(([@][0])//p;| the |@| refers to the previous triplet (or
+% in the first step to |N|), but the latter |@| showing up in |(@/:p)?| refers
+% to the previous value computed by |iter|.
+
+% \begin{snugframed}
+% Parentheses are essential in |..([y][0])| else the parser will see |..[| and
+% end up in ultimate confusion, and also in |([@][0])/:p| else the parser will
+% see the itemwise operator |]/| on lists and again be very confused (I could
+% implement a |]/:| on lists, but in this situation this would also be very
+% confusing to the parser.)
+% \end{snugframed}
+
+% See \autoref{ssec:factorize} for a routine |\Factorize| written directly with
+% \xintname macros. Last time I checked |\Factors| was about seven times slower
+% than |\Factorize| in test cases such as
+% |16246355912554185673266068721806243461403654781833| and others. Among the
+% various things explaining the speed difference, there is fact that the
+% |\Factorize| algorithm step by increments of two, not one, and also it divides
+% only once, obtaining quotient and remainder in one go. These two things
+% already make for a speed-up factor of about four. Thus, |\Factors| is not
+% completely inefficient in comparison, and was quite easier to come up with
+% than |\Factorize|.
+
+\subsection{Completely expandable prime test}
+\label{ssec:primesI}
+
+Let us now construct a completely expandable macro which returns $1$ if its
+given input is prime and $0$ if not:
+\everb|@
+\def\remainder #1#2{\the\numexpr #1-(#1/#2)*#2\relax }
+\def\IsPrime #1%
+ {\xintANDof {\xintApply {\remainder {#1}}{\xintSeq {2}{\xintiiSqrt{#1}}}}}
+|
+
+This uses \csbxint{iiSqrt} and assumes its input is at least $5$. Rather than
+\xintname's own \csbxint{iiRem} we used a quicker |\numexpr| expression as we
+are dealing with short integers. Also we used \csbxint{ANDof} which will
+return $1$ only if all the items are non-zero. The macro is a bit
+silly with an even input, ok, let's enhance it to detect an even input:
+\everb|@
+\def\IsPrime #1%
+ {\xintiiifOdd {#1}
+ {\xintANDof % odd case
+ {\xintApply {\remainder {#1}}
+ {\xintSeq [2]{3}{\xintiiSqrt{#1}}}%
+ }%
+ }
+ {\xintifEq {#1}{2}{1}{0}}%
+ }
+|
+
+We used the \xintname expandable tests (on big integers or fractions)
+in order for |\IsPrime| to be \fexpan dable.
+
+Our integers are short, but without |\expandafter|'s with
+|\@firstoftwo|, % @ n'est plus actif dans le dtx 1.1 !
+or some other related techniques,
+direct use of |\ifnum..\fi| tests is dangerous. So to make the macro more
+efficient we are going to use the expandable tests provided by the package
+\href{http://ctan.org/pkg/etoolbox}{etoolbox}%
+%
+\footnote{\url{http://ctan.org/pkg/etoolbox}}.
+%
+The macro becomes:
+%
+\everb|@
+\def\IsPrime #1%
+ {\ifnumodd {#1}
+ {\xintANDof % odd case
+ {\xintApply {\remainder {#1}}{\xintSeq [2]{3}{\xintiiSqrt{#1}}}}}
+ {\ifnumequal {#1}{2}{1}{0}}}
+|
+
+In the odd case however we have to assume the integer is at least $7$, as
+|\xintSeq| generates an empty list if |#1=3| or |5|, and |\xintANDof| returns
+$1$ when supplied an empty list. Let us ease up a bit |\xintANDof|'s work by
+letting it work on only $0$'s and $1$'s. We could use:
+%
+\everb|@
+\def\IsNotDivisibleBy #1#2%
+ {\ifnum\numexpr #1-(#1/#2)*#2=0 \expandafter 0\else \expandafter1\fi}
+|
+\noindent
+where the |\expandafter|'s are crucial for this macro to be \fexpan dable and
+hence work within the applied \csbxint{ANDof}. Anyhow, now that we have loaded
+\href{http://ctan.org/pkg/etoolbox}{etoolbox}, we might as well use:
+%
+\everb|@
+\newcommand{\IsNotDivisibleBy}[2]{\ifnumequal{#1-(#1/#2)*#2}{0}{0}{1}}
+|
+\noindent
+Let us enhance our prime macro to work also on the small primes:
+\everb|@
+\newcommand{\IsPrime}[1] % returns 1 if #1 is prime, and 0 if not
+ {\ifnumodd {#1}
+ {\ifnumless {#1}{8}
+ {\ifnumequal{#1}{1}{0}{1}}% 3,5,7 are primes
+ {\xintANDof
+ {\xintApply
+ { \IsNotDivisibleBy {#1}}{\xintSeq [2]{3}{\xintiiSqrt{#1}}}}%
+ }}% END OF THE ODD BRANCH
+ {\ifnumequal {#1}{2}{1}{0}}% EVEN BRANCH
+}
+|
+
+The input is still assumed positive. There is a deliberate blank before
+\csa{IsNotDivisibleBy} to use this feature of \csbxint{Apply}: a space stops the
+expansion of the applied macro (and disappears). This expansion will be done by
+\csbxint{ANDof}, which has been designed to skip everything as soon as it finds
+a false (i.e.\@ zero) input. This way, the efficiency is considerably improved.
+
+We did generate via the \csbxint{Seq} too many potential divisors though. Later
+sections give two variants: one with \csbxint{iloop} (\autoref{ssec:primesII})
+which is still expandable and another one (\autoref{ssec:primesIII}) which is a
+close variant of the |\IsPrime| code above but with the \csbxint{For} loop, thus
+breaking expandability. The \hyperref[ssec:primesII]{xintiloop variant} does not
+first evaluate the integer square root, the \hyperref[ssec:primesIII]{xintFor
+ variant} still does. I did not compare their efficiencies.
+
+
+Let us construct with this expandable primality test a table of the prime
+numbers up to $1000$. We need to count how many we have in order to know how
+many tab stops one shoud add in the last row.%
+%
+\footnote{although a tabular row may have less tabs than in the
+ preamble, there is a problem with the \char`\|\space\space vertical
+ rule, if one does that.}
+%
+There is some subtlety for this
+last row. Turns out to be better to insert a |\\| only when we know for sure we
+are starting a new row; this is how we have designed the |\OneCell| macro. And
+for the last row, there are many ways, we use again |\xintApplyUnbraced| but
+with a macro which gobbles its argument and replaces it with a tabulation
+character. The \csbxint{For*} macro would be more elegant here.
+%
+\everb?@
+\newcounter{primecount}
+\newcounter{cellcount}
+\newcommand{\NbOfColumns}{13}
+\newcommand{\OneCell}[1]{%
+ \ifnumequal{\IsPrime{#1}}{1}
+ {\stepcounter{primecount}
+ \ifnumequal{\value{cellcount}}{\NbOfColumns}
+ {\\\setcounter{cellcount}{1}#1}
+ {&\stepcounter{cellcount}#1}%
+ } % was prime
+ {}% not a prime, nothing to do
+}
+\newcommand{\OneTab}[1]{&}
+\begin{tabular}{|*{\NbOfColumns}{r}|}
+\hline
+2 \setcounter{cellcount}{1}\setcounter{primecount}{1}%
+ \xintApplyUnbraced \OneCell {\xintSeq [2]{3}{999}}%
+ \xintApplyUnbraced \OneTab
+ {\xintSeq [1]{1}{\the\numexpr\NbOfColumns-\value{cellcount}\relax}}%
+ \\
+\hline
+\end{tabular}
+There are \arabic{primecount} prime numbers up to 1000.
+?
+
+The table has been put in \hyperref[primesupto1000]{float} which appears
+\vpageref{primesupto1000}.
+We had to be careful to use in the last row \csbxint{Seq} with its optional
+argument |[1]| so as to not generate a decreasing sequence from |1| to |0|, but
+really an empty sequence in case the row turns out to already have all its
+cells (which doesn't happen here but would with a number of columns dividing
+$168$).
+%
+\newcommand{\IsNotDivisibleBy}[2]{\ifnumequal{#1-(#1/#2)*#2}{0}{0}{1}}
+
+\newcommand{\IsPrime}[1]
+ {\ifnumodd {#1}
+ {\ifnumless {#1}{8}
+ {\ifnumequal{#1}{1}{0}{1}}% 3,5,7 are primes
+ {\xintANDof
+ {\xintApply
+ { \IsNotDivisibleBy {#1}}{\xintSeq [2]{3}{\xintiiSqrt{#1}}}}%
+ }}% END OF THE ODD BRANCH
+ {\ifnumequal {#1}{2}{1}{0}}% EVEN BRANCH
+}
+
+\newcounter{primecount}
+\newcounter{cellcount}
+\newcommand{\NbOfColumns}{13}
+\newcommand{\OneCell}[1]
+ {\ifnumequal{\IsPrime{#1}}{1}
+ {\stepcounter{primecount}
+ \ifnumequal{\value{cellcount}}{\NbOfColumns}
+ {\\\setcounter{cellcount}{1}#1}
+ {&\stepcounter{cellcount}#1}%
+ } % was prime
+ {}% not a prime nothing to do
+}
+\newcommand{\OneTab}[1]{&}
+\begin{figure*}[ht!]
+ \centering
+ \phantomsection\label{primesupto1000}
+ \begin{tabular}{|*{\NbOfColumns}{r}|}
+ \hline
+ 2\setcounter{cellcount}{1}\setcounter{primecount}{1}%
+ \xintApplyUnbraced \OneCell {\xintSeq [2]{3}{999}}%
+ \xintApplyUnbraced \OneTab
+ {\xintSeq [1]{1}{\the\numexpr\NbOfColumns-\value{cellcount}\relax}}%
+ \\
+ \hline
+ \end{tabular}
+\smallskip
+\centeredline{There are \arabic{primecount} prime numbers up to 1000.}
+\end{figure*}
+
+\subsection{Another completely expandable prime test}
+\label{ssec:primesII}
+
+The |\IsPrime| macro from \autoref{ssec:primesI} checked expandably if a (short)
+integer was prime, here is a partial rewrite using \csbxint{iloop}. We use the
+|etoolbox| expandable conditionals for convenience, but not everywhere as
+|\xintiloopindex| can not be evaluated while being braced. This is also the
+reason why |\xintbreakiloopanddo| is delimited, and the next macro
+|\SmallestFactor| which returns the smallest prime factor examplifies that. One
+could write more efficient completely expandable routines, the aim here was only
+to illustrate use of the general purpose \csbxint{iloop}. A little table giving
+the first values of |\SmallestFactor| follows, its coding uses \csbxint{For},
+which is described later; none of this uses count registers.
+%
+
+
+\begin{everbatim*}
+% clean up possible left-over mess from previous examples
+\let\IsPrime\undefined \let\SmallestFactor\undefined
+\newcommand{\IsPrime}[1] % returns 1 if #1 is prime, and 0 if not
+ {\ifnumodd {#1}
+ {\ifnumless {#1}{8}
+ {\ifnumequal{#1}{1}{0}{1}}% 3,5,7 are primes
+ {\if
+ \xintiloop [3+2]
+ \ifnum#1<\numexpr\xintiloopindex*\xintiloopindex\relax
+ \expandafter\xintbreakiloopanddo\expandafter1\expandafter.%
+ \fi
+ \ifnum#1=\numexpr (#1/\xintiloopindex)*\xintiloopindex\relax
+ \else
+ \repeat 00\expandafter0\else\expandafter1\fi
+ }%
+ }% END OF THE ODD BRANCH
+ {\ifnumequal {#1}{2}{1}{0}}% EVEN BRANCH
+}%
+\catcode`_ 11
+\newcommand{\SmallestFactor}[1] % returns the smallest prime factor of #1>1
+ {\ifnumodd {#1}
+ {\ifnumless {#1}{8}
+ {#1}% 3,5,7 are primes
+ {\xintiloop [3+2]
+ \ifnum#1<\numexpr\xintiloopindex*\xintiloopindex\relax
+ \xint_afterfi{\xintbreakiloopanddo#1.}%
+ \fi
+ \ifnum#1=\numexpr (#1/\xintiloopindex)*\xintiloopindex\relax
+ \xint_afterfi{\expandafter\xintbreakiloopanddo\xintiloopindex.}%
+ \fi
+ \iftrue\repeat
+ }%
+ }% END OF THE ODD BRANCH
+ {2}% EVEN BRANCH
+}%
+\catcode`_ 8
+{\centering
+ \begin{tabular}{|c|*{10}c|}
+ \hline
+ \xintFor #1 in {0,1,2,3,4,5,6,7,8,9}\do {&\bfseries #1}\\
+ \hline
+ \bfseries 0&--&--&2&3&2&5&2&7&2&3\\
+ \xintFor #1 in {1,2,3,4,5,6,7,8,9}\do
+ {\bfseries #1%
+ \xintFor #2 in {0,1,2,3,4,5,6,7,8,9}\do
+ {&\SmallestFactor{#1#2}}\\}%
+ \hline
+ \end{tabular}\par
+}
+\end{everbatim*}
+
+\subsection{Miller-Rabin Pseudo-Primality expandably}
+\label{ssec:PrimesIV}
+
+
+% At the time of writing, the code at the link above is still the version from
+% April 2016 and it needed some hacks to get recursive (pseudo)-functions
+% defined. Since |1.2h| of |2016/11/20| there is \csbxint{NewFunction} which
+% allows us here to avoid such internal hacking.
+
+% And since |1.3| of |2018/03/01|, it is possible to use \csbxint{defiifunc}
+% also for recursive definitions, so we use it here, but we can benefit from it
+% only for modular exponentiation as the rest of the code uses |iter| or |break|
+% statements which are not yet compatible with \csbxint{defiifunc}.
+
+The |isPseudoPrime(n)| is usable in \csbxint{iiexpr}-essions and establishes
+if its (positive) argument is a Miller-Rabin PseudoPrime to the bases $2, 3,
+5, 7, 11, 13, 17$. If this is true and $n<341550071728321$ (which has 15
+digits) then $n$ really is a prime number.
+
+Similarly $n=3825123056546413051$ (19 digits) is the smallest composite number
+which is a strong pseudo prime for bases $2, 3, 5, 7, 11, 13, 17, 19$ and
+$23$. It is easy to extend the code below to include these additional tests
+(we could make the list of tested bases an argument too, now that I think
+about it.)
+
+For more information see
+ \centeredline{\url{https://en.wikipedia.org/wiki/Miller%E2%80%93Rabin_primality_test#Deterministic_variants_of_the_test}}
+ and
+\centeredline{\url{http://primes.utm.edu/prove/prove2_3.html}}
+
+In particular, according to \textsc{Jaeschke} \emph{On strong pseudoprimes to
+ several bases,} Math. Comp., 61 (1993) 915-926, if $n < 4,759,123,141$ it is
+enough to establish Rabin-Miller pseudo-primality to bases $a = 2, 7, 61$ to
+prove that $n$ is prime. This range is enough for \TeX\ numbers and we could
+then write a very fast expandable primality test for such numbers using only
+|\numexpr|. Left as an exercise\dots
+
+\begin{everbatim*}
+% I -------------------------------- Modular Exponentiation
+% Computes x^m modulo n (with m non negative).
+% We will always use it with 1 < x < n
+%
+% With xint 1.4 we should use ? and ?? (although in the case at hand ifsgn()
+% and if() would be ok but I should not say that).
+%
+\xintdefiifunc powmod_a(x, m, n) :=
+ isone(m)?
+ % m=1, return x modulo n
+ { x /: n }
+ % m > 1 test if odd or even and do recursive call
+ { odd(m)? { x*sqr(powmod_a(x, m//2, n)) /: n }
+ { sqr(powmod_a(x, m//2, n)) /: n }
+ }
+ ;
+\xintdefiifunc powmod(x, m, n) := (m)?{powmod_a(x, m, n)}{1};
+
+%% Syntax used before xint 1.4:
+% \xintdefiifunc powmod_a(x, m, n) :=
+% ifone(m,
+% % m=1, return x modulo n
+% x /: n,
+% % m > 1 test if odd or even and do recursive call
+% if(odd(m), (x*sqr(powmod_a(x, m//2, n))) /: n,
+% sqr(powmod_a(x, m//2, n)) /: n
+% )
+% );
+% \xintdefiifunc powmod(x, m, n) := if(m, powmod_a(x, m, n), 1);
+
+% II ------------------------------ Miller-Rabin compositeness witness
+
+% n=2^k m + 1 with m odd and k at least 1
+
+% Choose 1<x<n.
+% compute y=x^m modulo n
+% if equals 1 we can't say anything
+% if equals n-1 we can't say anything
+% else put j=1, and
+% compute repeatedly the square, incrementing j by 1 each time,
+% thus always we have y^{2^{j-1}}
+% -> if at some point n-1 mod n found, we can't say anything and break out
+% -> if however we never find n-1 mod n before reaching
+% z=y^{2^{k-1}} with j=k
+% we then have z^2=x^{n-1}.
+ % Suppose z is not -1 mod n. If z^2 is 1 mod n, then n can be prime only if
+ % z is 1 mod n, and we can go back up, until initial y, and we have already
+ % excluded y=1. Thus if z is not -1 mod n and z^2 is 1 then n is not prime.
+ % But if z^2 is not 1, then n is not prime by Fermat. Hence (z not -1 mod n)
+ % implies (n is composite). (Miller test)
+
+% let's use again xintexpr indecipherable (except to author) syntax. Of course
+% doing it with macros only would be faster.
+
+% Here \xintdefiifunc is not usable because not compatible with iter, break, ...
+% but \xintNewFunction comes to the rescue.
+
+\xintNewFunction{isCompositeWitness}[4]{% x=#1, n=#2, m=#3, k=#4
+ subs((y==1)?{0}
+ {iter(y;(j==#4)?{break(!(@==#2-1))}
+ {(@==#2-1)?{break(0)}{sqr(@)/:#2}},j=1++)}
+ ,y=powmod(#1,#3,#2))}
+
+% added note (2018/03/07) it is possible in the above that m=#3 is never
+% zero, so we should rather call powmod_a for a small gain, but I don't
+% have time to re-read the code comments and settle this.
+
+% III ------------------------------------- Strong Pseudo Primes
+
+% cf
+% http://oeis.org/A014233
+% <http://mathworld.wolfram.com/Rabin-MillerStrongPseudoprimeTest.html>
+% <http://mathworld.wolfram.com/StrongPseudoprime.html>
+
+% check if positive integer <49 si a prime.
+% 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47
+\def\IsVerySmallPrime #1%
+ {\ifnum#1=1 \xintdothis0\fi
+ \ifnum#1=2 \xintdothis1\fi
+ \ifnum#1=3 \xintdothis1\fi
+ \ifnum#1=5 \xintdothis1\fi
+ \ifnum#1=\numexpr (#1/2)*2\relax\xintdothis0\fi
+ \ifnum#1=\numexpr (#1/3)*3\relax\xintdothis0\fi
+ \ifnum#1=\numexpr (#1/5)*5\relax\xintdothis0\fi
+ \xintorthat 1}
+
+\xintNewFunction{isPseudoPrime}[1]{% n = #1
+ (#1<49)?% use ? syntax to evaluate only what is needed
+% prior to 1.4 we had \xintthe#1 here but the actual tokens represented
+% by this #1 when isPseudoPrime() function expands have changed and
+% the correct way is now \xintiieval{#1} to hand over explicit digits to
+% the \IsVerySmallPrime macro.
+ {\IsVerySmallPrime{\xintiieval{#1}}}
+ {(even(#1))?
+ {0}
+ {subs(%
+ % L expands to two values m, k hence isCompositeWitness does get
+ % its four variables x, n, m, k
+ isCompositeWitness(2, #1, L)?
+ {0}%
+ {isCompositeWitness(3, #1, L)?
+ {0}%
+ {isCompositeWitness(5, #1, L)?
+ {0}%
+ {isCompositeWitness(7, #1, L)?
+ {0}%
+% above enough for N<3215031751 hence all TeX numbers
+ {isCompositeWitness(11, #1, L)?
+ {0}%
+% above enough for N<2152302898747, hence all 12-digits numbers
+ {isCompositeWitness(13, #1, L)?
+ {0}%
+% above enough for N<3474749660383
+ {isCompositeWitness(17, #1, L)?
+ {0}%
+% above enough for N<341550071728321
+ {1}%
+ }% not needed to comment-out end of lines spaces inside
+ }% \xintexpr but this is too much of a habit for me with TeX!
+ }% I left some after the ? characters.
+ }%
+ }%
+ }% this computes (m, k) such that n = 2^k m + 1, m odd, k>=1
+ , L=iter(#1//2;(even(@))?{@//2}{break(@,k)},k=1++))%
+ }%
+ }%
+}
+
+% if needed:
+%\def\IsPseudoPrime #1{\xinttheiiexpr isPseudoPrime(#1)\relax}
+
+\noindent The smallest prime number at least equal to 3141592653589 is
+\xintiiexpr
+ seq(isPseudoPrime(3141592653589+n)?
+ {break(3141592653589+n)}{omit}, n=0++)\relax.
+% we could not use 3141592653589++ syntax because it works only with TeX numbers
+\par
+\end{everbatim*}
+
+
+
+
+
+\subsection{A table of factorizations}
+\label{ssec:factorizationtable}
+
+As one more example with \csbxint{iloop} let us use an alignment to display the
+factorization of some numbers. The loop will actually only play a minor r\^ole
+here, just handling the row index, the row contents being almost entirely
+produced via a macro |\factorize|. The factorizing macro does not use
+|\xintiloop| as it didn't appear to be the convenient tool. As |\factorize| will
+have to be used on |\xintiloopindex|, it has been defined as a delimited macro.
+
+To spare some fractions of a second in the compilation time of this document
+(which has many many other things to do), \number"7FFFFFED{} and
+\number"7FFFFFFF, which turn out to be prime numbers, are not given to
+|factorize| but just typeset directly; this illustrates use of
+\csbxint{iloopskiptonext}.
+
+The code next generates a \hyperref[floatfactorize]{table} which has
+been made into a float appearing \vpageref{floatfactorize}. Here is now
+the code for factorization; the conditionals use the package provided
+|\xint_firstoftwo| and |\xint_secondoftwo|, one could have employed
+rather \LaTeX{}'s own |\@firstoftwo| and |\@secondoftwo|, or, simpler
+still in \LaTeX{} context, the |\ifnumequal|, |\ifnumless| \dots,
+utilities from the package |etoolbox| which do exactly that under the
+hood. Only \TeX{} acceptable numbers are treated here, but it would be
+easy to make a translation and use the \xintname macros, thus extending
+the scope to big numbers; naturally up to a cost in speed.
+
+The reason for some strange looking expressions is to avoid arithmetic overflow.
+
+\begin{everbatim*}
+\catcode`_ 11
+\def\abortfactorize #1\xint_secondoftwo\fi #2#3{\fi}
+
+\def\factorize #1.{\ifnum#1=1 \abortfactorize\fi
+ \ifnum\numexpr #1-2=\numexpr ((#1/2)-1)*2\relax
+ \expandafter\xint_firstoftwo
+ \else\expandafter\xint_secondoftwo
+ \fi
+ {2&\expandafter\factorize\the\numexpr#1/2.}%
+ {\factorize_b #1.3.}}%
+
+\def\factorize_b #1.#2.{\ifnum#1=1 \abortfactorize\fi
+ \ifnum\numexpr #1-(#2-1)*#2<#2
+ #1\abortfactorize
+ \fi
+ \ifnum \numexpr #1-#2=\numexpr ((#1/#2)-1)*#2\relax
+ \expandafter\xint_firstoftwo
+ \else\expandafter\xint_secondoftwo
+ \fi
+ {#2&\expandafter\factorize_b\the\numexpr#1/#2.#2.}%
+ {\expandafter\factorize_b\the\numexpr #1\expandafter.%
+ \the\numexpr #2+2.}}%
+\catcode`_ 8
+\begin{figure*}[ht!]
+\centering\phantomsection\label{floatfactorize}\normalcolor
+\tabskip1ex
+\centeredline{\vbox{\halign {\hfil\strut#\hfil&&\hfil#\hfil\cr\noalign{\hrule}
+ \xintiloop ["7FFFFFE0+1]
+ \expandafter\bfseries\xintiloopindex &
+ \ifnum\xintiloopindex="7FFFFFED
+ \number"7FFFFFED\cr\noalign{\hrule}
+ \expandafter\xintiloopskiptonext
+ \fi
+ \expandafter\factorize\xintiloopindex.\cr\noalign{\hrule}
+ \ifnum\xintiloopindex<"7FFFFFFE
+ \repeat
+ \bfseries \number"7FFFFFFF&\number "7FFFFFFF\cr\noalign{\hrule}
+}}}
+\centeredline{A table of factorizations}
+\end{figure*}
+\end{everbatim*}
+
+\subsection{Another table of primes}
+\label{ssec:primesIII}
+
+As a further example, let us dynamically generate a tabular with the first $50$
+prime numbers after $12345$. First we need a macro to test if a (short) number
+is prime. Such a completely expandable macro was given in \autoref{ssec:primesI},
+here we consider a variant which will be slightly more efficient. This new
+|\IsPrime| has two parameters. The first one is a macro which it redefines to
+expand to the result of the primality test applied to the second argument. For
+convenience we use the \href{http://ctan.org/pkg/etoolbox}{etoolbox} wrappers to
+various |\ifnum| tests, although here there isn't anymore the constraint of
+complete expandability (but using explicit |\if..\fi| in tabulars has its
+quirks); equivalent tests are provided by \xintname, but they have some overhead
+as they are able to deal with arbitrarily big integers.
+
+\def\IsPrime #1#2%
+{\edef\TheNumber {\the\numexpr #2}% positive integer
+ \ifnumodd {\TheNumber}
+ {\ifnumgreater {\TheNumber}{1}
+ {\edef\ItsSquareRoot{\xintiiSqrt \TheNumber}%
+ \xintFor ##1 in {\xintintegers [3+2]}\do
+ {\ifnumgreater {##1}{\ItsSquareRoot}
+ {\def#1{1}\xintBreakFor}
+ {}%
+ \ifnumequal {\TheNumber}{(\TheNumber/##1)*##1}
+ {\def#1{0}\xintBreakFor }
+ {}%
+ }}
+ {\def#1{0}}}% 1 is not prime
+ {\ifnumequal {\TheNumber}{2}{\def#1{1}}{\def#1{0}}}%
+}%
+
+\everb|@
+\def\IsPrime #1#2% """color[named]{PineGreen}#1=\Result, #2=tested number (assumed >0).;!
+{\edef\TheNumber {\the\numexpr #2}%"""color[named]{PineGreen} hence #2 may be a count or \numexpr.;!
+ \ifnumodd {\TheNumber}
+ {\ifnumgreater {\TheNumber}{1}
+ {\edef\ItsSquareRoot{\xintiiSqrt \TheNumber}%
+ \xintFor """color{red}##1;! in {"""color{red}\xintintegers;! [3+2]}\do
+ {\ifnumgreater {"""color{red}##1;!}{\ItsSquareRoot} """color[named]{PineGreen}% "textcolor{red}{##1} is a \numexpr.;!
+ {\def#1{1}\xintBreakFor}
+ {}%
+ \ifnumequal {\TheNumber}{(\TheNumber/##1)*##1}
+ {\def#1{0}\xintBreakFor }
+ {}%
+ }}
+ {\def#1{0}}}% 1 is not prime
+ {\ifnumequal {\TheNumber}{2}{\def#1{1}}{\def#1{0}}}%
+}
+|
+
+As we used \csbxint{For} inside a macro we had to double the |#| in its |#1|
+parameter. Here is now the code which creates the prime table (the table has
+been put in a \hyperref[primes]{float}, which should be found on page
+\pageref{primes}):
+
+\everb?@
+\newcounter{primecount}
+\newcounter{cellcount}
+\begin{figure*}[ht!]
+ \centering
+ \begin{tabular}{|*{7}c|}
+ \hline
+ \setcounter{primecount}{0}\setcounter{cellcount}{0}%
+ \xintFor """color{red}#1;! in {"""color{red}\xintintegers;! [12345+2]} \do
+"""color[named]{PineGreen}% "textcolor{red}{#1} is a \numexpr.;!
+ {\IsPrime\Result{#1}%
+ \ifnumgreater{\Result}{0}
+ {\stepcounter{primecount}%
+ \stepcounter{cellcount}%
+ \ifnumequal {\value{cellcount}}{7}
+ {"""color{red}\the#1;! \\\setcounter{cellcount}{0}}
+ {"""color{red}\the#1;! &}}
+ {}%
+ \ifnumequal {\value{primecount}}{50}
+ {\xintBreakForAndDo
+ {\multicolumn {6}{l|}{These are the first 50 primes after 12345.}\\}}
+ {}%
+ }\hline
+\end{tabular}
+\end{figure*}
+?
+
+\begin{figure*}[ht!]
+ \centering\phantomsection\label{primes}
+ \begin{tabular}{|*{7}c|}
+ \hline
+ \setcounter{primecount}{0}\setcounter{cellcount}{0}%
+ \xintFor #1 in {\xintintegers [12345+2]} \do
+ {\IsPrime\Result{#1}%
+ \ifnumgreater{\Result}{0}
+ {\stepcounter{primecount}%
+ \stepcounter{cellcount}%
+ \ifnumequal {\value{cellcount}}{7}
+ {\the#1 \\\setcounter{cellcount}{0}}
+ {\the#1 &}}
+ {}%
+ \ifnumequal {\value{primecount}}{50}
+ {\xintBreakForAndDo
+ {\multicolumn {6}{l|}{These are the first 50 primes after 12345.}\\}}
+ {}%
+ }\hline
+\end{tabular}
+\end{figure*}
+
+\subsection{Factorizing again}
+\label{ssec:factorize}
+
+Here is an \fexpan dable macro which computes the factors of an integer. It
+uses the \xintname macros only.
+\begin{everbatim*}
+\catcode`\@ 11
+\let\factorize\relax
+\newcommand\Factorize [1]
+ {\romannumeral0\expandafter\factorize\expandafter{\romannumeral-`0#1}}%
+\newcommand\factorize [1]{\xintiiifOne{#1}{ 1}{\factors@a #1.{#1};}}%
+\def\factors@a #1.{\xintiiifOdd{#1}
+ {\factors@c 3.#1.}%
+ {\expandafter\factors@b \expandafter1\expandafter.\romannumeral0\xinthalf{#1}.}}%
+\def\factors@b #1.#2.{\xintiiifOne{#2}
+ {\factors@end {2, #1}}%
+ {\xintiiifOdd{#2}{\factors@c 3.#2.{2, #1}}%
+ {\expandafter\factors@b \the\numexpr #1+\@ne\expandafter.%
+ \romannumeral0\xinthalf{#2}.}}%
+}%
+\def\factors@c #1.#2.{%
+ \expandafter\factors@d\romannumeral0\xintiidivision {#2}{#1}{#1}{#2}%
+}%
+\def\factors@d #1#2#3#4{\xintiiifNotZero{#2}
+ {\xintiiifGt{#3}{#1}
+ {\factors@end {#4, 1}}% ultimate quotient is a prime with power 1
+ {\expandafter\factors@c\the\numexpr #3+\tw@.#4.}}%
+ {\factors@e 1.#3.#1.}%
+}%
+\def\factors@e #1.#2.#3.{\xintiiifOne{#3}
+ {\factors@end {#2, #1}}%
+ {\expandafter\factors@f\romannumeral0\xintiidivision {#3}{#2}{#1}{#2}{#3}}%
+}%
+\def\factors@f #1#2#3#4#5{\xintiiifNotZero{#2}
+ {\expandafter\factors@c\the\numexpr #4+\tw@.#5.{#4, #3}}%
+ {\expandafter\factors@e\the\numexpr #3+\@ne.#4.#1.}%
+}%
+\def\factors@end #1;{\xintlistwithsep{, }{\xintRevWithBraces {#1}}}%
+\catcode`@ 12
+\end{everbatim*}
+The macro will be acceptably efficient only with numbers having somewhat small
+prime factors.
+\begin{everbatim}
+\Factorize{16246355912554185673266068721806243461403654781833}
+\end{everbatim}
+\begingroup\fdef\Z
+{\Factorize{16246355912554185673266068721806243461403654781833}}
+\noindent{\small\dtt{\Z}}
+
+
+It puts a little stress on the input save stack in order
+not be bothered with previously gathered things.\footnote{2015/11/18 I have
+ not revisited this code for a long time, and perhaps I could improve it now
+ with some new techniques.}
+
+Its output is a comma separated list with the number first, then its prime
+factors with multiplicity. Let's produce something prettier:
+\begin{everbatim*}
+\catcode`_ 11
+\def\ShowFactors #1{\expandafter
+ \ShowFactors_a\romannumeral-`0\Factorize{#1},\relax,\relax,}
+\def\ShowFactors_a #1,{#1=\ShowFactors_b}
+\def\ShowFactors_b #1,#2,{\if\relax#1\else#1^{#2}\expandafter\ShowFactors_b\fi}
+\catcode`_ 8
+\end{everbatim*}
+\begin{everbatim}
+$$\ShowFactors{16246355912554185673266068721806243461403654781833}$$
+\end{everbatim}
+$$\csname ShowFactors_a\expandafter\endcsname\Z,\relax,\relax,$$
+\endgroup
+
+If we only considered small integers, we could write pure |\numexpr| methods
+which would be very much faster (especially if we had a table of small primes
+prepared first) but still ridiculously slow compared to any non expandable
+implementation, not to mention use of programming languages directly accessing
+the CPU registers\dots
+
+\subsection{The Quick Sort algorithm illustrated}\label{ssec:quicksort}
+
+First a completely expandable macro which sorts a comma separated list of
+numbers.%
+%
+\footnote{The code in earlier versions of this manual handled inputs composed
+ of braced items. I have switched to comma separated inputs on the occasion
+ of (link removed)
+ The version here is like
+ |code 3| on
+ (link removed) (which is about |3x| faster
+ than the earlier code it replaced in this manual) with a modification to
+ make it more efficient if the data has many repeated values.
+
+ A faster routine (for sorting hundreds of values) is provided as |code 6| at
+ the link mentioned in the footnote, it is based on Merge Sort, but limited
+ to inputs which one can handle as \TeX{} dimensions.%
+
+ This |code 6| could be extended to handle more general numbers, as
+ acceptable by \xintfracname. I have also written a non expandable version,
+ which is even faster, but this matters really only when handling hundreds or
+ rather thousands of values.}
+%
+
+The |\QSx| macro expands its list argument, which may thus be a macro; its
+comma separated items must expand to integers or decimal numbers or fractions
+or scientific notation as acceptable to \xintfracname, but if an item is
+itself some (expandable) macro, this macro will be expanded each time the item
+is considered in a comparison test! This is actually good if the macro expands
+in one step to the digits, and there are many many digits, but bad if the macro
+needs to do many computations. Thus |\QSx| should be used with either explicit
+numbers or with items being macros expanding in one step to the numbers
+(particularly if these numbers are very big).
+
+If the interest is only in \TeX{} integers, then one should replace the
+|\xintifCmp| macro with a suitable conditional, possibly helped by tools such as
+|\ifnumgreater|, |\ifnumequal| and |\ifnumless| from
+\href{http://ctan.org/pkg/etoolbox}{etoolbox} (\LaTeX{} only; I didn't see a
+direct equivalent to |\xintifCmp|.) Or, if we are dealing with decimal numbers
+with at most four+four digits, then one should use suitable |\ifdim| tests.
+Naturally this will boost consequently the speed, from having skipped all the
+overhead in parsing fractions and scientific numbers as are acceptable by
+\xintfracname macros, and subsequent treatment.
+
+\begin{everbatim*}
+% THE QUICK SORT ALGORITHM EXPANDABLY
+% \usepackage{xintfrac} in the preamble (latex)
+\makeatletter
+% use extra safe delimiters
+\catcode`! 3 \catcode`? 3
+\def\QSx {\romannumeral0\qsx }%
+% first we check if empty list (else \qsx@finish will not find a comma)
+\def\qsx #1{\expandafter\qsx@a\romannumeral-`0#1,!,?}%
+\def\qsx@a #1{\ifx,#1\expandafter\qsx@abort\else
+ \expandafter\qsx@start\fi #1}%
+\def\qsx@abort #1?{ }%
+\def\qsx@start {\expandafter\qsx@finish\romannumeral0\qsx@b,}%
+\def\qsx@finish ,#1{ #1}%
+%
+% we check if empty of single and if not pick up the first as Pivot:
+\def\qsx@b ,#1#2,#3{\ifx?#3\xintdothis\qsx@empty\fi
+ \ifx!#3\xintdothis\qsx@single\fi
+ \xintorthat\qsx@separate {#1#2}{}{}{#1#2}#3}%
+\def\qsx@empty #1#2#3#4#5{ }%
+\def\qsx@single #1#2#3#4#5?{, #4}%
+\def\qsx@separate #1#2#3#4#5#6,%
+{%
+ \ifx!#5\expandafter\qsx@separate@done\fi
+ \xintifCmp {#5#6}{#4}%
+ \qsx@separate@appendtosmaller
+ \qsx@separate@appendtoequal
+ \qsx@separate@appendtogreater {#5#6}{#1}{#2}{#3}{#4}%
+}%
+%
+\def\qsx@separate@appendtoequal #1#2{\qsx@separate {#2,#1}}%
+\def\qsx@separate@appendtogreater #1#2#3{\qsx@separate {#2}{#3,#1}}%
+\def\qsx@separate@appendtosmaller #1#2#3#4{\qsx@separate {#2}{#3}{#4,#1}}%
+%
+\def\qsx@separate@done\xintifCmp #1%
+ \qsx@separate@appendtosmaller
+ \qsx@separate@appendtoequal
+ \qsx@separate@appendtogreater #2#3#4#5#6#7?%
+{%
+ \expandafter\qsx@f\expandafter {\romannumeral0\qsx@b #4,!,?}{\qsx@b #5,!,?}{#3}%
+}%
+%
+\def\qsx@f #1#2#3{#2, #3#1}%
+%
+\catcode`! 12 \catcode`? 12
+\makeatother
+
+% EXAMPLE
+\begingroup
+\edef\z {\QSx {1.0, 0.5, 0.3, 1.5, 1.8, 2.0, 1.7, 0.4, 1.2, 1.4,
+ 1.3, 1.1, 0.7, 1.6, 0.6, 0.9, 0.8, 0.2, 0.1, 1.9}}
+\meaning\z
+
+\def\a {3.123456789123456789}\def\b {3.123456789123456788}
+\def\c {3.123456789123456790}\def\d {3.123456789123456787}
+\oodef\z {\QSx { \a, \b, \c, \d}}%
+% The space before \a to let it not be expanded during the conversion from CSV
+% values to List. The \oodef expands exactly twice (via a bunch of \expandafter's)
+\meaning\z
+\endgroup
+\end{everbatim*} (the spaces after \string\d, etc...\@ come from the use of the
+|\meaning| primitive.)
+
+The choice of pivot as first element is bad if the list is already almost
+sorted. Let's add a variant which will pick up the pivot index randomly. The
+previous routine worked also internally with comma separated lists, but for a
+change this one will use internally lists of braced items (the initial
+conversion via \csbxint{CSVtoList} handles all potential spurious space
+problems).
+
+\unless\ifxetex % pour tester compilation de xint.dtx avec xetex qui n'a pas
+ % \pdfuniformdeviate
+\begin{everbatim*}
+% QuickSort expandably on comma separated values with random choice of pivots
+% ====> Requires availability of \pdfuniformdeviate <====
+% \usepackage{xintfrac, xinttools} in preamble
+\makeatletter
+\def\QSx {\romannumeral0\qsx }% This is a f-expandable macro.
+% This converts from comma separated values on input and back on output.
+% **** NOTE: these steps (and the other ones too, actually) are costly if input
+% has thousands of items.
+\def\qsx #1{\xintlistwithsep{, }%
+ {\expandafter\qsx@sort@a\expandafter{\romannumeral0\xintcsvtolist{#1}}}}%
+%
+% we check if empty or single or double and if not pick up the first as Pivot:
+\def\qsx@sort@a #1%
+ {\expandafter\qsx@sort@b\expandafter{\romannumeral0\xintlength{#1}}{#1}}%
+\def\qsx@sort@b #1{\ifcase #1
+ \expandafter\qsx@sort@empty
+ \or\expandafter\qsx@sort@single
+ \or\expandafter\qsx@sort@double
+ \else\expandafter\qsx@sort@c\fi {#1}}%
+\def\qsx@sort@empty #1#2{ }%
+\def\qsx@sort@single #1#2{#2}%
+\catcode`_ 11
+\def\qsx@sort@double #1#2{\xintifGt #2{\xint_exchangetwo_keepbraces}{}#2}%
+\catcode`_ 8
+\def\qsx@sort@c #1#2{%
+ \expandafter\qsx@sort@sep@a\expandafter
+ {\romannumeral0\xintnthelt{\pdfuniformdeviate #1+\@ne}{#2}}#2?}%
+\def\qsx@sort@sep@a #1{\qsx@sort@sep@loop {}{}{}{#1}}%
+\def\qsx@sort@sep@loop #1#2#3#4#5%
+{%
+ \ifx?#5\expandafter\qsx@sort@sep@done\fi
+ \xintifCmp {#5}{#4}%
+ \qsx@sort@sep@appendtosmaller
+ \qsx@sort@sep@appendtoequal
+ \qsx@sort@sep@appendtogreater {#5}{#1}{#2}{#3}{#4}%
+}%
+%
+\def\qsx@sort@sep@appendtoequal #1#2{\qsx@sort@sep@loop {#2{#1}}}%
+\def\qsx@sort@sep@appendtogreater #1#2#3{\qsx@sort@sep@loop {#2}{#3{#1}}}%
+\def\qsx@sort@sep@appendtosmaller #1#2#3#4{\qsx@sort@sep@loop {#2}{#3}{#4{#1}}}%
+%
+\def\qsx@sort@sep@done\xintifCmp #1%
+ \qsx@sort@sep@appendtosmaller
+ \qsx@sort@sep@appendtoequal
+ \qsx@sort@sep@appendtogreater #2#3#4#5#6%
+{%
+ \expandafter\qsx@sort@recurse\expandafter
+ {\romannumeral0\qsx@sort@a {#4}}{\qsx@sort@a {#5}}{#3}%
+}%
+%
+\def\qsx@sort@recurse #1#2#3{#2#3#1}%
+%
+\makeatother
+
+% EXAMPLES
+\begingroup
+\edef\z {\QSx {1.0, 0.5, 0.3, 1.5, 1.8, 2.0, 1.7, 0.4, 1.2, 1.4,
+ 1.3, 1.1, 0.7, 1.6, 0.6, 0.9, 0.8, 0.2, 0.1, 1.9}}
+\meaning\z
+
+\def\a {3.123456789123456789}\def\b {3.123456789123456788}
+\def\c {3.123456789123456790}\def\d {3.123456789123456787}
+\oodef\z {\QSx { \a, \b, \c, \d}}%
+% The space before \a to let it not be expanded during the conversion from CSV
+% values to List. The \oodef expands exactly twice (via a bunch of \expandafter's)
+\meaning\z
+
+\def\somenumbers{%
+3997.6421, 8809.9358, 1805.4976, 5673.6478, 3179.1328, 1425.4503, 4417.7691,
+2166.9040, 9279.7159, 3797.6992, 8057.1926, 2971.9166, 9372.2699, 9128.4052,
+1228.0931, 3859.5459, 8561.7670, 2949.6929, 3512.1873, 1698.3952, 5282.9359,
+1055.2154, 8760.8428, 7543.6015, 4934.4302, 7526.2729, 6246.0052, 9512.4667,
+7423.1124, 5601.8436, 4433.5361, 9970.4849, 1519.3302, 7944.4953, 4910.7662,
+3679.1515, 8167.6824, 2644.4325, 8239.4799, 4595.1908, 1560.2458, 6098.9677,
+3116.3850, 9130.5298, 3236.2895, 3177.6830, 5373.1193, 5118.4922, 2743.8513,
+8008.5975, 4189.2614, 1883.2764, 9090.9641, 2625.5400, 2899.3257, 9157.1094,
+8048.4216, 3875.6233, 5684.3375, 8399.4277, 4528.5308, 6926.7729, 6941.6278,
+9745.4137, 1875.1205, 2755.0443, 9161.1524, 9491.1593, 8857.3519, 4290.0451,
+2382.4218, 3678.2963, 5647.0379, 1528.7301, 2627.8957, 9007.9860, 1988.5417,
+2405.1911, 5065.8063, 5856.2141, 8989.8105, 9349.7840, 9970.3013, 8105.4062,
+3041.7779, 5058.0480, 8165.0721, 9637.7196, 1795.0894, 7275.3838, 5997.0429,
+7562.6481, 8084.0163, 3481.6319, 8078.8512, 2983.7624, 3925.4026, 4931.5812,
+1323.1517, 6253.0945}%
+
+\oodef\z {\QSx \somenumbers}% produced as a comma+space separated list
+% black magic as workaround to the shrinkability of spaces in last line...
+\hsize 87\fontcharwd\font`0
+\lccode`~=32
+\lowercase{\def~}{\discretionary{}{}{\kern\fontcharwd\font`0}}\catcode32 13
+\noindent\phantom{00}\scantokens\expandafter{\meaning\z}\par
+\endgroup
+\end{everbatim*}
+\fi % fin de si pas xetex
+
+
+All the previous examples were with numbers which could have been handled via
+|\ifdim| tests rather than the \csbxint{ifCmp} macro from \xintfracname; using
+|\ifdim| tests would naturally be faster. Even faster routine is |code 6| at
+(link removed) which uses |\pdfescapestring| and a
+Merge Sort algorithm.
+
+We then turn to a graphical illustration of the algorithm.%
+%
+\footnote{I have rewritten (2015/11/21) the routine to do only once (and not thrice) the
+ needed calls to \csa{xintifCmp}, up to the price of one additional |\edef|,
+ although due to the context execution time on our side is not an issue and
+ moreover is anyhow overwhelmed by the TikZ's activities. Simultaneously I
+ have updated the code.
+ The
+ variant with the choice of pivot on the right has more overhead: the reason
+ is simply that we do not convert the data into an array, but maintain a list
+ of tokens with self-reorganizing delimiters.}
+%
+For simplicity the pivot is always chosen as the first list item. Then we also
+give a variant which picks up the last item as pivot.
+\begin{everbatim*}
+% in LaTeX preamble:
+% \usepackage{xintfrac, xinttools}
+% \usepackage{color}
+% or, when using Plain TeX:
+% \input xintfrac.sty \input xinttools.sty
+% \input color.tex
+%
+% Color definitions
+\definecolor{LEFT}{RGB}{216,195,88}
+\definecolor{RIGHT}{RGB}{208,231,153}
+\definecolor{INERT}{RGB}{199,200,194}
+\definecolor{INERTpiv}{RGB}{237,237,237}
+\definecolor{PIVOT}{RGB}{109,8,57}
+% Start of macro defintions
+\makeatletter
+% \catcode`? 3 % a bit too paranoid. Normal ? will do.
+%
+% argument will never be empty
+\def\QS@cmp@a #1{\QS@cmp@b #1??}%
+\def\QS@cmp@b #1{\noexpand\QS@sep@A\@ne{#1}\QS@cmp@d {#1}}%
+\def\QS@cmp@d #1#2{\ifx ?#2\expandafter\QS@cmp@done\fi
+ \xintifCmp {#1}{#2}\tw@\@ne\z@{#2}\QS@cmp@d {#1}}%
+\def\QS@cmp@done #1?{?}%
+%
+\def\QS@sep@A #1?{\QSLr\QS@sep@L #1\thr@@?#1\thr@@?#1\thr@@?}%
+\def\QS@sep@L #1#2{\ifcase #1{#2}\or\or\else
+ \expandafter\QS@sep@I@start\fi \QS@sep@L}%
+\def\QS@sep@I@start\QS@sep@L {\noexpand\empty?\QSIr\QS@sep@I}%
+\def\QS@sep@I #1#2{\ifcase#1\or{#2}\or\else\expandafter\QS@sep@R@start\fi\QS@sep@I}%
+\def\QS@sep@R@start\QS@sep@I {\noexpand\empty?\QSRr\QS@sep@R}%
+\def\QS@sep@R #1#2{\ifcase#1\or\or{#2}\else\expandafter\QS@sep@done\fi\QS@sep@R}%
+\def\QS@sep@done\QS@sep@R {\noexpand\empty?}%
+%
+\def\QS@loop {%
+ \xintloop
+ % pivot phase
+ \def\QS@pivotcount{0}%
+ \let\QSLr\DecoLEFTwithPivot \let\QSIr \DecoINERT
+ \let\QSRr\DecoRIGHTwithPivot \let\QSIrr\DecoINERT
+ \centerline{\QS@list}%
+ % sorting phase
+ \ifnum\QS@pivotcount>\z@
+ \def\QSLr {\QS@cmp@a}\def\QSRr {\QS@cmp@a}%
+ \def\QSIr {\QSIrr}\let\QSIrr\relax
+ \edef\QS@list{\QS@list}% compare
+ \let\QSLr\relax\let\QSRr\relax\let\QSIr\relax
+ \edef\QS@list{\QS@list}% separate
+ \def\QSLr ##1##2?{\ifx\empty##1\else\noexpand \QSLr {{##1}##2}\fi}%
+ \def\QSIr ##1##2?{\ifx\empty##1\else\noexpand \QSIr {{##1}##2}\fi}%
+ \def\QSRr ##1##2?{\ifx\empty##1\else\noexpand \QSRr {{##1}##2}\fi}%
+ \edef\QS@list{\QS@list}% gather
+ \let\QSLr\DecoLEFT \let\QSRr\DecoRIGHT
+ \let\QSIr\DecoINERTwithPivot \let\QSIrr\DecoINERT
+ \centerline{\QS@list}%
+ \repeat }%
+%
+% \xintFor* loops handle gracefully empty lists.
+\def\DecoLEFT #1{\xintFor* ##1 in {#1} \do {\colorbox{LEFT}{##1}}}%
+\def\DecoINERT #1{\xintFor* ##1 in {#1} \do {\colorbox{INERT}{##1}}}%
+\def\DecoRIGHT #1{\xintFor* ##1 in {#1} \do {\colorbox{RIGHT}{##1}}}%
+\def\DecoPivot #1{\begingroup
+ \color{PIVOT}\advance\fboxsep-\fboxrule\fbox{#1}\endgroup}%
+%
+\def\DecoLEFTwithPivot #1{\xdef\QS@pivotcount{\the\numexpr\QS@pivotcount+\@ne}%
+ \xintFor* ##1 in {#1} \do
+ {\xintifForFirst {\DecoPivot {##1}}{\colorbox{LEFT}{##1}}}}%
+\def\DecoINERTwithPivot #1{\xdef\QS@pivotcount{\the\numexpr\QS@pivotcount+\@ne}%
+ \xintFor* ##1 in {#1} \do
+ {\xintifForFirst {\colorbox{INERTpiv}{##1}}{\colorbox{INERT}{##1}}}}%
+\def\DecoRIGHTwithPivot #1{\xdef\QS@pivotcount{\the\numexpr\QS@pivotcount+\@ne}%
+ \xintFor* ##1 in {#1} \do
+ {\xintifForFirst {\DecoPivot {##1}}{\colorbox{RIGHT}{##1}}}}%
+%
+\def\QuickSort #1{% warning: not compatible with empty #1.
+ % initialize, doing conversion from comma separated values
+ % to a list of braced items
+ \edef\QS@list{\noexpand\QSRr{\xintCSVtoList{#1}}}%
+ % may \edef's are to follow anyhow
+% earlier I did a first drawing of the list, here with the color of RIGHT elements,
+% but the color should have been for example white, anyway I drop this first line
+ %\let\QSRr\DecoRIGHT
+ %\par\centerline{\QS@list}%
+%
+ % loop as many times as needed
+ \QS@loop }%
+%
+% \catcode`? 12 % in case we had used a funny ? as delimiter.
+\makeatother
+%% End of macro definitions.
+%% Start of Example
+\begingroup\offinterlineskip
+\small
+% \QuickSort {1.0, 0.5, 0.3, 1.5, 1.8, 2.0, 1.7, 0.4, 1.2, 1.4,
+% 1.3, 1.1, 0.7, 1.6, 0.6, 0.9, 0.8, 0.2, 0.1, 1.9}
+% \medskip
+% with repeated values
+\QuickSort {1.0, 0.5, 0.3, 0.8, 1.5, 1.8, 2.0, 1.7, 0.4, 1.2, 1.4,
+ 1.3, 1.1, 0.7, 0.3, 1.6, 0.6, 0.3, 0.8, 0.2, 0.8, 0.7, 1.2}
+\endgroup
+\end{everbatim*}
+
+Here is the variant which always picks the pivot as the rightmost element.
+
+\begin{everbatim*}
+\makeatletter
+%
+\def\QS@cmp@a #1{\noexpand\QS@sep@A\expandafter\QS@cmp@d\expandafter
+ {\romannumeral0\xintnthelt{-1}{#1}}#1??}%
+%
+\def\DecoLEFTwithPivot #1{\xdef\QS@pivotcount{\the\numexpr\QS@pivotcount+\@ne}%
+ \xintFor* ##1 in {#1} \do
+ {\xintifForLast {\DecoPivot {##1}}{\colorbox{LEFT}{##1}}}}
+\def\DecoINERTwithPivot #1{\xdef\QS@pivotcount{\the\numexpr\QS@pivotcount+\@ne}%
+ \xintFor* ##1 in {#1} \do
+ {\xintifForLast {\colorbox{INERTpiv}{##1}}{\colorbox{INERT}{##1}}}}
+\def\DecoRIGHTwithPivot #1{\xdef\QS@pivotcount{\the\numexpr\QS@pivotcount+\@ne}%
+ \xintFor* ##1 in {#1} \do
+ {\xintifForLast {\DecoPivot {##1}}{\colorbox{RIGHT}{##1}}}}
+\def\QuickSort #1{%
+ % initialize, doing conversion from comma separated values
+ % to a list of braced items
+ \edef\QS@list{\noexpand\QSLr {\xintCSVtoList{#1}}}%
+ % many \edef's are to follow anyhow
+ %
+ % loop as many times as needed
+ \QS@loop }%
+\makeatother
+\begingroup\offinterlineskip
+\small
+% \QuickSort {1.0, 0.5, 0.3, 1.5, 1.8, 2.0, 1.7, 0.4, 1.2, 1.4,
+% 1.3, 1.1, 0.7, 1.6, 0.6, 0.9, 0.8, 0.2, 0.1, 1.9}
+% \medskip
+% with repeated values
+\QuickSort {1.0, 0.5, 0.3, 0.8, 1.5, 1.8, 2.0, 1.7, 0.4, 1.2, 1.4,
+ 1.3, 1.1, 0.7, 0.3, 1.6, 0.6, 0.3, 0.8, 0.2, 0.8, 0.7, 1.2}
+\endgroup
+\end{everbatim*}
+
+The choice of the first or last item as pivot is not a good one as nearly
+ordered lists will take quadratic time. But for explaining the algorithm via a
+graphical interpretation, it is not that bad. If one wanted to pick up the
+pivot randomly, the routine would have to be substantially rewritten: in
+particular the |\Deco..withPivot| macros need to know where the pivot is, and
+currently this is implemented by using either |\xintifForFirst| or
+|\xintifForLast|.
+
+\clearpage
+
+\expandafter\let\csname ExamplesnameUp\endcsname\undefined
+
\csname xint bundlenameUp\endcsname
\def\xintRunningHeader{{\inheadertrue\catcode`,12\relax
@@ -8898,10 +13244,7 @@ anecdotical evidence showing it is good.
\xintbinhexname,
\xintgcdname,
\xintseriesname,
- \xintcfracname,
- \xinttoolsname,
- \DOCxintexprmacros,
- \DOCexamples}}
+ \xintcfracname}}
\markboth{\makebox[0pt]{\xintRunningHeader}}{\makebox[0pt]{\xintRunningHeader}}
\etocdepthtag.toc {macros}
@@ -8910,7 +13253,7 @@ anecdotical evidence showing it is good.
\renewcommand{\etocaftertochook}{\addvspace{\bigskipamount}}
\part{The macro layer for expandable computations: \xintcorename, \xintname,
- \xintfracname,...\@}
+ \xintfracname, and some extras}
\RaisedLabel[15]{sec:bundle}
@@ -9225,8 +13568,9 @@ tokens).
By convention in this manual \fexpan sion (``full expansion'' or ``full first
expansion'') will be this \TeX{} process of expanding repeatedly the first
token seen. For those familiar with \LaTeX3 (which is not used by \xintname)
-this is what is called in its documentation full expansion (whereas expansion
-inside |\edef| would be described I think as ``exhaustive'' expansion).
+this is what is called in its documentation full expansion, whereas expansion
+inside |\edef| would be described I think as ``exhaustive'' expansion
+and will be referred too in this manual as \xexpan sion.
Most of the package macros, and all those dealing with computations%
%
@@ -9520,9 +13864,8 @@ mathematical result is an integer. The |B=1| is not removed.%
in the scientific notation as described in the documentation of
\csbxint{Float}.
- The exceptions are \csbxint{PFloat} and its variant \csbxint{PFloatb} which
- do some customizable pretty printing of the result. The former is also used
- by default by \csbxint{floateval}.
+ The exception is \csbxint{PFloat} which does some customizable pretty
+ printing of the result.
\end{itemize}
\subsection{Count registers and variables}\label{sec:useofcount}
@@ -9773,7 +14116,7 @@ recover the $1238/1157$ therein!
\end{framed}
-\subsection{\csh{ifcase}, \csh{ifnum}, ...\@ constructs}\label{sec:ifcase}
+\subsection{\csh{ifcase}, \csh{ifnum}, \texorpdfstring{...\@}{...} constructs}\label{sec:ifcase}
When using things such as |\ifcase \xintSgn{\A}| one has to make sure to leave
a space after the closing brace for \TeX{} to
@@ -9829,7 +14172,8 @@ As an alternative to |\edef| the package provides |\oodef| which expands
exactly twice the replacement text, and |\fdef| which applies \fexpan sion to
the replacement text during the definition.
\begin{everbatim*}
-\def\x{1729728} \def\y{352827927} \oodef\w {\xintiiMul\x\y} \fdef\z{\xintiiMul {\x}{\y}}
+\def\x{1729728}\def\y{352827927}
+\oodef\w {\xintiiMul\x\y} \fdef\z{\xintiiMul {\x}{\y}}
\meaning\w, \meaning\z
\end{everbatim*}
@@ -10009,45 +14353,88 @@ un-helpful error messages already in her daily practice of
\subsection{Package namespace, catcodes}
-The bundle packages needs that the \csa{space} and \csa{empty} control
-sequences are pre-defined with the identical meanings as in Plain \TeX{} (or
-\LaTeX2e which has the same macros).
-
-Private macros of \xintkernelname, \xintcorename, \xinttoolsname,
-\xintname, \xintfracname, \xintexprname, \xintbinhexname, \xintgcdname,
-\xintseriesname, and \xintcfracname{} use one or more underscores |_| as
-private letter, to reduce the risk of getting overwritten. They almost
-all begin either with |\XINT_| or with |\xint_|, a handful of these
-private macros such as \csa{XINTsetupcatcodes}, \csa{XINTdigits} and
-those with names such as |\XINTinFloat...| or |\XINTinfloat...| do not
-have any underscore in their names (for obscure legacy reasons).
-
-\xintkernelname provides \hyperref[odef]{|\odef|}, \hyperref[oodef]{|\oodef|},
-\hyperref[fdef]{|\fdef|}: if macros with these names already exist
-\xinttoolsname will not overwrite them. The same meanings are independently
-available under the names |\xintodef|, |\xintoodef|, etc...
-
-Apart from |\thexintexpr|, |\thexintiexpr|, ...\@
-all other public macros from the \xintname bundle packages start with |\xint|.
+This section reviews (probably with some omissions) important
+miscellany regarding control sequence names and catcode matters and is
+basically in its entirety a
+\begin{TeXnote}
+\begin{itemize}
+\item The bundle packages %\CHANGED{1.4}
+ force the |\space| and |\empty|
+ control sequences into having their default meanings as in Plain \TeX{} or
+ \LaTeX2e formats.
+\item Private macros (or internally used |\count| registers, and one private
+ |\toks|) have names starting with |\xint_| or |\XINT_|. Some, for legacy or
+ technical reasons, have |\xint| or |\XINT| prefix with no underscore.
+\item All public macros have their names starting with |\xint| except for:
+ \begin{itemize}
+ \item the \xintkernelname provided \hyperref[odef]{|\odef|},
+ \hyperref[oodef]{|\oodef|}, \hyperref[fdef]{|\fdef|}. If macros with
+ these names already exist \xinttoolsname will not overwrite them. Their
+ meanings are also available under the names \csbxint{odef}, \csbxint{oodef},
+ etc...
+ \item deprecated |\thexintexpr| etc..., which will be removed at next major
+ release. Use \csbxint{theexpr} etc... rather.
+ \item deprecated |\poormanloghack| which is now a no-op and will be removed
+ at next major release.
+ \end{itemize}
+
+\item Whether in arguments of \xintfracname macros or inside
+ \csbxint{expr}essions active characters will cause naturally problems, one
+ thinks in particular of characters made active by |babel| languages such as
+ |babel-french| for |!?;:|, and for example the |!| if used as factorial
+ operator will cause breakage. Prefixing with |\string| is one option, and
+ there is also |\detokenize|.
+
+\item Precautions are not needed (but see next item) for
+ \csbxint{defvar} and \csbxint{deffunc} as they use automatically
+ \csbxint{exprSafeCatcodes} and \csbxint{exprRestoreCatcodes} to temporarily
+ set catcodes to safe values.
+
+\item \csbxint{exprSafeCatcodes} and \csbxint{exprRestoreCatcodes} can be
+ employed at user level too. They should be used in case of need before and
+ after macro definitions themselves using \csbxint{expr}, \csbxint{defvar} or
+ \csbxint{deffunc}. Indeed the latter two won't be able to ``fix''
+ problematic characters already present at definition time when expansion is
+ later done. In the \LaTeX\ preamble, |babel| has not yet activated
+ (normally) characters, so these precautions should be unneeded there.
+
+\item For the \xintfracname macros to be able to parse their inputs, standard
+ catcodes in the argument are assumed for the digits (of course), the plus
+ and minus signs, the dot, the letter |e|, the forward slash, the square
+ brackets. Spaces should be avoided although they may go unnoticed
+ sometimes.
+
+\item For the \xintexprname expressions there is more leeway: the digit tokens
+ must have their standard catcodes, the letters must have their standard
+ catcodes for variable and function names to be recognized, but other
+ characters may mostly have unusual catcodes, if non-letter and not extremes.
+ A few syntax elements are implemented via delimited macros and normal
+ catcodes must be in effect for the comma, the equal sign and the closing
+ parenthesis for those to work. Spaces are gobbled. The |e| of scientific
+ notation may be |E| on input, \xintfracname macros on the other hand will
+ not recognize the |E|.
-For the good functioning of the macros, standard catcodes are assumed for the
-minus sign, the forward slash, the square brackets, the letter `e'. These
-requirements are dropped inside an |\xintexpr|-ession: spaces are gobbled,
-catcodes mostly do not matter, the |e| of scientific notation may be |E| (on
-input) \dots{}
+\item
+At loading time the
+ catcode configuration may be arbitrary as long as it satisfies the following
+ requirements:
+ \begin{itemize}[nosep]
+ \item \dtt{\%} has its normal category code,
+ \item \dtt{\char92} has its normal category code,
+ \item Latin letters have their normal category code "letter",
+ \item Digits have their normal category code "other".
+ \end{itemize}
+ Nothing more is assumed, for example |{| and |}| may have unusual catcodes
+ at package loading time. This will be admittedly unusual especially in
+ \LaTeX\ as |\usepackage{xintexpr}| would then have had to be replaced by
+ something such as |\usepackage<xintexpr>|...
-If a character used in the |\xintexpr| syntax is made active,
-this will surely cause problems; prefixing it with |\string| is one option.
-There is \csbxint{exprSafeCatcodes} and \csbxint{exprRestoreCatcodes} to
-temporarily turn off potentially active characters.
+\item Loading the packages causes no insertion of space tokens.
-\begin{framed}
- For advanced \TeX\ users. At loading time of the packages the
- catcode configuration may be arbitrary as long as it satisfies the following
- requirements: the percent is of category code comment character, the
- backslash is of category code escape character, digits have category code
- other and letters have category code letter. Nothing else is assumed.
-\end{framed}
+\item The previous two items also apply to usage of \csbxint{reloadxintlog}
+ and of \csbxint{reloadxinttrig}.
+\end{itemize}
+\end{TeXnote}
\subsection{Origins of the package}
\label{ssec:origins}
@@ -10137,6 +14524,9 @@ It provides a few macros possibly useful in other contexts.
\label{odef}
\label{oodef}
\label{fdef}
+\label{xintodef}
+\label{xintoodef}
+\label{xintfdef}
\csa{oodef}|\controlsequence {<stuff>}| does
\everb|@
@@ -10170,6 +14560,9 @@ faster than |\edef| when expanding macros from the \xintname bundle, when the
result has a few dozens of digits. |\oodef| needs thousands of digits it seems
to become competitive.
+\xintkernelname will not define these macros if the control sequence names
+already exist. It provides them always under the names |\xintodef|,
+|\xintoodef| and |\xintfdef| respectively.
\subsection{\csh{xintReverseOrder}}\label{xintReverseOrder}
@@ -10439,7 +14832,7 @@ It would be nice if the engine provided some user interface for
\par
\smallskip
-\TeXnote
+\begin{TeXnote}
currently the implementation of \csbxint{UniformDeviate} consumes exactly 5
calls to the engine primitive at each execution; the improved |x/2^{56}|
non-uniformity could be obtained with only 2 calls, but paranoïa about the
@@ -10459,8 +14852,14 @@ let's raise 100 times a random integer to the tenth power:%
\InputIfFileExists{JFBUORDI}{}{}%
\ifdefined\JFBUORDI
\footnote{%
- \if0\pdfstrcmp{IMAC}{\JFBUORDI}Timings done during dvi build on a computer with a |2.4GHz| cpu.\else
- \if0\pdfstrcmp{MBA}{\JFBUORDI}Timings done during dvi build on a computer with a |2GHz| cpu.\else
+ \if0\pdfstrcmp{IMAC}{\JFBUORDI}Timings done during dvi build on a
+ computer with a |2.8GHz| %
+ %quadri-core
+ cpu, old but still kicking, and with a locally compiled |latex| binary.\else
+ \if0\pdfstrcmp{MBA}{\JFBUORDI}Timings done during dvi build on a
+ computer with a |2GHz| %
+ %dual-core
+ cpu, old but still kicking, and with a locally compiled |latex| binary.\else
%\error
DOCUMENTATION SEEMINGLY BUILT NOT ON AN AUTHOR-OWNED SYSTEM, BUT \string\JFBUORDI\space IS DEFINED, WEIRD!\fi\fi
}
@@ -10470,23 +14869,23 @@ let's raise 100 times a random integer to the tenth power:%
%
\begin{everbatim*}
\pdfsetrandomseed 12345678
-\pdfresettimer\romannumeral\xintreplicate
- {100}{\fdef\foo{\xintiiPow{\xintUniformDeviate{100000000}}{10}}}%
+\pdfresettimer
+\romannumeral\xintreplicate{100}
+ {\fdef\foo{\xintiiPow{\xintUniformDeviate{100000000}}{10}}}%
\the\dimexpr\pdfelapsedtime sp\relax\space (with \string\xintUniformDeviate)\newline
-(last result: \foo)\newline
\pdfsetrandomseed 12345678
-\pdfresettimer\romannumeral\xintreplicate
- {100}{\fdef\foo{\xintiiPow{\pdfuniformdeviate 100000000}{10}}}%
-\the\dimexpr\pdfelapsedtime sp\relax\space (with \string\pdfuniformdeviate)\newline
-(last result: \foo)\par
+\pdfresettimer
+\romannumeral\xintreplicate{100}
+ {\fdef\foo{\xintiiPow{\pdfuniformdeviate 100000000}{10}}}%
+\the\dimexpr\pdfelapsedtime sp\relax\space (with \string\pdfuniformdeviate)\par
\end{everbatim*}
-\TeXnote
-the macros \csbxint{RandomDigits} or \csbxint{iiRandRange}, and their
+The macros \csbxint{RandomDigits} or \csbxint{iiRandRange}, and their
variants, as well as the supporting macros for \func{random} generate random
decimal digits eight by eight as if using
\csa{xintUniformDeviate}|{100000000}|, but via a direct optimized call made
possibly by the range being a power of 10.
+\end{TeXnote}
\clearpage
\let\xintkernelnameUp\undefined
@@ -10746,9 +15145,12 @@ $M,N>0$ it is the same as the Euclidean quotient \csbxint{iiQuo}.
\begin{everbatim*}
\xintiiQuo{1000}{57} (Euclidean), \xintiiDivTrunc{1000}{57} (truncated),
\xintiiDivRound{1000}{57} (rounded)\newline
-\xintiiQuo{-1000}{57}, \xintiiDivTrunc{-1000}{57} (t), \xintiiDivRound{-1000}{57} (r)\newline
-\xintiiQuo{1000}{-57}, \xintiiDivTrunc{1000}{-57} (t), \xintiiDivRound{1000}{-57} (r)\newline
-\xintiiQuo{-1000}{-57}, \xintiiDivTrunc{-1000}{-57} (t), \xintiiDivRound{-1000}{-57} (r)\par
+\xintiiQuo{-1000}{57}, \xintiiDivTrunc{-1000}{57} (t), \xintiiDivRound{-1000}{57} (r)
+\newline
+\xintiiQuo{1000}{-57}, \xintiiDivTrunc{1000}{-57} (t), \xintiiDivRound{1000}{-57} (r)
+\newline
+\xintiiQuo{-1000}{-57}, \xintiiDivTrunc{-1000}{-57} (t), \xintiiDivRound{-1000}{-57} (r)
+\par
\end{everbatim*}
\subsection{\csh{xintiiDivFloor}}\label{xintiiDivFloor}
@@ -11538,8 +15940,10 @@ auxiliary file, the macro context may cause a reduced maximum).
\xintRandomDigits{92}
\end{everbatim*}
-\TeXnote the digits are produced eight by eight by the same method which would
-result from \csbxint{UniformDeviate}|{100000000}| but with less overhead.
+\begin{TeXnote}
+ the digits are produced eight by eight by the same method which would result
+ from \csbxint{UniformDeviate}|{100000000}| but with less overhead.
+\end{TeXnote}
% \subsection{\csh{\xintOneRandomDigit}}\label{xintOneRandomDigit}
@@ -11571,8 +15975,10 @@ Transcript written on temp.log.
This can be lifted by increasing the \TeX\ memory settings (installation
dependent).
-\TeXnote the digits are produced eight by eight by the same method which would
-result from \csbxint{UniformDeviate}|{100000000}| but with less overhead.
+\begin{TeXnote}
+ the digits are produced eight by eight by the same method which would result
+ from \csbxint{UniformDeviate}|{100000000}| but with less overhead.
+\end{TeXnote}
\subsection{(WIP) \csh{xintiiRandRange}}\label{xintiiRandRange}
@@ -11584,7 +15990,8 @@ Python's function of the same name, it is an error if |A<=0|.
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\newline
\xintiiRandRange{\xintNum{1e40}}\newline
\pdfsetrandomseed 271828314
-\xinttheiiexpr randrange(num(1e40))\relax\newline % bare 1e40 not understood by \xintiiexpr
+\xinttheiiexpr randrange(num(1e40))\relax\newline
+% bare 1e40 not understood by \xintiiexpr
\pdfsetrandomseed 271828314
\xinttheexpr randrange(1e40)\relax
\end{everbatim*}
@@ -11604,8 +16011,10 @@ able to generate all numbers with fourty digits as random numbers, and this
makes the previous section about usage of \csbxint{XRandomDigits} to generate
millions of digits a bit comical...
-\TeXnote the digits are produced eight by eight by the same method which would
-result from \csbxint{UniformDeviate}|{100000000}| but with less overhead.
+\begin{TeXnote}
+ the digits are produced eight by eight by the same method which would result
+ from \csbxint{UniformDeviate}|{100000000}| but with less overhead.
+\end{TeXnote}
\subsection{(WIP) \csh{xintiiRandRangeAtoB}}\label{xintiiRandRangeAtoB}
@@ -11615,16 +16024,21 @@ Python's function of the same name, it is an error if |B<=A|.
\begin{everbatim*}
\pdfsetrandomseed 271828314
12345678911111111111111111111\newline
-\xintiiRandRangeAtoB{12345678911111111111111111111}{12345678922222222222222222222}\newline
+\xintiiRandRangeAtoB{12345678911111111111111111111}{12345678922222222222222222222}%
+\newline
\pdfsetrandomseed 271828314
\def\test{%
-\xinttheiiexpr randrange(12345678911111111111111111111,12345678922222222222222222222)\relax}%
+\xinttheiiexpr
+ randrange(12345678911111111111111111111,12345678922222222222222222222)
+\relax}%
\romannumeral\xintreplicate{10}{\test\newline}%
12345678922222222222222222222
\end{everbatim*}
-\TeXnote the digits are produced eight by eight by the same method which would
-result from \csbxint{UniformDeviate}|{100000000}| but with less overhead.
+\begin{TeXnote}
+ the digits are produced eight by eight by the same method which would result
+ from \csbxint{UniformDeviate}|{100000000}| but with less overhead.
+\end{TeXnote}
\clearpage
\let\xintnameUp\undefined
@@ -11679,60 +16093,72 @@ names will raise warnings and will be removed at next major release.
\localtableofcontents
-\subsection{\csh{xintTeXfromSci}}\label{xintTeXfromSci}
+\subsection{\csh{xintTeXFromSci}}\label{xintTeXFromSci}
-Experimental.\etype{} This typesetting math-mode-only macro expects an input
+Experimental.\xtype{} This typesetting math-mode-only macro expects an input
which is already in, or will expand to, decimal or scientific
notation.\NewWith{1.4g} A trailing |/B| is accepted and will be handled
differently according to whether it follows some scientific exponent |eN|
part or not.
-This macro is designed to be used as a typesetting wrapper for \csbxint{eval}
-or \csbxint{floateval} output. It does no «reflowing» of the mantissa as the
-input is expected to have been already «prettified» (for example via the
-removal of trailing zeros, of a scientific part if the exponent is small,
-etc...) and simply transforms the |e<exponent>| part, if actually present,
-into |\cdot 10^{exponent}|. A fractional part |/B| if found in the expansion
-of the input must be last and will be tranformed into |\cdot B^{-1}| if there
-was a scientific part, else the output will be |\frac{A}{B}| (or the \TeX\
-equivalent) with |A| the numerator.%
-%
-\footnote{I am hesitating whether the |\frac{A}{B}| branch choice should
- require |A| to be an integer, or will also, as currently, be done with |A|
- being a number in decimal notation.}
+It was formerly |\xintTeXfromSci|. Old name deprecated. Also it used
+to be \fexpan dable but is now only \xexpan dable. Use |\expanded| if
+needed.\CHANGED{1.4l}
+
+This macro can be used as a typesetting wrapper for \csbxint{eval} or
+\csbxint{floateval} output: it expects its input (after expansion) to
+have been already «prettified» for example via the removal of trailing
+zeros, usage of fixed point notation if scientific exponent is small,
+etc\dots\
%
+It simply transforms the |e<exponent>| part, if actually present, into
+|\cdot 10^{exponent}|. A fractional part |/B| if found in the expansion
+of the input must be last and will be tranformed into |\cdot B^{-1}| if
+there was a scientific part, else the output will be using |\frac{A}{B}|
+(or the \TeX\ equivalent in place of |\frac|) with |A| the numerator.
+
+\begin{TeXnote}
+ \begin{itemize}
+ \item I am hesitating whether the |\frac{A}{B}| branch choice should
+ require |A| to be an integer, or will also, as currently, be done
+ with |A| being a number in decimal notation. Please advise.
+ \item The package does:
+\begin{everbatim}
+\ifdefined\frac
+ \protected\def\xintTeXFromScifracmacro#1#2{\frac{#2}{#1}}%
+\else
+ \protected\def\xintTeXFromScifracmacro#1#2{{#2\over#1}}%
+\fi
+\end{everbatim}
+ Customize as desired. Notice the interversion of arguments.
+ \end{itemize}
+\end{TeXnote}
+
+Example:
\begin{everbatim*}
-$\xintTeXfromSci{\xintfloateval{1.1^10000/5}}$, $\xintTeXfromSci{\xinteval{1.1^10000/5}}$\par
+$\xintTeXFromSci{\xintfloateval{1.1^10000/5}}$,
+$\xintTeXFromSci{\xinteval{1.1^10000/5}}$\par
\end{everbatim*}
-The macro applies complete expansion to its argument, hence its input can be
-expressed using \csbxint{FracToSci} but it is simpler to use \csbxint{eval}
-which applies and expands completely \csbxint{FracToSci}, as per default
-setting of \csbxint{exprPrintOne}.
-Note though that the macro can handle only one value. If one intends to
-achieve the same effect but with comma separated or bracketed values, the way
-to proceed is via a redefinition of \csbxint{floatexprPrintOne} and/or
-\csbxint{exprPrintOne}.
+The above examples are in the case of a single numerical value. To
+handle more complex outputs from \csbxint{eval} or \csbxint{floateval}
+one will need to proceed via a redefinition of
+\csbxint{floatexprPrintOne} and/or \csbxint{exprPrintOne} like this:
\begin{everbatim*}
-\[\def\xintfloatexprPrintOne[#1]#2{\xintTeXfromSci{\xintPFloat[#1]{#2}}}
+\[\def\xintfloatexprPrintOne[#1]#2{\xintTeXFromSci{\xintPFloat[#1]{#2}}}
\xintfloateval[10]{2^100, 3^100, 13^100}\]
\end{everbatim*}
\par\vskip-\belowdisplayskip
\begin{everbatim*}
-\[\def\xintexprPrintOne#1{\xintTeXfromSci{\xintFracToSci{#1}}}
+\[\def\xintexprPrintOne#1{\xintTeXFromSci{\xintFracToSci{#1}}}
\xinteval{sqrt(2^101,60), 355/113, 6.02e23/1000}\]
\end{everbatim*}% attention à l'espace TeX est en mode horizontal après display
-This will however make impossible, due to the added \TeX\ mark-up in the
+This will however make then impossible, due to the added \TeX\ mark-up in the
output, the nesting of \csbxint{floateval}/\csbxint{eval} inside one another.
-But the \csbxint{expr}|...\relax| syntax remains usable and is indeed the
-recommended way as it is more efficient, only in certain very special
-situations does one need the «eval» which produces explicit digits, and then
-usually the output will be an integer, so will remain invariant and usable as
-before. Anyway, in the above examples we localized the redefinitions to the
-equation construct which is scope-limiting (as is already the underlying \TeX\
-math display using |$$|).
-
-Some similar effect is also possible without \csbxint{TeXfromSci},
+The core \csbxint{expr}|...\relax| syntax remains usable and is anyhow the
+recommended way for such nesting as it is more efficient.
+
+Some similar effect is also possible without \csbxint{TeXFromSci},
simply by a customization of \csbxint{PFloatE} like this:
\begin{everbatim*}
\begingroup
@@ -11740,10 +16166,10 @@ simply by a customization of \csbxint{PFloatE} like this:
$\xintfloateval{1.1^10000/5}$, $\xinteval{1.1^10000/5}$
\endgroup\newline
\end{everbatim*}%
-This method is simpler-minded and will leave trailing |/B|'s «as is», though.
-
-And of course, with this poor man method too the presence of \TeX\ mark-up
-makes nesting dangerous, so we limited by security the definition to a group.
+This method is simpler-minded but will leave the trailing |/B|'s «as
+is», even if the numerator has no scientific exponent part. The
+presence of extra \TeX\ mark-up in the output has the consequences
+on nesting which were mentioned above.
\subsection{\csh{xintTeXFrac}}\label{xintTeXFrac}
@@ -11754,7 +16180,8 @@ format |A/B[n]|.
If the denominator |B| is \dtt{1}, the output is |A\cdot 10^n|. If the
exponent |n| is \dtt{0}, the |[\cdot]10^n| part is omitted.
\begin{everbatim*}
-$\xintTeXFrac {178.000/25600000}$, $\xintTeXFrac {178.000/1}$, $\xintTeXFrac {3.5/5.7}$\newline
+$\xintTeXFrac {178.000/25600000}$, $\xintTeXFrac {178.000/1}$,
+$\xintTeXFrac {3.5/5.7}$\newline
\end{everbatim*}%
The input, if in a fraction form, is not simplified in any way, except for
transforming numerator and denominator into integers, separating a power of
@@ -11781,7 +16208,8 @@ This does the same as \csa{xintTeXFrac}\etype{\Ff} except that the \csa{over}
primitive is used for the fraction (in case the denominator is not one; and a
pair of braces contains the |A\over B| part).
\begin{everbatim*}
-$\xintTeXOver {178.000/25600000}$, $\xintTeXOver {178.000/1}$, $\xintTeXOver {3.5/5.7}$\newline
+$\xintTeXOver {178.000/25600000}$, $\xintTeXOver {178.000/1}$,
+$\xintTeXOver {3.5/5.7}$\newline
\end{everbatim*}%
It is the new name of |\xintFwOver|.\CHANGED{1.4g}
@@ -11844,11 +16272,16 @@ denominator:
\xintRaw {178000/25600000}
\end{everbatim*}
+\subsection{\csh{xintRawBraced}}\label{xintRawBraced}
+
+This macro expands and parses its input\etype{\Ff} |f| as all
+\xintfracname macros and produces as output |{N}{A}{B}| (with \TeX\
+braces) where \csbxint{Raw} would have returned |A/B[N]|.\NewWith{1.4l}
+
\subsection{\csh{xintNumerator}}\label{xintNumerator}
The input data\etype{\Ff} is parsed as if by \csbxint{Raw} into |A/B[N]|
-format and
-the macro outputs |A| if |N<=0|, or |A| extended by |N| zeroes if |N>0|.
+and then |A| is returned if |N<=0|, or |A| extended by |N| zeroes if |N>0|.
\begin{everbatim*}
\xintNumerator {178000/25600000[17]}\newline
\xintNumerator {312.289001/20198.27}\newline
@@ -11859,8 +16292,7 @@ the macro outputs |A| if |N<=0|, or |A| extended by |N| zeroes if |N>0|.
\subsection{\csh{xintDenominator}}\label{xintDenominator}
The input data\etype{\Ff} is parsed as if by \csbxint{Raw} into |A/B[N]|
-format and
-the macro outputs |B| if |N>0|, or |B| extended by \verb+|N|+ zeroes if |N<=0|.
+and then |B| is returned if |N>0|, or |B| extended by \verb+|N|+ zeroes if |N<=0|.
\begin{everbatim*}
\xintDenominator {178000/25600000[17]}\newline
\xintDenominator {312.289001/20198.27}\newline
@@ -11870,8 +16302,8 @@ the macro outputs |B| if |N>0|, or |B| extended by \verb+|N|+ zeroes if |N<=0|.
\subsection{\csh{xintRawWithZeros}}\label{xintRawWithZeros}
-This macro parses the input\etype{\Ff} and outputs |A/B|, with |A|
-as would be returned by \csa{xintNumerator}|{f}| and |B| as would be returned by
+This macro parses the input\etype{\Ff} and outputs |A'/B'|, with |A'|
+as would be returned by \csa{xintNumerator}|{f}| and |B'| as would be returned by
\csa{xintDenominator}|{f}|.
\begin{everbatim*}
\xintRawWithZeros{178000/25600000[17]}\newline
@@ -11889,8 +16321,6 @@ trailing zeroes of |A| and |B| are suppressed and |N| is accordingly adjusted.
\xintREZ {178000/25600000[17]}
\end{everbatim*}
-This macro is used internally by various other constructs; its implementation
-was redone entirely at |1.3a|, and it got faster on long inputs.
\subsection{\csh{xintIrr}}\label{xintIrr}
@@ -11994,8 +16424,10 @@ The definitive behaviour remains to be decided regarding these last two points.
\begin{everbatim*}
\xintDecToStringREZ{0}, \xintDecToStringREZ{1/2}, \xintDecToStringREZ{0.5000}\newline
\xintDecToStringREZ{1.23456789e5}, \xintDecToStringREZ {1.23456789e-3}\newline
-\xintDecToStringREZ{12345e-1}, \xintDecToStringREZ {12345e-2}, \xintDecToStringREZ{12345e-3}\newline
-\xintDecToStringREZ{12345e-4}, \xintDecToStringREZ {12345e-5}, \xintDecToStringREZ{12345e-6}\newline
+\xintDecToStringREZ{12345e-1}, \xintDecToStringREZ {12345e-2},
+\xintDecToStringREZ{12345e-3}\newline
+\xintDecToStringREZ{12345e-4}, \xintDecToStringREZ {12345e-5},
+\xintDecToStringREZ{12345e-6}\newline
\xintDecToStringREZ{1.234567890000e12}, \xintDecToStringREZ{1.23456000e-5/10}\newline
\xintDecToStringREZ{70/14} % is not reduced to lowest terms
\end{everbatim*}
@@ -12022,8 +16454,10 @@ remove trailing zeros, in fact \csbxint{DecToStringREZ}|{f}| is defined as
\begin{everbatim*}
\xintDecToString{0}, \xintDecToString{1/2}, \xintDecToString{0.5000}\newline
\xintDecToString{1.23456789e5}, \xintDecToString {1.23456789e-3}\newline
-\xintDecToString{12345e-1}, \xintDecToString {12345e-2}, \xintDecToString{12345e-3}\newline
-\xintDecToString{12345e-4}, \xintDecToString {12345e-5}, \xintDecToString{12345e-6}\newline
+\xintDecToString{12345e-1}, \xintDecToString {12345e-2}, \xintDecToString{12345e-3}%
+\newline
+\xintDecToString{12345e-4}, \xintDecToString {12345e-5}, \xintDecToString{12345e-6}%
+\newline
\xintDecToString{1.234567890000e12}, \xintDecToString{1.23456000e-5/10}\newline
\xintDecToString{70/14}
\end{everbatim*}
@@ -12044,6 +16478,85 @@ Any replacement of \csbxint{DecToString} as the expansion of
\item to accept on input |A| or |A[N]|.
\end{itemize}
+\subsection{\csh{xintFracToSci}}\label{xintFracToSci}
+
+\csa{xintFracToSci}\etype{\Ff} was initially at |1.4| a private macro
+which served as default customization of \csbxint{exprPrintOne} and,
+despite being documented in the user manual, was not supposed to be used
+at user level (not being \fexpan dable it could not be nested within
+macros of \xintfracname, and besides accepted a limited range of
+inputs).
+
+It has now been upgraded to behave like all other \xintfracname
+macros.\CHANGED{1.4l}
+
+Here is what it does:
+\begin{itemize}[noitemsep,nosep]
+\item it first parses the input like any other \xintfracname macro and
+ convert it into the ``raw'' |A/B[N]| format,
+\item it then produces this output: |A/B| if |N=0| (and |/B| is omitted
+ if not |1|), and for |N| not zero, the
+ output numerator will be |AeN| written in scientific notation exactly like it
+ would by \csbxint{PFloat} but without of course prior rounding to a
+ given number of digits; the trailing zeros in the
+ significand will be removed always (the \csbxint{PFloatMinTrimmed}
+ configuration is ignored). Then this value in scientific notation (or
+ in decimal fixed point notation if the scientific exponent is in the
+ \csbxint{PFloatNoSciEmin} to \csbxint{PFloatNoSciEmax} range) will be
+ attached to a trailing denominator |/B| (omitted if it is |/1|).
+\end{itemize}
+Please note:
+\begin{itemize}
+\item there is no reduction of the fraction |A/B| to lowest terms,
+\item trailing zeros in the integer denominator |B| are not moved and
+ incorporated into the final scientific exponent,
+\item no attempt is made to check if |B| is a product of only |2|'s and
+ |5|'s and thus could be integrated into some pure decimal notation for
+ the numerator or at least its significand.
+\end{itemize}
+Changes\CHANGED{1.4k} of \csbxint{PFloat} at |1.4k| have an impact here.
+In particular the zero value will give \dtt{0} whether the input was
+some |0|, |0e-5|, |0/3|, |0.00|, etc\dots, whereas at |1.4e| it would
+have been \dtt{0.0} for cases triggering some \csbxint{PFloat}
+subroutine.
+
+The general blueprint is still to be considered \emph{unstable}.
+
+The output routine of \csbxint{eval} is customizable via redefining
+\csbxint{exprPrintOne} whose current default is (equivalent to):
+\begin{everbatim}
+\def\xintexprPrintOne{\xintFracToSci}
+\end{everbatim}
+
+\subsection{\csh{xintFracToDecimal}}
+\label{xintFracToDecimal}
+
+\csa{xintFracToDecimal}\etype{\Ff} is a variant of \csbxint{FracToSci} which
+differs from it in so far as it outputs a numerator using decimal notation,
+i.e. with as many zeros as are needed (and no more) and no scientific
+exponent. The denominator goes through ``as is'' except if it is |1|, then it
+is omitted.\NewWith{1.4k}
+
+In other terms its behaviour is currently intermediate between
+\csbxint{DecToString} and \csbxint{DecToStringREZ}, as it does not
+remove trailing zeros of the denominator. Consider its behaviour as
+\emph{unstable}.
+
+It can be used to customize \csbxint{exprPrintOne}:
+\begin{everbatim}
+\def\xintexprPrintOne{\xintFracToDecimal}
+\end{everbatim}
+
+It was initially at |1.4k| a private macro which served as an alternative to
+\csb{xintFracToSci} default customization of \csbxint{exprPrintOne} and,
+despite being documented in the user manual, was not supposed to be used at
+user level (not being \fexpan dable it could not be nested within macros of
+\xintfracname, and besides accepted a limited range of inputs).
+
+It has now been upgraded to behave like all other \xintfracname
+macros.\CHANGED{1.4l}
+
+
\subsection{\csh{xintTrunc}}\label{xintTrunc}
\csa{xintTrunc}|{x}{f}|\etype{\numx\Ff} returns the start of the decimal
@@ -12504,6 +17017,12 @@ be an integer.
The sign of a fraction.\etype{\Ff}
+\subsection{\csh{xintSignBit}}\label{xintSignBit}
+
+Expands to \dtt{1} for negative input, to \dtt{0} else.\etype{\Ff}
+
+Added at |1.4l|.
+
\subsection{\csh{xintOpp}}\label{xintOpp}
The opposite of a fraction.\etype{\Ff}
@@ -12756,7 +17275,8 @@ will now always be in the form |A/B[n]|. The original, for big integers only
No simplification attempted.
\begin{everbatim*}
-$\xintIsOne {21921379213/21921379213}\neq\xintIsOne {1.00000000000000000000000000000001}$
+$\xintIsOne {21921379213/21921379213}\neq
+ \xintIsOne {1.00000000000000000000000000000001}$
\end{everbatim*}
\subsection{\csh{xintGCD}}\label{xintGCD}
@@ -12821,42 +17341,54 @@ See \csbxint{iiLCMof} for the integer only variant.
\label{xintDigits}
\label{xinttheDigits}
-The syntax |\xintDigits := D;| assigns the value of |D| to the number of
-digits to be used by floating point operations (this uses internally a
-|\mathchardef| assignement, and |D| stands for (or expands to) a legal \TeX\
-number). The default is |16|. The maximal value is |32767|.
+The syntax |\xintDigits := N;| or (recommended) |\xintDigits := N\relax|
+assigns the value of |N| to the number of digits to be used by floating
+point operations (this uses internally a |\mathchardef| assignement, and
+|N| stands for (or expands to) a legal \TeX\ number). The default is
+|16|. The maximal value is |32767|.
+
+Accepted syntax includes also |\xintDigits = N;| or |\xintDigits =
+N\relax|, i.e.\@ the colon before the equality sign is optional.
+%
\begin{framed}
\xintexprname adds\IMPORTANTf{} the variant \csbxint{Digits*} which executes
- \csbxint{reloadxinttrig}.
-\end{framed}
+ \csbxint{reloadxinttrig} and \csbxint{reloadxintlog}.
-The expandable macro |\xinttheDigits|\etype{} serves to retrieve (internally
-it uses |\number|) the current value.
+ A priori, you want \csbxint{Digits*}|:=N\relax|. Use
+ |\xintDigits:=N\relax| only if not needing trigonometric or
+ logarithm/exponential functions and wanting to avoid the overhead of
+ reloading their librairies. Perhaps for a local temporary
+ configuration.
+\end{framed}
Spaces do not matter as long as they do not occur in-between digits:
\begin{everbatim*}
-\xintDigits := 24;\xinttheDigits, %
-\xintDigits:=36 ;\xinttheDigits, %
-\xintDigits:= 16 ;and \xinttheDigits.
+\xintDigits := 24\relax\xinttheDigits, %
+\xintDigits:=36 \relax\xinttheDigits, %
+\xintDigits:= 16 \relax and \xinttheDigits.
\end{everbatim*}
+As shown above |\xinttheDigits|\etype{} expands to the stored value.
+
% It has always been the case that an active colon |:| was allowed.
-Also |\xintDigits = D;| (i.e.\@ without a colon) is accepted syntax.
+An ending active semi-colon |;| is \emph{not} compatible: it can and
+will cause low-level \TeX{} errors. This is why the alternative syntax
+\begin{everbatim}
+\xintDigits:= N\relax
+\end{everbatim}
+is recommended (with or without the semi-colon). This is hopefully the
+syntax now in use in most examples from the documentation.
-An ending active semi-colon |;| is \emph{not} compatible: it can and will
-cause low-level \TeX{} errors. But this has a trivial workaround: any
-non-expanding token can be used in place of the ending semi-colon. For
-example a full stop or a |\relax| token. This
-non-expanding ending token will get removed from the token stream.
% This
% restriction always applied, but never got properly documented prior to
% |1.3f| release... It is possible to use |\string;| but then there can not be
% any space separating it from the digits.
-The recommended syntax is thus now |\xintDigits := D\relax| (with or without the colon).
-This is the syntax in use in most examples from the documentation.
+Actually, any non-expanding token can be used in place of the
+|\relax|. This non-expanding ending token (for example a full stop) will
+get removed from the token stream.
\begin{everbatim*}
\xintDigits = 24\def\xinttheDigits, % only for showing it works! don't do that!
\xintDigits := 36.\xinttheDigits, % one can use a dot in place of semi-colon
@@ -12874,7 +17406,9 @@ expression will be fed to |\numexpr|. It is a shortcut for doing
\xintSetDigits{2*8}The value is now \xinttheDigits.\par
\end{everbatim*}
\begin{framed}
- See also the \xintexprname-added variant \csbxint{SetDigits*}.
+ The \xintexprname-added variant \csbxint{SetDigits*} is
+ the preferred usage as it does the extra work to update the math
+ functions from \xinttrigname and \xintlogname.
\end{framed}
\subsection{\csh{xintFloat}}
@@ -12943,6 +17477,37 @@ transitive in the number of kept digits.
+\subsection{\csh{xintFloatBraced}}
+\label{xintFloatBraced}
+
+The experimental macro
+|\xintFloatBraced[P]{f}|\etype{{\upshape[\numx]}\Ff} does like
+\csbxint{Float} but its output consists of three \TeX-braced groups
+\centeredline{\marg{sign bit}\marg{scientific exponent}\marg{full width
+ mantissa with decimal point}} It is provided\NewWith{1.4l} for users
+knowing how to pick one or the other of these constituents from usage
+of auxiliary macros. Or one can use \csbxint{Assign}:
+\begin{everbatim*}
+\begingroup
+\xintAssign\xintFloatBraced[7]{-3.1234e-14}\to\A\B\C
+\string\A\ has meaning \meaning\A\newline
+\string\B\ has meaning \meaning\B\newline
+\string\C\ has meaning \meaning\C\par
+\endgroup
+\end{everbatim*}
+Some aspects are undecided:
+\begin{itemize}[noitemsep]
+\item should the first item be rather |-1|, |0|, or |1|? or |-|, nothing, nothing?
+\item in case of zero value the output ignores \csbxint{FloatZero}, it
+ uses a zero exponent and full width fractional mantissa \dtt{\csname
+ xint_gobble_ii\expandafter\endcsname\romannumeral0\xintfloatbraced{0}}
+ (here no |[P]| and \csbxint{theDigits} has value
+ \dtt{\xinttheDigits}), should it be otherwise?
+\item should the mantissa be without the decimal separator ? should it
+ incorporate the sign ?
+\item in case the mantissa is without separator, should the exponent be biased to match it?
+\end{itemize}
+
\subsection{\csh{xintFloatToDecimal}}
\label{xintFloatToDecimal}
@@ -12982,7 +17547,8 @@ notation was used in the output) and integers printed with a trailing
|1.4k|\CHANGED{1.4k} brings some breaking changes, which are reversible
via customizing macros:
\begin{itemize}
-\item Integers (when scientific notation is dropped) without a "\dtt{.0}"
+\item Integers (when scientific notation is dropped according to
+ criteria mentioned next) without a "\dtt{.0}"
suffix.
\item Same for the zero value, now "\dtt{\xintPFloat{0}}".
\item Significands are trimmed of trailing zeros only if that removes at least
@@ -12995,6 +17561,13 @@ via customizing macros:
These changes impact the \csbxint{floateval} output as
\csbxint{floatexprPrintOne} defaults to using \csbxint{PFloat}.
+\begin{framed}
+ In\IMPORTANTf\ this documentation ``trailing zeros'' refers not to how
+ the input looked like, but
+ to the corresponding mantissa of width |P| or \csbxint{theDigits}.
+\end{framed}
+
+
The default rules are thus now:
\begin{enumerate}[nolistsep]
\item The input is float-rounded to either |Digits| or the optional argument.
@@ -13008,8 +17581,6 @@ The default rules are thus now:
\item In case of scientific notation output format, and the mantissa has only
one digit, no decimal mark is used.
\end{enumerate}
-Please note that ``trailing zeros'' refers to the ``trailing zeros of the full width
-significand after float-rounding'', and not only to trailing zeros used in the input.
% The old rules were:
% \begin{enumerate}[nosep]
@@ -13115,8 +17686,13 @@ The default definition is:
\def\xintPFloatMinTrimmed{4}
\end{everbatim}
Defining it to expand to \dtt{-1} or \dtt{0} will enable the trimming of
-trailing zeros always, and setting it to a high value will prevent it
-altogther.
+trailing zeros always, and setting it to a value at least equal to |P|
+(or \csbxint{theDigits} if no |[P]|) will prevent it
+altogether.
+
+This setting\CHANGED{1.4l} is ignored for the case of an integer value, if the
+criteria for using fixed point notation are met, and for the case of a
+one-digit mantissa in scientific notation.
\end{itemize}
@@ -13710,13 +18286,18 @@ This can be combined with \csbxint{BinToHex} for round-trips preserving
leading zeroes for |4N| binary digits numbers, whereas using
\csbxint{HexToBin} gives reproducing round-trips only for |4N| binary numbers
numbers not starting with |0000|.
-\begin{everbatim*}
This zero-fills to 4N digits the input, hence gives here a leading zero in output:
-\xintBinToHex{0001111}\newline
+\begin{everbatim*}
+\xintBinToHex{0001111}\par
+\end{everbatim*}
Chaining, we end up with 4N-3 digits, as three binary zeroes are trimmed:
-\xintHexToBin{\xintBinToHex{0001111}}\newline
+\begin{everbatim*}
+\xintHexToBin{\xintBinToHex{0001111}}\par
+\end{everbatim*}
But this will always reproduce the initial input zero-filled to length 4N:
+\begin{everbatim*}
\xintCHexToBin{\xintBinToHex{0001111}}\par
+\end{everbatim*}
Another example (visible space characters manually inserted):\newline
$000000001111101001010001\xrightarrow{\text{\string\xintBinToHex}}
\xintBinToHex{000000001111101001010001}\xrightarrow{\text{\string\xintHexToBin\hphantom{X}}}
@@ -13726,7 +18307,6 @@ $000000001111101001010001\xrightarrow{\text{\string\xintBinToHex}}
\xintBinToHex{000000001111101001010001}\xrightarrow{\text{\string\xintCHexToBin}}
\xintCHexToBin{\xintBinToHex{000000001111101001010001}}$
\par
-\end{everbatim*}
\clearpage
\let\xintbinhexnameUp\undefined
@@ -14894,7 +19474,8 @@ For non-numeric input there is \csbxint{GGCFrac}.
\end{everbatim*}
For regular continued fractions, there is a simpler comma separated format:
\begin{everbatim*}
-\[-7,6,19,1,33\to\xintTeXFrac{\xintCstoF{-7,6,19,1,33}}=\xintCFrac{\xintCstoF{-7,6,19,1,33}}\]
+\[-7,6,19,1,33\to\xintTeXFrac{\xintCstoF{-7,6,19,1,33}}=
+ \xintCFrac{\xintCstoF{-7,6,19,1,33}}\]
\end{everbatim*}
The macro \csbxint{FtoCs} produces from a fraction |f| the comma separated
list of its coefficients.
@@ -15243,7 +19824,8 @@ release |1.09m| spaces before commas are allowed and trimmed automatically
{-1+1/3+1/-5+1/7+1/-9+1/11+1/-13}}\]
\end{everbatim*}
\begin{everbatim*}
-\[\xintGCFrac{{1/2}+1/{1/3}+1/{1/4}+1/{1/5}}=\xintTeXFrac{\xintCstoF {1/2,1/3,1/4,1/5}}\]
+\[\xintGCFrac{{1/2}+1/{1/3}+1/{1/4}+1/{1/5}}=
+ \xintTeXFrac{\xintCstoF {1/2,1/3,1/4,1/5}}\]
\end{everbatim*}
%
A generalized continued fraction may produce a reducible fraction
@@ -15529,4082 +20111,56 @@ One can also use a centered continued fraction: we get more digits but there are
also more computations as the numerators may be either
$1$ or $-1$.
+\ifnum\NoSourceCode=1
\clearpage
-\let\xintcfracnameUp\undefined
-\csname xinttoolsnameUp\endcsname
-\def\n{|{N}|}
-\def\m{|{M}|}
-\def\x{|{x}|}
-\section{Macros of the \xinttoolsname package}
-
-\RaisedLabel{sec:tools}
-
-These utilities used to be provided within the \xintname package; since |1.09g|
-(|2013/11/22|) they have been moved to an independently usable package
-\xinttoolsname, which has none of the \xintname facilities regarding big
-numbers. Whenever relevant release |1.09h| has made the macros |\long| so they
-accept |\par| tokens on input.
-
-The completely expandable utilities (up to \csbxint{iloop}) are documented
-first, then the non expandable utilities.
-
-\autoref{sec:examples}
-gives additional (also dated) examples of use of macros of this package.
-
-\localtableofcontents
-
-\subsection{\csh{xintRevWithBraces}}\label{xintRevWithBraces}
-
-%{\small New in release |1.06|.\par}
-
-\edef\X{\xintRevWithBraces{12345}}
-\edef\y{\xintRevWithBraces\X}
-\expandafter\def\expandafter\w\expandafter
- {\romannumeral0\xintrevwithbraces{{\A}{\B}{\C}{\D}{\E}}}
-
-%
-\csa{xintRevWithBraces}\marg{list}\etype{f} first does the \fexpan sion of its
-argument then it reverses the order of the tokens, or braced material, it
-encounters, maintaining existing braces and adding a brace pair around each
-naked token encountered. Space tokens (in-between top level braces or naked
-tokens) are gobbled. This macro is mainly thought out for use on a \meta{list}
-of such braced material; with such a list as argument the \fexpan sion will only
-hit against the first opening brace, hence do nothing, and the braced stuff may
-thus be macros one does not want to expand.
-%
-\leftedline{|\edef\x{\xintRevWithBraces{12345}}|}
-%
-\leftedline{|\meaning\x:|\dtt{\meaning\X}}
-%
-\leftedline{|\edef\y{\xintRevWithBraces\x}|}
-%
-\leftedline{|\meaning\y:|\dtt{\meaning\y}}
-%
-The examples above could be defined with |\edef|'s because the braced material
-did not contain macros. Alternatively:
-%
-\leftedline{|\expandafter\def\expandafter\w\expandafter|}
-%
-\leftedline{|{\romannumeral0\xintrevwithbraces{{\A}{\B}{\C}{\D}{\E}}}|}
-%
-\leftedline{|\meaning\w:|\dtt{\meaning\w}}
-%
-The macro \csa{xintReverseWithBracesNoExpand}\etype{n} does the same job
-without the initial expansion of its argument.
-
-
-\subsection{\csh{xintZapFirstSpaces}, \csh{xintZapLastSpaces}, \csh{xintZapSpaces}, \csh{xintZapSpacesB}}
-\label{xintZapFirstSpaces}
-\label{xintZapLastSpaces}
-\label{xintZapSpaces}
-\label{xintZapSpacesB}
-%{\small New with release |1.09f|.\par}
-
-\csa{xintZapFirstSpaces}\marg{stuff}\etype{n} does not do \emph{any} expansion
-of its argument, nor brace removal of any sort, nor does it alter \meta{stuff}
-in anyway apart from stripping away all \emph{leading} spaces.
-
-This macro will be mostly of interest to programmers who will know what I will
-now be talking about. \emph{The essential points, naturally, are the complete
- expandability and the fact that no brace removal nor any other alteration is
- done to the input.}
-
-\TeX's input scanner already converts consecutive blanks into single space
-tokens, but |\xintZapFirstSpaces| handles successfully also inputs with
-consecutive multiple space tokens.
-However, it is assumed that \meta{stuff} does not contain (except inside braced
-sub-material) space tokens of character code distinct from $32$.
-
-It expands in two steps, and if the goal is to apply it to the
-expansion text of |\x| to define |\y|, then one can do:
-|\odef\y{\romannumeral0\expandafter\xintzapfirstspaces\expandafter{\x}}|
-(one can also define a wrapper macro to |\xintZapFirstSpaces| in order to
-expand once the argument first, but \xinttoolsname not being a programming
-layer, it provides no «Generate Variants» facilities).
-
-Other use case: inside a macro which received a parameter |#1|, one can do
-|\oodef\x{\xintZapFirstSpaces {#1}}|, or, if |#1|, after leading spaces have
-been stripped can accept |\edef| expansion, one can do
-|\edef\x{\xintZapFirstSpaces{#1}}|.
-
-\begingroup
-\def\x { \a { \X } { \b \Y } }
-%
-\leftedline{|\xintZapFirstSpaces { \a { \X } { \b \Y } }->|%
-\dtt{\color{magenta}{}\expandafter\detokenize\expandafter
-{\romannumeral0\expandafter\xintzapfirstspaces\expandafter{\x}}}+++}
-\endgroup
-
-\medskip
-
-\noindent\csbxint{ZapLastSpaces}\marg{stuff}\etype{n} does not do \emph{any} expansion of
-its argument, nor brace removal of any sort, nor does it alter \meta{stuff} in
-anyway apart from stripping away all \emph{ending} spaces. The same remarks as
-for \csbxint{ZapFirstSpaces} apply.
-
-\begingroup
-\def\x { \a { \X } { \b \Y } }
-%
-\leftedline{|\xintZapLastSpaces { \a { \X } { \b \Y } }->|%
-\dtt{\color{magenta}{}\expandafter\detokenize\expandafter
-{\romannumeral0\expandafter\xintzaplastspaces\expandafter{\x}}}+++}
-\endgroup
-
-\medskip
-
-\noindent\csbxint{ZapSpaces}\marg{stuff}\etype{n} does not do \emph{any}
-expansion of its
-argument, nor brace removal of any sort, nor does it alter \meta{stuff} in
-anyway apart from stripping away all \emph{leading} and all \emph{ending}
-spaces. The same remarks as for \csbxint{ZapFirstSpaces} apply.
-
-\begingroup
-\def\x { \a { \X } { \b \Y } }
-%
-\leftedline{|\xintZapSpaces { \a { \X } { \b \Y } }->|%
-\dtt{\color{magenta}{}\expandafter\detokenize\expandafter
-{\romannumeral0\expandafter\xintzapspaces\expandafter{\x}}}+++}
-\endgroup
-
-\medskip
-
-\noindent\csbxint{ZapSpacesB}\marg{stuff}\etype{n} does not do \emph{any}
-expansion of
-its argument, nor does it alter \meta{stuff} in anyway apart from stripping away
-all leading and all ending spaces and possibly removing one level of braces if
-\meta{stuff} had the shape |<spaces>{braced}<spaces>|. The same remarks as for
-\csbxint{ZapFirstSpaces} apply.
-
-\begingroup
-\def\x { \a { \X } { \b \Y } }
-%
-\leftedline{|\xintZapSpacesB { \a { \X } { \b \Y } }->|%
-\dtt{\color{magenta}{}\expandafter\detokenize\expandafter
-{\romannumeral0\expandafter\xintzapspacesb\expandafter{\x}}}+++}
-\def\x { { \a { \X } { \b \Y } } }
-%
-\leftedline{|\xintZapSpacesB { { \a { \X } { \b \Y } } }->|%
-\dtt{\color{magenta}{}\expandafter\detokenize\expandafter
-{\romannumeral0\expandafter\xintzapspacesb\expandafter{\x}}}+++}
-\endgroup
- The spaces here at the start and end of the output come from the braced
- material, and are not removed (one would need a second application for that;
- recall though that the \xintname zapping macros do not expand their argument).
-
-\subsection{\csh{xintCSVtoList}}
-\label{xintCSVtoList}
-\label{xintCSVtoListNoExpand}
-
-
-\csa{xintCSVtoList}|{a,b,c...,z}|\etype{f} returns |{a}{b}{c}...{z}|. A
-\emph{list} is by
-convention in this manual simply a succession of tokens, where each braced thing
-will count as one item (``items'' are defined according to the rules of \TeX{}
-for fetching undelimited parameters of a macro, which are exactly the same rules
-as for \LaTeX{} and macro arguments [they are the same things]). The word
-`list' in `comma separated list of items' has its usual linguistic meaning,
-and then an ``item'' is what is delimited by commas.
-
-So \csa{xintCSVtoList} takes on input a `comma separated list of items' and
-converts it into a `\TeX{} list of braced items'. The argument to
-|\xintCSVtoList| may be a macro: it will first be
-\hyperref[ssec:expansions]{\fexpan ded}. Hence the item before the first comma,
-if it is itself a macro, will be expanded which may or may not be a good thing.
-A space inserted at the start of the first item serves to stop that expansion
-(and disappears). The macro \csbxint{CSVtoListNoExpand}\etype{n} does the same
-job without
-the initial expansion of the list argument.
-
-Apart from that no expansion of the items is done and the list items may thus be
-completely arbitrary (and even contain perilous stuff such as unmatched |\if|
-and |\fi| tokens).
-
-Contiguous spaces and tab characters, are collapsed by \TeX{}
-into single spaces. All such spaces around commas%
-%
-\footnote{and multiple space tokens are not a problem; but those at the
- top level (not hidden inside braces) \emph{must} be of character code
- |32|.}
-%
-\fbox{are removed}, as well as
-the spaces at the start and the spaces at the end of the list.%
-%
-\footnote{let us recall that this is all done completely expandably...
- There is absolutely no alteration of any sort of the item apart from
- the stripping of initial and final space tokens (of character code
- |32|) and brace removal if and only if the item apart from intial and
- final spaces (or more generally multiple |char 32| space tokens) is
- braced.}
-%
-The items may contain explicit |\par|'s or
-empty lines (converted by the \TeX{} input parsing into |\par| tokens).
-
-\begingroup
-
-\edef\X{\xintCSVtoList { 1 ,{ 2 , 3 , 4 , 5 }, a , {b,T} U , { c , d } , { {x ,
- y} } }}
-
-%
-\leftedline{|\xintCSVtoList { 1 ,{ 2 , 3 , 4 , 5 }, a , {b,T} U , { c , d } ,
- { {x , y} } }|}
-%
-\leftedline{|->|%
-{\makeatletter\dtt{\expandafter\strip@prefix\meaning\X}}}
-
-One sees on this example how braces protect commas from
-sub-lists to be perceived as delimiters of the top list. Braces around an entire
-item are removed, even when surrounded by spaces before and/or after. Braces for
-sub-parts of an item are not removed.
-
-We observe also that there is a slight difference regarding the brace stripping
-of an item: if the braces were not surrounded by spaces, also the initial and
-final (but no other) spaces of the \emph{enclosed} material are removed. This is
-the only situation where spaces protected by braces are nevertheless removed.
-
-From the rules above: for an empty argument (only spaces, no braces, no comma)
-the output is
-\dtt{\expandafter\detokenize\expandafter{\romannumeral0\xintcsvtolist { }}}
-(a list with one empty item),
-for ``|<opt. spaces>{}<opt.
-spaces>|'' the output is
-\dtt{\expandafter\detokenize\expandafter
- {\romannumeral0\xintcsvtolist { {} }}}
-(again a list with one empty item, the braces were removed),
-for ``|{ }|'' the output is
-\dtt{\expandafter\detokenize\expandafter
- {\romannumeral0\xintcsvtolist {{ }}}}
-(again a list with one empty item, the braces were removed and then
-the inner space was removed),
-for ``| { }|'' the output is
-\dtt{\expandafter\detokenize\expandafter
-{\romannumeral0\xintcsvtolist { { }}}} (again a list with one empty item, the initial space served only to stop the expansion, so this was like ``|{ }|'' as input, the braces were removed and the inner space was stripped),
-for ``\texttt{\ \{\ \ \}\ }'' the output is
-\dtt{\expandafter\detokenize\expandafter
-{\romannumeral0\xintcsvtolist { { } }}} (this time the ending space of the first
-item meant that after brace removal the inner spaces were kept; recall though
-that \TeX{} collapses on input consecutive blanks into one space token),
-for ``|,|'' the output consists of two consecutive
-empty items
-\dtt{\expandafter\detokenize\expandafter{\romannumeral0\xintcsvtolist
- {,}}}. Recall that on output everything is braced, a |{}| is an ``empty''
-item.
-%
-Most of the above is mainly irrelevant for every day use, apart perhaps from the
-fact to be noted that an empty input does not give an empty output but a
-one-empty-item list (it is as if an ending comma was always added at the end of
-the input).
-
-\def\y { \a,\b,\c,\d,\e}
-\expandafter\def\expandafter\Y\expandafter{\romannumeral0\xintcsvtolist{\y}}
-\def\t {{\if},\ifnum,\ifx,\ifdim,\ifcat,\ifmmode}
-\expandafter\def\expandafter\T\expandafter{\romannumeral0\xintcsvtolist{\t}}
-
-%
-\leftedline{|\def\y{ \a,\b,\c,\d,\e} \xintCSVtoList\y->|%
- {\makeatletter\dtt{\expandafter\strip@prefix\meaning\Y}}}
-%
-\leftedline{|\def\t {{\if},\ifnum,\ifx,\ifdim,\ifcat,\ifmmode}|}
-%
-\leftedline
-{|\xintCSVtoList\t->|\makeatletter\dtt{\expandafter\strip@prefix\meaning\T}}
-%
-The results above were automatically displayed using \TeX's primitive
-\csa{meaning}, which adds a space after each control sequence name. These spaces
-are not in the actual braced items of the produced lists. The first items |\a|
-and |\if| were either preceded by a space or braced to prevent expansion. The
-macro \csa{xintCSVtoListNoExpand} would have done the same job without the
-initial expansion of the list argument, hence no need for such protection but if
-|\y| is defined as |\def\y{\a,\b,\c,\d,\e}| we then must do:
-%
-\leftedline{|\expandafter\xintCSVtoListNoExpand\expandafter {\y}|} Else, we
-may have direct use: %
-%
-\leftedline{|\xintCSVtoListNoExpand
- {\if,\ifnum,\ifx,\ifdim,\ifcat,\ifmmode}|}
-%
-\leftedline{|->|\dtt{\expandafter\detokenize\expandafter
- {\romannumeral0\xintcsvtolistnoexpand
- {\if,\ifnum,\ifx,\ifdim,\ifcat,\ifmmode}}}}
-%
-Again these spaces are an artefact from the use in the source of the document of
-\csa{meaning} (or rather here, \csa{detokenize}) to display the result of using
-\csa{xintCSVtoListNoExpand} (which is done for real in this document
-source).
-
-For the similar conversion from comma separated list to braced items list, but
-without removal of spaces around the commas, there is
-\csa{xintCSVtoListNonStripped}\etype{f} and
-\csa{xintCSVtoListNonStrippedNoExpand}\etype{n}.
-
-\endgroup
-
-\subsection{\csh{xintNthElt}}\label{xintNthElt}
-
-
-\def\macro #1{\the\numexpr 9-#1\relax}
-
-\csa{xintNthElt\x}\marg{list}\etype{\numx f} gets (expandably) the |x|th
-item of the \meta{list}. A braced item will lose one level of brace
-pairs. The token list is first \fexpan ded.
-
-Items are counted starting at one.
-
-\leftedline{|\xintNthElt {3}{{agh}\u{zzz}\v{Z}}| is
- \texttt{\xintNthElt {3}{{agh}\u{zzz}\v{Z}}}}
-%
-\leftedline{|\xintNthElt {3}{{agh}\u{{zzz}}\v{Z}}| is
- \texttt{\expandafter\expandafter\expandafter
- \detokenize\expandafter\expandafter\expandafter {\xintNthElt
- {3}{{agh}\u{{zzz}}\v{Z}}}}}
-%
-\leftedline{|\xintNthElt {2}{{agh}\u{{zzz}}\v{Z}}| is
- \texttt{\expandafter\expandafter\expandafter
- \detokenize\expandafter\expandafter\expandafter {\xintNthElt
- {2}{{agh}\u{{zzz}}\v{Z}}}}}
-%
-\leftedline{|\xintNthElt {37}{\xintiiFac {100}}|\dtt{=\xintNthElt
- {37}{\xintiiFac {100}}} is the thirty-seventh digit of $100!$.}
-%
-\leftedline{|\xintNthElt {10}{\xintFtoCv
- {566827/208524}}|\dtt{=\xintNthElt {10}{\xintFtoCv
- {566827/208524}}}}
-\leftedline{is the tenth convergent of $566827/208524$ (uses \xintcfracname
- package).}
-%
-\leftedline{|\xintNthElt {7}{\xintCSVtoList {1,2,3,4,5,6,7,8,9}}|%
- \dtt{=\xintNthElt {7}{\xintCSVtoList {1,2,3,4,5,6,7,8,9}}}}
-%
-\leftedline{|\xintNthElt {0}{\xintCSVtoList {1,2,3,4,5,6,7,8,9}}|%
- \dtt{=\xintNthElt {0}{\xintCSVtoList {1,2,3,4,5,6,7,8,9}}}}
-%
-\leftedline{|\xintNthElt {-3}{\xintCSVtoList {1,2,3,4,5,6,7,8,9}}|%
- \dtt{=\xintNthElt {-3}{\xintCSVtoList {1,2,3,4,5,6,7,8,9}}}}
-
-If |x=0|,
-the macro returns the \emph{length} of the expanded list: this is not equivalent
-to \csbxint{Length} which does no pre-expansion. And it is different from
-\csbxint{Len} which is to be used only on integers or fractions.
-
-If |x<0|, the macro returns the \verb+|x|+th element from the end of the list.
-Thus for example |x=-1| will fetch the last item of the list.
-%
-\leftedline {|\xintNthElt {-5}{{{agh}}\u{zzz}\v{Z}}| is
- \texttt{\expandafter\expandafter\expandafter \detokenize
- \expandafter\expandafter\expandafter{\xintNthElt {-5}{{{agh}}\u{zzz}\v{Z}}}}}
-
-The macro \csa{xintNthEltNoExpand}\etype{\numx n} does the same job but without
-first expanding the list argument: |\xintNthEltNoExpand {-4}{\u\v\w T\x\y\z}| is
-\xintNthEltNoExpand {-4}{\a\b\c\u\v\w T\x\y\z}.
-
-If |x| is strictly larger (in absolute value) than the length of the list
-then |\xintNthElt| produces empty contents.
-
-\subsection{\csh{xintNthOnePy}}
-\label{xintNthOnePy}
-
-\csa{xintNthOnePy\x}\marg{list}\etype{\numx f} gets (expandably) the |x|th
-item of the \meta{list}, adding a brace pair if there wasn't one.\NewWith{1.4}
-
-Attention, items are counted starting at zero. For negative index, behaves
-as \csbxint{NthElt}.
-
-If the index is out of range, the empty output is returned. If the input list
-was empty (had no items) the empty output is returned.
-
-\subsection{\csh{xintKeep}}\label{xintKeep}
-
-\csa{xintKeep\x}\marg{list}\etype{\numx f} expands the token list argument |L|
-and produces a new list, depending on the value of |x|:
-\begin{itemize}[nosep]
-\item if |x>0|, the new list contains the first |x| items from |L| (counting
- starts at one.) \emph{Each
- such item will be output within a brace pair.} Use \csbxint{KeepUnbraced} if
- this is not desired. This means that if the list item was braced to start
- with, there is no modification, but if it was a token without braces,
- then it acquires them.
-\item if |x>=length(L)|, the new list is the old one with all its items now
- braced.
-\item if |x=0| the empty list is returned.
-\item if |x<0| the last \verb+|x|+ elements compose the output in the same
- order as in the initial list; as the macro proceeds by removing head items
- the kept items end up in output as they were in input: no added braces.
-\item if |x<=-length(L)| the output is identical with the input.
-\end{itemize}
-
-\csa{xintKeepNoExpand} does the same without first \fexpan ding its list
-argument.
-%
-\begin{everbatim*}
-\fdef\test {\xintKeep {17}{\xintKeep {-69}{\xintSeq {1}{100}}}}\meaning\test\par
-\noindent\fdef\test {\xintKeep {7}{{1}{2}{3}{4}{5}{6}{7}{8}{9}}}\meaning\test\par
-\noindent\fdef\test {\xintKeep {-7}{{1}{2}{3}{4}{5}{6}{7}{8}{9}}}\meaning\test\par
-\noindent\fdef\test {\xintKeep {7}{123456789}}\meaning\test\par
-\noindent\fdef\test {\xintKeep {-7}{123456789}}\meaning\test\par
-\end{everbatim*}
-
-
-\subsection{\csh{xintKeepUnbraced}}\label{xintKeepUnbraced}
-
-Same as \csbxint{Keep} but no brace pairs are added around the kept items from
-the head of the list in the case |x>0|: each such item will lose one level of
-braces. Thus, to remove braces from all items of the list, one can use
-\csbxint{KeepUnbraced} with its first argument larger than the length of the
-list; the same is obtained from \csbxint{ListWithSep}|{}|\marg{list}. But the
-new list will then have generally many more items than the original ones,
-corresponding to the unbraced original items.
-
-For |x<0| the macro is no different from \csbxint{Keep}. Hence the name is a
-bit misleading because brace removal will happen only if |x>0|.
-
-\csa{xintKeepUnbracedNoExpand} does the same without first \fexpan ding
-its list argument.
-%
-\begin{everbatim*}
-\fdef\test {\xintKeepUnbraced {10}{\xintSeq {1}{100}}}\meaning\test\par
-\noindent\fdef\test {\xintKeepUnbraced {7}{{1}{2}{3}{4}{5}{6}{7}{8}{9}}}\meaning\test\par
-\noindent\fdef\test {\xintKeepUnbraced {-7}{{1}{2}{3}{4}{5}{6}{7}{8}{9}}}\meaning\test\par
-\noindent\fdef\test {\xintKeepUnbraced {7}{123456789}}\meaning\test\par
-\noindent\fdef\test {\xintKeepUnbraced {-7}{123456789}}\meaning\test\par
-\end{everbatim*}
-
-\subsection{\csh{xintTrim}}\label{xintTrim}
-
-\csa{xintTrim\x}\marg{list}\etype{\numx f} expands the list argument and
-gobbles its first |x| elements.
-\begin{itemize}[nosep]
-\item if |x>0|, the first |x| items from |L| are gobbled. The remaining items
- are not modified.
-\item if |x>=length(L)|, the returned list is empty.
-\item if |x=0| the original list is returned (with no added braces.)
-\item if |x<0| the last \verb+|x|+ items of the list are removed. \emph{The
- head items end up braced in the output.} Use \csbxint{TrimUnbraced} if
- this is not desired.
-\item if |x<=-length(L)| the output is empty.
-\end{itemize}
-
-\csa{xintTrimNoExpand} does the same without first \fexpan ding its list
-argument.
-\begin{everbatim*}
-\fdef\test {\xintTrim {17}{\xintTrim {-69}{\xintSeq {1}{100}}}}\meaning\test\par
-\noindent\fdef\test {\xintTrim {7}{{1}{2}{3}{4}{5}{6}{7}{8}{9}}}\meaning\test\par
-\noindent\fdef\test {\xintTrim {-7}{{1}{2}{3}{4}{5}{6}{7}{8}{9}}}\meaning\test\par
-\noindent\fdef\test {\xintTrim {7}{123456789}}\meaning\test\par
-\noindent\fdef\test {\xintTrim {-7}{123456789}}\meaning\test\par
-\end{everbatim*}
-
-\subsection{\csh{xintTrimUnbraced}}\label{xintTrimUnbraced}
-
-Same as \csbxint{Trim} but in case of a negative |x| (cutting items from
-the tail), the kept items from the head are not enclosed in brace pairs. They
-will lose one level of braces. The name is a bit misleading
-because when |x>0| there is no brace-stripping done on the kept items, because
-the macro works simply by gobbling the head ones.
-
-\csa{xintTrimUnbracedNoExpand} does the same without first \fexpan ding its list
-argument.
-
-\begin{everbatim*}
-\fdef\test {\xintTrimUnbraced {-90}{\xintSeq {1}{100}}}\meaning\test\par
-\noindent\fdef\test {\xintTrimUnbraced {7}{{1}{2}{3}{4}{5}{6}{7}{8}{9}}}\meaning\test\par
-\noindent\fdef\test {\xintTrimUnbraced {-7}{{1}{2}{3}{4}{5}{6}{7}{8}{9}}}\meaning\test\par
-\noindent\fdef\test {\xintTrimUnbraced {7}{123456789}}\meaning\test\par
-\noindent\fdef\test {\xintTrimUnbraced {-7}{123456789}}\meaning\test\par
-\end{everbatim*}
-
-\subsection{\csh{xintListWithSep}}\label{xintListWithSep}
-
-
-\def\macro #1{\the\numexpr 9-#1\relax}
-
-\csa{xintListWithSep}\marg{sep}\marg{list}\etype{nf} inserts the separator
-\meta{sep} in-between all items of the given list of braced items (or
-individual tokens). The items are fetched as does \TeX\ with undelimited macro
-arguments, thus they end up unbraced in output. If the \meta{list} is only one
-(or multiple) space tokens, the output is empty.
-
-The list argument \meta{list} gets \fexpan ded first (thus if it is a macro
-whose contents are braced items, the first opening brace stops the expansion,
-and it is as if the macro had been expanded once.) The separator \meta{sep} is
-not pre-expanded, it ends up as is in the output (if the \meta{list} contained
-at least two items.)
-
-The variant \csa{xintListWithSepNoExpand}\etype{nn} does the same
-job without the initial expansion of the \meta{list} argument.
-\begin{everbatim*}
-\edef\foo{\xintListWithSep{, }{123456789{10}{11}{12}}}\meaning\foo\newline
-\edef\foo{\xintListWithSep{:}{\xintiiFac{20}}}\meaning\foo\newline
-\oodef\FOO{\xintListWithSepNoExpand{\FOO}{\bat\baz\biz\buz}}\meaning\FOO\newline
-% a braced item or a space stops the f-expansion:
-\oodef\foo{\xintListWithSep{\FOO}{{\bat}\baz\biz\buz}}\meaning\foo\newline
-\oodef\foo{\xintListWithSep{\FOO}{ \bat\baz\biz\buz}}\meaning\foo\par
-\end{everbatim*}
-
-\subsection{\csh{xintApply}}\label{xintApply}
-
-
-\def\macro #1{\the\numexpr 9-#1\relax}
-
-\csa{xintApply}|{\macro}|\marg{list}\etype{ff} expandably applies the one
-parameter macro |\macro| to each item in the \meta{list} given as second
-argument and returns a new list with these outputs: each item is given one after
-the other as parameter to |\macro| which is expanded at that time (as usual,
-\emph{i.e.\@} fully for what comes first), the results are braced and output
-together as a succession of braced items (if |\macro| is defined to start with a
-space, the space will be gobbled and the |\macro| will not be expanded; it is
-allowed to have its own arguments, the list items serve as last arguments to
-|\macro|). Hence |\xintApply{\macro}{{1}{2}{3}}| returns
-|{\macro{1}}{\macro{2}}{\macro{3}}| where all instances of |\macro| have been
-already \fexpan ded.
-
-Being expandable, |\xintApply| is useful for example inside alignments where
-implicit groups make standard loops constructs usually fail. In such situation
-it is often not wished that the new list elements be braced, see
-\csbxint{ApplyUnbraced}. The |\macro| does not have to be expandable:
-|\xintApply| will try to expand it, the expansion may remain partial.
-
-The \meta{list} may
-itself be some macro expanding (in the previously described way) to the list of
-tokens to which the macro |\macro| will be applied. For example, if the
-\meta{list} expands to some positive number, then each digit will be replaced by
-the result of applying |\macro| on it. %
-%
-\leftedline{|\def\macro #1{\the\numexpr
- 9-#1\relax}|} %
-%
-\leftedline{|\xintApply\macro{\xintiiFac
- {20}}|\dtt{=\xintApply\macro{\xintiiFac {20}}}}
-
-The macro \csa{xintApplyNoExpand}\etype{fn} does the same job without the first
-initial expansion which gave the \meta{list} of braced tokens to which |\macro|
-is applied.
-
-\subsection{\csh{xintApplyUnbraced}}\label{xintApplyUnbraced}
-
-
-\csa{xintApplyUnbraced}|{\macro}|\marg{list}\etype{ff} is like \csbxint{Apply}.
-The difference is that after having expanded its list argument, and applied
-|\macro| in turn to each item from the list, it reassembles the outputs without
-enclosing them in braces. The net effect is the same as doing
-%
-\leftedline{|\xintListWithSep {}{\xintApply {\macro}|\marg{list}|}|} This is
-useful for preparing a macro which will itself define some other macros or make
-assignments, as the scope will not be limited by brace pairs.
-%
-\begin{everbatim*}
-\def\macro #1{\expandafter\def\csname myself#1\endcsname {#1}}
-\xintApplyUnbraced\macro{{elta}{eltb}{eltc}}
-\begin{enumerate}[nosep,label=(\arabic{*})]
-\item \meaning\myselfelta
-\item \meaning\myselfeltb
-\item \meaning\myselfeltc
-\end{enumerate}
-\end{everbatim*}
-
-%
-The macro \csa{xintApplyUnbracedNoExpand}\etype{fn} does the same job without
-the first initial expansion which gave the \meta{list} of braced tokens to which
-|\macro| is applied.
-
-\subsection{\csh{xintSeq}}\label{xintSeq}
-
-\csa{xintSeq}|[d]{x}{y}|\etype{{{\upshape[\numx]}}\numx\numx} generates
-expandably |{x}{x+d}...| up to and possibly including |{y}| if |d>0| or down
-to and including |{y}| if |d<0|. Naturally |{y}| is omitted if |y-x| is not a
-multiple of |d|. If |d=0| the macro returns |{x}|. If |y-x| and |d| have
-opposite signs, the macro returns nothing. If the optional argument |d| is
-omitted it is taken to be the sign of |y-x|. Hence |\xintSeq {1}{0}| is not
-empty but |{1}{0}|. But |\xintSeq [1]{1}{0}| is empty.
-
-
-The arguments |x| and |y| are expanded inside a |\numexpr| so they may be
-count registers or a \LaTeX{} |\value{countername}|, or arithmetic with such
-things.
-
-%
-\begin{everbatim*}
-\xintListWithSep{,\hskip2pt plus 1pt minus 1pt }{\xintSeq {12}{-25}}
-\end{everbatim*}
-%
-\begin{everbatim*}
-\xintiiSum{\xintSeq [3]{1}{1000}}
-\end{everbatim*}
-
-When the macro is used without the optional argument |d|, it can only generate
-up to about $5000$ numbers\IMPORTANT, the precise value depends upon some
-\TeX{} memory parameter (input save stack).
-
-With the optional argument |d| the macro proceeds differently (but less
-efficiently) and does not stress the input save stack.
-
-
-
-\subsection{\csh{xintloop}, \csh{xintbreakloop}, \csh{xintbreakloopanddo}, \csh{xintloopskiptonext}}
-\label{xintloop}
-\label{xintbreakloop}
-\label{xintbreakloopanddo}
-\label{xintloopskiptonext}
-
-|\xintloop|\meta{stuff}|\if<test>...\repeat|\xtype{} is an expandable loop
-compatible with nesting. However to break out of the loop one almost always need
-some un-expandable step. The cousin \csbxint{iloop} is \csbxint{loop} with an
-embedded expandable mechanism allowing to exit from the loop. The iterated
-macros may contain |\par| tokens or empty lines.
-
-If a sub-loop is to be used all the material from the start of the main loop and
-up to the end of the entire subloop should be braced; these braces will be
-removed and do not create a group. The simplest to allow the nesting of one or
-more sub-loops is to brace everything between \csa{xintloop} and \csa{repeat},
-being careful not to leave a space between the closing brace and |\repeat|.
-
-As this loop and \csbxint{iloop} will primarily be of interest to experienced
-\TeX{} macro programmers, my description will assume that the user is
-knowledgeable enough. Some examples in this document will be perhaps more
-illustrative than my attemps at explanation of use.
-
-One can abort the loop with \csbxint{breakloop}; this should not be used inside
-the final test, and one should expand the |\fi| from the corresponding test
-before. One has also \csbxint{breakloopanddo} whose first argument will be
-inserted in the token stream after the loop; one may need a macro such as
-|\xint_afterfi| to move the whole thing after the |\fi|, as a simple
-|\expandafter| will not be enough.
-
-One will usually employ some count registers to manage the exit test from the
-loop; this breaks expandability, see \csbxint{iloop} for an expandable integer
-indexed loop. Use in alignments will be complicated by the fact that cells
-create groups, and also from the fact that any encountered unexpandable material
-will cause the \TeX{} input scanner to insert |\endtemplate| on each encountered
-|&| or |\cr|; thus |\xintbreakloop| may not work as expected, but the situation
-can be resolved via |\xint_firstofone{&}| or use of |\TAB| with |\def\TAB{&}|.
-It is thus simpler for alignments to use rather than \csbxint{loop} either the
-expandable \csbxint{ApplyUnbraced} or the non-expandable but alignment
-compatible \csbxint{ApplyInline}, \csbxint{For} or \csbxint{For*}.
-
-As an example, let us suppose we have two macros |\A|\marg{i}\marg{j} and
-|\B|\marg{i}\marg{j} behaving like (small) integer valued matrix entries, and we
-want to define a macro |\C|\marg{i}\marg{j} giving the matrix product (|i| and
-|j| may be count registers). We will assume that |\A[I]| expands to the number
-of rows, |\A[J]| to the number of columns and want the produced |\C| to act in
-the same manner. The code is very dispendious in use of |\count| registers, not
-optimized in any way, not made very robust (the defined macro can not have the
-same name as the first two matrices for example), we just wanted to quickly
-illustrate use of the nesting capabilities of |\xintloop|.%
-%
-\footnote{for a more sophisticated implementation of matrix
- multiplication, inclusive of determinants, inverses, and display
- utilities, with entries big integers or decimal numbers or even
- fractions see some code online posted
- from
- November 11, 2013.}
-%
-
-
-\begin{everbatim*}
-\newcount\rowmax \newcount\colmax \newcount\summax
-\newcount\rowindex \newcount\colindex \newcount\sumindex
-\newcount\tmpcount
-\makeatletter
-\def\MatrixMultiplication #1#2#3{%
- \rowmax #1[I]\relax
- \colmax #2[J]\relax
- \summax #1[J]\relax
- \rowindex 1
- \xintloop % loop over row index i
- {\colindex 1
- \xintloop % loop over col index k
- {\tmpcount 0
- \sumindex 1
- \xintloop % loop over intermediate index j
- \advance\tmpcount \numexpr #1\rowindex\sumindex*#2\sumindex\colindex\relax
- \ifnum\sumindex<\summax
- \advance\sumindex 1
- \repeat }%
- \expandafter\edef\csname\string#3{\the\rowindex.\the\colindex}\endcsname
- {\the\tmpcount}%
- \ifnum\colindex<\colmax
- \advance\colindex 1
- \repeat }%
- \ifnum\rowindex<\rowmax
- \advance\rowindex 1
- \repeat
- \expandafter\edef\csname\string#3{I}\endcsname{\the\rowmax}%
- \expandafter\edef\csname\string#3{J}\endcsname{\the\colmax}%
- \def #3##1{\ifx[##1\expandafter\Matrix@helper@size
- \else\expandafter\Matrix@helper@entry\fi #3{##1}}%
-}%
-\def\Matrix@helper@size #1#2#3]{\csname\string#1{#3}\endcsname }%
-\def\Matrix@helper@entry #1#2#3%
- {\csname\string#1{\the\numexpr#2.\the\numexpr#3}\endcsname }%
-\def\A #1{\ifx[#1\expandafter\A@size
- \else\expandafter\A@entry\fi {#1}}%
-\def\A@size #1#2]{\ifx I#23\else4\fi}% 3rows, 4columns
-\def\A@entry #1#2{\the\numexpr #1+#2-1\relax}% not pre-computed...
-\def\B #1{\ifx[#1\expandafter\B@size
- \else\expandafter\B@entry\fi {#1}}%
-\def\B@size #1#2]{\ifx I#24\else3\fi}% 4rows, 3columns
-\def\B@entry #1#2{\the\numexpr #1-#2\relax}% not pre-computed...
-\makeatother
-\MatrixMultiplication\A\B\C \MatrixMultiplication\C\C\D
-\MatrixMultiplication\C\D\E \MatrixMultiplication\C\E\F
-\begin{multicols}2
- \[\begin{pmatrix}
- \A11&\A12&\A13&\A14\\
- \A21&\A22&\A23&\A24\\
- \A31&\A32&\A33&\A34
- \end{pmatrix}
- \times
- \begin{pmatrix}
- \B11&\B12&\B13\\
- \B21&\B22&\B23\\
- \B31&\B32&\B33\\
- \B41&\B42&\B43
- \end{pmatrix}
- =
- \begin{pmatrix}
- \C11&\C12&\C13\\
- \C21&\C22&\C23\\
- \C31&\C32&\C33
- \end{pmatrix}\]
- \[\begin{pmatrix}
- \C11&\C12&\C13\\
- \C21&\C22&\C23\\
- \C31&\C32&\C33
- \end{pmatrix}^2 = \begin{pmatrix}
- \D11&\D12&\D13\\
- \D21&\D22&\D23\\
- \D31&\D32&\D33
- \end{pmatrix}\]
- \[\begin{pmatrix}
- \C11&\C12&\C13\\
- \C21&\C22&\C23\\
- \C31&\C32&\C33
- \end{pmatrix}^3 = \begin{pmatrix}
- \E11&\E12&\E13\\
- \E21&\E22&\E23\\
- \E31&\E32&\E33
- \end{pmatrix}\]
- \[\begin{pmatrix}
- \C11&\C12&\C13\\
- \C21&\C22&\C23\\
- \C31&\C32&\C33
- \end{pmatrix}^4 = \begin{pmatrix}
- \F11&\F12&\F13\\
- \F21&\F22&\F23\\
- \F31&\F32&\F33
- \end{pmatrix}\]
-\end{multicols}
-\end{everbatim*}
-
-
-\subsection{\csh{xintiloop}, \csh{xintiloopindex}, \csh{xintouteriloopindex},
- \csh{xintbreakiloop}, \csh{xintbreakiloopanddo}, \csh{xintiloopskiptonext},
-\csh{xintiloopskipandredo}}
-\label{xintiloop}
-\label{xintbreakiloop}
-\label{xintbreakiloopanddo}
-\label{xintiloopskiptonext}
-\label{xintiloopskipandredo}
-\label{xintiloopindex}
-\label{xintouteriloopindex}
-
-\csa{xintiloop}|[start+delta]|\meta{stuff}|\if<test> ... \repeat|\xtype{} is a
-completely expandable nestable loop. complete expandability depends naturally on
-the actual iterated contents, and complete expansion will not be achievable
-under a sole \fexpan sion, as is indicated by the hollow star in the margin;
-thus the loop can be used inside an |\edef| but not inside arguments to the
-package macros. It can be used inside an |\xintexpr..\relax|. The
-|[start+delta]| is mandatory, not optional.
-
-This loop benefits via \csbxint{iloopindex} to (a limited access to) the integer
-index of the iteration. The starting value |start| (which may be a |\count|) and
-increment |delta| (\emph{id.}) are mandatory arguments. A space after the
-closing square bracket is not significant, it will be ignored. Spaces inside the
-square brackets will also be ignored as the two arguments are first given to a
-|\numexpr...\relax|. Empty lines and explicit |\par| tokens are accepted.
-
-As with \csbxint{loop}, this tool will mostly be of interest to advanced users.
-For nesting, one puts inside braces all the
-material from the start (immediately after |[start+delta]|) and up to and
-inclusive of the inner loop, these braces will be removed and do not create a
-loop. In case of nesting, \csbxint{outeriloopindex} gives access to the index of
-the outer loop. If needed one could write on its model a macro giving access to
-the index of the outer outer loop (or even to the |nth| outer loop).
-
-The \csa{xintiloopindex} and \csa{xintouteriloopindex} can not be used inside
-braces, and generally speaking this means they should be expanded first when
-given as argument to a macro, and that this macro receives them as delimited
-arguments, not braced ones. Or, but naturally this will break expandability, one
-can assign the value of \csa{xintiloopindex} to some |\count|. Both
-\csa{xintiloopindex} and \csa{xintouteriloopindex} extend to the litteral
-representation of the index, thus in |\ifnum| tests, if it comes last one has to
-correctly end the macro with a |\space|, or encapsulate it in a
-|\numexpr..\relax|.
-
-When the repeat-test of the loop is, for example, |\ifnum\xintiloopindex<10
-\repeat|, this means that the last iteration will be with |\xintiloopindex=10|
-(assuming |delta=1|). There is also |\ifnum\xintiloopindex=10 \else\repeat| to
-get the last iteration to be the one with |\xintiloopindex=10|.
-
-One has \csbxint{breakiloop} and \csbxint{breakiloopanddo} to abort the loop.
-The syntax of |\xintbreakiloopanddo| is a bit surprising, the sequence of tokens
-to be executed after breaking the loop is not within braces but is delimited by
-a dot as in:
-%
-\leftedline{|\xintbreakiloopanddo <afterloop>.etc.. etc... \repeat|}
-%
-The reason is that one may wish to use the then current value of
-|\xintiloopindex| in |<afterloop>| but it can't be within braces at the time it
-is evaluated. However, it is not that easy as |\xintiloopindex| must be expanded
-before, so one ends up with code like this:
-%
-\leftedline
-{|\expandafter\xintbreakiloopanddo\expandafter\macro\xintiloopindex.%|}
-%
-\leftedline{|etc.. etc.. \repeat|}
-%
-As moreover the |\fi| from the test leading to the decision of breaking out of
-the loop must be cleared out of the way, the above should be
-a branch of an expandable conditional test, else one needs something such
-as:
-%
-\leftedline
-{|\xint_afterfi{\expandafter\xintbreakiloopanddo\expandafter\macro\xintiloopindex.}%|}
-%
-\leftedline{|\fi etc..etc.. \repeat|}
-
-There is \csbxint{iloopskiptonext} to abort the current iteration and skip to
-the next, \hyperref[xintiloopskipandredo]{\ttfamily\hyphenchar\font45 \char92
- xintiloopskip\-and\-redo} to skip to the end of the current iteration and redo
-it with the same value of the index (something else will have to change for this
-not to become an eternal loop\dots ).
-
-Inside alignments, if the looped-over text contains a |&| or a |\cr|, any
-un-expandable material before a \csbxint{iloopindex} will make it fail because
-of |\endtemplate|; in such cases one can always either replace |&| by a macro
-expanding to it or replace it by a suitable |\firstofone{&}|, and similarly for
-|\cr|.
-
-\phantomsection\label{edefprimes}
-As an example, let us construct an |\edef\z{...}| which will define |\z| to be a
-list of prime numbers:
-\begin{everbatim*}
-\begingroup
-\edef\z
-{\xintiloop [10001+2]
- {\xintiloop [3+2]
- \ifnum\xintouteriloopindex<\numexpr\xintiloopindex*\xintiloopindex\relax
- \xintouteriloopindex,
- \expandafter\xintbreakiloop
- \fi
- \ifnum\xintouteriloopindex=\numexpr
- (\xintouteriloopindex/\xintiloopindex)*\xintiloopindex\relax
- \else
- \repeat
- }% no space here
- \ifnum \xintiloopindex < 10999 \repeat }%
-\meaning\z\endgroup
-\end{everbatim*}and we should have taken
-some steps to not have a trailing comma, but
-the point was to show that one can do that in an |\edef|\,! See also
-\autoref{ssec:primesII} which extracts from this code its way of testing
-primality.
-
-Let us create an alignment where each row will contain all divisors of its
-first entry.
-Here is the output, thus obtained without any count register:
-\begin{everbatim*}
-\begin{multicols}2
-\tabskip1ex \normalcolor
-\halign{&\hfil#\hfil\cr
- \xintiloop [1+1]
- {\expandafter\bfseries\xintiloopindex &
- \xintiloop [1+1]
- \ifnum\xintouteriloopindex=\numexpr
- (\xintouteriloopindex/\xintiloopindex)*\xintiloopindex\relax
- \xintiloopindex&\fi
- \ifnum\xintiloopindex<\xintouteriloopindex\space % CRUCIAL \space HERE
- \repeat \cr }%
- \ifnum\xintiloopindex<30
- \repeat
-}
-\end{multicols}
-\end{everbatim*}
-We wanted this first entry in bold face, but |\bfseries| leads to
-unexpandable tokens, so the |\expandafter| was necessary for |\xintiloopindex|
-and |\xintouteriloopindex| not to be confronted with a hard to digest
-|\endtemplate|. An alternative way of coding:
-%
-\begin{everbatim}
-\tabskip1ex
-\def\firstofone #1{#1}%
-\halign{&\hfil#\hfil\cr
- \xintiloop [1+1]
- {\bfseries\xintiloopindex\firstofone{&}%
- \xintiloop [1+1] \ifnum\xintouteriloopindex=\numexpr
- (\xintouteriloopindex/\xintiloopindex)*\xintiloopindex\relax
- \xintiloopindex\firstofone{&}\fi
- \ifnum\xintiloopindex<\xintouteriloopindex\space % \space is CRUCIAL
- \repeat \firstofone{\cr}}%
- \ifnum\xintiloopindex<30 \repeat }
-\end{everbatim}
-
-\begin{framed}
- The next utilities are not compatible with expansion-only context.
-\end{framed}
-
-\subsection{\csh{xintApplyInline}}\label{xintApplyInline}
-
-
-\csa{xintApplyInline}|{\macro}|\marg{list}\ntype{o{\lowast f}} works non
-expandably. It applies the one-parameter |\macro| to the first element of the
-expanded list (|\macro| may have itself some arguments, the list item will be
-appended as last argument), and is then re-inserted in the input stream after
-the tokens resulting from this first expansion of |\macro|. The next item is
-then handled.
-
-This is to be used in situations where one needs to do some repetitive
-things. It is not expandable and can not be completely expanded inside a
-macro definition, to prepare material for later execution, contrarily to what
-\csbxint{Apply} or \csbxint{ApplyUnbraced} achieve.
-
-\begin{everbatim*}
-\def\Macro #1{\advance\cnta #1 , \the\cnta}
-\cnta 0
-0\xintApplyInline\Macro {3141592653}.
-\end{everbatim*}
-The first argument |\macro| does not have to be an expandable macro.
-
-\csa{xintApplyInline} submits its second, token list parameter to an
-\hyperref[ssec:expansions]{\fexpan
-sion}. Then, each \emph{unbraced} item will also be \fexpan ded. This provides
-an easy way to insert one list inside another. \emph{Braced} items are not
-expanded. Spaces in-between items are gobbled (as well as those at the start
-or the end of the list), but not the spaces \emph{inside} the braced items.
-
-\csa{xintApplyInline}, despite being non-expandable, does survive to
-contexts where the executed |\macro| closes groups, as happens inside
-alignments with the tabulation character |&|.
-This tabular provides an example:\par
-\begin{everbatim*}
-\centerline{\normalcolor\begin{tabular}{ccc}
- $N$ & $N^2$ & $N^3$ \\ \hline
- \def\Row #1{ #1 & \xintiiSqr {#1} & \xintiiPow {#1}{3} \\ \hline }%
- \xintApplyInline \Row {\xintCSVtoList{17,28,39,50,61}}
-\end{tabular}}\medskip
-\end{everbatim*}
-
-We see that despite the fact that the first encountered tabulation character in
-the first row close a group and thus erases |\Row| from \TeX's memory,
-|\xintApplyInline| knows how to deal with this.
-
-Using \csbxint{ApplyUnbraced} is an alternative: the difference is that
-this would have prepared all rows first and only put them back into the
-token stream once they are all assembled, whereas with |\xintApplyInline|
-each row is constructed and immediately fed back into the token stream: when
-one does things with numbers having hundreds of digits, one learns that
-keeping on hold and shuffling around hundreds of tokens has an impact on
-\TeX{}'s speed (make this ``thousands of tokens'' for the impact to be
-noticeable).
-
-One may nest various |\xintApplyInline|'s. For example (see the
-\hyperref[float]{table} \vpageref{float}):\par
-\begin{everbatim*}
-\begin{figure*}[ht!]
- \centering\phantomsection\label{float}
- \def\Row #1{#1:\xintApplyInline {\Item {#1}}{0123456789}\\ }%
- \def\Item #1#2{&\xintiiPow {#1}{#2}}%
- \centeredline {\begin{tabular}{ccccccccccc} &0&1&2&3&4&5&6&7&8&9\\ \hline
- \xintApplyInline \Row {0123456789}
- \end{tabular}}
-\end{figure*}
-\end{everbatim*}
-
-One could not move the definition of |\Item| inside the tabular,
-as it would get lost after the first |&|. But this
-works:
-\everb|@
-\begin{tabular}{ccccccccccc}
- &0&1&2&3&4&5&6&7&8&9\\ \hline
- \def\Row #1{#1:\xintApplyInline {&\xintiiPow {#1}}{0123456789}\\ }%
- \xintApplyInline \Row {0123456789}
-\end{tabular}
-|
-
-A limitation is that, contrarily to what one may have expected, the
-|\macro| for an |\xintApplyInline| can not be used to define
-the |\macro| for a nested sub-|\xintApplyInline|. For example,
-this does not work:\par
-\everb|@
- \def\Row #1{#1:\def\Item ##1{&\xintiiPow {#1}{##1}}%
- \xintApplyInline \Item {0123456789}\\ }%
- \xintApplyInline \Row {0123456789} % does not work
-|
-\noindent But see \csbxint{For}.
-
-\subsection{\csh{xintFor}, \csh{xintFor*}}\label{xintFor}\label{xintFor*}
-
-\csbxint{For}\ntype{on} is a new kind of for loop.\footnote{first introduced
- with \xintname |1.09c| of |2013/10/09|.} Rather than using macros
-for encapsulating list items, its behaviour is like a macro with parameters:
-|#1|, |#2|, \dots, |#9| are used to represent the items for up to nine levels of
-nested loops. Here is an example:
-%
-\everb|@
-\xintFor #9 in {1,2,3} \do {%
- \xintFor #1 in {4,5,6} \do {%
- \xintFor #3 in {7,8,9} \do {%
- \xintFor #2 in {10,11,12} \do {%
- $$#9\times#1\times#3\times#2=\xintiiPrd{{#1}{#2}{#3}{#9}}$$}}}}
-|
-\noindent This example illustrates that one does not have to use |#1| as the
-first one:
-the order is arbitrary. But each level of nesting should have its specific macro
-parameter. Nine levels of nesting is presumably overkill, but I did not know
-where it was reasonable to stop. |\par| tokens are accepted in both the comma
-separated list and the replacement text.
-
-\begin{framed}
- \TeX nical notes:
-
-\begin{itemize}
- \item The |#1| is replaced in the iterated-over text exactly as in general
- \TeX\ macros or \LaTeX\ commands. This spares the user quite a few
- |\expandafter|'s or other tricks needed with loops which have the
- values encapsulated in macros, like \LaTeX's |\@for| and |\@tfor|.
-
- \item \csa{xintFor} (and \csa{xintFor*}) isn't purely expandable: one can
- not use it inside an |\edef|. But it may be used, as will be shown in
- examples, in some contexts such as \LaTeX's |tabular| which are usually
- hostile to non-expandable loops.
-
- \item \csa{xintFor} (and \csa{xintFor*}) does some assignments prior to
- executing each iteration of the replacement text, but it acts purely
- expandably after the last iteration, hence if for example the replacement
- text ends with a |\\|, the loop can be used insided a tabular and be
- followed by a |\hline| without creating the dreaded ``|Misplaced
- \noalign|'' error.
-
- \item As stated in previous item the first iteration follows some
- non-expandable internal dealings. This means for example that in \LaTeX{},
- one can not inject a |\multicolumn| in the first iteration. Sometimes one
- way work around this by injecting father |&\multicolumn| or |\\
- \multicolumn|.
-
- \item It does not create groups.
-
- \item It makes no global assignments.
-
- \item The iterated replacement text may close a group which was opened even
- before the start of the loop (typical example being with |&| in
- alignments).
-\begin{everbatim*}
-\begin{tabular}{rccccc}
- \hline
- \xintFor #1 in {A, B, C} \do {%
- #1:\xintFor #2 in {a, b, c, d, e} \do {&($ #2 \to #1 $)}\\ }%
- \hline
-\end{tabular}
-\end{everbatim*}
-
- \item There is no facility provided which would give access to a count of
- the number of iterations as it is technically not easy to do so it in a
- way working with nested loops while maintaining the ``expandable after
- done'' property; something in the spirit of \csbxint{iloopindex} is
- possible but this approach would bring its own limitations and
- complications. Hence the user is invited to update her own count or
- \LaTeX{} counter or macro at each iteration, if needed.
-
- \item A |\macro| whose definition uses internally an \csbxint{For} loop
- may be used inside another \csbxint{For} loop even if the two loops both
- use the same macro parameter. The loop definition inside |\macro|
- must use |##| as is the general rule for definitions done inside macros.
-
- \item \csbxint{For} is for comma separated values and \csbxint{For*} for
- lists of braced items; their respective expansion policies differ. They
- are described later.
-\end{itemize}
-\unskip
-\end{framed}
-
-\noindent Regarding \csbxint{For}:
-\begin{itemize}[nosep, listparindent=\leftmarginiii]
-\item the spaces between the various declarative elements are all optional,
-\item in the list of comma separated values, spaces around the commas or at
- the start and end are ignored,
-\item if an item must contain itself its own commas, then it should
- be braced, and the braces will be removed before feeding the iterated-over
- text,
-\item the list may be a macro, it is expanded only once,
-\item items are not pre-expanded. The first item should be braced or start
- with a space if the list is explicit and the item should not be
- pre-expanded,
-\item empty items give empty |#1|'s in the replacement text, they are not
- skipped,
-\item an empty list executes once the replacement text with an empty parameter
- value,
-\item the list, if not a macro, \fbox{must be braced.}
-\end{itemize}
-
-\noindent Regarding \csbxint{For*}:\ntype{{\lowast f}n}
-\begin{itemize}[nosep, listparindent=\leftmarginiii]
-\item it handles lists of braced items (or naked tokens),
-\item it \hyperref[ssec:expansions]{\fexpan ds} the list,
-\item and more generally it \hyperref[ssec:expansions]{\fexpan ds} each naked
- token encountered
- before assigning the |#1| values (gobbling spaces in the process);
- this
- makes it easy to simulate concatenation of multiple lists|\x|, |\y|:
- if |\x| expands to |{1}{2}{3}| and |\y| expands to |{4}{5}{6}| then |{\x\y}|
- as argument to |\xintFor*| has the same effect as |{{1}{2}{3}{4}{5}{6}}|.
-
- For a further illustration see the use of |\xintFor*| at the end of
- \autoref{ssec:fibonacci}.
-\item spaces at the start, end, or in-between items are gobbled (but naturally
- not the spaces inside \emph{braced} items),
-\item except if the list argument is a macro (with no parameters), \fbox{it
- must be braced.},
-\item an empty list leads to an empty result.
-\end{itemize}
-
-The macro \csbxint{Seq} which generates arithmetic sequences is to be used
-with \csbxint{For*} as its output consists of successive braced numbers (given
-as digit tokens).
-\begin{everbatim*}
-\xintFor* #1 in {\xintSeq [+2]{-7}{+2}}\do {stuff
- with #1\xintifForLast{\par}{\newline}}
-\end{everbatim*}
-
-
-When nesting \csa{xintFor*} loops, using \csa{xintSeq} in the inner loops is
-inefficient, as the arithmetic sequence will be re-created each time. A more
-efficient style is:
-%
-\begin{everbatim}
- \edef\innersequence {\xintSeq[+2]{-50}{50}}%
- \xintFor* #1 in {\xintSeq {13}{27}} \do
- {\xintFor* #2 in \innersequence \do {stuff with #1 and #2}%
- .. some other macros .. }
-\end{everbatim}
-
-This is a general remark applying for any nesting of loops, one should avoid
-recreating the inner lists of arguments at each iteration of the outer loop.
-
-
-When the loop is defined inside a macro for later execution the |#| characters
-must be doubled.%
-%
-\footnote{sometimes what seems to be a macro argument isn't really; in
- \csa{raisebox\{1cm\}\{}\csa{xintFor \#1 in \{a,b,c\} }\csa{do
- \{\#1\}\}} no doubling should be done.}
-%
-For example:
-%
-\begin{everbatim*}
-\def\T{\def\z {}%
- \xintFor* ##1 in {{u}{v}{w}} \do {%
- \xintFor ##2 in {x,y,z} \do {%
- \expandafter\def\expandafter\z\expandafter {\z\sep (##1,##2)} }%
- }%
-}%
-\T\def\sep {\def\sep{, }}\z
-\end{everbatim*}
-
-Similarly when the replacement text
-of |\xintFor| defines a macro with parameters, the macro character |#| must be
-doubled.
-
-
-The iterated macros as well as the list items are allowed to contain explicit
-|\par| tokens.
-
-
-\subsection{\csh{xintifForFirst}, \csh{xintifForLast}}
-\label{xintifForFirst}\label{xintifForLast}
-
-\csbxint{ifForFirst}\,\texttt{\{YES branch\}\{NO branch\}}\etype{nn}
- and \csbxint{ifForLast}\,\texttt{\{YES
- branch\}\hskip 0pt plus 0.2em \{NO branch\}}\etype{nn} execute the |YES| or
-|NO| branch
-if the
-\csbxint{For}
-or \csbxint{For*} loop is currently in its first, respectively last, iteration.
-
-Designed to work as expected under nesting (but see frame next.) Don't forget
-an empty brace pair |{}| if a branch is to do nothing. May be used multiple
-times in the replacement text of the loop.
-
-\begin{framed}
- \noindent Pay attention to these implementation features:
- \begin{itemize}[nosep, listparindent=\leftmarginiii]
- \item \emph{if an inner \csbxint{For} loop is positioned before the
- \csb{xintifForFirst} or \csb{xintifForLast} of the outer loop it will
- contaminate their settings. This applies also naturally if the inner loop
- arises from the expansion of some macro located before the outer
- conditionals.}
-
- One fix is to make sure that the outer conditionals are expanded before the
- inner loop is executed, e.g. this will be the case if the inner loop is
- located inside one of the branches of the conditional.
-
- Another approach is to enclose, if feasible, the inner loop in a group of
- its own.
- \item \emph{if the replacement text closes a group (e.g. from a |&| inside an
- alignment), the conditionals will lose their ascribed meanings and end up
- possibly undefined, depending whether there is some outer loop whose
- execution started before the opening of the group.}
-
- The fix is to arrange things so that the conditionals are expanded
- before \TeX\ encounters the closing-group token.
- \end{itemize}
-\end{framed}
+\def\xintRunningHeader{{\inheadertrue\catcode`,12\relax
+ \DOCxintfrontpage,
+ \DOCxintexprintro,
+ \csname xint bundlename\endcsname}}
-\subsection{ \csh{xintBreakFor}, \csh{xintBreakForAndDo}}
-\label{xintBreakFor}\label{xintBreakForAndDo}
+\part{The \xintexprname and allied packages source code (not
+ included, see \protect\dtt{sourcexint.pdf})}
-One may immediately terminate an \csbxint{For} or \csbxint{For*} loop with
-\csbxint{BreakFor}.
+\markboth{\makebox[0pt]{\xintRunningHeader}}{\makebox[0pt]{\xintRunningHeader}}
+\vspace{1cm}
\begin{framed}
- As it acts by clearing up all the rest of the replacement text when
- encountered, it will not work from inside some |\if...\fi| without
- suitable |\expandafter| or swapping technique.
-
- Also it can't be used from inside braces as from there it can't see the end
- of the replacement text.
-\end{framed}
-
-There is also \csbxint{BreakForAndDo}. Both are illustrated by various examples
-in the next section which is devoted to ``forever'' loops.
-
-\subsection{\csh{xintintegers}, \csh{xintdimensions}, \csh{xintrationals}}
-\label{xintegers}\label{xintintegers}
-\label{xintdimensions}\label{xintrationals}
-
-If the list argument to \csbxint{For} (or \csbxint{For*}, both are equivalent in
-this context) is \csbxint{integers} (equivalently \csbxint{egers}) or more
-generally \csbxint{integers}|[||start|\allowbreak|+|\allowbreak|delta||]|
-(\emph{the whole within braces}!)%
-%
-\footnote{the |start+delta| optional specification may have extra spaces
- around the plus sign of near the square brackets, such spaces are
- removed. The same applies with \csa{xintdimensions} and
- \csa{xintrationals}.},
-%
-then \csbxint{For} does an infinite iteration where
-|#1| (or |#2|, \dots, |#9|) will run through the arithmetic sequence of (short)
-integers with initial value |start| and increment |delta| (default values:
-|start=1|, |delta=1|; if the optional argument is present it must contains both
-of them, and they may be explicit integers, or macros or count registers). The
-|#1| (or |#2|, \dots, |#9|) will stand for |\numexpr <opt sign><digits>\relax|,
-and the litteral representation as a string of digits can thus be obtained as
-\fbox{\csa{the\#1}} or |\number#1|. Such a |#1| can be used in an |\ifnum| test
-with no need to be postfixed with a space or a |\relax| and one should
-\emph{not} add them.
-
-If the list argument is \csbxint{dimensions} or more generally
-\csbxint{dimensions}|[||start|\allowbreak|+|\allowbreak|delta||]| (\emph{within
- braces}!), then
-\csbxint{For} does an infinite iteration where |#1| (or |#2|, \dots, |#9|) will
-run through the arithmetic sequence of dimensions with initial value
-|start| and increment |delta|. Default values: |start=0pt|, |delta=1pt|; if
-the optional argument is present it must contain both of them, and they may
-be explicit specifications, or macros, or dimen registers, or length macros
-in \LaTeX{} (the stretch and shrink components will be discarded). The |#1|
-will be |\dimexpr <opt sign><digits>sp\relax|, from which one can get the
-litteral (approximate) representation in points via |\the#1|. So |#1| can be
-used anywhere \TeX{} expects a dimension (and there is no need in conditionals
-to insert a |\relax|, and one should \emph{not} do it), and to print its value
-one uses \fbox{\csa{the\#1}}. The chosen representation guarantees exact
-incrementation with no rounding errors accumulating from converting into
-points at each step.
-
-
-
-
-
-
-If the list argument to \csbxint{For} (or \csbxint{For*}) is \csbxint{rationals}
-or more generally
-\csbxint{rationals}|[||start|\allowbreak|+|\allowbreak|delta||]| (\emph{within
- braces}!), then \csbxint{For} does an infinite iteration where |#1| (or |#2|,
-\dots, |#9|) will run through the arithmetic sequence of \xintfracname fractions
-with initial value |start| and increment |delta| (default values: |start=1/1|,
-|delta=1/1|). This loop works \emph{only with \xintfracname loaded}. if the
-optional argument is present it must contain both of them, and they may be given
-in any of the formats recognized by \xintfracname (fractions, decimal
-numbers, numbers in scientific notations, numerators and denominators in
-scientific notation, etc...) , or as macros or count registers (if they are
-short integers). The |#1| (or |#2|, \dots, |#9|) will be an |a/b| fraction
-(without a |[n]| part), where
-the denominator |b| is the product of the denominators of
-|start| and |delta| (for reasons of speed |#1| is not reduced to irreducible
-form, and for another reason explained later |start| and |delta| are not put
-either into irreducible form; the input may use explicitely \csa{xintIrr} to
-achieve that).
-\begin{everbatim*}
-\begingroup\small
-\noindent\parbox{\dimexpr\linewidth-3em}{\color[named]{OrangeRed}%
-\xintFor #1 in {\xintrationals [10/21+1/21]} \do
-{#1=\xintifInt {#1}
- {\textcolor{blue}{\xintTrunc{10}{#1}}}
- {\xintTrunc{10}{#1}}% display in blue if an integer
- \xintifGt {#1}{1.123}{\xintBreakFor}{, }%
- }}
-\endgroup\smallskip
-\end{everbatim*}
-
-\smallskip The example above confirms that computations are done exactly, and
-illustrates that the two initial (reduced) denominators are not multiplied when
-they are found to be equal. It is thus recommended to input |start| and |delta|
-with a common smallest possible denominator, or as fixed point numbers with the
-same numbers of digits after the decimal mark; and this is also the reason why
-|start| and |delta| are not by default made irreducible. As internally the
-computations are done with numerators and denominators completely expanded, one
-should be careful not to input numbers in scientific notation with exponents in
-the hundreds, as they will get converted into as many zeroes.
-
-\begin{everbatim*}
-\noindent\parbox{\dimexpr.7\linewidth}{\raggedright
-\xintFor #1 in {\xintrationals [0.000+0.125]} \do
-{\edef\tmp{\xintTrunc{3}{#1}}%
- \xintifInt {#1}
- {\textcolor{blue}{\tmp}}
- {\tmp}%
- \xintifGt {#1}{2}{\xintBreakFor}{, }%
- }}\smallskip
-\end{everbatim*}
-
-We see here that \csbxint{Trunc} outputs (deliberately) zero as $0$, not (here)
-$0.000$, the idea being not to lose the information that the truncated thing was
-truly zero. Perhaps this behaviour should be changed? or made optional? Anyhow
-printing of fixed points numbers should be dealt with via dedicated packages
-such as |numprint| or |siunitx|.\par
-
-
-\subsection{\csh{xintForpair}, \csh{xintForthree}, \csh{xintForfour}}\label{xintForpair}\label{xintForthree}\label{xintForfour}
-
-The syntax\ntype{on} is illustrated in this
-example. The notation is the usual one for |n|-uples, with parentheses and
-commas. Spaces around commas and parentheses are ignored.
-%
-\begin{everbatim*}
-{\centering\begin{tabular}{cccc}
- \xintForpair #1#2 in { ( A , a ) , ( B , b ) , ( C , c ) } \do {%
- \xintForpair #3#4 in { ( X , x ) , ( Y , y ) , ( Z , z ) } \do {%
- $\Biggl($\begin{tabular}{cc}
- -#1- & -#3-\\
- -#4- & -#2-\\
- \end{tabular}$\Biggr)$&}\\\noalign{\vskip1\jot}}%
-\end{tabular}\\}
-\end{everbatim*}
-
-\csbxint{Forpair} must be followed by either |#1#2|, |#2#3|, |#3#4|, \dots, or
-|#8#9| with |#1| usable as an alias for |#1#2|, |#2| as alias for |#2#3|,
-etc \dots\ and similarly for \csbxint{Forthree} (using |#1#2#3| or simply
-|#1|, |#2#3#4| or simply |#2|, \dots) and \csbxint{Forfour} (with |#1#2#3#4|
-etc\dots).
-
-Nesting works as long as the macro parameters are distinct among |#1|, |#2|,
-..., |#9|. A macro which expands to an \csa{xintFor} or a
-\csa{xintFor(pair,three,four)} can be used in another one with no constraint
-about using distinct macro parameters.
-
-|\par| tokens are accepted in both the comma separated list and the
-replacement text.
-
-
-\subsection{\csh{xintAssign}}\label{xintAssign}
-
-\csa{xintAssign}\meta{braced things}\csa{to}%
-\meta{as many cs as they are things} %\ntype{{(f$\to$\lowast [x)}{\lowast N}}
-%
-defines (without checking if something gets overwritten) the control sequences
-on the right of \csa{to} to expand to the successive tokens or braced items
-located to the left of \csa{to}. \csa{xintAssign} is not an expandable macro.
-
-\fexpan sion is first applied to the material in front of \csa{xintAssign}
-which is fetched as one argument if it is braced. Then the expansion of this
-argument is examined and successive items are assigned to the macros following
-|\to|. There must be exactly as many macros as items. No check is done. The
-macro assignments are done with removal of one level of brace pairs from each
-item.
-
-After the initial \fexpan sion, each assigned (brace-stripped) item will be
-expanded according to the setting of the optional parameter.
-
-For example |\xintAssign [e]...| means that all assignments are done using
-|\edef|. With |[f]| the assignments will be made using
-\hyperref[fdef]{\ttfamily\char92fdef}. The default is simply to make the
-definitions with |\def|, corresponding to an empty optional paramter |[]|.
-Possibilities for the optional parameter are: |[], [g], [e], [x], [o], [go],
-[oo], [goo], [f], [gf]|. For example |[oo]| means a double expansion.
-\begin{everbatim*}
-\xintAssign \xintiiDivision{1000000000000}{133333333}\to\Q\R
-\meaning\Q\newline
-\meaning\R\newline
-\xintAssign {{\xintiiDivision{1000000000000}{133333333}}}\to\X
-\meaning\X\newline
-\xintAssign [oo]{{\xintiiDivision{1000000000000}{133333333}}}\to\X
-\meaning\X\newline
-\xintAssign \xintiiPow{7}{13}\to\SevenToThePowerThirteen
-\meaning\SevenToThePowerThirteen\par
-\end{everbatim*}
-
-Two special cases:
-\begin{itemize}[nosep]
-\item if after this initial expansion no brace is found immediately after
- \csa{xintAssign}, it is assumed that there is only one control sequence
- following |\to|, and this control sequence is then defined via |\def| (or
- what is set-up by the optional parameter) to expand to the material between
- \csa{xintAssign} and \csa{to}.
-\item if the material between \csa{xintAssign} and |\to| is enclosed in two
- brace pairs, the first brace pair is removed, then the \fexpan sion is
- immediately stopped by the inner brace pair, hence \csa{xintAssign} now
- finds a unique item and thus defines only a single macro to be this item,
- which is now stripped of the second pair of braces.
-\end{itemize}
-
-
-\emph{Note:} prior to release |1.09j|, |\xintAssign| did an |\edef| by default
-for each item assignment but it now does |\def| corresponding to no or empty
-optional parameter.
-
-It is allowed for the successive braced items to be separated by spaces. They
-are removed during the assignments. But if a single macro is defined (which
-happens if the argument after \fexpan sion does not start with a brace),
-naturally the scooped up material has all intervening spaces, as it is
-considered a
-single item. But an upfront initial space will have been absorbed by \fexpan
-sion.
-\begin{everbatim*}
-\def\X{ {a} {b} {c} {d} }\def\Y { u {a} {b} {c} {d} }
-\xintAssign\X\to\A\B\C\D
-\xintAssign\Y\to\Z
-\meaning\A, \meaning\B, \meaning\C, \meaning\D+++\newline
-\meaning\Z+++\par
-\end{everbatim*}
-As usual successive space characters in input make for a single \TeX\ space token.
-
-
-\subsection{\csh{xintAssignArray}}\label{xintAssignArray}
-
-\xintAssignArray \xintBezout {1000}{113}\to\Bez
-
-\csa{xintAssignArray}\meta{braced things}\csa{to}\csa{myArray}
-%
-%\ntype{{(f$\to$\lowast x)}N}
-%
-first expands fully what comes immediately after |\xintAssignArray| and
-expects to find a list of braced things |{A}{B}...| (or tokens). It then
-defines \csa{myArray} as a macro with one parameter, such that \csa{myArray\x}
-expands to give the |x|th braced thing of this original
-list (the argument \texttt{\x} itself is fed to a |\numexpr| by |\myArray|,
-and |\myArray| expands in two steps to its output). With |0| as parameter,
-\csa{myArray}|{0}| returns the number |M| of elements of the array so that the
-successive elements are \csa{myArray}|{1}|, \dots, \csa{myArray}|{M}|.
-%
-\leftedline{|\xintAssignArray \xintBezout {1000}{113}\to\Bez|} will set
-|\Bez{0}| to \dtt{\Bez0}, |\Bez{1}| to \dtt{\Bez1}, |\Bez{2}| to
-\dtt{\Bez2}, and |\Bez{3}| to \dtt{\Bez3}:
-\dtt{$\Bez1\times1000+\Bez2\times113=\Bez3$.}
-This macro is incompatible with expansion-only contexts.
-
-\csa{xintAssignArray} admits an optional parameter, for example
-|\xintAssignArray [e]| means that the definitions of the macros will be made
-with |\edef|. The empty optional parameter (default) means that definitions
-are done with |\def|. Other possibilities: |[], [o], [oo], [f]|. Contrarily to
-\csbxint{Assign} one can not use the |g| here to make the definitions global.
-For this, one should rather do |\xintAssignArray| within a group starting with
-|\globaldefs 1|.
-
-
-\subsection{\csh{xintDigitsOf}}\label{xintDigitsOf}
-
-This is a synonym for \csbxint{AssignArray},\ntype{fN} to be used to define
-an array giving all the digits of a given (positive, else the minus sign will
-be treated as first item) number.
-\begingroup\xintDigitsOf\xintiiPow {7}{500}\to\digits
-%
-\leftedline{|\xintDigitsOf\xintiiPow {7}{500}\to\digits|}
-\noindent $7^{500}$ has |\digits{0}=|\digits{0} digits, and the 123rd among them
-(starting from the most significant) is
-|\digits{123}=|\digits{123}.
-\endgroup
-
-\subsection{\csh{xintRelaxArray}}\label{xintRelaxArray}
-
-\csa{xintRelaxArray}\csa{myArray} %\ntype{N}
-%
-(globally) sets to \csa{relax} all macros which were defined by the previous
-\csa{xintAssignArray} with \csa{myArray} as array macro.
-
-\clearpage
-\let\xinttoolsnameUp\undefined
-\def\n{|{N}|}
-\def\m{|{M}|}
-\def\x{|{x}|}
-
-\csname xintexprnameUp\endcsname
-\section{Macros of the \xintexprname package}%
-\RaisedLabel{sec:oldxintexpr}
-
-\localtableofcontents
-
-The \xintexprname package was first released with version |1.07|
-(|2013/05/25|) of the \xintname bundle. It was substantially enhanced with
-release |1.1| from |2014/10/28|.
-
-The |1.4| release from |2020/01/31| maintains the same general architecture
-but needed adapting all the code base for the switch from |\csname| to
-|\expanded| techniques. On this occasion the mechanism for defining functions
-was substantially strengthened. The parser core mechanisms were improved too.
-
-The package loads automatically \xintfracname and \xinttoolsname.
-
-This section should be trimmed to contain only information not
-already covered in \autoref{sec:expr}.
-
-\subsection{The \csh{xintexpr} expressions}
-\label{xintexpr}
-\label{xinttheexpr}
-\label{thexintexpr}
-\label{xintthe}
-
-An \xintexprname{}ession is a construct
-\csbxint{expr}\meta{expandable\_expression}|\relax|\etype{x} where the
-expandable expression is read and completely expanded from left to right.
-
-An |\xintexpr...\relax| \emph{must} end in a |\relax| (which will be absorbed).
-Contrarily to a |\numexpr| expression, it is printable\CHANGED{1.4} as is without a prefix
-|\the| or |\number| (don't use them with |\xintexpr| this will raise an
-error).
-
-But one can use |\xintthe| prefix if one does need the explicit digits and
-other characters as in the final typesetted result.
-
-As an alternative and equivalent syntax to
-\begin{everbatim}
-\xintexpr round(<expression>, D)\relax
-\end{everbatim}
-there is
-\begin{everbatim}
-\xintiexpr [D] <expression> \relax
-\end{everbatim}
-For |D>0| this produces a decimal number with |D| figures after the decimal
-mark, which is the rounding of the expression. For |D=0| the rounding to an
-integer is produced. For |D<0| (and this was changed at |1.4f|), the rounded
-quotient of the expression by \verb=1e|D|= is produced.
-\begin{itemize}
-\item the expression may contain arbitrarily many levels of nested parenthesized
- sub-expressions,
-\item the expression may contain explicitely or from a macro expansion a
- sub-expression |\xintexpr...\relax|, which itself may contain a
- sub-expressions etc\dots
-\item to let sub-contents evaluate as a sub-unit it should thus be either
- \begin{enumerate}
- \item parenthesized,
- \item or a sub-expression |\xintexpr...\relax|.
- \end{enumerate}
- \item to use an expression as argument to macros from \xintfracname,
- or more generally to macros which expand their arguments, one must use the
- |\xinttheexpr...\relax| or |\xintthe\xintexpr...\relax| forms.
- \item one should not use |\xintthe\xintexpr...\relax| as a sub-constituent of
- another expression but only the
- |\xintexpr...\relax| form which is more efficient in this context.
- \item each \xintexprname{}ession, whether prefixed or not with |\xintthe|, is
- completely expandable and obtains its result in two expansion steps.
-\end{itemize}
-
-The information now following is possibly in need of updates.
-
-\begin{itemize}[parsep=0pt, labelwidth=\leftmarginii,
- itemindent=0pt, listparindent=\leftmarginiii, leftmargin=\leftmarginii]
-\item An expression is built the standard way with opening and closing
- parentheses, infix operators, and (big) numbers, with possibly a fractional
- part, and/or scientific notation (except for \csbxint{iiexpr} which only
- admits big integers). All variants work with comma separated expressions. On
- output each comma will be followed by a space. A decimal number must have
- digits either before or after the decimal mark.
+ %\small % not now that there is the Part which is rather large
-\item As everything gets expanded, the characters |.|, |+|, |-|, |*|, |/|, |^|,
- |!|, |&|, \verb+|+, |?|, |:|, |<|, |>|, |=|, |(|, |)|, |"|, |]|, |[|, |@|
- and the comma |,| should not (if used in the expression) be active. For
- example, the French language in |Babel| system, for pdf\LaTeX, activates |!|,
- |?|, |;| and |:|. Turn off the activity before expressions using such characters.
-
- Alternatively the macro \csbxint{exprSafeCatcodes} resets all
- characters potentially needed by \csbxint{expr} to their standard catcodes
- and \csbxint{exprRestoreCatcodes} restores the former status.
-
-\item Count registers and |\numexpr|-essions are accepted (LaTeX{}'s counters
- can be inserted using |\value|) natively without |\the| or |\number| as
- prefix. Also dimen registers and control sequences, skip registers and
- control sequences (\LaTeX{}'s lengths), |\dimexpr|-essions,
- |\glueexpr|-essions are automatically unpacked using |\number|, discarding
- the stretch and shrink components and giving the dimension value in |sp|
- units ($1/65536$th of a \TeX{} point). Furthermore, tacit multiplication is
- implied, when the (count or dimen or glue) register or variable, or the
- (|\numexpr| or |\dimexpr| or |\glueexpr|) expression is immediately prefixed
- by a (decimal) number. See \autoref{ssec:tacit multiplication} for the complete rules
- of tacit multiplication.\IMPORTANT
-
-\item With a macro |\x| defined like this:
+ This documentation has been compiled without including the
+ commented source code, which is available in the separate file
+ |sourcexint.pdf|,
+ and will open in a PDF viewer via:
%
- \leftedline{|\def\x {\xintexpr \a + \b \relax}| or |\edef\x {\xintexpr
- \a+\b\relax}|}
- %
- one may then do |\xintthe\x|, either for printing the result on the page or
- to use it in some other macros expanding their arguments. The |\edef| does
- the computation immediately but keeps it in a protected form.
- Naturally, the |\edef| is only possible if |\a| and |\b| are already
- defined. With both approaches the |\x| can be inserted in other expressions,
- as for example (assuming naturally as we use an |\edef| that in the
- `yet-to-be computed' case the |\a| and |\b| now have some suitable meaning):
- %
- \leftedline {|\edef\y {\xintexpr \x^3\relax}|}
-
-\item There is also \csbxint{boolexpr}| ... \relax| and
- \csbxint{theboolexpr}| ... \relax|.
-
-\item See also
- \csbxint{ifboolexpr} (\autoref{xintifboolexpr}) and the
- \func{bool} and \func{togl} functions
- in \autoref{sec:expr}. Here is an example. Well in fact the
- example ended up using only \csbxint{boolexpr} so it
- was modified to use \csbxint{ifboolexpr}.
-\catcode`| 12 %
-\begin{everbatim*}
-\xintdeffunc A(p,q,r) = p && (q || r) ;
-\xintdeffunc B(p,q,r) = p || (q && r) ;
-\xintdeffunc C(p,q,r) = xor(p, q, r) ;
-
-\centeredline{\normalcolor
-\begin{tabular}{ccrclcl}
- \xintFor* #1 in {{False}{True}} \do {%
- \xintFor* #2 in {{False}{True}} \do {%
- \xintFor* #3 in {{False}{True}} \do {%
- #1 &AND &(#2 &OR &#3)&is&\textcolor[named]{OrangeRed}
- {\xintifboolexpr{A(#1,#2,#3)}{true}{false}}\\
- #1 &OR &(#2 &AND &#3)&is&\textcolor[named]{OrangeRed}
- {\xintifboolexpr{B(#1,#2,#3)}{yes}{no}}\\
- #1 &XOR & #2 &XOR &#3 &is&\textcolor[named]{OrangeRed}
- {\xintifboolexpr{C(#1,#2,#3)}{oui}{non}}\\
-}}}
-\end{tabular}%
-}
-\end{everbatim*}\catcode`| 13
-
-\item See also \csbxint{ifsgnexpr}.
-
-\item There is \csbxint{floatexpr}| ... \relax| where the algebra is done
- in floating point approximation (also for each intermediate result). Use the
- syntax |\xintDigits:=N\relax| to set the precision. Default: $16$ digits.
- %
- \leftedline{|\xintthefloatexpr 2^100000\relax:| \dtt{\xintthefloatexpr
- 2^100000\relax }}
- %
- The square-root operation can be used in |\xintexpr|, it is computed
- as a float with the precision set by |\xintDigits| or by the optional
- second argument:
- %
-\begin{everbatim*}
-\xinttheexpr sqrt(2,60)\relax\newline
-Here the [60] is to avoid truncation to |\xinttheDigits| of precision on output.\newline
-\printnumber{\xintthefloatexpr [60] sqrt(2,60)\relax}
-\end{everbatim*}
-
- Floats are quickly indispensable when using the power function, as exact
- results will easily have hundreds, even thousands of digits.
- %
-\begin{everbatim*}
-\xintDigits:=48\relax \xintthefloatexpr 2^100000\relax
-\end{everbatim*}
-
- Only integer and (in |\xintfloatexpr...\relax|) half-integer exponents are
- allowed.
-
-\item if one uses \emph{macros} within |\xintexpr..\relax| one should
- obviously take into account that the parser will \emph{not} see the macro
- arguments, hence one cannot use the syntax there, except if the arguments
- are themselves wrapped as |\xinttheexpr...\relax| and assuming the macro
- \fexpan ds these arguments.
-\end{itemize}
-\subsection{\texorpdfstring{\texttt{\protect\string\numexpr}}{\textbackslash
- numexpr} or \texorpdfstring{\texttt{\protect\string\dimexpr}}{\textbackslash
- dimexpr} expressions, count and dimension registers and variables}
-\label{ssec:countinexpr}
-
-Count registers, count control sequences, dimen registers, dimen control
-sequences (like |\parindent|), skips and skip control sequences, |\numexpr|,
-|\dimexpr|, |\glueexpr|, |\fontdimen| can be inserted directly, they will be
-unpacked using |\number| which gives the internal value in terms of scaled
-points for the dimensional variables: $1$\,|pt|${}=65536$\,|sp| (stretch and
-shrink components are thus discarded).
-
-Tacit multiplication (see \autoref{ssec:tacit multiplication}) is implied,
-when a number or decimal number prefixes such a register or control sequence.
-\LaTeX{} lengths are skip control sequences and \LaTeX{} counters should be
-inserted using |\value|.
-
-Release |1.2| of the |\xintexpr| parser also recognizes and prefixes with
-|\number| the |\ht|, |\dp|, and |\wd| \TeX{} primitives as well as the
-|\fontcharht|, |\fontcharwd|, |\fontchardp| and |\fontcharic| \eTeX{}
-primitives.
-
-In the case of numbered registers like |\count255| or |\dimen0| (or |\ht0|),
-the resulting digits will be re-parsed, so for example |\count255 0| is like
-|100| if |\the\count255| would give |10|. The same happens with inputs such
-as |\fontdimen6\font|. And |\numexpr 35+52\relax| will be exactly as if |87|
-as been encountered by the parser, thus more digits may follow: |\numexpr
-35+52\relax 000| is like |87000|. If a new |\numexpr| follows, it is treated
-as what would happen when |\xintexpr| scans a number and finds a non-digit: it
-does a tacit multiplication.
-\begin{everbatim*}
-\xinttheexpr \numexpr 351+877\relax\numexpr 1000-125\relax\relax{} is the same
-as \xinttheexpr 1228*875\relax.
-\end{everbatim*}
-
-Control sequences however (such as |\parindent|) are picked up as a whole by
-|\xintexpr|, and the numbers they define cannot be extended extra digits, a
-syntax error is raised if the parser finds digits rather than a legal
-operation after such a control sequence.
-
-A token list variable must be prefixed by |\the|, it will not be unpacked
-automatically (the parser will actually try |\number|, and thus fail). Do not
-use |\the| but only |\number| with a dimen or skip, as the |\xintexpr| parser
-doesn't understand |pt| and its presence is a syntax error. To use a dimension
-expressed in terms of points or other \TeX{} recognized units, incorporate it in
-|\dimexpr...\relax|.
-
-Regarding how dimensional expressions are converted by \TeX{} into scaled points
-see also \autoref{sec:Dimensions}.
-
-\subsection{Catcodes and spaces}
-
-The main problems are caused by active characters, because \csbxint{expr} et
-al.\@ expand forward whatever comes from token stream; they apply |\string|
-only in a second step. For example the catcode of |&| from |&&| Boolean
-disjunction is not really important as long as it is not active, or comment,
-or escape...\@ or brace...\@ or ignored...\@ in brief, as long as it is reasonable,
-and in particular whether |@| is of catcode letter or other does not matter.
-
-It is always possible to insert manually the |\string| in the expression
-before a problematic (but reasonable) character catcode, or even to use
-|\detokenize| for a big chunk.
-
-\subsubsection{\csh{xintexprSafeCatcodes}}
-\label{xintexprSafeCatcodes}
-
-Some problems with active characters can be resolved on the fly by prefixing
-them by |\string| but some aspects of the parsing done by \csbxint{expr}
-involves delimited macros which need the comma, equality sign and closing
-parenthesis to have their standard catcodes.
-
-So \csbxint{exprSafeCatcodes} is provided as a utility to set in one go
-catcodes of many characters to \csbxint{expr}-safely compatible values. This
-is a non-expandable step as it changes catcodes.
-% This is used
-% internally by \csbxint{NewExpr} (restoring the catcodes on exit), hence it
-% does not have to be protected against active characters when used at
-% top-level.
-
-\csbxint{defvar}, \csbxint{deffunc}, et al., use it, and then they restore
-catcodes to the prior state via \csbxint{exprRestoreCatcodes}.
-
-% As \csbxint{NewExpr} and \csbxint{deffunc} and variants use internally some
-% |\scantokens|, they will (reasonably) succeed in sanitizing catcodes in the
-% expressions, even if all is from the replacement text of some macro whose
-% definition was done under some special catcode regime.
-
-% \csbxint{deffunc} is more lenient than \csbxint{defvar} regarding catcodes of
-% characters in expression bodies as it does some |\scantokens| which will reset
-% compatible catcodes.
-
-% Even if used in a context where catcodes are already set, \csbxint{deffunc},
-% \csbxint{defvar} and variants ignore completely the colon in |:=| so it can
-% have any (reasonable) catcode. Moreover it is optional.
-
-% The semi-colon in the syntax of \csbxint{Digits} is no real problem either
-% (cf. \csbxint{Digits} documentation).
-
-\subsubsection{\csh{xintexprRestoreCatcodes}}
-\label{xintexprRestoreCatcodes}
-
-Restores the catcodes to the state prevailing at the time of the last executed
-\csbxint{exprSafeCatcodes} (if located at the same \LaTeX\ environment or
-\TeX\ grouping level).
-
-Prior to |1.4k|, in a situation like the following:
-\begin{everbatim}
-\xintexprSafeCatcodes
-....stuff possibly changing catcodes
-\xintexprSafeCatcodes
-....stuff possibly changing catcodes
-\xintexprSafeCatcodes
-....stuff possibly changing catcodes
-\xintexprRestoreCatcodes
-\end{everbatim}
-On exit, the catcodes recovered their status as prior to the \emph{first}
-\csbxint{exprSafeCatcodes}. Since |1.4k|, they are set to what they were
-prior to the \emph{last} \csbxint{exprSafeCatcodes}, i.e. the mechanism is now
-similar to a ``last in, first out'' stack.
-
-Note that no global assignments are made so the behaviour can be modified
-by usage of \TeX\ groups or \LaTeX\ environments: e.g. if an
-\csbxint{exprSafeCatcodes} is issued inside a \LaTeX\ environment it does not
-have to be paired by \csbxint{exprRestoreCatcodes} explicitly, the catcode
-scope is limited by the environment.
-
-\bigskip
-
-Spaces inside an |\xinttheexpr...\relax| should mostly be
-innocuous (except inside macro arguments).
-
-|\xintexpr| and |\xinttheexpr| are for the most part agnostic regarding
-catcodes, % (unbraced) digits, binary operators, minus and plus signs as
-% prefixes, dot as decimal mark, parentheses, may be indifferently of catcode
-% letter or other or subscript or superscript, ..., except that they
-% should not be \emph{active}, as for example are |!?;:| with |babel-french|.%
-% %
-% \footnote{Furthermore, although \csbxint{expr} uses \csa{string}, it is
-% escape-char agnostic. It should work with any \csa{escapechar} setting
-% including -1.}
-but the characters
-% |+|, |-|, |*|, |/|, |^|, |!|, |&|, \verb+|+, |?|, |:|, |<|, |>|,
-%|=|, |(|, |)|, |"|, |[|, |]|, |;|,
-in the expression should not be «active» (except on purpose) as everything is
-expanded along the way, and |\xintexpr| will choke on typesetting related
-commands. One can use |\string| to prefix a problematic character.
-
-
-Digits, slash, square brackets, minus sign, in the output from an
-|\xinttheexpr| are all of catcode 12. For |\xintthefloatexpr| the `e' in the
-output has its standard catcode ``letter''.
-
-
-
-
-\subsection{Expandability, \csh{xintexpro}}
-
-As is the case with all other package macros |\xintexpr| \fexpan ds (in two
-steps) to its final (somewhat protected) result; and |\xinttheexpr| \fexpan ds
-(in two steps) to the chain of digits (and possibly minus sign |-|, decimal
-mark |.|, fraction slash |/|, scientific |e|, square brackets |[|, |]|)
-representing the result.
-
-The once expanded |\xintexpr| is |\romannumeral0\xintexpro|. is similarly
-|\xintiexpro| |\xintiiexpro| and |\xintfloatexpro|. For an example see
-\autoref{ssec:fibonacci}.
-
-An expression can only be legally finished by a |\relax| token, which
-will be absorbed.
-
-It is quite possible to nest expressions among themselves; for example, if one
-needs inside an |\xintiiexpr...\relax| to do some computations with fractions,
-rounding the final result to an integer, one just has to insert
-|\xintiexpr...\relax|. The functioning of the infix operators will not be in
-the least affected from the fact that the outer ``environment'' is the
-|\xintiiexpr| one.
-
-
-\subsection{\csh{xintDigits*}, \csh{xintSetDigits*}}
-\label{xintDigits*}
-\label{xintSetDigits*}
-
-These starred variants of \csbxint{Digits} and \csbxint{SetDigits} execute
-\csbxint{reloadxinttrig} and \csbxint{reloadxintlog}.
-
-\subsection{\csh{xintiexpr}, \csh{xinttheiexpr}}
-\label{xintiexpr}\label{xinttheiexpr}\label{thexintiexpr}
-
-Equivalent\etype{x} to doing |\xintexpr round(...)\relax| (more precisely,
-|round| is applied to each leaf item of the |ople| independently of its
-depth).
-
-Intermediate calculations are exact, only the final output gets
-rounded. Half integers are rounded towards $+\infty$ for positive
-numbers and towards $-\infty$ for negative ones.
-
-An optional parameter |D| within brackets, immediately after |\xintiexpr| is
-allowed: it instructs (for |D>0|) the expression to do its final rounding to
-the nearest value with that many digits after the decimal mark, i.e.\@
-|\xintiexpr [D] <expression>\relax| is equivalent (in case of a single
-expression) to |\xintexpr round(<expression>, D)\relax|.
-
-|\xintiexpr [0] ...| is the same as |\xintiexpr ...| and rounds to an integer.
-
-The case of negative |D| gives quantization to an integer multiple of
-\dtt{1e-D}.\NewWith{1.4a} This was modified at |1.4f| and the produced value
-is now the rounded quotient by \dtt{1e-D} (i.e. no trailing zeros nor
-scientific exponent in the output).
-
-If truncation rather than rounding is needed on can use |\xintexpr
-trunc(...)\relax| for truncation to an integer or |\xintexpr
-trunc(...,D)\relax| for quantization to an integer multiple or \dtt{1eD} (if
-|D>0|, for |D<0| the analog would be |trunc((...)/1e-D)|). But
-this works only for a single scalar value.
-
-
-\subsection{\csh{xintiiexpr}, \csh{xinttheiiexpr}}
-\label{xintiiexpr}\label{xinttheiiexpr}\label{thexintiiexpr}
-
-This variant\etype{x} does not know fractions. It deals almost only with long
-integers. Comma separated lists of expressions are allowed.
-
-\begin{framed}
- It maps |/| to the \emph{rounded} quotient. The operator
- |//| is, like in |\xintexpr...\relax|, mapped to \emph{truncated} division.
- The Euclidean quotient (which for positive operands is like the truncated
- quotient) was, prior to release |1.1|, associated to |/|. The function
- |quo(a,b)| can still be employed.
-\end{framed}
-
-The \csbxint{iiexpr}-essions use the `ii' macros for addition, subtraction,
-multiplication, power, square, sums, products, Euclidean quotient and
-remainder.
-
-The |round|, |trunc|, |floor|, |ceil| functions are still available, and are
-about the only places where fractions can be used, but |/| within, if not
-somehow hidden will be executed as integer rounded division. To avoid this one
-can wrap the input in \dtt{qfrac}: this means however that none of the normal
-expression parsing will be executed on the argument.
-
-To understand the illustrative examples, recall that |round| and |trunc| have
-a second (non negative) optional argument. In a normal \csbxint{expr}-essions,
-|round| and |trunc| are mapped to \csbxint{Round} and \csbxint{Trunc}, in
-\csbxint{iiexpr}-essions, they are mapped to \csbxint{iRound} and
-\csbxint{iTrunc}.
-
-
-\begin{everbatim*}
-\xinttheiiexpr 5/3, round(5/3,3), trunc(5/3,3), trunc(\xintDiv {5}{3},3),
-trunc(\xintRaw {5/3},3)\relax{} are problematic, but
-%
-\xinttheiiexpr 5/3, round(qfrac(5/3),3), trunc(qfrac(5/3),3), floor(qfrac(5/3)),
-ceil(qfrac(5/3))\relax{} work!
-\end{everbatim*}
-
-On the other hand decimal numbers and scientific numbers can be used directly
-as arguments to the |num|, |round|, or any function producing an integer.
-
-\begin{framed}
- Scientific numbers will be
- represented with as many zeroes as necessary, thus one does not want to
- insert \dtt{num(1e100000)} for example in an \csa{xintiiexpr}ession!
-\end{framed}
-
-%
-\begin{everbatim*}
-\xinttheiiexpr num(13.4567e3)+num(10000123e-3)\relax % should (num truncates) compute 13456+10000
-\end{everbatim*}
-%
-
-The |reduce| function is not available and will raise an error. The |frac|
-function also. The |sqrt| function is mapped to \csbxint{iiSqrt} which gives
-a truncated square root. The |sqrtr| function is mapped to \csbxint{iiSqrtR}
-which gives a rounded square root.
-
-One can use the Float macros if one is careful to use |num|, or |round|
-etc\dots on their output.
-
-\begin{everbatim*}
-\xinttheiiexpr \xintFloatSqrt [20]{2}, \xintFloatSqrt [20]{3}\relax % no operations
-
-\noindent The next example requires the |round|, and one could not put the |+| inside it:
-
-\xinttheiiexpr round(\xintFloatSqrt [20]{2},19)+round(\xintFloatSqrt [20]{3},19)\relax
-
-(the second argument of |round| and |trunc| tells how many digits from after the
-decimal mark one should keep.)
-\end{everbatim*}
-
-The whole point of \csbxint{iiexpr} is to gain some speed in
-\emph{integer-only} algorithms, and the above explanations related to how to
-nevertheless use fractions therein are a bit peripheral. We observed
-(2013/12/18) of the order of $30$\% speed gain when dealing with numbers with
-circa one hundred digits (1.2: this info may be obsolete).
-
-
-\subsection{\csh{xintboolexpr}, \csh{xinttheboolexpr}}
-\label{xintboolexpr}\label{xinttheboolexpr}\label{thexintboolexpr}
-
-Equivalent\etype{x} to doing |\xintexpr ...\relax| and returning $True$ if the
-result does not vanish, and $False$ if the result is zero. As |\xintexpr|, this
-can be used on comma separated lists of expressions, and even bracketed lists.
-\CHANGED{1.4}
-
-It can be customized, one only needs to modify the following:
-\begin{everbatim}
-\def\xintboolexprPrintOne#1{\xintiiifNotZero{#1}{True}{False}}%
-\end{everbatim}
-Not only are |True| and |False| usable in input, also |true| and |false| are
-pre-declared variables.
-
-Maybe obsolete:
-
-There is slight quirk in case it is used as a sub-expression: the boolean
-expression needs at least one logic operation else the value is not
-standardized to |1| or |0|, for example we get from
-\begin{everbatim*}
-\xinttheexpr \xintboolexpr 1.23\relax\relax\newline
-\end{everbatim*}which is to be compared with
-\begin{everbatim*}
-\xinttheboolexpr 1.23\relax
-\end{everbatim*}
-
-% A related issue existed with
-% |\xinttheexpr \xintiexpr 1.23\relax\relax|, which was fixed with |1.1|
-% release, and I decided back then not to add the needed overhead also to the
-% |\xintboolexpr| context, as one only needs to use |?(1.23)| for example or
-% involve the |1.23| in any logic operation like |1.23 'and' 3.45|, or involve
-% the |\xintboolexpr ..\relax | itself with any logical operation, contrarily to
-% the sub-|\xintiexpr| case where |\xinttheexpr 1+\xintiexpr 1.23\relax\relax|
-% did behave contrarily to expectations until |1.1|.
-
-
-\subsection{\csh{xintfloatexpr},
- \csh{xintthefloatexpr}}
-\label{xintfloatexpr}\label{xintthefloatexpr}\label{thexintfloatexpr}
-
-\csbxint{floatexpr}|...\relax|\etype{x} is exactly like |\xintexpr...\relax|
-but with the four binary operations and the power function are mapped to
-\csa{xintFloatAdd}, \csa{xintFloatSub}, \csa{xintFloatMul}, \csa{xintFloatDiv}
-and \csa{xintFloatPower}, respectively.\footnote{Since |1.2f| the \string^
- handles half-integer exponents, contrarily to \csa{xintFloatPower}.}
-
-The target precision for the computation is from the
-current setting of |\xintDigits|. Comma separated lists of expressions are
-allowed.
-
-An optional parameter within brackets is allowed:
-\begin{itemize}
-\item if positive it instructs the macro to round the result to that many
- digits of precision. It thus makes sense to employ it only if this parameter is
- less than the \csbxint{theDigits} precision.
-\item if negative it means to trim off that many digits (of course, in the
- sense of rounding
- the values to shorter mantissas). Don't use it to trim all digits (or more than all)!
-\end{itemize}
-
-Since |1.2f| all float operations first round their arguments; a parsed number
-is not rounded prior to its use as operand to such a float operation.
-
-|\thexintfloatexpr| is synonym to |\xintthefloatexpr|.
-
-|\xintDigits:=36\relax|\xintDigits:=36\relax
-%
-\leftedline{|\xintthefloatexpr
- (1/13+1/121)*(1/179-1/173)/(1/19-1/18)\relax|}
-%
-\leftedline{\dtt{\xintthefloatexpr
- (1/13+1/121)*(1/179-1/173)/(1/19-1/18)\relax}}
-% 0.00564487459334466559166166079096852897
-%
-\leftedline{|\xintthefloatexpr\xintexpr
- (1/13+1/121)*(1/179-1/173)/(1/19-1/18)\relax\relax|}
-%
-\leftedline{\dtt{\xintthefloatexpr\xintexpr
- (1/13+1/121)*(1/179-1/173)/(1/19-1/18)\relax\relax}}
-
-\xintDigits := 16;
-
-The latter is the rounding of the exact result. The former one has
-its last three digits wrong due to the cumulative effect of rounding errors
-in the intermediate computations, as compared to exact evaluations.
-
-
-
-
-I recall here from \autoref{ssec:floatingpoint} that with release |1.2f| the
-float macros for addition, subtraction, multiplication and division round
-their arguments first to |P| significant places with |P| the asked-for
-precision of the output; and similarly the power macros and the
-square root macro. This does not modify anything for computations with
-arguments having at most |P| significant places already.
-
-\subsection{\csh{xinteval}, \csh{xintieval}, \csh{xintiieval},
- \csh{xintfloateval}}
-\label{xinteval}\label{xintieval}\label{xintiieval}\label{xintfloateval}
-
-\csbxint{eval}\etype{x} is an \fexpan dable macro which is basically defined
-like this (this is obsolete since |1.4|):
-\begin{everbatim}
-\def\xinteval#1{\romannumeral-`0\xinttheexpr#1\relax}% THIS IS OLD DEFINITION
-\end{everbatim}
-thus expands in two steps.
-\begin{everbatim*}
-\xinteval{add(x^2, x = 100..110), add(x^3, x = 100..110)}
-\end{everbatim*}
-
-\csbxint{ieval}\etype{x} is similarly related to \csbxint{theiexpr}. Its
-optional argument may be located in the expected location for \LaTeX\ users
-since |1.4k|, but was long constrained to be inside the braces.
-\begin{everbatim*}
-\xintieval[7]{355/113} = \xintieval{[7]355/113}
-\end{everbatim*}
-
-If one defines a macro which will do something such as |\xintieval{#1}| it is
-recommended to code it as |\xintieval{\empty#1}| in case the |#1| will start
-with some |[|, which will end up confusing |\xintieval|.
-
-\csbxint{iieval}\etype{x} is similarly related to \csbxint{theiiexpr}.
-\begin{everbatim*}
-\xintiieval{add(x^2, x = 100..110), add(x^3, x = 100..110)}
-\end{everbatim*}
-
-\csbxint{floateval}\etype{x} is similarly related to
-\csbxint{thefloatexpr}. The same remarks as for |\xintieval| apply.
-\begin{everbatim*}
-\xintfloateval [7]{355/113} = \xintfloateval{[7] 355/113}
-\end{everbatim*}
-
-When negative, the optional argument tells how many digits to remove from the
-prevailing precision (\csbxint{theDigits}):
-\begin{everbatim*}
-\xintfloateval[-2]{355/113}=\xintfloateval{[-2]355/113} has \xinttheDigits\ minus 2 digits.
-\end{everbatim*}
-
-These macros are useful when one uses some extra wrapper doing some parsing of
-its input, like the |\num| macro of
-\href{http://ctan.org/pkg/siunitx}{siunitx}, which would choke on some of the
-syntax elements allowed inside \csb{xintexpr}|...\relax| (for example
-brackets).
-As shown in the above examples, these macros, like the underlying parsers
-accept arbitrarily many comma separated expressions.
-
-
-\subsection{Using an expression parser within another one}
-
-This was already illustrated before. In the following:
-\begin{everbatim*}
-\xintfloatexpr \xintexpr add(1/i, i=1234..1243)\relax ^100\relax
-\end{everbatim*},
-the inner sum is computed exactly. Then it will be rounded to |\xinttheDigits|
-significant digits, and then its power will be evaluated as a float operation.
-One should avoid the "|\xintthe|" parsers in inner positions as this induces
-digit by digit parsing of the inner computation result by the outer parser.
-Here is the same computation done with floats all the way:
-\begin{everbatim*}
-\xintfloatexpr add(1/i, i=1234..1243)^100\relax
-\end{everbatim*}
-
-Not surprisingly this differs from the previous one which was exact until
-raising to the |100|th power.
-
-The fact that the inner expression occurs inside a bigger one has nil
-influence on its behaviour. There is the limitation though that the outputs
-from \csbxint{expr} and \csbxint{floatexpr} can not be used directly in
-\csbxint{theiiexpr} integer-only parser. But one can do:
-\begin{everbatim*}
-\xintiiexpr round(\xintfloatexpr 3.14^10\relax)\relax % or trunc
-\end{everbatim*}
-
-
-\subsection{\csh{xintFracToSci}}\label{xintFracToSci}
-
-% je ne dois pas mettre \Ff car la macro n'utilise pas \XINT_infrac
-
-\csa{xintFracToSci}\NewWith{1.4} is for usage by \csbxint{eval} for
-formatting the output of numbers. It is not meant for direct use at
-user level as it currently expects input formatted in the so-called
-``relaxed raw format'' from \xintfracname, i.e. |A/B[N]|, with |/B| and
-|[N]| being optional parts, and |A|, |B|, |N| being integers, |B| always
-positive if present, and |A| having at most one leading minus sign (and
-no sign if it is zero, and no leading zeros).
-
-Here is what it does:\CHANGED{1.4e}
-\begin{itemize}[noitemsep,nosep]
-\item with input respectively: |A|, |A/B|, |A[N]|, |A/B[N]|
-\item it produces this output: |A|, |A/B| (if |B| is not |1|), |A| if
- |N=0|, |A/B| if |N=0| (no |B| if |1|), and if
- |N| is not zero, the output will be |AeN| written in scientific notation
- exactly like it would by \csbxint{PFloat} but without of course prior
- rounding to a given number of digits; in particular trailing zeros in the
- significand will be removed. Then this value in scientific notation
- (or decimal fixed point notation if the scientific exponent is in the
- range deciding so by \csbxint{PFloat}) will be attached to a trailing
- denominator part |/B| (if not equal to |1|).
-\end{itemize}
-Please note:
-\begin{itemize}
-\item there is no reduction of the fraction |A/B| to lowest terms,
-\item trailing zeros in |B| are not moved and incorporated
-into the final scientific exponent,
-\item no attempt is made to check is |B| is only products of |2|'s and
- |5|'s and thus could be integrated into some pure decimal notation for
- the numerator or at least its significand.
-\end{itemize}
-This has not changed since |1.4| but is to be considered
-\emph{unstable}. Actually even the description above was until |1.4k|
-only to be found in the commented source code... So everything is
-susceptible to change at some later release.
-
-Changes\CHANGED{1.4k} of \csbxint{PFloat} at |1.4k| have an impact here.
-In particular the zero value will give \dtt{0} whether the input was
-some |0|, |0e-5|, |0/3|, |0.00|, etc\dots, whereas at |1.4e| it would
-have been
-\dtt{0.0} for cases triggering some \csbxint{PFloat} subroutine. See
-\csbxint{PFloatZero} for reenacting the |1.4e| behaviour.
-
-\medskip
-
-The output routine of \csbxint{eval} uses
-\csbxint{exprPrintOne} whose current default definition is:
-\begin{everbatim}
-\def\xintexprPrintOne{\xintFracToSci}
-\end{everbatim}
-Any replacement should obey the following blueprint:
-\begin{itemize}[noitemsep]
-\item to\xtype{} be expandable, but not necessarily \fexpan dable,
-\item to accept on input |A|, |A/B|, |A[N]|, or |A/B[N]|, i.e. the
- ``relaxed raw''
- \xintfracname format.
-\end{itemize}
-% These constraints\CHANGED{1.4e} are much simplified at |1.4e| (and
-% \csa{xintFracToSci} has been internally simplified to only have to obey
-% the reduced constraints, which is a breaking change).
-
-% At |1.4e| the handling\CHANGED{1.4e} by this macro of input with a scientific
-% exponent part has changed. Rather than producing an integer mantissa it now
-% does as \csbxint{PFloat}, apart of course from its initial step of
-% float-rounding. It trims out trailing zeros of the input always.
-
-Attention, \csa{xintFracToSci} does not behave as do the public macros from
-\xintfracname:
-\begin{itemize}[noitemsep]
-\item it is expandable, but not \fexpan dable, so it can't appear as argument
- to \xintfracname macros without an explicit |\expanded{...}| wrapper
- (as they only \fexpan d their arguments).
-\item it expects input which after \fexpan sion will be in ``relaxed raw''
- \xintfracname format.\IMPORTANT{}
-\end{itemize}
-
-%\noindent\csa{xintFracToSciE} has been removed at |1.4e|, see \csbxint{PFloatE}.
-
-\subsection{\csh{xintFracToDecimal}}
-\label{xintFracToDecimal}
-
-% je ne dois pas mettre \Ff car la macro n'utilise pas \XINT_infrac
-% mais je pourrais utiliser \xtype
-It is a variant of \csbxint{FracToSci}\NewWith{1.4k}
-which differs from it in so far as it outputs a numerator using decimal
-notation, i.e. with as many zeros as are needed (and no more) and no
-scientific exponent. The denominator goes through ``as is'' except if
-it is |1|, then it is omitted.
-
-In other terms its behaviour is currently intermediate between
-\csbxint{DecToString} and \csbxint{DecToStringREZ}, as it does not
-remove trailing zeros of the denominator.
-
-It is not meant to be used directly as it shares the same limitations
-of \csbxint{FracToSci} for user level usage, but solely as a way to
-customize \csbxint{exprPrintOne}:
-\begin{everbatim}
-\def\xintexprPrintOne{\xintFracToDecimal}
-\end{everbatim}
-Consider its behaviour as \emph{unstable} and \emph{barely documented}.
-
-
-\subsection{The \csh{xintthecoords} macro}
-\label{xintthecoords}
-
-It converts (in two expansion steps) the expansion result of
-\csbxint{floatexpr} (or \csbxint{expr} or \csbxint{iiexpr}) into the |(a, b)
-(c, d) ...| format for list of coordinates as expected by the |TikZ|
-|coordinates| syntax.%
-\begin{everbatim*}
-\begin{figure}[htbp]
-\centering\begin{tikzpicture}[scale=10]\xintDigits:=8\relax
- \clip (-1.1,-.25) rectangle (.3,.25);
- \draw [blue] (-1.1,0)--(1,0);
- \draw [blue] (0,-1)--(0,+1);
- \draw [red] plot[smooth] coordinates {%
-%%% (\xintthecoords converts output of next expression into (x1, y1) (x2, y2)... format)
- \xintthecoords\xintfloatexpr
-%%% This syntax -1+[0..4]/2 is currenty dropped at xint 1.4
-%%% seq((x^2-1,mul(x-t,t=-1+[0..4]/2)),x=-1.2..[0.1]..+1.2)\relax
-%%% Use this:
- seq((x^2-1,mul(x-t,t=seq(-1+u/2, u=0..4))),x=-1.2..[0.1]..+1.2)
- \relax
- };
-\end{tikzpicture}
-\caption{Coordinates with \cs{xintthecoords}.}
-\end{figure}
-\end{everbatim*}
-
-% Notice: if x goes not take exactly value 1 or -1, the origin appears slightly
-% off the curve, not MY fault!!!
-It is currently undecided how \csa{xintthecoords} should handle bracketed
-data.\UNSTABLE{} Currently, it (or |TikZ|) will break it the input contains
-nested structures. One can use it with \func{flat} which removes all nesting.
-And in combination with \func{zip} it is easy to plot data given by some
-mechanism in separate
-lists of x- and y-coordinates (see an example in next section)
-
-\subsection{The \csh{xintthespaceseparated} macro}
-\label{xintthespaceseparated}
-
-It converts (in two expansion steps)\NewWith{1.4a} the expansion result of
-\csbxint{floatexpr} (or \csbxint{expr} or \csbxint{iiexpr}) into the space
-separated format suitable for usage with |PS-Tricks| |\listplot| macro.
-
-Here is for example some syntax (the replacement text of |\foo|, which is used
-here only to show that indeed complete expansion is attained in two steps)
-which can be used as argument to |\listplot|. Using 4 fractional decimal
-digits is sufficient when unit is the centimeter (it gives a fixed point
-precision of one micron, amply enough for plots...).
-\begin{everbatim*}
-\oodef\foo{%
-\xintthespaceseparated\xintiexpr[4]\xintfloatexpr seq((i, log10(i)), i=1..[0.5]..10)\relax\relax
-}\meaning\foo
-\end{everbatim*}
-
-Here we don't really need the inner |\xintfloatexpr...\relax| because the
-\func{log10} function works the same in the exact parser |\xintexpr| but in
-general this is recommended.
-
-It is currently undecided how \csa{xintthespaceseparated} should handle
-bracketed data.\UNSTABLE{} Currently, it (or |\listplot|) will break if the
-input contains nested structures. One can use it with \func{flat} which
-removes all nesting. And in combination with \func{zip} it is easy to plot
-data given by some mechanism in separate lists of x- and y-coordinates.
-
-\begin{everbatim*}
-% let's imagine we have something like this
-\def\Xcoordinates{1, 3, 5, 7, 9}
-\def\Ycoordinates{1, 9, 25, 49, 81}
-% then:
-|\xintthespaceseparated\xintexpr flat(zip([\Xcoordinates], [\Ycoordinates]))\relax|
-is suitable to use as argument to |\listplot|, as it expands to
-\xintthespaceseparated\xintexpr flat(zip([\Xcoordinates], [\Ycoordinates]))\relax
-\end{everbatim*}
-
-\subsection{\csh{xintifboolexpr}, \csh{xintifboolfloatexpr}, \csh{xintifbooliiexpr}}
-\label{xintifboolexpr}
-\label{xintifboolfloatexpr}
-\label{xintifbooliiexpr}
-
-\csh{xintifboolexpr}\marg{expr}\marg{YES}\marg{NO}\etype{xnn} does
-\csbxint{theexpr}<expr>|\relax| and then executes the \meta{YES} or the
-\meta{NO} branch depending on whether the outcome was non-zero or zero. Thus
-one can read \emph{if bool expr} as meaning \emph{if not zero}:
-\centeredline{if \meta{expr}-ession does not vanish do \meta{YES} else do
- \meta{NO}}
-
-The expression is not limited to using only comparison operators and Boolean
-logic (|<|, |>|, |==|, |!=|, |&&|, \verb+||+, \func{all}, \func{any},
-\func{xor}, \func{bool}, \func{togl}, ...), it can be the most general
-computation.
-
-\csh{xintifboolfloatexpr}\marg{expr}\marg{YES}\marg{NO}\etype{xnn} does
-\csbxint{thefloatexpr}\meta{expr}|\relax| and then executes the \meta{YES} or the
-\meta{NO} branch depending on whether the outcome was non zero or zero.
-
-\csh{xintifbooliiexpr}\marg{expr}\marg{YES}\marg{NO}\etype{xnn} does
-\csbxint{theiiexpr}\meta{expr}|\relax| and then executes the \meta{YES} or the
-\meta{NO} branch depending on whether the outcome was non zero or zero.
-
-The expression argument must be a single one, comma separated sub-expressions
-will cause low-level errors.
-
-\subsection{\csh{xintifsgnexpr}, \csh{xintifsgnfloatexpr}, \csh{xintifsgniiexpr}}
-\label{xintifsgnexpr}
-\label{xintifsgnfloatexpr}
-\label{xintifsgniiexpr}
-
-\csh{xintifsgnexpr}\marg{expr}\marg{<0}\marg{=0}\marg{>0}\etype{xnnn} evaluates
-the \csbxint{expr}ession and chooses the branch corresponding to its sign.
-
-\csh{xintifsgnfloatexpr}\marg{expr}\marg{<0}\marg{=0}\marg{>0}\etype{xnnn} evaluates
-the \csbxint{floatexpr}ession and chooses the branch corresponding to its sign.
-
-\csh{xintifsgniiexpr}\marg{expr}\marg{<0}\marg{=0}\marg{>0}\etype{xnnn} evaluates
-the \csbxint{iiexpr}ession and chooses the branch corresponding to its sign.
-
-The expression argument must be a single one, comma separated sub-expressions
-will cause low-level errors.
-
-\subsection{The \csh{xintNewExpr}, \csh{xintNewIIExpr},
- \csh{xintNewFloatExpr}, \csh{xintNewIExpr}, and \csh{xintNewBoolExpr}
- macros}
-\label{xintNewExpr}
-\label{xintNewIIExpr}
-\label{xintNewFloatExpr}
-\label{xintNewIExpr}
-\label{xintNewBoolExpr}
-
-\csbxint{NewExpr} macro is used as:
-%
-\leftedline{|\xintNewExpr{\myformula}[n]|\marg{stuff}, where}
-\begin{itemize}
-\item \meta{stuff} will be inserted inside |\xinttheexpr . . . \relax|,
-\item |n| is an integer between zero and nine, inclusive, which is the number
- of parameters of |\myformula|,
-\item the placeholders |#1|, |#2|, ..., |#n| are used inside \meta{stuff} in
- their usual r\^ole,%
-%
-\catcode`# 12
-\footnote{if \csa{xintNewExpr} is used inside a macro,
- the |#|'s must be doubled as usual.}
- \footnote{the |#|'s will in pratice have their usual
- catcode, but category code other |#|'s are accepted too.}
-\catcode`# 6
-%
-\item the |[n]| is \emph{mandatory}, even for |n=0|.%
-\footnote{there is some use for \csa{xintNewExpr}|[0]| compared to an
- \csa{edef} as \csa{xintNewExpr} has some built-in catcode protection.}
-\item the macro |\myformula| is defined without checking if it already exists,
- \LaTeX{} users might prefer to do first |\newcommand*\myformula {}| to get a
- reasonable error message in case |\myformula| already exists,
-\item the protection against active characters is done automatically (as long
- as the whole thing has not already been fetched as a macro argument and
- the catcodes correspondingly already frozen).
-\end{itemize}
-
-It (if it succeeds) will be a completely expandable macro entirely built-up using |\xintAdd|,
-|\xintSub|, |\xintMul|, |\xintDiv|, |\xintPow|, etc\dots as corresponds to the
-expression written with the infix operators.
-Macros created by |\xintNewExpr| can thus be nested.
-
-\begin{everbatim*}
- \xintNewFloatExpr \FA [2]{(#1+#2)^10}
- \xintNewFloatExpr \FB [2]{sqrt(#1*#2)}
-\begin{enumerate}[nosep]
- \item \FA {5}{5}
- \item \FB {30}{10}
- \item \FA {\FB {30}{10}}{\FB {40}{20}}
-\end{enumerate}
-\end{everbatim*}
-
-The documentation is much shortened here because \csbxint{NewExpr} and \csbxint{deffunc}
-are very much related one with the other.
-
-\begin{framed}
- ATTENTION!
-
- The original spirit of \csbxint{NewExpr} was to define a (possibly very big)
- macro using only \xintfracname, and this means in particular that it must be
- used only with arguments compatible with the \xintfracname input
- format.\IMPORTANTf
-
- Thus an |\xintexpr| declared variable has no chance to work, it must be
- wrapped explicitly in |\xinteval{...}| to be fetched as argument to a macro
- constructed by \csbxint{NewExpr}.
-\end{framed}
-
-They share essentially the same limitations.
-
-Notice though that \csbxint{NewFloatExpr} accepts and recognizes the optional
-argument |[Q]| of \csbxint{floatexpr}, contrarily to \csbxint{deffloatfunc}.
-Use an |\empty| in case the contents are not known in advance.
-
-
-Historical note: prior to |1.4|, \xintexprname used a |\csname..\endcsname|
-encapsulation technique which impacted the string pool memory. The
-\csbxint{NewExpr} was designed as a method to pre-parse the expression and
-produce one single, gigantic, nested usage of the relevant \xintfracname
-macros. This way, only those macros were expanded which had nil impact on the
-\TeX{} string pool.
-
-Later on it was found that this mechanism could be employed to define
-functions. Basically underneath |98%| of \csbxint{NewExpr} and
-\csbxint{deffunc} are using the same shared code.
-
-\xintDigits:= 16\relax
-
-\subsection{Analogies and differences of \csh{xintiiexpr} with \csh{numexpr}}
-
-\csbxint{iiexpr}|..\relax| is a parser of expressions knowing only (big)
-integers. There are, besides the enlarged range of allowable inputs, some
-important differences of syntax between |\numexpr| and |\xintiiexpr| and
-variants:
-\begin{itemize}
-\item Contrarily to |\numexpr|, the |\xintiiexpr| parser will stop expanding
- only after having encountered (and swallowed) a \emph{mandatory} |\relax|
- token.
-\item In particular, spaces between digits (and not only around infix
- operators or parentheses) do not stop |\xintiiexpr|, contrarily to the
- situation with |numexpr|: |\the\numexpr 7 + 3 5\relax| expands (in one
- step)%
-%
-\footnote {The |\numexpr| triggers continued expansion after the space
- following the |3| to check if some operator like |+| is upstream. But
- after having found the |5| it treats it as and end-marker.}
-%
- to \dtt{\detokenize\expandafter{\the\numexpr 7 + 3 5\relax}\unskip}, whereas
- |\xintthe\xintiiexpr 7 + 3 5\relax| expands (in two steps) to
- \dtt{\detokenize\expandafter\expandafter\expandafter {\xintthe\xintiiexpr 7
- + 3 5\relax}}.%
-%
-\footnote {Since |1.2l| one can also use the underscore |_| to separate digits
-for readability of long numbers.}
-
-\item Inside an |\edef|, an expression |\xintiiexpr...\relax| get fully
- evaluated, whereas |\numexpr| without |\the| or |\number| prefix would not,
- if not itself embedded in another |\the\numexpr| or similar context.
-\item (ctd.) The private format to which |\xintiiexpr...\relax| (et al.)
- evaluates may use |\xintthe| prefix to turn into explicit digits,
- (for example in arguments to some macros which expand their arguments). The |\the| \TeX\ primitive prefix would
- not work here.
-\item (ctd.) One can embed a |\numexpr...\relax| (with its |\relax|!) inside an
- |\xintiiexpr...\relax| without |\the| or |\number|, but the reverse situation
- requires usage of |\xintthe| or \csbxint{eval} user interface,
-\item |\numexpr -(1)\relax| is illegal. In contrast |\xintiiexpr -(1)\relax| is
- perfectly legal and gives the expected result (what else ?).
-\item |\numexpr 2\cnta\relax| is illegal (with |\cnta| a |\count| register.)
- In contrast
- |\xintiiexpr 2\cnta\relax| is perfectly legal and will do the tacit
- multiplication.
-\item |\the\numexpr| or |\number\numexpr| expands in one step, but
- |\xintthe\xintiiexpr| or |\xinttheiiexpr| needs two steps.
-\end{itemize}
+ \centeredline{|texdoc sourcexint.pdf|}
-\subsection{Chaining expressions for expandable algorithmics}
-\label{ssec:fibonacci}
-We will see in this section how to chain |\xintexpr|-essions with
-|\expandafter|'s, like it is possible with |\numexpr|. For this it is
-convenient to use |\romannumeral0\xintexpro| which is the once-expanded form of
-|\xintexpr|, as we can then chain using only one |\expandafter| each time.
-
-For example, here is the code employed
-on the title page to compute (expandably, of course!) the 1250th Fibonacci
-number:
-
-\begin{everbatim*}
-\catcode`_ 11
-\def\Fibonacci #1{% \Fibonacci{N} computes F(N) with F(0)=0, F(1)=1.
- \expandafter\Fibonacci_a\expandafter
- {\the\numexpr #1\expandafter}\expandafter
- {\romannumeral0\xintiiexpro 1\expandafter\relax\expandafter}\expandafter
- {\romannumeral0\xintiiexpro 1\expandafter\relax\expandafter}\expandafter
- {\romannumeral0\xintiiexpro 1\expandafter\relax\expandafter}\expandafter
- {\romannumeral0\xintiiexpro 0\relax}}
-%
-\def\Fibonacci_a #1{%
- \ifcase #1
- \expandafter\Fibonacci_end_i
- \or
- \expandafter\Fibonacci_end_ii
- \else
- \ifodd #1
- \expandafter\expandafter\expandafter\Fibonacci_b_ii
- \else
- \expandafter\expandafter\expandafter\Fibonacci_b_i
- \fi
- \fi {#1}%
-}% * signs are omitted from the next macros, tacit multiplications
-\def\Fibonacci_b_i #1#2#3{\expandafter\Fibonacci_a\expandafter
- {\the\numexpr #1/2\expandafter}\expandafter
- {\romannumeral0\xintiiexpro sqr(#2)+sqr(#3)\expandafter\relax\expandafter}\expandafter
- {\romannumeral0\xintiiexpro (2#2-#3)#3\relax}%
-}% end of Fibonacci_b_i
-\def\Fibonacci_b_ii #1#2#3#4#5{\expandafter\Fibonacci_a\expandafter
- {\the\numexpr (#1-1)/2\expandafter}\expandafter
- {\romannumeral0\xintiiexpro sqr(#2)+sqr(#3)\expandafter\relax\expandafter}\expandafter
- {\romannumeral0\xintiiexpro (2#2-#3)#3\expandafter\relax\expandafter}\expandafter
- {\romannumeral0\xintiiexpro #2#4+#3#5\expandafter\relax\expandafter}\expandafter
- {\romannumeral0\xintiiexpro #2#5+#3(#4-#5)\relax}%
-}% end of Fibonacci_b_ii
-% code as used on title page:
-%\def\Fibonacci_end_i #1#2#3#4#5{\xintthe#5}
-%\def\Fibonacci_end_ii #1#2#3#4#5{\xinttheiiexpr #2#5+#3(#4-#5)\relax}
-% new definitions:
-\def\Fibonacci_end_i #1#2#3#4#5{{#4}{#5}}% {F(N+1)}{F(N)} in \xintexpr format
-\def\Fibonacci_end_ii #1#2#3#4#5%
- {\expandafter
- {\romannumeral0\xintiiexpro #2#4+#3#5\expandafter\relax
- \expandafter}\expandafter
- {\romannumeral0\xintiiexpro #2#5+#3(#4-#5)\relax}}% idem.
-% \FibonacciN returns F(N) (in encapsulated format: needs \xintthe for printing)
-\def\FibonacciN {\expandafter\xint_secondoftwo\romannumeral-`0\Fibonacci }%
-\catcode`_ 8
-\end{everbatim*}
-
-
-The macro |\Fibonacci| produces not one specific value |F(N)| but a pair of
-successive values |{F(N)}{F(N+1)}| which can then serve as starting point of
-another routine devoted to compute a whole sequence |F(N), F(N+1),
-F(N+2),....|. Each of |F(N)| and |F(N+1)| is kept in the encapsulated internal
-\xintexprname format.
-
-|\FibonacciN| produces the single |F(N)|. It also keeps it in the private
-format; thus printing it will need the |\xintthe| prefix.
-
-\begingroup\footnotesize\sffamily\baselineskip 10pt
-Here a code snippet which
-checks the routine via a \string\message\ of the first $51$ Fibonacci
-numbers (this is not an efficient way to generate a sequence of such
-numbers, it is only for validating \csa{FibonacciN}).
-%
-\begin{everbatim}
-\def\Fibo #1.{\xintthe\FibonacciN {#1}}%
-\message{\xintiloop [0+1] \expandafter\Fibo\xintiloopindex.,
- \ifnum\xintiloopindex<49 \repeat \xintthe\FibonacciN{50}.}
-\end{everbatim}
-\endgroup
-
-The way we use |\expandafter|'s to chain successive |\xintiiexpro| evaluations
-is exactly analogous to what is possible with |\numexpr|. The various
-|\romannumeral0\xintiiexpro| could very well all have been |\xintiiexpr|'s but
-then we would have needed |\expandafter\expandafter\expandafter| each
-time.
-
-\begin{framed}
- There is a difference though: |\numexpr| does \emph{NOT} expand inside an
- |\edef|, and to force its expansion we must prefix it with |\the| or
- |\number| or |\romannumeral| or another |\numexpr| which is itself prefixed,
- etc\dots.
-
- But |\xintexpr|, |\xintiexpr|, ..., expand fully in an |\edef|, with the
- completely expanded
- result encapsulated in a private format.
-
- Using |\xintthe| as prefix is necessary to print the result (like |\the| or
- |\number| in the case of |\numexpr|), but it is not necessary to get the
- computation done (contrarily to the situation with |\numexpr|).
-\end{framed}
-
-
-Our |\Fibonacci| expands completely under \fexpan sion, so we can use
-\hyperref[fdef]{\ttfamily\char92fdef} rather than |\edef| in a situation such
-as
-%
-\leftedline {|\fdef \X {\FibonacciN {100}}|}
-%
-but it is usually about as efficient to employ |\edef|. And if we want
-%
-\leftedline{|\edef \Y {(\FibonacciN{100},\FibonacciN{200})}|,}
-%
-then |\edef| is necessary.
-
-Allright, so let's now give the code to generate |{F(N)}{F(N+1)}{F(N+2)}...|,
-using |\Fibonacci| for the first two and then using the standard recursion
-|F(N+2)=F(N+1)+F(N)|:
-
-\catcode`_ 11
-\def\FibonacciSeq #1#2{%#1=starting index, #2>#1=ending index
- \expandafter\Fibonacci_Seq\expandafter
- {\the\numexpr #1\expandafter}\expandafter{\the\numexpr #2-1}%
-}%
-\def\Fibonacci_Seq #1#2{%
- \expandafter\Fibonacci_Seq_loop\expandafter
- {\the\numexpr #1\expandafter}\romannumeral0\Fibonacci {#1}{#2}%
-}%
-\def\Fibonacci_Seq_loop #1#2#3#4{% standard Fibonacci recursion
- {#3}\unless\ifnum #1<#4 \Fibonacci_Seq_end\fi
- \expandafter\Fibonacci_Seq_loop\expandafter
- {\the\numexpr #1+1\expandafter}\expandafter
- {\romannumeral0\xintiiexpro #2+#3\relax}{#2}{#4}%
-}%
-\def\Fibonacci_Seq_end\fi\expandafter\Fibonacci_Seq_loop\expandafter
- #1\expandafter #2#3#4{\fi {#3}}%
-\catcode`_ 8
-
-\begingroup\footnotesize\baselineskip10pt
-\everb|@
-\catcode`_ 11
-\def\FibonacciSeq #1#2{%#1=starting index, #2>#1=ending index
- \expandafter\Fibonacci_Seq\expandafter
- {\the\numexpr #1\expandafter}\expandafter{\the\numexpr #2-1}%
-}%
-\def\Fibonacci_Seq #1#2{%
- \expandafter\Fibonacci_Seq_loop\expandafter
- {\the\numexpr #1\expandafter}\romannumeral0\Fibonacci {#1}{#2}%
-}%
-\def\Fibonacci_Seq_loop #1#2#3#4{% standard Fibonacci recursion
- {#3}\unless\ifnum #1<#4 \Fibonacci_Seq_end\fi
- \expandafter\Fibonacci_Seq_loop\expandafter
- {\the\numexpr #1+1\expandafter}\expandafter
- {\romannumeral0\xintiiexpro #2+#3\relax}{#2}{#4}%
-}%
-\def\Fibonacci_Seq_end\fi\expandafter\Fibonacci_Seq_loop\expandafter
- #1\expandafter #2#3#4{\fi {#3}}%
-\catcode`_ 8
-|
-\endgroup
-
-This |\FibonacciSeq| macro is
-completely expandable but it is not \fexpan dable.
-
-This is not a problem in the next example which uses \csbxint{For*} as the
-latter applies repeatedly full expansion to what comes next each time it
-fetches an item from its list argument. Thus \csbxint{For*} still manages to
-generate the list via iterated full expansion.
-
-
-\begin{figure*}[ht!]
- \phantomsection\label{fibonacci}
- \newcounter{myindex}
- \fdef\Fibxxx{\FibonacciN {30}}%
- \setcounter{myindex}{30}%
-\centeredline{\tabskip 1ex
-\vbox{\halign{\bfseries#.\hfil&#\hfil &\hfil #\cr
- \xintFor* #1 in {\FibonacciSeq {30}{59}}\do
- {\themyindex &\xintthe#1 &
- \xintiiRem{\xintthe#1}{\xintthe\Fibxxx}\stepcounter{myindex}\cr }}%
-}\vrule
-\vbox{\halign{\bfseries#.\hfil&#\hfil &\hfil #\cr
- \xintFor* #1 in {\FibonacciSeq {60}{89}}\do
- {\themyindex &\xintthe#1 &
- \xintiiRem{\xintthe#1}{\xintthe\Fibxxx}\stepcounter{myindex}\cr }}%
-}\vrule
-\vbox{\halign{\bfseries#.\hfil&#\hfil &\hfil #\cr
- \xintFor* #1 in {\FibonacciSeq {90}{119}}\do
- {\themyindex &\xintthe#1 &
- \xintiiRem{\xintthe#1}{\xintthe\Fibxxx}\stepcounter{myindex}\cr }}%
-}}%
-%
-\centeredline{Some Fibonacci numbers together with their residues modulo
- |F(30)|\dtt{=\xintthe\Fibxxx}}
-\end{figure*}
-
-\begingroup\footnotesize\baselineskip10pt
-\everb|@
-\newcounter{myindex}% not "index", which would overwrite theindex environment!
-% (many have probably been bitten by this trap)
-\tabskip 1ex
- \fdef\Fibxxx{\FibonacciN {30}}%
- \setcounter{myindex}{30}%
-\vbox{\halign{\bfseries#.\hfil&#\hfil &\hfil #\cr
- \xintFor* #1 in {\FibonacciSeq {30}{59}}\do
- {\themyindex &\xintthe#1 &
- \xintiiRem{\xintthe#1}{\xintthe\Fibxxx}\stepcounter{myindex}\cr }}%
-}\vrule
-\vbox{\halign{\bfseries#.\hfil&#\hfil &\hfil #\cr
- \xintFor* #1 in {\FibonacciSeq {60}{89}}\do
- {\themyindex &\xintthe#1 &
- \xintiiRem{\xintthe#1}{\xintthe\Fibxxx}\stepcounter{myindex}\cr }}%
-}\vrule
-\vbox{\halign{\bfseries#.\hfil&#\hfil &\hfil #\cr
- \xintFor* #1 in {\FibonacciSeq {90}{119}}\do
- {\themyindex &\xintthe#1 &
- \xintiiRem{\xintthe#1}{\xintthe\Fibxxx}\stepcounter{myindex}\cr }}%
-}%
-|
-\endgroup
-
-This produces the Fibonacci numbers from |F(30)| to |F(119)|, and
-computes also all the
-congruence classes modulo |F(30)|. The output has
-been put in a \hyperref[fibonacci]{float}, which appears
-\vpageref[above]{fibonacci}. I leave to the mathematically inclined
-readers the task to explain the visible patterns\dots |;-)|.
-
-\subsection{When expandability is too much}
-
-Let's use the macros of \autoref{ssec:fibonacci} related to Fibonacci numbers.
-Notice that the $47$th Fibonacci number is \dtt{\xintthe\FibonacciN {47}} thus
-already too big for \TeX{} and \eTeX{}.
-
-
-The |\FibonacciN| macro found in \autoref{ssec:fibonacci} is completely
-expandable, it is even \fexpan dable. We need a wrapper with |\xintthe|
-prefix
-\begin{everbatim*}
-\def\theFibonacciN{\xintthe\FibonacciN}
-\end{everbatim*}
-to print in the document or to use within |\message| (or \LaTeX\ |typeout|) to
-write to the log and terminal.
-
-\begingroup
- \def\A {1859} \def\B {1573}
- \edef\X {\theFibonacciN\A} \edef\Y {\theFibonacciN\B}
- \edef\GCDAB {\xintiiGCD\A\B}\edef\Z {\theFibonacciN\GCDAB}
- \edef\GCDXY{\xintiiGCD\X\Y}
-
- The |\xintthe| prefix also allows its use it as argument to the \xintname
- macros: for example if we are interested in knowing how many digits
- $F(1250)$ has, it suffices to issue |\xintLen {\theFibonacciN {1250}}|
- (which expands to \dtt{\xintLen {\theFibonacciN {1250}}}). Or if we want to
- check the formula $gcd(F(1859),F(1573))=F(gcd(1859,1573))=F(143)$, we only
- need%
-%
-\footnote{The
- \csa{xintiiGCD} macro is provided by both the \xintgcdname package (since
- |1.0|) and by the \xintname package (since |1.3d|).}
-%
-\begin{everbatim}
-$\xintiiGCD{\theFibonacciN{1859}}{\theFibonacciN{1573}}=%
- \theFibonacciN{\xintiiGCD{1859}{1573}}$
-\end{everbatim}
-%
-which produces:
-%
-\leftedline{$\dtt{\xintiiGCD{\X}{\Y}}=\dtt{\theFibonacciN{\GCDAB}}$}
-
-The |\theFibonacciN| macro expanded its |\xintiiGCD{1859}{1573}| argument via the
-services of |\numexpr|: this step allows only things obeying the \TeX{} bound,
-naturally! (but \dtt{F(\xintiiPow2{31}}) would be rather big anyhow...).
-
-This is very convenient but of course it repeats the complete evaluation each
-time it is done. In practice, it is often useful to store the result of such
-evaluations in macros. Any |\edef| will break expandability, but if the goal
-is at some point to print something to the |dvi| or |pdf| output, and not only
-to the |log| file, then expandability has to be broken one day or another!
-
-Hence, in practice, if we want to print in the document some computation
-results, we can proceed like this and avoid having to repeat identical
-evaluations:
-\begin{everbatim}
-\begingroup
- \def\A {1859} \def\B {1573}
- \edef\X {\theFibonacciN\A} \edef\Y {\theFibonacciN\B}
- \edef\GCDAB {\xintiiGCD\A\B}\edef\Z {\theFibonacciN\GCDAB}
- \edef\GCDXY{\xintiiGCD\X\Y}
-The identity $\gcd(F(\A),F(\B))=F(\gcd(\A,\B))$ can be checked via evaluation
-of both sides: $\gcd(F(\A),F(\B))=\gcd(\printnumber\X,\printnumber\Y)=
-\printnumber{\GCDXY} = F(\gcd(\A,\B)) = F(\GCDAB) =\printnumber\Z$.\par
- % some further computations involving \A, \B, \X, \Y
-\endgroup % closing the group removes assignments to \A, \B, ...
-% or choose longer names less susceptible to overwrite something.
-% Note: there is no LaTeX \newecommand which would be to \edef like \newcommand is to \def
-\end{everbatim}
-The identity $\gcd(F(\A),F(\B))=F(\gcd(\A,\B))$ can be checked via evaluation
-of both sides: $\gcd(F(\A),F(\B))=\gcd(\printnumber\X,\printnumber\Y)=
-\printnumber{\GCDXY} = F(\gcd(\A,\B)) = F(\GCDAB) =\printnumber\Z$.\par
-\endgroup
-
-One may legitimately ask the author: why expandability
-to such extremes, for things such as big fractions or floating point numbers
-(even continued fractions...) which anyhow can not be used directly within
-\TeX's primitives such as |\ifnum|? Why insist on a concept
-which is foreign to the vast majority of \TeX\ users and even programmers?
-
-I have no answer: it made definitely sense at the start of \xintname (see
-\autoref{ssec:origins}) and once started I could not stop.
-
-
-\subsection{Acknowledgements (2013/05/25)}
-
-I was greatly helped in my preparatory thinking, prior to producing such an
-expandable parser, by the commented source of the
-\href{https://ctan.org/pkg/l3kernel}{l3fp} package, specifically the
-|l3fp-parse.dtx| file (in the version of April-May 2013; I think there was in
-particular a text called ``roadmap'' which was helpful). Also the source of the
-|calc| package was instructive, despite the fact that here for |\xintexpr| the
-principles are necessarily different due to the aim of achieving expandability.
-
-\clearpage
-\expandafter\let\csname xintexprnameUp\endcsname\undefined
-\csname ExamplesnameUp\endcsname
-\section {More examples with \xinttoolsname or \xintexprname or both}
-\RaisedLabel{sec:examples}
-
-Note: \xintexprname.sty automatically loads \xinttoolsname.sty.
-
-The examples given here start to feel dated and are currently in need of some
-rewrite to better illustrate newer features of the package.
-
-
-\localtableofcontents
-
-\subsection{More examples with dummy variables}
-\label{ssec:moredummies}
-
-These examples were first added to this manual at the time of the |1.1|
-release (|2014/10/29|).
-
-\begin{everbatim*}
-Prime numbers are always cool
-\xinttheiiexpr seq((seq((subs((x/:m)?{(m*m>x)?{1}{0}}{-1},m=2n+1))
- ??{break(0)}{omit}{break(1)},n=1++))?{x}{omit},
- x=10001..[2]..10200)\relax
-\end{everbatim*}
-
-The syntax in this last example may look a bit involved (...\@ and it is so I
-admit). First |x/:m| computes |x modulo m| (this is the modulo with respect to
-floored division). The |(x)?{yes}{no}| construct checks if |x| (which
-\emph{must} be within parentheses) is true or false, i.e.\@ non zero or zero. It
-then executes either the |yes| or the |no| branch, the non chosen branch is
-\emph{not} evaluated. Thus if |m| divides |x| we are in the second (``false'')
-branch. This gives a |-1|. This |-1| is the argument to a |??| branch which is
-of the type |(y)??{y<0}{y=0}{y>0}|, thus here the |y<0|, i.e.\@, |break(0)| is
-chosen. This |0| is thus given to another |?| which consequently chooses
-|omit|, hence the number is not kept in the list. The numbers which survive
-are the prime numbers.
-
-\begin{everbatim*}
-The first Fibonacci number beyond |2^64|, |2^64|, and the index are respectively
-\xinttheiiexpr subs(iterr(0,1;(@1>N)?{break(@1,N,i)}{@1+@2},i=1++),N=2^64)\relax.
-\end{everbatim*}
-
-% A006877 In the `3x+1' problem, these values for the starting value set new
-% records for number of steps to reach 1. (Formerly M0748) 14 1, 2, 3, 6, 7,
-% 9, 18, 25, 27, 54, 73, 97, 129, 171, 231, 313, 327, 649, 703, 871, 1161,
-% 2223, 2463, 2919, 3711, 6171, 10971, 13255, 17647, 23529, 26623, 34239,
-% 35655, 52527, 77031, 106239, 142587, 156159, 216367, 230631, 410011, 511935,
-% 626331, 837799
-
-One more recursion:
-\begin{everbatim*}
-\def\syr #1{\xinttheiiexpr rseq(#1; (@<=1)?{break(i)}{odd(@)?{3@+1}{@//2}},i=0++)\relax}
-The 3x+1 problem: \syr{231}\par
-\end{everbatim*}
-
-OK, a final one:%
-\begin{everbatim*}
-\def\syrMax #1{\xintiiexpr iterr(#1,#1;even(i)?
- {(@2<=1)?{break(@1,i//2)}{odd(@2)?{3@2+1}{@2//2}}}
- {(@1>@2)?{@1}{@2}},i=0++)\relax }
-With initial value 1161, the maximal intermediate value and the number of steps
-needed to reach 1 are respectively \syrMax{1161}.\par
-\end{everbatim*}
-
-Look at the
- \hyperlink{BrentSalamin}{Brent-Salamin algorithm implementation} for a more
- interesting recursion.
-
-% \begin{everbatim*}
-% \newcommand\Factors [1]{\xinttheiiexpr
-% subs(seq((i/:3=1)?{omit}{[L][i]},i=0..len(L)-1),
-% L=rseq(#1;(p^2>[@][0])?{([@][0]>1)?{break(1,[@][0],1)}{abort}}
-% {(([@][0])/:p)?{omit}
-% {iter(([@][0])//p; (@/:p)?{break(@,p,e)}{@//p},e=1++)}},p=2++))\relax }
-% \Factors {41^4*59^2*29^3*13^5*17^8*29^2*59^4*37^6}
-% \end{everbatim*}
-
-% This might look a bit scary, I admit.%
-% %
-% \footnote{Look at the
-% \hyperlink{BrentSalamin}{Brent-Salamin algorithm implementation} for a much
-% saner example.}
-% %
-
-% \xintexprname has minimal tools and
-% is obstinate about doing everything expandably! We are hampered by absence of a
-% notion of ``nuple''. The algorithm divides |N| by |2| until no more possible,
-% then by |3|, then by |4| (which is silly), then by |5|, then by |6| (silly
-% again), \dots.
-
-% The variable |L=rseq(#1;...)| expands, if one follows the steps, to a comma
-% separated list starting with the initial (evaluated) |N=#1| and then
-% pseudo-triplets where the first item is |N| trimmed of small primes, the
-% second item is the last prime divisor found, and the third item is its
-% exponent in original |N|.
-
-% The algorithm needs to keep handy the last computed quotient by prime powers,
-% hence all of them, but at the very end it will be cleaner to get rid of them
-% (this corresponds to the first line in the code above). This is achieved in a
-% cumbersome inefficient way; indeed each item extraction |[L][i]| is costly: it
-% is not like accessing an array stored in memory, due to expandability, nothing
-% can be stored in memory! Nevertheless, this step could be done here in a far
-% less inefficient manner if there was a variant of |seq| which, in the spirit
-% of \csbxint{iloopindex}, would know how many steps it had been through so far.
-% This is a feature to be added to |\xintexpr|! (as well as a |++| construct
-% allowing a non unit step).
-
-% Notice that in |iter(([@][0])//p;| the |@| refers to the previous triplet (or
-% in the first step to |N|), but the latter |@| showing up in |(@/:p)?| refers
-% to the previous value computed by |iter|.
-
-% \begin{snugframed}
-% Parentheses are essential in |..([y][0])| else the parser will see |..[| and
-% end up in ultimate confusion, and also in |([@][0])/:p| else the parser will
-% see the itemwise operator |]/| on lists and again be very confused (I could
-% implement a |]/:| on lists, but in this situation this would also be very
-% confusing to the parser.)
-% \end{snugframed}
-
-% See \autoref{ssec:factorize} for a routine |\Factorize| written directly with
-% \xintname macros. Last time I checked |\Factors| was about seven times slower
-% than |\Factorize| in test cases such as
-% |16246355912554185673266068721806243461403654781833| and others. Among the
-% various things explaining the speed difference, there is fact that the
-% |\Factorize| algorithm step by increments of two, not one, and also it divides
-% only once, obtaining quotient and remainder in one go. These two things
-% already make for a speed-up factor of about four. Thus, |\Factors| is not
-% completely inefficient in comparison, and was quite easier to come up with
-% than |\Factorize|.
-
-\subsection{Completely expandable prime test}
-\label{ssec:primesI}
-
-Let us now construct a completely expandable macro which returns $1$ if its
-given input is prime and $0$ if not:
-\everb|@
-\def\remainder #1#2{\the\numexpr #1-(#1/#2)*#2\relax }
-\def\IsPrime #1%
- {\xintANDof {\xintApply {\remainder {#1}}{\xintSeq {2}{\xintiiSqrt{#1}}}}}
-|
-
-This uses \csbxint{iiSqrt} and assumes its input is at least $5$. Rather than
-\xintname's own \csbxint{iiRem} we used a quicker |\numexpr| expression as we
-are dealing with short integers. Also we used \csbxint{ANDof} which will
-return $1$ only if all the items are non-zero. The macro is a bit
-silly with an even input, ok, let's enhance it to detect an even input:
-\everb|@
-\def\IsPrime #1%
- {\xintiiifOdd {#1}
- {\xintANDof % odd case
- {\xintApply {\remainder {#1}}
- {\xintSeq [2]{3}{\xintiiSqrt{#1}}}%
- }%
- }
- {\xintifEq {#1}{2}{1}{0}}%
- }
-|
-
-We used the \xintname expandable tests (on big integers or fractions)
-in order for |\IsPrime| to be \fexpan dable.
-
-Our integers are short, but without |\expandafter|'s with
-|\@firstoftwo|, % @ n'est plus actif dans le dtx 1.1 !
-or some other related techniques,
-direct use of |\ifnum..\fi| tests is dangerous. So to make the macro more
-efficient we are going to use the expandable tests provided by the package
-\href{http://ctan.org/pkg/etoolbox}{etoolbox}%
-%
-\footnote{\url{http://ctan.org/pkg/etoolbox}}.
-%
-The macro becomes:
-%
-\everb|@
-\def\IsPrime #1%
- {\ifnumodd {#1}
- {\xintANDof % odd case
- {\xintApply {\remainder {#1}}{\xintSeq [2]{3}{\xintiiSqrt{#1}}}}}
- {\ifnumequal {#1}{2}{1}{0}}}
-|
-
-In the odd case however we have to assume the integer is at least $7$, as
-|\xintSeq| generates an empty list if |#1=3| or |5|, and |\xintANDof| returns
-$1$ when supplied an empty list. Let us ease up a bit |\xintANDof|'s work by
-letting it work on only $0$'s and $1$'s. We could use:
-%
-\everb|@
-\def\IsNotDivisibleBy #1#2%
- {\ifnum\numexpr #1-(#1/#2)*#2=0 \expandafter 0\else \expandafter1\fi}
-|
-\noindent
-where the |\expandafter|'s are crucial for this macro to be \fexpan dable and
-hence work within the applied \csbxint{ANDof}. Anyhow, now that we have loaded
-\href{http://ctan.org/pkg/etoolbox}{etoolbox}, we might as well use:
-%
-\everb|@
-\newcommand{\IsNotDivisibleBy}[2]{\ifnumequal{#1-(#1/#2)*#2}{0}{0}{1}}
-|
-\noindent
-Let us enhance our prime macro to work also on the small primes:
-\everb|@
-\newcommand{\IsPrime}[1] % returns 1 if #1 is prime, and 0 if not
- {\ifnumodd {#1}
- {\ifnumless {#1}{8}
- {\ifnumequal{#1}{1}{0}{1}}% 3,5,7 are primes
- {\xintANDof
- {\xintApply
- { \IsNotDivisibleBy {#1}}{\xintSeq [2]{3}{\xintiiSqrt{#1}}}}%
- }}% END OF THE ODD BRANCH
- {\ifnumequal {#1}{2}{1}{0}}% EVEN BRANCH
-}
-|
-
-The input is still assumed positive. There is a deliberate blank before
-\csa{IsNotDivisibleBy} to use this feature of \csbxint{Apply}: a space stops the
-expansion of the applied macro (and disappears). This expansion will be done by
-\csbxint{ANDof}, which has been designed to skip everything as soon as it finds
-a false (i.e.\@ zero) input. This way, the efficiency is considerably improved.
-
-We did generate via the \csbxint{Seq} too many potential divisors though. Later
-sections give two variants: one with \csbxint{iloop} (\autoref{ssec:primesII})
-which is still expandable and another one (\autoref{ssec:primesIII}) which is a
-close variant of the |\IsPrime| code above but with the \csbxint{For} loop, thus
-breaking expandability. The \hyperref[ssec:primesII]{xintiloop variant} does not
-first evaluate the integer square root, the \hyperref[ssec:primesIII]{xintFor
- variant} still does. I did not compare their efficiencies.
-
-
-Let us construct with this expandable primality test a table of the prime
-numbers up to $1000$. We need to count how many we have in order to know how
-many tab stops one shoud add in the last row.%
-%
-\footnote{although a tabular row may have less tabs than in the
- preamble, there is a problem with the \char`\|\space\space vertical
- rule, if one does that.}
-%
-There is some subtlety for this
-last row. Turns out to be better to insert a |\\| only when we know for sure we
-are starting a new row; this is how we have designed the |\OneCell| macro. And
-for the last row, there are many ways, we use again |\xintApplyUnbraced| but
-with a macro which gobbles its argument and replaces it with a tabulation
-character. The \csbxint{For*} macro would be more elegant here.
-%
-\everb?@
-\newcounter{primecount}
-\newcounter{cellcount}
-\newcommand{\NbOfColumns}{13}
-\newcommand{\OneCell}[1]{%
- \ifnumequal{\IsPrime{#1}}{1}
- {\stepcounter{primecount}
- \ifnumequal{\value{cellcount}}{\NbOfColumns}
- {\\\setcounter{cellcount}{1}#1}
- {&\stepcounter{cellcount}#1}%
- } % was prime
- {}% not a prime, nothing to do
-}
-\newcommand{\OneTab}[1]{&}
-\begin{tabular}{|*{\NbOfColumns}{r}|}
-\hline
-2 \setcounter{cellcount}{1}\setcounter{primecount}{1}%
- \xintApplyUnbraced \OneCell {\xintSeq [2]{3}{999}}%
- \xintApplyUnbraced \OneTab
- {\xintSeq [1]{1}{\the\numexpr\NbOfColumns-\value{cellcount}\relax}}%
- \\
-\hline
-\end{tabular}
-There are \arabic{primecount} prime numbers up to 1000.
-?
-
-The table has been put in \hyperref[primesupto1000]{float} which appears
-\vpageref{primesupto1000}.
-We had to be careful to use in the last row \csbxint{Seq} with its optional
-argument |[1]| so as to not generate a decreasing sequence from |1| to |0|, but
-really an empty sequence in case the row turns out to already have all its
-cells (which doesn't happen here but would with a number of columns dividing
-$168$).
-%
-\newcommand{\IsNotDivisibleBy}[2]{\ifnumequal{#1-(#1/#2)*#2}{0}{0}{1}}
-
-\newcommand{\IsPrime}[1]
- {\ifnumodd {#1}
- {\ifnumless {#1}{8}
- {\ifnumequal{#1}{1}{0}{1}}% 3,5,7 are primes
- {\xintANDof
- {\xintApply
- { \IsNotDivisibleBy {#1}}{\xintSeq [2]{3}{\xintiiSqrt{#1}}}}%
- }}% END OF THE ODD BRANCH
- {\ifnumequal {#1}{2}{1}{0}}% EVEN BRANCH
-}
-
-\newcounter{primecount}
-\newcounter{cellcount}
-\newcommand{\NbOfColumns}{13}
-\newcommand{\OneCell}[1]
- {\ifnumequal{\IsPrime{#1}}{1}
- {\stepcounter{primecount}
- \ifnumequal{\value{cellcount}}{\NbOfColumns}
- {\\\setcounter{cellcount}{1}#1}
- {&\stepcounter{cellcount}#1}%
- } % was prime
- {}% not a prime nothing to do
-}
-\newcommand{\OneTab}[1]{&}
-\begin{figure*}[ht!]
- \centering
- \phantomsection\label{primesupto1000}
- \begin{tabular}{|*{\NbOfColumns}{r}|}
- \hline
- 2\setcounter{cellcount}{1}\setcounter{primecount}{1}%
- \xintApplyUnbraced \OneCell {\xintSeq [2]{3}{999}}%
- \xintApplyUnbraced \OneTab
- {\xintSeq [1]{1}{\the\numexpr\NbOfColumns-\value{cellcount}\relax}}%
- \\
- \hline
- \end{tabular}
-\smallskip
-\centeredline{There are \arabic{primecount} prime numbers up to 1000.}
-\end{figure*}
-
-\subsection{Another completely expandable prime test}
-\label{ssec:primesII}
-
-The |\IsPrime| macro from \autoref{ssec:primesI} checked expandably if a (short)
-integer was prime, here is a partial rewrite using \csbxint{iloop}. We use the
-|etoolbox| expandable conditionals for convenience, but not everywhere as
-|\xintiloopindex| can not be evaluated while being braced. This is also the
-reason why |\xintbreakiloopanddo| is delimited, and the next macro
-|\SmallestFactor| which returns the smallest prime factor examplifies that. One
-could write more efficient completely expandable routines, the aim here was only
-to illustrate use of the general purpose \csbxint{iloop}. A little table giving
-the first values of |\SmallestFactor| follows, its coding uses \csbxint{For},
-which is described later; none of this uses count registers.
-%
-
-
-\begin{everbatim*}
-\let\IsPrime\undefined \let\SmallestFactor\undefined % clean up possible previous mess
-\newcommand{\IsPrime}[1] % returns 1 if #1 is prime, and 0 if not
- {\ifnumodd {#1}
- {\ifnumless {#1}{8}
- {\ifnumequal{#1}{1}{0}{1}}% 3,5,7 are primes
- {\if
- \xintiloop [3+2]
- \ifnum#1<\numexpr\xintiloopindex*\xintiloopindex\relax
- \expandafter\xintbreakiloopanddo\expandafter1\expandafter.%
- \fi
- \ifnum#1=\numexpr (#1/\xintiloopindex)*\xintiloopindex\relax
- \else
- \repeat 00\expandafter0\else\expandafter1\fi
- }%
- }% END OF THE ODD BRANCH
- {\ifnumequal {#1}{2}{1}{0}}% EVEN BRANCH
-}%
-\catcode`_ 11
-\newcommand{\SmallestFactor}[1] % returns the smallest prime factor of #1>1
- {\ifnumodd {#1}
- {\ifnumless {#1}{8}
- {#1}% 3,5,7 are primes
- {\xintiloop [3+2]
- \ifnum#1<\numexpr\xintiloopindex*\xintiloopindex\relax
- \xint_afterfi{\xintbreakiloopanddo#1.}%
- \fi
- \ifnum#1=\numexpr (#1/\xintiloopindex)*\xintiloopindex\relax
- \xint_afterfi{\expandafter\xintbreakiloopanddo\xintiloopindex.}%
- \fi
- \iftrue\repeat
- }%
- }% END OF THE ODD BRANCH
- {2}% EVEN BRANCH
-}%
-\catcode`_ 8
-{\centering
- \begin{tabular}{|c|*{10}c|}
- \hline
- \xintFor #1 in {0,1,2,3,4,5,6,7,8,9}\do {&\bfseries #1}\\
- \hline
- \bfseries 0&--&--&2&3&2&5&2&7&2&3\\
- \xintFor #1 in {1,2,3,4,5,6,7,8,9}\do
- {\bfseries #1%
- \xintFor #2 in {0,1,2,3,4,5,6,7,8,9}\do
- {&\SmallestFactor{#1#2}}\\}%
- \hline
- \end{tabular}\par
-}
-\end{everbatim*}
-
-\subsection{Miller-Rabin Pseudo-Primality expandably}
-\label{ssec:PrimesIV}
-
-
-% At the time of writing, the code at the link above is still the version from
-% April 2016 and it needed some hacks to get recursive (pseudo)-functions
-% defined. Since |1.2h| of |2016/11/20| there is \csbxint{NewFunction} which
-% allows us here to avoid such internal hacking.
-
-% And since |1.3| of |2018/03/01|, it is possible to use \csbxint{defiifunc}
-% also for recursive definitions, so we use it here, but we can benefit from it
-% only for modular exponentiation as the rest of the code uses |iter| or |break|
-% statements which are not yet compatible with \csbxint{defiifunc}.
-
-The |isPseudoPrime(n)| is usable in \csbxint{iiexpr}-essions and establishes
-if its (positive) argument is a Miller-Rabin PseudoPrime to the bases $2, 3,
-5, 7, 11, 13, 17$. If this is true and $n<341550071728321$ (which has 15
-digits) then $n$ really is a prime number.
-
-Similarly $n=3825123056546413051$ (19 digits) is the smallest composite number
-which is a strong pseudo prime for bases $2, 3, 5, 7, 11, 13, 17, 19$ and
-$23$. It is easy to extend the code below to include these additional tests
-(we could make the list of tested bases an argument too, now that I think
-about it.)
-
-For more information see
- \centeredline{\url{https://en.wikipedia.org/wiki/Miller%E2%80%93Rabin_primality_test#Deterministic_variants_of_the_test}}
- and
-\centeredline{\url{http://primes.utm.edu/prove/prove2_3.html}}
-
-In particular, according to \textsc{Jaeschke} \emph{On strong pseudoprimes to
- several bases,} Math. Comp., 61 (1993) 915-926, if $n < 4,759,123,141$ it is
-enough to establish Rabin-Miller pseudo-primality to bases $a = 2, 7, 61$ to
-prove that $n$ is prime. This range is enough for \TeX\ numbers and we could
-then write a very fast expandable primality test for such numbers using only
-|\numexpr|. Left as an exercise\dots
-
-\begin{everbatim*}
-% I -------------------------------- Modular Exponentiation
-% Computes x^m modulo n (with m non negative).
-% We will always use it with 1 < x < n
-%
-% With xint 1.4 we should use ? and ?? (although in the case at hand ifsgn()
-% and if() would be ok but I should not say that).
-%
-\xintdefiifunc powmod_a(x, m, n) :=
- isone(m)?
- % m=1, return x modulo n
- { x /: n }
- % m > 1 test if odd or even and do recursive call
- { odd(m)? { x*sqr(powmod_a(x, m//2, n)) /: n }
- { sqr(powmod_a(x, m//2, n)) /: n }
- }
- ;
-\xintdefiifunc powmod(x, m, n) := (m)?{powmod_a(x, m, n)}{1};
-
-%% Syntax used before xint 1.4:
-% \xintdefiifunc powmod_a(x, m, n) :=
-% ifone(m,
-% % m=1, return x modulo n
-% x /: n,
-% % m > 1 test if odd or even and do recursive call
-% if(odd(m), (x*sqr(powmod_a(x, m//2, n))) /: n,
-% sqr(powmod_a(x, m//2, n)) /: n
-% )
-% );
-% \xintdefiifunc powmod(x, m, n) := if(m, powmod_a(x, m, n), 1);
-
-% II ------------------------------ Miller-Rabin compositeness witness
-
-% n=2^k m + 1 with m odd and k at least 1
-
-% Choose 1<x<n.
-% compute y=x^m modulo n
-% if equals 1 we can't say anything
-% if equals n-1 we can't say anything
-% else put j=1, and
-% compute repeatedly the square, incrementing j by 1 each time,
-% thus always we have y^{2^{j-1}}
-% -> if at some point n-1 mod n found, we can't say anything and break out
-% -> if however we never find n-1 mod n before reaching
-% z=y^{2^{k-1}} with j=k
-% we then have z^2=x^{n-1}.
- % Suppose z is not -1 mod n. If z^2 is 1 mod n, then n can be prime only if
- % z is 1 mod n, and we can go back up, until initial y, and we have already
- % excluded y=1. Thus if z is not -1 mod n and z^2 is 1 then n is not prime.
- % But if z^2 is not 1, then n is not prime by Fermat. Hence (z not -1 mod n)
- % implies (n is composite). (Miller test)
-
-% let's use again xintexpr indecipherable (except to author) syntax. Of course
-% doing it with macros only would be faster.
-
-% Here \xintdefiifunc is not usable because not compatible with iter, break, ...
-% but \xintNewFunction comes to the rescue.
-
-\xintNewFunction{isCompositeWitness}[4]{% x=#1, n=#2, m=#3, k=#4
- subs((y==1)?{0}
- {iter(y;(j==#4)?{break(!(@==#2-1))}
- {(@==#2-1)?{break(0)}{sqr(@)/:#2}},j=1++)}
- ,y=powmod(#1,#3,#2))}
-
-% added note (2018/03/07) it is possible in the above that m=#3 is never
-% zero, so we should rather call powmod_a for a small gain, but I don't
-% have time to re-read the code comments and settle this.
-
-% III ------------------------------------- Strong Pseudo Primes
-
-% cf
-% http://oeis.org/A014233
-% <http://mathworld.wolfram.com/Rabin-MillerStrongPseudoprimeTest.html>
-% <http://mathworld.wolfram.com/StrongPseudoprime.html>
-
-% check if positive integer <49 si a prime.
-% 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47
-\def\IsVerySmallPrime #1%
- {\ifnum#1=1 \xintdothis0\fi
- \ifnum#1=2 \xintdothis1\fi
- \ifnum#1=3 \xintdothis1\fi
- \ifnum#1=5 \xintdothis1\fi
- \ifnum#1=\numexpr (#1/2)*2\relax\xintdothis0\fi
- \ifnum#1=\numexpr (#1/3)*3\relax\xintdothis0\fi
- \ifnum#1=\numexpr (#1/5)*5\relax\xintdothis0\fi
- \xintorthat 1}
-
-\xintNewFunction{isPseudoPrime}[1]{% n = #1
- (#1<49)?% use ? syntax to evaluate only what is needed
-% prior to 1.4 we had \xintthe#1 here but the actual tokens represented
-% by this #1 when isPseudoPrime() function expands have changed and
-% the correct way is now \xintiieval{#1} to hand over explicit digits to
-% the \IsVerySmallPrime macro.
- {\IsVerySmallPrime{\xintiieval{#1}}}
- {(even(#1))?
- {0}
- {subs(%
- % L expands to two values m, k hence isCompositeWitness does get
- % its four variables x, n, m, k
- isCompositeWitness(2, #1, L)?
- {0}%
- {isCompositeWitness(3, #1, L)?
- {0}%
- {isCompositeWitness(5, #1, L)?
- {0}%
- {isCompositeWitness(7, #1, L)?
- {0}%
-% above enough for N<3215031751 hence all TeX numbers
- {isCompositeWitness(11, #1, L)?
- {0}%
-% above enough for N<2152302898747, hence all 12-digits numbers
- {isCompositeWitness(13, #1, L)?
- {0}%
-% above enough for N<3474749660383
- {isCompositeWitness(17, #1, L)?
- {0}%
-% above enough for N<341550071728321
- {1}%
- }% not needed to comment-out end of lines spaces inside
- }% \xintexpr but this is too much of a habit for me with TeX!
- }% I left some after the ? characters.
- }%
- }%
- }% this computes (m, k) such that n = 2^k m + 1, m odd, k>=1
- , L=iter(#1//2;(even(@))?{@//2}{break(@,k)},k=1++))%
- }%
- }%
-}
-
-% if needed:
-%\def\IsPseudoPrime #1{\xinttheiiexpr isPseudoPrime(#1)\relax}
-
-\noindent The smallest prime number at least equal to 3141592653589 is
-\xintiiexpr
- seq(isPseudoPrime(3141592653589+n)?
- {break(3141592653589+n)}{omit}, n=0++)\relax.
-% we could not use 3141592653589++ syntax because it works only with TeX numbers
-\par
-\end{everbatim*}
-
-
-
-
-
-\subsection{A table of factorizations}
-\label{ssec:factorizationtable}
-
-As one more example with \csbxint{iloop} let us use an alignment to display the
-factorization of some numbers. The loop will actually only play a minor r\^ole
-here, just handling the row index, the row contents being almost entirely
-produced via a macro |\factorize|. The factorizing macro does not use
-|\xintiloop| as it didn't appear to be the convenient tool. As |\factorize| will
-have to be used on |\xintiloopindex|, it has been defined as a delimited macro.
-
-To spare some fractions of a second in the compilation time of this document
-(which has many many other things to do), \number"7FFFFFED{} and
-\number"7FFFFFFF, which turn out to be prime numbers, are not given to
-|factorize| but just typeset directly; this illustrates use of
-\csbxint{iloopskiptonext}.
-
-The code next generates a \hyperref[floatfactorize]{table} which has
-been made into a float appearing \vpageref{floatfactorize}. Here is now
-the code for factorization; the conditionals use the package provided
-|\xint_firstoftwo| and |\xint_secondoftwo|, one could have employed
-rather \LaTeX{}'s own |\@firstoftwo| and |\@secondoftwo|, or, simpler
-still in \LaTeX{} context, the |\ifnumequal|, |\ifnumless| \dots,
-utilities from the package |etoolbox| which do exactly that under the
-hood. Only \TeX{} acceptable numbers are treated here, but it would be
-easy to make a translation and use the \xintname macros, thus extending
-the scope to big numbers; naturally up to a cost in speed.
-
-The reason for some strange looking expressions is to avoid arithmetic overflow.
-
-\begin{everbatim*}
-\catcode`_ 11
-\def\abortfactorize #1\xint_secondoftwo\fi #2#3{\fi}
-
-\def\factorize #1.{\ifnum#1=1 \abortfactorize\fi
- \ifnum\numexpr #1-2=\numexpr ((#1/2)-1)*2\relax
- \expandafter\xint_firstoftwo
- \else\expandafter\xint_secondoftwo
- \fi
- {2&\expandafter\factorize\the\numexpr#1/2.}%
- {\factorize_b #1.3.}}%
-
-\def\factorize_b #1.#2.{\ifnum#1=1 \abortfactorize\fi
- \ifnum\numexpr #1-(#2-1)*#2<#2
- #1\abortfactorize
- \fi
- \ifnum \numexpr #1-#2=\numexpr ((#1/#2)-1)*#2\relax
- \expandafter\xint_firstoftwo
- \else\expandafter\xint_secondoftwo
- \fi
- {#2&\expandafter\factorize_b\the\numexpr#1/#2.#2.}%
- {\expandafter\factorize_b\the\numexpr #1\expandafter.%
- \the\numexpr #2+2.}}%
-\catcode`_ 8
-\begin{figure*}[ht!]
-\centering\phantomsection\label{floatfactorize}\normalcolor
-\tabskip1ex
-\centeredline{\vbox{\halign {\hfil\strut#\hfil&&\hfil#\hfil\cr\noalign{\hrule}
- \xintiloop ["7FFFFFE0+1]
- \expandafter\bfseries\xintiloopindex &
- \ifnum\xintiloopindex="7FFFFFED
- \number"7FFFFFED\cr\noalign{\hrule}
- \expandafter\xintiloopskiptonext
- \fi
- \expandafter\factorize\xintiloopindex.\cr\noalign{\hrule}
- \ifnum\xintiloopindex<"7FFFFFFE
- \repeat
- \bfseries \number"7FFFFFFF&\number "7FFFFFFF\cr\noalign{\hrule}
-}}}
-\centeredline{A table of factorizations}
-\end{figure*}
-\end{everbatim*}
-
-\subsection{Another table of primes}
-\label{ssec:primesIII}
-
-As a further example, let us dynamically generate a tabular with the first $50$
-prime numbers after $12345$. First we need a macro to test if a (short) number
-is prime. Such a completely expandable macro was given in \autoref{ssec:primesI},
-here we consider a variant which will be slightly more efficient. This new
-|\IsPrime| has two parameters. The first one is a macro which it redefines to
-expand to the result of the primality test applied to the second argument. For
-convenience we use the \href{http://ctan.org/pkg/etoolbox}{etoolbox} wrappers to
-various |\ifnum| tests, although here there isn't anymore the constraint of
-complete expandability (but using explicit |\if..\fi| in tabulars has its
-quirks); equivalent tests are provided by \xintname, but they have some overhead
-as they are able to deal with arbitrarily big integers.
-
-\def\IsPrime #1#2%
-{\edef\TheNumber {\the\numexpr #2}% positive integer
- \ifnumodd {\TheNumber}
- {\ifnumgreater {\TheNumber}{1}
- {\edef\ItsSquareRoot{\xintiiSqrt \TheNumber}%
- \xintFor ##1 in {\xintintegers [3+2]}\do
- {\ifnumgreater {##1}{\ItsSquareRoot}
- {\def#1{1}\xintBreakFor}
- {}%
- \ifnumequal {\TheNumber}{(\TheNumber/##1)*##1}
- {\def#1{0}\xintBreakFor }
- {}%
- }}
- {\def#1{0}}}% 1 is not prime
- {\ifnumequal {\TheNumber}{2}{\def#1{1}}{\def#1{0}}}%
-}%
-
-\everb|@
-\def\IsPrime #1#2% """color[named]{PineGreen}#1=\Result, #2=tested number (assumed >0).;!
-{\edef\TheNumber {\the\numexpr #2}%"""color[named]{PineGreen} hence #2 may be a count or \numexpr.;!
- \ifnumodd {\TheNumber}
- {\ifnumgreater {\TheNumber}{1}
- {\edef\ItsSquareRoot{\xintiiSqrt \TheNumber}%
- \xintFor """color{red}##1;! in {"""color{red}\xintintegers;! [3+2]}\do
- {\ifnumgreater {"""color{red}##1;!}{\ItsSquareRoot} """color[named]{PineGreen}% "textcolor{red}{##1} is a \numexpr.;!
- {\def#1{1}\xintBreakFor}
- {}%
- \ifnumequal {\TheNumber}{(\TheNumber/##1)*##1}
- {\def#1{0}\xintBreakFor }
- {}%
- }}
- {\def#1{0}}}% 1 is not prime
- {\ifnumequal {\TheNumber}{2}{\def#1{1}}{\def#1{0}}}%
-}
-|
-
-As we used \csbxint{For} inside a macro we had to double the |#| in its |#1|
-parameter. Here is now the code which creates the prime table (the table has
-been put in a \hyperref[primes]{float}, which should be found on page
-\pageref{primes}):
-
-\everb?@
-\newcounter{primecount}
-\newcounter{cellcount}
-\begin{figure*}[ht!]
- \centering
- \begin{tabular}{|*{7}c|}
- \hline
- \setcounter{primecount}{0}\setcounter{cellcount}{0}%
- \xintFor """color{red}#1;! in {"""color{red}\xintintegers;! [12345+2]} \do
-"""color[named]{PineGreen}% "textcolor{red}{#1} is a \numexpr.;!
- {\IsPrime\Result{#1}%
- \ifnumgreater{\Result}{0}
- {\stepcounter{primecount}%
- \stepcounter{cellcount}%
- \ifnumequal {\value{cellcount}}{7}
- {"""color{red}\the#1;! \\\setcounter{cellcount}{0}}
- {"""color{red}\the#1;! &}}
- {}%
- \ifnumequal {\value{primecount}}{50}
- {\xintBreakForAndDo
- {\multicolumn {6}{l|}{These are the first 50 primes after 12345.}\\}}
- {}%
- }\hline
-\end{tabular}
-\end{figure*}
-?
-
-\begin{figure*}[ht!]
- \centering\phantomsection\label{primes}
- \begin{tabular}{|*{7}c|}
- \hline
- \setcounter{primecount}{0}\setcounter{cellcount}{0}%
- \xintFor #1 in {\xintintegers [12345+2]} \do
- {\IsPrime\Result{#1}%
- \ifnumgreater{\Result}{0}
- {\stepcounter{primecount}%
- \stepcounter{cellcount}%
- \ifnumequal {\value{cellcount}}{7}
- {\the#1 \\\setcounter{cellcount}{0}}
- {\the#1 &}}
- {}%
- \ifnumequal {\value{primecount}}{50}
- {\xintBreakForAndDo
- {\multicolumn {6}{l|}{These are the first 50 primes after 12345.}\\}}
- {}%
- }\hline
-\end{tabular}
-\end{figure*}
-
-\subsection{Factorizing again}
-\label{ssec:factorize}
-
-Here is an \fexpan dable macro which computes the factors of an integer. It
-uses the \xintname macros only.
-\begin{everbatim*}
-\catcode`\@ 11
-\let\factorize\relax
-\newcommand\Factorize [1]
- {\romannumeral0\expandafter\factorize\expandafter{\romannumeral-`0#1}}%
-\newcommand\factorize [1]{\xintiiifOne{#1}{ 1}{\factors@a #1.{#1};}}%
-\def\factors@a #1.{\xintiiifOdd{#1}
- {\factors@c 3.#1.}%
- {\expandafter\factors@b \expandafter1\expandafter.\romannumeral0\xinthalf{#1}.}}%
-\def\factors@b #1.#2.{\xintiiifOne{#2}
- {\factors@end {2, #1}}%
- {\xintiiifOdd{#2}{\factors@c 3.#2.{2, #1}}%
- {\expandafter\factors@b \the\numexpr #1+\@ne\expandafter.%
- \romannumeral0\xinthalf{#2}.}}%
-}%
-\def\factors@c #1.#2.{%
- \expandafter\factors@d\romannumeral0\xintiidivision {#2}{#1}{#1}{#2}%
-}%
-\def\factors@d #1#2#3#4{\xintiiifNotZero{#2}
- {\xintiiifGt{#3}{#1}
- {\factors@end {#4, 1}}% ultimate quotient is a prime with power 1
- {\expandafter\factors@c\the\numexpr #3+\tw@.#4.}}%
- {\factors@e 1.#3.#1.}%
-}%
-\def\factors@e #1.#2.#3.{\xintiiifOne{#3}
- {\factors@end {#2, #1}}%
- {\expandafter\factors@f\romannumeral0\xintiidivision {#3}{#2}{#1}{#2}{#3}}%
-}%
-\def\factors@f #1#2#3#4#5{\xintiiifNotZero{#2}
- {\expandafter\factors@c\the\numexpr #4+\tw@.#5.{#4, #3}}%
- {\expandafter\factors@e\the\numexpr #3+\@ne.#4.#1.}%
-}%
-\def\factors@end #1;{\xintlistwithsep{, }{\xintRevWithBraces {#1}}}%
-\catcode`@ 12
-\end{everbatim*}
-The macro will be acceptably efficient only with numbers having somewhat small
-prime factors.
-\begin{everbatim}
-\Factorize{16246355912554185673266068721806243461403654781833}
-\end{everbatim}
-\begingroup\fdef\Z
-{\Factorize{16246355912554185673266068721806243461403654781833}}
-\noindent{\small\dtt{\Z}}
-
-
-It puts a little stress on the input save stack in order
-not be bothered with previously gathered things.\footnote{2015/11/18 I have
- not revisited this code for a long time, and perhaps I could improve it now
- with some new techniques.}
-
-Its output is a comma separated list with the number first, then its prime
-factors with multiplicity. Let's produce something prettier:
-\begin{everbatim*}
-\catcode`_ 11
-\def\ShowFactors #1{\expandafter\ShowFactors_a\romannumeral-`0\Factorize{#1},\relax,\relax,}
-\def\ShowFactors_a #1,{#1=\ShowFactors_b}
-\def\ShowFactors_b #1,#2,{\if\relax#1\else#1^{#2}\expandafter\ShowFactors_b\fi}
-\catcode`_ 8
-\end{everbatim*}
-\begin{everbatim}
-$$\ShowFactors{16246355912554185673266068721806243461403654781833}$$
-\end{everbatim}
-$$\csname ShowFactors_a\expandafter\endcsname\Z,\relax,\relax,$$
-\endgroup
-
-If we only considered small integers, we could write pure |\numexpr| methods
-which would be very much faster (especially if we had a table of small primes
-prepared first) but still ridiculously slow compared to any non expandable
-implementation, not to mention use of programming languages directly accessing
-the CPU registers\dots
-
-\subsection{The Quick Sort algorithm illustrated}\label{ssec:quicksort}
-
-First a completely expandable macro which sorts a comma separated list of
-numbers.%
-%
-\footnote{The code in earlier versions of this manual handled inputs composed
- of braced items. I have switched to comma separated inputs on the occasion
- of (link removed)
- The version here is like
- |code 3| on
- (link removed) (which is about |3x| faster
- than the earlier code it replaced in this manual) with a modification to
- make it more efficient if the data has many repeated values.
-
- A faster routine (for sorting hundreds of values) is provided as |code 6| at
- the link mentioned in the footnote, it is based on Merge Sort, but limited
- to inputs which one can handle as \TeX{} dimensions.%
-
- This |code 6| could be extended to handle more general numbers, as
- acceptable by \xintfracname. I have also written a non expandable version,
- which is even faster, but this matters really only when handling hundreds or
- rather thousands of values.}
-%
-
-The |\QSx| macro expands its list argument, which may thus be a macro; its
-comma separated items must expand to integers or decimal numbers or fractions
-or scientific notation as acceptable to \xintfracname, but if an item is
-itself some (expandable) macro, this macro will be expanded each time the item
-is considered in a comparison test! This is actually good if the macro expands
-in one step to the digits, and there are many many digits, but bad if the macro
-needs to do many computations. Thus |\QSx| should be used with either explicit
-numbers or with items being macros expanding in one step to the numbers
-(particularly if these numbers are very big).
-
-If the interest is only in \TeX{} integers, then one should replace the
-|\xintifCmp| macro with a suitable conditional, possibly helped by tools such as
-|\ifnumgreater|, |\ifnumequal| and |\ifnumless| from
-\href{http://ctan.org/pkg/etoolbox}{etoolbox} (\LaTeX{} only; I didn't see a
-direct equivalent to |\xintifCmp|.) Or, if we are dealing with decimal numbers
-with at most four+four digits, then one should use suitable |\ifdim| tests.
-Naturally this will boost consequently the speed, from having skipped all the
-overhead in parsing fractions and scientific numbers as are acceptable by
-\xintfracname macros, and subsequent treatment.
-
-\begin{everbatim*}
-% THE QUICK SORT ALGORITHM EXPANDABLY
-% \usepackage{xintfrac} in the preamble (latex)
-\makeatletter
-% use extra safe delimiters
-\catcode`! 3 \catcode`? 3
-\def\QSx {\romannumeral0\qsx }%
-% first we check if empty list (else \qsx@finish will not find a comma)
-\def\qsx #1{\expandafter\qsx@a\romannumeral-`0#1,!,?}%
-\def\qsx@a #1{\ifx,#1\expandafter\qsx@abort\else
- \expandafter\qsx@start\fi #1}%
-\def\qsx@abort #1?{ }%
-\def\qsx@start {\expandafter\qsx@finish\romannumeral0\qsx@b,}%
-\def\qsx@finish ,#1{ #1}%
-%
-% we check if empty of single and if not pick up the first as Pivot:
-\def\qsx@b ,#1#2,#3{\ifx?#3\xintdothis\qsx@empty\fi
- \ifx!#3\xintdothis\qsx@single\fi
- \xintorthat\qsx@separate {#1#2}{}{}{#1#2}#3}%
-\def\qsx@empty #1#2#3#4#5{ }%
-\def\qsx@single #1#2#3#4#5?{, #4}%
-\def\qsx@separate #1#2#3#4#5#6,%
-{%
- \ifx!#5\expandafter\qsx@separate@done\fi
- \xintifCmp {#5#6}{#4}%
- \qsx@separate@appendtosmaller
- \qsx@separate@appendtoequal
- \qsx@separate@appendtogreater {#5#6}{#1}{#2}{#3}{#4}%
-}%
-%
-\def\qsx@separate@appendtoequal #1#2{\qsx@separate {#2,#1}}%
-\def\qsx@separate@appendtogreater #1#2#3{\qsx@separate {#2}{#3,#1}}%
-\def\qsx@separate@appendtosmaller #1#2#3#4{\qsx@separate {#2}{#3}{#4,#1}}%
-%
-\def\qsx@separate@done\xintifCmp #1%
- \qsx@separate@appendtosmaller
- \qsx@separate@appendtoequal
- \qsx@separate@appendtogreater #2#3#4#5#6#7?%
-{%
- \expandafter\qsx@f\expandafter {\romannumeral0\qsx@b #4,!,?}{\qsx@b #5,!,?}{#3}%
-}%
-%
-\def\qsx@f #1#2#3{#2, #3#1}%
-%
-\catcode`! 12 \catcode`? 12
-\makeatother
-
-% EXAMPLE
-\begingroup
-\edef\z {\QSx {1.0, 0.5, 0.3, 1.5, 1.8, 2.0, 1.7, 0.4, 1.2, 1.4,
- 1.3, 1.1, 0.7, 1.6, 0.6, 0.9, 0.8, 0.2, 0.1, 1.9}}
-\meaning\z
-
-\def\a {3.123456789123456789}\def\b {3.123456789123456788}
-\def\c {3.123456789123456790}\def\d {3.123456789123456787}
-\oodef\z {\QSx { \a, \b, \c, \d}}%
-% The space before \a to let it not be expanded during the conversion from CSV
-% values to List. The \oodef expands exactly twice (via a bunch of \expandafter's)
-\meaning\z
-\endgroup
-\end{everbatim*} (the spaces after \string\d, etc...\@ come from the use of the
-|\meaning| primitive.)
-
-The choice of pivot as first element is bad if the list is already almost
-sorted. Let's add a variant which will pick up the pivot index randomly. The
-previous routine worked also internally with comma separated lists, but for a
-change this one will use internally lists of braced items (the initial
-conversion via \csbxint{CSVtoList} handles all potential spurious space
-problems).
-
-\unless\ifxetex % pour tester compilation de xint.dtx avec xetex qui n'a pas
- % \pdfuniformdeviate
-\begin{everbatim*}
-% QuickSort expandably on comma separated values with random choice of pivots
-% ====> Requires availability of \pdfuniformdeviate <====
-% \usepackage{xintfrac, xinttools} in preamble
-\makeatletter
-\def\QSx {\romannumeral0\qsx }% This is a f-expandable macro.
-% This converts from comma separated values on input and back on output.
-% **** NOTE: these steps (and the other ones too, actually) are costly if input
-% has thousands of items.
-\def\qsx #1{\xintlistwithsep{, }%
- {\expandafter\qsx@sort@a\expandafter{\romannumeral0\xintcsvtolist{#1}}}}%
-%
-% we check if empty or single or double and if not pick up the first as Pivot:
-\def\qsx@sort@a #1%
- {\expandafter\qsx@sort@b\expandafter{\romannumeral0\xintlength{#1}}{#1}}%
-\def\qsx@sort@b #1{\ifcase #1
- \expandafter\qsx@sort@empty
- \or\expandafter\qsx@sort@single
- \or\expandafter\qsx@sort@double
- \else\expandafter\qsx@sort@c\fi {#1}}%
-\def\qsx@sort@empty #1#2{ }%
-\def\qsx@sort@single #1#2{#2}%
-\catcode`_ 11
-\def\qsx@sort@double #1#2{\xintifGt #2{\xint_exchangetwo_keepbraces}{}#2}%
-\catcode`_ 8
-\def\qsx@sort@c #1#2{%
- \expandafter\qsx@sort@sep@a\expandafter
- {\romannumeral0\xintnthelt{\pdfuniformdeviate #1+\@ne}{#2}}#2?}%
-\def\qsx@sort@sep@a #1{\qsx@sort@sep@loop {}{}{}{#1}}%
-\def\qsx@sort@sep@loop #1#2#3#4#5%
-{%
- \ifx?#5\expandafter\qsx@sort@sep@done\fi
- \xintifCmp {#5}{#4}%
- \qsx@sort@sep@appendtosmaller
- \qsx@sort@sep@appendtoequal
- \qsx@sort@sep@appendtogreater {#5}{#1}{#2}{#3}{#4}%
-}%
-%
-\def\qsx@sort@sep@appendtoequal #1#2{\qsx@sort@sep@loop {#2{#1}}}%
-\def\qsx@sort@sep@appendtogreater #1#2#3{\qsx@sort@sep@loop {#2}{#3{#1}}}%
-\def\qsx@sort@sep@appendtosmaller #1#2#3#4{\qsx@sort@sep@loop {#2}{#3}{#4{#1}}}%
-%
-\def\qsx@sort@sep@done\xintifCmp #1%
- \qsx@sort@sep@appendtosmaller
- \qsx@sort@sep@appendtoequal
- \qsx@sort@sep@appendtogreater #2#3#4#5#6%
-{%
- \expandafter\qsx@sort@recurse\expandafter
- {\romannumeral0\qsx@sort@a {#4}}{\qsx@sort@a {#5}}{#3}%
-}%
-%
-\def\qsx@sort@recurse #1#2#3{#2#3#1}%
-%
-\makeatother
-
-% EXAMPLES
-\begingroup
-\edef\z {\QSx {1.0, 0.5, 0.3, 1.5, 1.8, 2.0, 1.7, 0.4, 1.2, 1.4,
- 1.3, 1.1, 0.7, 1.6, 0.6, 0.9, 0.8, 0.2, 0.1, 1.9}}
-\meaning\z
-
-\def\a {3.123456789123456789}\def\b {3.123456789123456788}
-\def\c {3.123456789123456790}\def\d {3.123456789123456787}
-\oodef\z {\QSx { \a, \b, \c, \d}}%
-% The space before \a to let it not be expanded during the conversion from CSV
-% values to List. The \oodef expands exactly twice (via a bunch of \expandafter's)
-\meaning\z
-
-\def\somenumbers{%
-3997.6421, 8809.9358, 1805.4976, 5673.6478, 3179.1328, 1425.4503, 4417.7691,
-2166.9040, 9279.7159, 3797.6992, 8057.1926, 2971.9166, 9372.2699, 9128.4052,
-1228.0931, 3859.5459, 8561.7670, 2949.6929, 3512.1873, 1698.3952, 5282.9359,
-1055.2154, 8760.8428, 7543.6015, 4934.4302, 7526.2729, 6246.0052, 9512.4667,
-7423.1124, 5601.8436, 4433.5361, 9970.4849, 1519.3302, 7944.4953, 4910.7662,
-3679.1515, 8167.6824, 2644.4325, 8239.4799, 4595.1908, 1560.2458, 6098.9677,
-3116.3850, 9130.5298, 3236.2895, 3177.6830, 5373.1193, 5118.4922, 2743.8513,
-8008.5975, 4189.2614, 1883.2764, 9090.9641, 2625.5400, 2899.3257, 9157.1094,
-8048.4216, 3875.6233, 5684.3375, 8399.4277, 4528.5308, 6926.7729, 6941.6278,
-9745.4137, 1875.1205, 2755.0443, 9161.1524, 9491.1593, 8857.3519, 4290.0451,
-2382.4218, 3678.2963, 5647.0379, 1528.7301, 2627.8957, 9007.9860, 1988.5417,
-2405.1911, 5065.8063, 5856.2141, 8989.8105, 9349.7840, 9970.3013, 8105.4062,
-3041.7779, 5058.0480, 8165.0721, 9637.7196, 1795.0894, 7275.3838, 5997.0429,
-7562.6481, 8084.0163, 3481.6319, 8078.8512, 2983.7624, 3925.4026, 4931.5812,
-1323.1517, 6253.0945}%
-
-\oodef\z {\QSx \somenumbers}% produced as a comma+space separated list
-% black magic as workaround to the shrinkability of spaces in last line...
-\hsize 87\fontcharwd\font`0
-\lccode`~=32
-\lowercase{\def~}{\discretionary{}{}{\kern\fontcharwd\font`0}}\catcode32 13
-\noindent\phantom{00}\scantokens\expandafter{\meaning\z}\par
-\endgroup
-\end{everbatim*}
-\fi % fin de si pas xetex
-
-
-All the previous examples were with numbers which could have been handled via
-|\ifdim| tests rather than the \csbxint{ifCmp} macro from \xintfracname; using
-|\ifdim| tests would naturally be faster. Even faster routine is |code 6| at
-(link removed) which uses |\pdfescapestring| and a
-Merge Sort algorithm.
-
-We then turn to a graphical illustration of the algorithm.%
-%
-\footnote{I have rewritten (2015/11/21) the routine to do only once (and not thrice) the
- needed calls to \csa{xintifCmp}, up to the price of one additional |\edef|,
- although due to the context execution time on our side is not an issue and
- moreover is anyhow overwhelmed by the TikZ's activities. Simultaneously I
- have updated the code.
- The
- variant with the choice of pivot on the right has more overhead: the reason
- is simply that we do not convert the data into an array, but maintain a list
- of tokens with self-reorganizing delimiters.}
-%
-For simplicity the pivot is always chosen as the first list item. Then we also
-give a variant which picks up the last item as pivot.
-\begin{everbatim*}
-% in LaTeX preamble:
-% \usepackage{xintfrac, xinttools}
-% \usepackage{color}
-% or, when using Plain TeX:
-% \input xintfrac.sty \input xinttools.sty
-% \input color.tex
-%
-% Color definitions
-\definecolor{LEFT}{RGB}{216,195,88}
-\definecolor{RIGHT}{RGB}{208,231,153}
-\definecolor{INERT}{RGB}{199,200,194}
-\definecolor{INERTpiv}{RGB}{237,237,237}
-\definecolor{PIVOT}{RGB}{109,8,57}
-% Start of macro defintions
-\makeatletter
-% \catcode`? 3 % a bit too paranoid. Normal ? will do.
-%
-% argument will never be empty
-\def\QS@cmp@a #1{\QS@cmp@b #1??}%
-\def\QS@cmp@b #1{\noexpand\QS@sep@A\@ne{#1}\QS@cmp@d {#1}}%
-\def\QS@cmp@d #1#2{\ifx ?#2\expandafter\QS@cmp@done\fi
- \xintifCmp {#1}{#2}\tw@\@ne\z@{#2}\QS@cmp@d {#1}}%
-\def\QS@cmp@done #1?{?}%
-%
-\def\QS@sep@A #1?{\QSLr\QS@sep@L #1\thr@@?#1\thr@@?#1\thr@@?}%
-\def\QS@sep@L #1#2{\ifcase #1{#2}\or\or\else\expandafter\QS@sep@I@start\fi \QS@sep@L}%
-\def\QS@sep@I@start\QS@sep@L {\noexpand\empty?\QSIr\QS@sep@I}%
-\def\QS@sep@I #1#2{\ifcase#1\or{#2}\or\else\expandafter\QS@sep@R@start\fi\QS@sep@I}%
-\def\QS@sep@R@start\QS@sep@I {\noexpand\empty?\QSRr\QS@sep@R}%
-\def\QS@sep@R #1#2{\ifcase#1\or\or{#2}\else\expandafter\QS@sep@done\fi\QS@sep@R}%
-\def\QS@sep@done\QS@sep@R {\noexpand\empty?}%
-%
-\def\QS@loop {%
- \xintloop
- % pivot phase
- \def\QS@pivotcount{0}%
- \let\QSLr\DecoLEFTwithPivot \let\QSIr \DecoINERT
- \let\QSRr\DecoRIGHTwithPivot \let\QSIrr\DecoINERT
- \centerline{\QS@list}%
- % sorting phase
- \ifnum\QS@pivotcount>\z@
- \def\QSLr {\QS@cmp@a}\def\QSRr {\QS@cmp@a}%
- \def\QSIr {\QSIrr}\let\QSIrr\relax
- \edef\QS@list{\QS@list}% compare
- \let\QSLr\relax\let\QSRr\relax\let\QSIr\relax
- \edef\QS@list{\QS@list}% separate
- \def\QSLr ##1##2?{\ifx\empty##1\else\noexpand \QSLr {{##1}##2}\fi}%
- \def\QSIr ##1##2?{\ifx\empty##1\else\noexpand \QSIr {{##1}##2}\fi}%
- \def\QSRr ##1##2?{\ifx\empty##1\else\noexpand \QSRr {{##1}##2}\fi}%
- \edef\QS@list{\QS@list}% gather
- \let\QSLr\DecoLEFT \let\QSRr\DecoRIGHT
- \let\QSIr\DecoINERTwithPivot \let\QSIrr\DecoINERT
- \centerline{\QS@list}%
- \repeat }%
-%
-% \xintFor* loops handle gracefully empty lists.
-\def\DecoLEFT #1{\xintFor* ##1 in {#1} \do {\colorbox{LEFT}{##1}}}%
-\def\DecoINERT #1{\xintFor* ##1 in {#1} \do {\colorbox{INERT}{##1}}}%
-\def\DecoRIGHT #1{\xintFor* ##1 in {#1} \do {\colorbox{RIGHT}{##1}}}%
-\def\DecoPivot #1{\begingroup\color{PIVOT}\advance\fboxsep-\fboxrule\fbox{#1}\endgroup}%
-%
-\def\DecoLEFTwithPivot #1{\xdef\QS@pivotcount{\the\numexpr\QS@pivotcount+\@ne}%
- \xintFor* ##1 in {#1} \do
- {\xintifForFirst {\DecoPivot {##1}}{\colorbox{LEFT}{##1}}}}%
-\def\DecoINERTwithPivot #1{\xdef\QS@pivotcount{\the\numexpr\QS@pivotcount+\@ne}%
- \xintFor* ##1 in {#1} \do
- {\xintifForFirst {\colorbox{INERTpiv}{##1}}{\colorbox{INERT}{##1}}}}%
-\def\DecoRIGHTwithPivot #1{\xdef\QS@pivotcount{\the\numexpr\QS@pivotcount+\@ne}%
- \xintFor* ##1 in {#1} \do
- {\xintifForFirst {\DecoPivot {##1}}{\colorbox{RIGHT}{##1}}}}%
-%
-\def\QuickSort #1{% warning: not compatible with empty #1.
- % initialize, doing conversion from comma separated values to a list of braced items
- \edef\QS@list{\noexpand\QSRr{\xintCSVtoList{#1}}}% many \edef's are to follow anyhow
-% earlier I did a first drawing of the list, here with the color of RIGHT elements,
-% but the color should have been for example white, anyway I drop this first line
- %\let\QSRr\DecoRIGHT
- %\par\centerline{\QS@list}%
-%
- % loop as many times as needed
- \QS@loop }%
-%
-% \catcode`? 12 % in case we had used a funny ? as delimiter.
-\makeatother
-%% End of macro definitions.
-%% Start of Example
-\begingroup\offinterlineskip
-\small
-% \QuickSort {1.0, 0.5, 0.3, 1.5, 1.8, 2.0, 1.7, 0.4, 1.2, 1.4,
-% 1.3, 1.1, 0.7, 1.6, 0.6, 0.9, 0.8, 0.2, 0.1, 1.9}
-% \medskip
-% with repeated values
-\QuickSort {1.0, 0.5, 0.3, 0.8, 1.5, 1.8, 2.0, 1.7, 0.4, 1.2, 1.4,
- 1.3, 1.1, 0.7, 0.3, 1.6, 0.6, 0.3, 0.8, 0.2, 0.8, 0.7, 1.2}
-\endgroup
-\end{everbatim*}
-
-Here is the variant which always picks the pivot as the rightmost element.
-
-\begin{everbatim*}
-\makeatletter
-%
-\def\QS@cmp@a #1{\noexpand\QS@sep@A\expandafter\QS@cmp@d\expandafter
- {\romannumeral0\xintnthelt{-1}{#1}}#1??}%
-%
-\def\DecoLEFTwithPivot #1{\xdef\QS@pivotcount{\the\numexpr\QS@pivotcount+\@ne}%
- \xintFor* ##1 in {#1} \do
- {\xintifForLast {\DecoPivot {##1}}{\colorbox{LEFT}{##1}}}}
-\def\DecoINERTwithPivot #1{\xdef\QS@pivotcount{\the\numexpr\QS@pivotcount+\@ne}%
- \xintFor* ##1 in {#1} \do
- {\xintifForLast {\colorbox{INERTpiv}{##1}}{\colorbox{INERT}{##1}}}}
-\def\DecoRIGHTwithPivot #1{\xdef\QS@pivotcount{\the\numexpr\QS@pivotcount+\@ne}%
- \xintFor* ##1 in {#1} \do
- {\xintifForLast {\DecoPivot {##1}}{\colorbox{RIGHT}{##1}}}}
-\def\QuickSort #1{%
- % initialize, doing conversion from comma separated values to a list of braced items
- \edef\QS@list{\noexpand\QSLr {\xintCSVtoList{#1}}}% many \edef's are to follow anyhow
- %
- % loop as many times as needed
- \QS@loop }%
-\makeatother
-\begingroup\offinterlineskip
-\small
-% \QuickSort {1.0, 0.5, 0.3, 1.5, 1.8, 2.0, 1.7, 0.4, 1.2, 1.4,
-% 1.3, 1.1, 0.7, 1.6, 0.6, 0.9, 0.8, 0.2, 0.1, 1.9}
-% \medskip
-% with repeated values
-\QuickSort {1.0, 0.5, 0.3, 0.8, 1.5, 1.8, 2.0, 1.7, 0.4, 1.2, 1.4,
- 1.3, 1.1, 0.7, 0.3, 1.6, 0.6, 0.3, 0.8, 0.2, 0.8, 0.7, 1.2}
-\endgroup
-\end{everbatim*}
-
-The choice of the first or last item as pivot is not a good one as nearly
-ordered lists will take quadratic time. But for explaining the algorithm via a
-graphical interpretation, it is not that bad. If one wanted to pick up the
-pivot randomly, the routine would have to be substantially rewritten: in
-particular the |\Deco..withPivot| macros need to know where the pivot is, and
-currently this is implemented by using either |\xintifForFirst| or
-|\xintifForLast|.
-
-\clearpage
+ To produce a single file |xint-all.pdf| including both the user
+ documentation and the source code:
+ \begin{itemize}
+ \item acquire |xint.dtx| from
+ \centeredline{\url{https://www.ctan.org/tex-archive/macros/generic/xint}}
+ and optionally the |Makefile| from the same location,
+ \item execute |etex xint.dtx| to extract files,
+ \item run |make --file=Makefile.mk xint-all.pdf|
+ \end{itemize}
+ The last step can be simplified into |make xint-all.pdf| if the
+ |Makefile| was downloaded in step one (or extracted |Makefile.mk|
+ was renamed into |Makefile|).
-\expandafter\let\csname ExamplesnameUp\endcsname\undefined
+ These steps require not only |make| but also |latexmk|.
-\ifnum\NoSourceCode=1
-\bigskip
-\begin{framed}
- \small This documentation has been compiled without the source code,
- which is available in the separate file:
- %
- \centeredline{|sourcexint.pdf|,}
- %
- which will open in a PDF viewer via |texdoc sourcexint.pdf|.
+ See instructions in |xint-all.tex| (which is produced in the second
+ step) for alternatives without |make| or |latexmk|.
- To produce a single file including both the user documentation and the
- source code:
- \begin{itemize}
- \item run |etex| on |xint.dtx| to generate |xint.tex| among other files,
- \item edit |xint.tex| to set the |\NoSourceCode| toggle within it to |0|,
- \item run |make clean| and then |make xint.pdf|.
- \end{itemize}
- This will need |latexmk|; if not available you will need in replacement of
- the last step to execute manually |latex| on |xint.tex| (thrice)
- then |dvipdfmx|.
+ In particular it is possible to execute |latex| (three times may be
+ enough, then |dvipdfmx|), or |pdflatex|, directly on |xint.dtx|. This
+ will produce a file |xint.pdf| including both the user manual and the
+ commented source code.
\end{framed}
\fi
-
+\clearpage
+\let\xintcfracnameUp\undefined
\ifnum\dosourcexint=1
+fi
+catcode`\ 0
@@ -19616,26 +20172,45 @@ currently this is implemented by using either |\xintifForFirst| or
\makeatletter
\@gobble\fi
\StopEventually{\end{document}\endinput}
+\etocignoredepthtags
+\def\MARGEPAGENO{1.25em}
+\etocdepthtag.toc {implementation}
+\addtocontents{toc}{\gdef\string\sectioncouleur{{tocsectionimpcolor}}}
+
\ifnum\dosourcexint=1
-\renewcommand{\etocaftertochook}{\addvspace{\bigskipamount}}
-\etocsettocstyle {}{}
-\clearpage
+ \renewcommand{\etocaftertochook}{\addvspace{\bigskipamount}}
+ \etocsettocstyle {}{}
+% \clearpage
% \newgeometry{%hmarginratio=4:3,
% hscale=0.7,vscale=0.75}% ATTENTION \newgeometry fait
% % un reset de vscale si on ne le
% % précise pas ici !!!
\else
-\clearpage
+ \etocsetnexttocdepth{section}
+ \part{The \xintexprnameimp and allied packages source code}
+ \localtableofcontents
\fi
+\def\xintImpRunningHeader{{\inheadertrue\catcode`,12\relax
+ \DOCxintfrontpage,
+ \xintkernelnameimp,
+ \xinttoolsnameimp,
+ \xintcorenameimp,
+ \xintnameimp,
+ \xintbinhexnameimp,
+ \xintgcdnameimp,
+ \xintfracnameimp,
+ \xintseriesnameimp,
+ \xintcfracnameimp,
+ \xintexprnameimp,
+ \xinttrignameimp, \xintlognameimp}}
+\markboth{\makebox[0pt]{\xintImpRunningHeader}}{\makebox[0pt]{\xintImpRunningHeader}}
+
+\clearpage
\makeatletter
-\def\MARGEPAGENO{1.25em}
\etocsettocdepth{subsubsection}% 2015/09/15
-\etocdepthtag.toc {implementation}
-\addtocontents{toc}{\gdef\string\sectioncouleur{{tocsectionimpcolor}}}
-
\def\storedlinecounts {}
\def\StoreCodelineNo #1{\edef\storedlinecounts{%
\unexpanded\expandafter{\storedlinecounts}%
@@ -19848,21 +20423,6 @@ currently this is implemented by using either |\xintifForFirst| or
%% END OF MACRO DEFINITIONS FOR SOURCEXINT
-\def\xintImpRunningHeader{{\inheadertrue\catcode`,12\relax
- \DOCxintfrontpage,
- \xintkernelnameimp,
- \xinttoolsnameimp,
- \xintcorenameimp,
- \xintnameimp,
- \xintbinhexnameimp,
- \xintgcdnameimp,
- \xintfracnameimp,
- \xintseriesnameimp,
- \xintcfracnameimp,
- \xintexprnameimp,
- \xinttrignameimp, \xintlognameimp}}
-\markboth{\makebox[0pt]{\xintImpRunningHeader}}{\makebox[0pt]{\xintImpRunningHeader}}
-
\makeatother
\section{Timeline (in brief)}
@@ -19958,10 +20518,10 @@ Some parts of the code still date back to the initial release, and
the code.
Warning: pay attention when looking at the code to the catcode configuration
-as found in \csbXINT{_setcatcodes}. Additional temporary configuration is used
-at some locations. For example |!| is of catcode letter in \xintexprnameimp
-and there are locations with funny catcodes e.g. using some letters with the
-math shift catcode.
+as found in \csbXINT{setcatcodes} from \xintkernelnameimp. Additional
+temporary configuration is used at some locations. For example |!| is of
+catcode letter in \xintexprnameimp and there are locations with funny catcodes
+e.g. using some letters with the math shift catcode.
\MakePercentIgnore
%\def\gardesactifs {^^A
@@ -19999,6 +20559,10 @@ math shift catcode.
% \changed[2020/01/11]{1.4}
% \csbxint{Replicate}, \csbxint{Gobble}, \csbxint{LastOne}, \csbxint{FirstOne}.
%
+% \changed{1.4l}
+% Fix the |1.4| added bug that |\XINTrestorecatcodes| forgot to restore
+% the catcode of |^||^A| which is set to |3| by |\XINTsetcatcodes|.
+%
% \subsection{Catcodes, \protect\eTeX{} and reload detection}
%
% The code for reload detection was initially copied from \textsc{Heiko
@@ -20007,128 +20571,160 @@ math shift catcode.
% The method for catcodes was also initially directly inspired by these
% packages.
%
+% \lverb|1.4l replaces Info level user messages issued in case of problems
+% such as \numexpr not being available with Warning level messages (in the
+% LaTeX terminolgy). Should arguably be Error level in that case.
+%
+% xintkernel.sty was the only xint package emitting such an Info, now Warning
+% in case of being loaded twice (via \input in non-LaTeX). This was probably
+% a left-over from initial development stage of the loading architecture for
+% debugging. Starting with 1.4l, it will abort input silently in such case.
+%
+% Also at 1.4l I refactored a bit the loading code in the xint*sty files for
+% no real reason other than losing time.|
% \begin{macrocode}
\begingroup\catcode61\catcode48\catcode32=10\relax%
\catcode13=5 % ^^M
\endlinechar=13 %
\catcode123=1 % {
\catcode125=2 % }
- \catcode35=6 % #
\catcode44=12 % ,
- \catcode45=12 % -
\catcode46=12 % .
\catcode58=12 % :
- \catcode95=11 % _
- \expandafter
- \ifx\csname PackageInfo\endcsname\relax
- \def\y#1#2{\immediate\write-1{Package #1 Info: #2.}}%
+ \catcode94=7 % ^
+ \def\space{ }\newlinechar10
+ \let\z\relax
+ \expandafter\ifx\csname numexpr\endcsname\relax
+ \expandafter\ifx\csname PackageWarning\endcsname\relax
+ \immediate\write128{^^JPackage xintkernel Warning:^^J%
+ \space\space\space\space
+ \numexpr not available, aborting input.^^J}%
\else
- \def\y#1#2{\PackageInfo{#1}{#2}}%
+ \PackageWarningNoLine{xintkernel}{\numexpr not available, aborting input}%
\fi
- \let\z\relax
- \expandafter
- \ifx\csname numexpr\endcsname\relax
- \y{xintkernel}{\numexpr not available, aborting input}%
- \def\z{\endgroup\endinput}%
+ \def\z{\endgroup\endinput}%
+ \else
+ \expandafter\ifx\csname XINTsetupcatcodes\endcsname\relax
\else
- \expandafter
- \ifx\csname XINTsetupcatcodes\endcsname\relax
- \else
- \y{xintkernel}{I was already loaded, aborting input}%
\def\z{\endgroup\endinput}%
- \fi
\fi
+ \fi
\ifx\z\relax\else\expandafter\z\fi%
% \end{macrocode}
% \subsubsection{\csh{XINTrestorecatcodes}, \csh{XINTsetcatcodes},
% \csh{XINTrestorecatcodesendinput}}
-% \lverb|Renamed at 1.4e without underscores, in connexion with
-% easying up reloading process for xintlog.sty and xinttrig.sty.|
+% \changed{1.4e}
+% \lverb|Renamed \XINT{set,restore}catcodes
+% to be without underscores, to facilitate the reloading process
+% for xintlog.sty and xinttrig.sty in uncontrolled contexts.|
+% \changed{1.4l}
+% \lverb|Fix the 1.4 bug of omission of \catcode1 restore.
+%
+% Reordered all catcodes assignements for easier maintenance and dropped most
+% disparate indications of which packages make use of which settings.
+%
+% The \XINTrestorecatcodes is somewhat misnamed as it is more a template
+% to be used in an \edef to help define actual catcode restoring macros.
+%
+% However \edef needs usually { and } so there is a potential difficulty with
+% telling people to do \edef\myrestore{\XINTrestorecatcodes}, and I almost
+% added at 1.4l some \XINTsettorestore:#1->\edef#1{\XINTrestorecatcodes} but
+% well, this is not public interface anyhow. The reloading method of
+% xintlog.sty and xinttrig.sty does protect itself though against such irreal
+% usage possibility with non standard { or }.
+%
+% Removed at 1.4l the \XINT_setcatcodes and \XINT_restorecatcodes not used
+% anywhere now. Used by old version of xintsession.tex, but not anymore since
+% a while.|
% \begin{macrocode}
\def\PrepareCatcodes
{%
\endgroup
\def\XINTrestorecatcodes
- {% takes care of all, to allow more economical code in modules
- \catcode0=\the\catcode0 %
- \catcode59=\the\catcode59 % ; xintexpr
- \catcode126=\the\catcode126 % ~ xintexpr
- \catcode39=\the\catcode39 % ' xintexpr
- \catcode34=\the\catcode34 % " xintbinhex, and xintexpr
- \catcode63=\the\catcode63 % ? xintexpr
- \catcode124=\the\catcode124 % | xintexpr
- \catcode38=\the\catcode38 % & xintexpr
- \catcode64=\the\catcode64 % @ xintexpr
- \catcode33=\the\catcode33 % ! xintexpr
- \catcode93=\the\catcode93 % ] -, xintfrac, xintseries, xintcfrac
- \catcode91=\the\catcode91 % [ -, xintfrac, xintseries, xintcfrac
- \catcode36=\the\catcode36 % $ xintgcd only $
- \catcode94=\the\catcode94 % ^
- \catcode96=\the\catcode96 % `
- \catcode47=\the\catcode47 % /
- \catcode41=\the\catcode41 % )
- \catcode40=\the\catcode40 % (
- \catcode42=\the\catcode42 % *
- \catcode43=\the\catcode43 % +
- \catcode62=\the\catcode62 % >
- \catcode60=\the\catcode60 % <
- \catcode58=\the\catcode58 % :
- \catcode46=\the\catcode46 % .
- \catcode45=\the\catcode45 % -
- \catcode44=\the\catcode44 % ,
- \catcode35=\the\catcode35 % #
- \catcode95=\the\catcode95 % _
- \catcode125=\the\catcode125 % }
- \catcode123=\the\catcode123 % {
- \endlinechar=\the\endlinechar
- \catcode13=\the\catcode13 % ^^M
- \catcode32=\the\catcode32 %
- \catcode61=\the\catcode61\relax % =
+ {% prepared for use in \edef
+ \catcode0=\the\catcode0 % ^^@
+ \catcode1=\the\catcode1 % ^^A
+ \catcode13=\the\catcode13 % ^^M
+ \catcode32=\the\catcode32 % <space>
+ \catcode33=\the\catcode33 % !
+ \catcode34=\the\catcode34 % "
+ \catcode35=\the\catcode35 % #
+ \catcode36=\the\catcode36 % $
+ \catcode38=\the\catcode38 % &
+ \catcode39=\the\catcode39 % '
+ \catcode40=\the\catcode40 % (
+ \catcode41=\the\catcode41 % )
+ \catcode42=\the\catcode42 % *
+ \catcode43=\the\catcode43 % +
+ \catcode44=\the\catcode44 % ,
+ \catcode45=\the\catcode45 % -
+ \catcode46=\the\catcode46 % .
+ \catcode47=\the\catcode47 % /
+ \catcode58=\the\catcode58 % :
+ \catcode59=\the\catcode59 % ;
+ \catcode60=\the\catcode60 % <
+ \catcode61=\the\catcode61 % =
+ \catcode62=\the\catcode62 % >
+ \catcode63=\the\catcode63 % ?
+ \catcode64=\the\catcode64 % @
+ \catcode91=\the\catcode91 % [
+ \catcode93=\the\catcode93 % ]
+ \catcode94=\the\catcode94 % ^
+ \catcode95=\the\catcode95 % _
+ \catcode96=\the\catcode96 % `
+ \catcode123=\the\catcode123 % {
+ \catcode124=\the\catcode124 % |
+ \catcode125=\the\catcode125 % }
+ \catcode126=\the\catcode126 % ~
+ \endlinechar=\the\endlinechar\relax
}%
+% \end{macrocode}
+% \lverb|The \noexpand here is required. This feels to me a bit surprising,
+% but is a fact, and the source of this must be in the \edef implementation
+% but I have not checked it out at this time.|
+% \begin{macrocode}
\edef\XINTrestorecatcodesendinput
{%
\XINTrestorecatcodes\noexpand\endinput %
}%
\def\XINTsetcatcodes
- {%
- \catcode61=12 % =
- \catcode32=10 % space
- \catcode13=5 % ^^M
- \endlinechar=13 %
- \catcode123=1 % {
- \catcode125=2 % }
- \catcode95=11 % _ LETTER
- \catcode35=6 % #
- \catcode44=12 % ,
- \catcode45=12 % -
- \catcode46=12 % .
- \catcode58=11 % : LETTER
- \catcode60=12 % <
- \catcode62=12 % >
- \catcode43=12 % +
- \catcode42=12 % *
- \catcode40=12 % (
- \catcode41=12 % )
- \catcode47=12 % /
- \catcode96=12 % `
- \catcode94=11 % ^ LETTER
- \catcode36=3 % $
- \catcode91=12 % [
- \catcode93=12 % ]
- \catcode33=12 % ! (xintexpr.sty will use catcode 11)
- \catcode64=11 % @ LETTER
- \catcode38=7 % & for \romannumeral`&&@ trick.
- \catcode124=12 % |
- \catcode63=11 % ? LETTER
- \catcode34=12 % "
- \catcode39=12 % '
- \catcode126=3 % ~ MATH
- \catcode59=12 % ;
- \catcode0=12 % for \romannumeral`&&@ trick
- \catcode1=3 % for ultra-safe séparateur &&A
+ {% standard settings with a few xint*sty specific ones
+ \catcode0=12 % for \romannumeral`&&@
+ \catcode1=3 % for safe separator &&A
+ \catcode13=5 % ^^M
+ \catcode32=10 % <space>
+ \catcode33=12 % ! but used as LETTER inside xintexpr.sty
+ \catcode34=12 % "
+ \catcode35=6 % #
+ \catcode36=3 % $
+ \catcode38=7 % & SUPERSCRIPT for && as replacement of ^^
+ \catcode39=12 % '
+ \catcode40=12 % (
+ \catcode41=12 % )
+ \catcode42=12 % *
+ \catcode43=12 % +
+ \catcode44=12 % ,
+ \catcode45=12 % -
+ \catcode46=12 % .
+ \catcode47=12 % /
+ \catcode58=11 % : LETTER
+ \catcode59=12 % ;
+ \catcode60=12 % <
+ \catcode61=12 % =
+ \catcode62=12 % >
+ \catcode63=11 % ? LETTER
+ \catcode64=11 % @ LETTER
+ \catcode91=12 % [
+ \catcode93=12 % ]
+ \catcode94=11 % ^ LETTER
+ \catcode95=11 % _ LETTER
+ \catcode96=12 % `
+ \catcode123=1 % {
+ \catcode124=12 % |
+ \catcode125=2 % }
+ \catcode126=3 % ~ MATH SHIFT
+ \endlinechar=13 %
}%
- \let\XINT_setcatcodes\XINTsetcatcodes
- \let\XINT_restorecatcodes\XINTrestorecatcodes
\XINTsetcatcodes
}%
\PrepareCatcodes
@@ -20162,7 +20758,7 @@ math shift catcode.
\fi
\XINT_providespackage
\ProvidesPackage {xintkernel}%
- [2022/05/18 v1.4k Paraphernalia for the xint packages (JFB)]%
+ [2022/05/29 v1.4l Paraphernalia for the xint packages (JFB)]%
% \end{macrocode}
% \subsection{Constants}
% \begin{macrocode}
@@ -20204,10 +20800,14 @@ math shift catcode.
\fi
% \end{macrocode}
% \subsection{Token management utilities}
+% \added{1.2}
+% Check if \cs{empty} and \cs{space} have their standard meanings
+% and raise a warning if not.
% \changed{1.3b}
-% |\xint_gobandstop_...| macros because this is handy for
+% Moved here |\xint_gobandstop_...| macros because this is handy for
% \csbxint{RandomDigits}.
-% |1.3g| forces \cs{empty} and \cs{space} to have their standard meanings,
+% \changed{1.4}
+% Force \cs{empty} and \cs{space} to have their standard meanings,
% rather than simply alerting user in the (theoretical) case they don't that
% nothing will work.
% If some \LaTeX{} user has \cs{renewcommand}ed them they will be long and
@@ -20849,7 +21449,7 @@ math shift catcode.
}%
\newif\ifxintverbose
% \end{macrocode}
-% \subsection{\csh{ifxintglobaldefs}, \csh{XINT_global}}\label{src-xintglobaldefstrue}
+% \subsection{\csh{ifxintglobaldefs}, \csh{XINT_global}}
% \changed{1.3c}
% \begin{macrocode}
\newif\ifxintglobaldefs
@@ -21080,38 +21680,36 @@ mode) and will go ahead hoping repair\endcsname
\catcode123=1 % {
\catcode125=2 % }
\catcode64=11 % @
- \catcode35=6 % #
\catcode44=12 % ,
- \catcode45=12 % -
\catcode46=12 % .
\catcode58=12 % :
- \let\z\endgroup
+ \catcode94=7 % ^
+ \def\empty{}\def\space{ }\newlinechar10
+ \def\z{\endgroup}%
\expandafter\let\expandafter\x\csname ver@xinttools.sty\endcsname
\expandafter\let\expandafter\w\csname ver@xintkernel.sty\endcsname
- \expandafter
- \ifx\csname PackageInfo\endcsname\relax
- \def\y#1#2{\immediate\write-1{Package #1 Info: #2.}}%
+ \expandafter\ifx\csname numexpr\endcsname\relax
+ \expandafter\ifx\csname PackageWarning\endcsname\relax
+ \immediate\write128{^^JPackage xinttools Warning:^^J%
+ \space\space\space\space
+ \numexpr not available, aborting input.^^J}%
\else
- \def\y#1#2{\PackageInfo{#1}{#2}}%
+ \PackageWarningNoLine{xinttools}{\numexpr not available, aborting input}%
\fi
- \expandafter
- \ifx\csname numexpr\endcsname\relax
- \y{xinttools}{\numexpr not available, aborting input}%
- \aftergroup\endinput
+ \def\z{\endgroup\endinput}%
\else
\ifx\x\relax % plain-TeX, first loading of xinttools.sty
\ifx\w\relax % but xintkernel.sty not yet loaded.
\def\z{\endgroup\input xintkernel.sty\relax}%
\fi
\else
- \def\empty {}%
\ifx\x\empty % LaTeX, first loading,
% variable is initialized, but \ProvidesPackage not yet seen
\ifx\w\relax % xintkernel.sty not yet loaded.
\def\z{\endgroup\RequirePackage{xintkernel}}%
\fi
\else
- \aftergroup\endinput % xinttools already loaded.
+ \def\z{\endgroup\endinput}% xinttools already loaded.
\fi
\fi
\fi
@@ -21122,7 +21720,7 @@ mode) and will go ahead hoping repair\endcsname
% \begin{macrocode}
\XINT_providespackage
\ProvidesPackage{xinttools}%
- [2022/05/18 v1.4k Expandable and non-expandable utilities (JFB)]%
+ [2022/05/29 v1.4l Expandable and non-expandable utilities (JFB)]%
% \end{macrocode}
% \lverb|\XINT_toks is used in macros such as \xintFor. It is not used
% elsewhere in the xint bundle.|
@@ -23441,38 +24039,36 @@ mode) and will go ahead hoping repair\endcsname
\catcode123=1 % {
\catcode125=2 % }
\catcode64=11 % @
- \catcode35=6 % #
\catcode44=12 % ,
- \catcode45=12 % -
\catcode46=12 % .
\catcode58=12 % :
- \let\z\endgroup
+ \catcode94=7 % ^
+ \def\empty{}\def\space{ }\newlinechar10
+ \def\z{\endgroup}%
\expandafter\let\expandafter\x\csname ver@xintcore.sty\endcsname
\expandafter\let\expandafter\w\csname ver@xintkernel.sty\endcsname
- \expandafter
- \ifx\csname PackageInfo\endcsname\relax
- \def\y#1#2{\immediate\write-1{Package #1 Info: #2.}}%
+ \expandafter\ifx\csname numexpr\endcsname\relax
+ \expandafter\ifx\csname PackageWarning\endcsname\relax
+ \immediate\write128{^^JPackage xintcore Warning:^^J%
+ \space\space\space\space
+ \numexpr not available, aborting input.^^J}%
\else
- \def\y#1#2{\PackageInfo{#1}{#2}}%
+ \PackageWarningNoLine{xintcore}{\numexpr not available, aborting input}%
\fi
- \expandafter
- \ifx\csname numexpr\endcsname\relax
- \y{xintcore}{\numexpr not available, aborting input}%
- \aftergroup\endinput
+ \def\z{\endgroup\endinput}%
\else
\ifx\x\relax % plain-TeX, first loading of xintcore.sty
\ifx\w\relax % but xintkernel.sty not yet loaded.
\def\z{\endgroup\input xintkernel.sty\relax}%
\fi
\else
- \def\empty {}%
\ifx\x\empty % LaTeX, first loading,
% variable is initialized, but \ProvidesPackage not yet seen
\ifx\w\relax % xintkernel.sty not yet loaded.
\def\z{\endgroup\RequirePackage{xintkernel}}%
\fi
\else
- \aftergroup\endinput % xintkernel already loaded.
+ \def\z{\endgroup\endinput}% xintkernel already loaded.
\fi
\fi
\fi
@@ -23483,7 +24079,7 @@ mode) and will go ahead hoping repair\endcsname
% \begin{macrocode}
\XINT_providespackage
\ProvidesPackage{xintcore}%
- [2022/05/18 v1.4k Expandable arithmetic on big integers (JFB)]%
+ [2022/05/29 v1.4l Expandable arithmetic on big integers (JFB)]%
% \end{macrocode}
% \subsection{(WIP!) Error conditions and exceptions}
% \lverb|As per the Mike Cowlishaw/IBM's General Decimal Arithmetic Specification
@@ -26795,38 +27391,36 @@ mode) and will go ahead hoping repair\endcsname
\catcode123=1 % {
\catcode125=2 % }
\catcode64=11 % @
- \catcode35=6 % #
\catcode44=12 % ,
- \catcode45=12 % -
\catcode46=12 % .
\catcode58=12 % :
- \let\z\endgroup
+ \catcode94=7 % ^
+ \def\empty{}\def\space{ }\newlinechar10
+ \def\z{\endgroup}%
\expandafter\let\expandafter\x\csname ver@xint.sty\endcsname
\expandafter\let\expandafter\w\csname ver@xintcore.sty\endcsname
- \expandafter
- \ifx\csname PackageInfo\endcsname\relax
- \def\y#1#2{\immediate\write-1{Package #1 Info: #2.}}%
+ \expandafter\ifx\csname numexpr\endcsname\relax
+ \expandafter\ifx\csname PackageWarning\endcsname\relax
+ \immediate\write128{^^JPackage xint Warning:^^J%
+ \space\space\space\space
+ \numexpr not available, aborting input.^^J}%
\else
- \def\y#1#2{\PackageInfo{#1}{#2}}%
+ \PackageWarningNoLine{xint}{\numexpr not available, aborting input}%
\fi
- \expandafter
- \ifx\csname numexpr\endcsname\relax
- \y{xint}{\numexpr not available, aborting input}%
- \aftergroup\endinput
+ \def\z{\endgroup\endinput}%
\else
\ifx\x\relax % plain-TeX, first loading of xintcore.sty
\ifx\w\relax % but xintkernel.sty not yet loaded.
\def\z{\endgroup\input xintcore.sty\relax}%
\fi
\else
- \def\empty {}%
\ifx\x\empty % LaTeX, first loading,
% variable is initialized, but \ProvidesPackage not yet seen
\ifx\w\relax % xintcore.sty not yet loaded.
\def\z{\endgroup\RequirePackage{xintcore}}%
\fi
\else
- \aftergroup\endinput % xint already loaded.
+ \def\z{\endgroup\endinput}% xint already loaded.
\fi
\fi
\fi
@@ -26837,7 +27431,7 @@ mode) and will go ahead hoping repair\endcsname
% \begin{macrocode}
\XINT_providespackage
\ProvidesPackage{xint}%
- [2022/05/18 v1.4k Expandable operations on big integers (JFB)]%
+ [2022/05/29 v1.4l Expandable operations on big integers (JFB)]%
% \end{macrocode}
% \subsection{More token management}
% \begin{macrocode}
@@ -29374,38 +29968,36 @@ mode) and will go ahead hoping repair\endcsname
\catcode123=1 % {
\catcode125=2 % }
\catcode64=11 % @
- \catcode35=6 % #
\catcode44=12 % ,
- \catcode45=12 % -
\catcode46=12 % .
\catcode58=12 % :
- \let\z\endgroup
+ \catcode94=7 % ^
+ \def\empty{}\def\space{ }\newlinechar10
+ \def\z{\endgroup}%
\expandafter\let\expandafter\x\csname ver@xintbinhex.sty\endcsname
\expandafter\let\expandafter\w\csname ver@xintkernel.sty\endcsname
- \expandafter
- \ifx\csname PackageInfo\endcsname\relax
- \def\y#1#2{\immediate\write-1{Package #1 Info: #2.}}%
+ \expandafter\ifx\csname numexpr\endcsname\relax
+ \expandafter\ifx\csname PackageWarning\endcsname\relax
+ \immediate\write128{^^JPackage xintbinhex Warning:^^J%
+ \space\space\space\space
+ \numexpr not available, aborting input.^^J}%
\else
- \def\y#1#2{\PackageInfo{#1}{#2}}%
+ \PackageWarningNoLine{xintbinhex}{\numexpr not available, aborting input}%
\fi
- \expandafter
- \ifx\csname numexpr\endcsname\relax
- \y{xintbinhex}{\numexpr not available, aborting input}%
- \aftergroup\endinput
+ \def\z{\endgroup\endinput}%
\else
\ifx\x\relax % plain-TeX, first loading of xintbinhex.sty
\ifx\w\relax % but xintkernel.sty not yet loaded.
\def\z{\endgroup\input xintkernel.sty\relax}%
\fi
\else
- \def\empty {}%
\ifx\x\empty % LaTeX, first loading,
% variable is initialized, but \ProvidesPackage not yet seen
\ifx\w\relax % xintkernel.sty not yet loaded.
\def\z{\endgroup\RequirePackage{xintkernel}}%
\fi
\else
- \aftergroup\endinput % xintbinhex already loaded.
+ \def\z{\endgroup\endinput}% xintbinhex already loaded.
\fi
\fi
\fi
@@ -29416,7 +30008,7 @@ mode) and will go ahead hoping repair\endcsname
% \begin{macrocode}
\XINT_providespackage
\ProvidesPackage{xintbinhex}%
- [2022/05/18 v1.4k Expandable binary and hexadecimal conversions (JFB)]%
+ [2022/05/29 v1.4l Expandable binary and hexadecimal conversions (JFB)]%
% \end{macrocode}
% \subsection{Constants, etc...}
% \lverb|1.2n switches to \csname-governed expansion at various places.|
@@ -30039,25 +30631,24 @@ mode) and will go ahead hoping repair\endcsname
\catcode123=1 % {
\catcode125=2 % }
\catcode64=11 % @
- \catcode35=6 % #
\catcode44=12 % ,
- \catcode45=12 % -
\catcode46=12 % .
\catcode58=12 % :
+ \catcode94=7 % ^
+ \def\empty{}\def\space{ }\newlinechar10
\def\z{\endgroup}%
\expandafter\let\expandafter\x\csname ver@xintgcd.sty\endcsname
\expandafter\let\expandafter\w\csname ver@xint.sty\endcsname
\expandafter\let\expandafter\t\csname ver@xinttools.sty\endcsname
- \expandafter
- \ifx\csname PackageInfo\endcsname\relax
- \def\y#1#2{\immediate\write-1{Package #1 Info: #2.}}%
+ \expandafter\ifx\csname numexpr\endcsname\relax
+ \expandafter\ifx\csname PackageWarning\endcsname\relax
+ \immediate\write128{^^JPackage xintgcd Warning:^^J%
+ \space\space\space\space
+ \numexpr not available, aborting input.^^J}%
\else
- \def\y#1#2{\PackageInfo{#1}{#2}}%
+ \PackageWarningNoLine{xintgcd}{\numexpr not available, aborting input}%
\fi
- \expandafter
- \ifx\csname numexpr\endcsname\relax
- \y{xintgcd}{\numexpr not available, aborting input}%
- \aftergroup\endinput
+ \def\z{\endgroup\endinput}%
\else
\ifx\x\relax % plain-TeX, first loading of xintgcd.sty
\ifx\w\relax % but xint.sty not yet loaded.
@@ -30067,7 +30658,6 @@ mode) and will go ahead hoping repair\endcsname
\expandafter\def\expandafter\z\expandafter{\z\input xinttools.sty\relax}%
\fi
\else
- \def\empty {}%
\ifx\x\empty % LaTeX, first loading,
% variable is initialized, but \ProvidesPackage not yet seen
\ifx\w\relax % xint.sty not yet loaded.
@@ -30077,7 +30667,7 @@ mode) and will go ahead hoping repair\endcsname
\expandafter\def\expandafter\z\expandafter{\z\RequirePackage{xinttools}}%
\fi
\else
- \aftergroup\endinput % xintgcd already loaded.
+ \def\z{\endgroup\endinput}% xintgcd already loaded.
\fi
\fi
\fi
@@ -30088,7 +30678,7 @@ mode) and will go ahead hoping repair\endcsname
% \begin{macrocode}
\XINT_providespackage
\ProvidesPackage{xintgcd}%
- [2022/05/18 v1.4k Euclide algorithm with xint package (JFB)]%
+ [2022/05/29 v1.4l Euclide algorithm with xint package (JFB)]%
% \end{macrocode}
% \subsection{\csh{xintBezout}}
% \lverb|&
@@ -30646,38 +31236,36 @@ mode) and will go ahead hoping repair\endcsname
\catcode123=1 % {
\catcode125=2 % }
\catcode64=11 % @
- \catcode35=6 % #
\catcode44=12 % ,
- \catcode45=12 % -
\catcode46=12 % .
\catcode58=12 % :
- \let\z\endgroup
+ \catcode94=7 % ^
+ \def\empty{}\def\space{ }\newlinechar10
+ \def\z{\endgroup}%
\expandafter\let\expandafter\x\csname ver@xintfrac.sty\endcsname
\expandafter\let\expandafter\w\csname ver@xint.sty\endcsname
- \expandafter
- \ifx\csname PackageInfo\endcsname\relax
- \def\y#1#2{\immediate\write-1{Package #1 Info: #2.}}%
+ \expandafter\ifx\csname numexpr\endcsname\relax
+ \expandafter\ifx\csname PackageWarning\endcsname\relax
+ \immediate\write128{^^JPackage xintfrac Warning:^^J%
+ \space\space\space\space
+ \numexpr not available, aborting input.^^J}%
\else
- \def\y#1#2{\PackageInfo{#1}{#2}}%
+ \PackageWarningNoLine{xintfrac}{\numexpr not available, aborting input}%
\fi
- \expandafter
- \ifx\csname numexpr\endcsname\relax
- \y{xintfrac}{\numexpr not available, aborting input}%
- \aftergroup\endinput
+ \def\z{\endgroup\endinput}%
\else
\ifx\x\relax % plain-TeX, first loading of xintfrac.sty
\ifx\w\relax % but xint.sty not yet loaded.
\def\z{\endgroup\input xint.sty\relax}%
\fi
\else
- \def\empty {}%
\ifx\x\empty % LaTeX, first loading,
% variable is initialized, but \ProvidesPackage not yet seen
\ifx\w\relax % xint.sty not yet loaded.
\def\z{\endgroup\RequirePackage{xint}}%
\fi
\else
- \aftergroup\endinput % xintfrac already loaded.
+ \def\z{\endgroup\endinput}% xintfrac already loaded.
\fi
\fi
\fi
@@ -30688,7 +31276,7 @@ mode) and will go ahead hoping repair\endcsname
% \begin{macrocode}
\XINT_providespackage
\ProvidesPackage{xintfrac}%
- [2022/05/18 v1.4k Expandable operations on fractions (JFB)]%
+ [2022/05/29 v1.4l Expandable operations on fractions (JFB)]%
% \end{macrocode}
% \subsection{\csh{XINT_cntSgnFork}}
% \lverb|1.09i. Used internally, #1 must expand to \m@ne, \z@, or \@ne or
@@ -30769,7 +31357,7 @@ mode) and will go ahead hoping repair\endcsname
\expandafter\XINT_outfrac_P\expandafter {#2}{#1}%
}%
% \end{macrocode}
-% \subsection{\csh{XINT_inFrac}}\label{src-XINT_infrac}
+% \subsection{\csh{XINT_infrac}}
% \added{1.03}
% \lverb|&
% Parses fraction, scientific notation, etc... and produces {n}{A}{B}
@@ -30822,7 +31410,7 @@ mode) and will go ahead hoping repair\endcsname
% expression must be suitably hidden for example in \firstofone type
% constructs.
%
-% Note: when the numerator is found to be zero \XINT_inFrac *always* returns
+% Note: when the numerator is found to be zero \XINT_infrac *always* returns
% {0}{0}{1}. This behaviour must not change because 1.2g \xintFloat and
% XINTinFloat (for example) rely upon it: if the denominator on output is not
% 1, then \xintFloat assumes that the numerator is not zero.
@@ -30847,9 +31435,15 @@ mode) and will go ahead hoping repair\endcsname
% used as delimiter not as operator. Anyway, I thus fixed this problem
% belatedly here regarding \XINT_infrac.
% |
+% \changed{1.4l}
+% \lverb|&
+% The venerable \XINT_inFrac is used nowhere, only \XINT_infrac is.
+% It is deprecated and I will remove it at next major release.
+% See \xintRawBraced.
+% |
% \begin{macrocode}
-\def\XINT_inFrac {\romannumeral0\XINT_infrac }%
-\def\XINT_infrac #1%
+\def\XINT_inFrac {\romannumeral0\XINT_infrac }% this one deprecated
+\def\XINT_infrac #1% this one is core xintfrac macro
{%
\expandafter\XINT_infrac_fork\romannumeral`&&@#1\xint:/\XINT_W[\XINT_W\XINT_T
}%
@@ -31194,6 +31788,15 @@ mode) and will go ahead hoping repair\endcsname
}%
\def\XINT_raw #1#2#3{ #2/#3[#1]}%
% \end{macrocode}
+% \subsection{\csh{xintRawBraced}}
+% \added{1.4l}
+% \lverb|&
+% User level interface to core \romannumeral0\XINT_infrac. Replaces
+% \XINT_inFrac which was defined but nowhere used by the xint packages.|
+% \begin{macrocode}
+\def\xintRawBraced {\romannumeral0\xintrawbraced }%
+\let\xintrawbraced \XINT_infrac
+% \end{macrocode}
% \subsection{\csh{xintiLogTen}}
% \added{1.3e}
% \lverb|&
@@ -31277,6 +31880,44 @@ mode) and will go ahead hoping repair\endcsname
\def\XINT_spraw_a\W\XINT_spraw_p #1[\W]{ #1}%
\def\XINT_spraw_p #1[\W]{\xintpraw {#1}}%
% \end{macrocode}
+% \subsection{\csh{xintFracToSci}}
+% \added{1.4l}
+% \lverb|The macro with this name which was added here at 1.4 then had
+% various changes and finally was moved to $xintexprnameimp at 1.4k
+% is now called there
+% \xint_FracToSci_x and is private. The present macro is public and
+% behaves like the other $xintfracnameimp macros: f-expandable and
+% accepts general input. Its output is exactly the same as
+% \xint_FracToSci_x for same inputs, with the exception of the empty
+% input which \xintFracToSci will output as 0 but \xint_FracToSci_x
+% as empty. But the latter is not used by \xinteval for an empty
+% leaf as it employs then \xintexprEmptyItem.|
+% \begin{macrocode}
+\def\xintFracToSci{\romannumeral0\xintfractosci}%
+\def\xintfractosci#1{\expandafter\XINT_fractosci\romannumeral0\xintraw{#1}}%
+\def\XINT_fractosci#1#2/#3[#4]{\expanded{ %
+ \ifnum#4=\xint_c_ #1#2\else
+ \romannumeral0\expandafter\XINT_pfloat_a_fork\romannumeral0\xintrez{#1#2[#4]}%
+ \fi
+ \if\XINT_isOne{#3}1\else\if#10\else/#3\fi\fi}%
+}%
+% \end{macrocode}
+% \subsection{\csh{xintFracToDecimal}}
+% \added{1.4l}
+% \lverb|The macro with this name which was added at 1.4k to
+% $xintexprnameimp has been removed. The public variant here
+% behaves like the other
+% $xintfracnameimp macros: f-expandable and accepts general input.|
+% \begin{macrocode}
+\def\xintFracToDecimal{\romannumeral0\xintfractodecimal}%
+\def\xintfractodecimal#1{\expandafter\XINT_fractodecimal\romannumeral0\xintraw{#1}}%
+\def\XINT_fractodecimal #1#2/#3[#4]{\expanded{ %
+ \ifnum#4=\xint_c_ #1#2\else
+ \romannumeral0\expandafter\XINT_dectostr\romannumeral0\xintrez{#1#2[#4]}%
+ \fi
+ \if\XINT_isOne{#3}1\else\if#10\else/#3\fi\fi}%
+}%
+% \end{macrocode}
% \subsection{\csh{xintRawWithZeros}}
% \lverb|&
% This was called \xintRaw in versions earlier than 1.07|
@@ -31476,12 +32117,11 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
\expandafter-\romannumeral0\XINT_sgnfrac_P
}%
% \end{macrocode}
-% \subsection{\csh{xintTeXfromSci}}
+% \subsection{\csh{xintTeXFromSci}}
% \added{1.4g}
% \lverb|The main problem is how to name this and related macros.
%
-% I use \expanded here, as \xintFracToSci is not f-expandable. But why do I
-% bother with the external \expanded?
+% I use \expanded here, as \xintFracToSci is not f-expandable.
%
% Some complications as I want this to be usable on output of \xintFracToSci
% hence need to handle the case of a /B. After some hesitations I ended with
@@ -31490,16 +32130,27 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
%:- if scientific part, postfix /B as \cdot B^{-1}
%)
% |
+% \changed{1.4l}
+% \lverb|Suppress external \expanded. Keep internal one.
+%
+% Rename \xintTeXFromSci from \xintTeXfromSci. Keep deprecated old name
+% for the moment.
+%
+% Add \xintTeXFromScifracmacro. Make it \protected.
+%
+% Nota bene: catcode of ^ is normal one here (else nothing would work).
+% |
% \begin{macrocode}
-\def\xintTeXfromSci#1%
+\def\xintTeXfromSci{\xintfracTeXDeprecation\xintTeXfromSci\xintTeXFromSci}%
+\def\xintTeXFromSci#1%
{%
- \expanded{\expandafter\XINT_texfromsci\expanded{#1}/\relax/\xint:}%
+ \expandafter\XINT_texfromsci\expanded{#1}/\relax/\xint:
}%
\def\XINT_texfromsci #1/#2#3/#4\xint:
{%
\XINT_texfromsci_a #1e\relax e\xint:
{\ifx\relax#2\xint_dothis\xint_firstofone\fi
- \xint_orthat{\XINT_texfromsci_frac{#2#3}}}%
+ \xint_orthat{\xintTeXFromScifracmacro{#2#3}}}%
{\unless\ifx\relax#2\cdot{#2#3}^{-1}\fi}%
}%
\def\XINT_texfromsci_a #1e#2#3e#4\xint:#5#6%
@@ -31507,9 +32158,9 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
\ifx\relax#2#5{#1}\else#1\cdot10^{#2#3}#6\fi
}%
\ifdefined\frac
- \def\XINT_texfromsci_frac#1#2{\noexpand\frac{#2}{#1}}%
+ \protected\def\xintTeXFromScifracmacro#1#2{\frac{#2}{#1}}%
\else
- \def\XINT_texfromsci_frac#1#2{{#2\over#1}}%
+ \protected\def\xintTeXFromScifracmacro#1#2{{#2\over#1}}%
\fi
% \end{macrocode}
% \subsection{\csh{xintTeXOver}}
@@ -33219,6 +33870,20 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
\def\xintSgn {\romannumeral0\xintsgn }%
\def\xintsgn #1{\expandafter\XINT_sgn\romannumeral0\xintraw {#1}\xint:}%
% \end{macrocode}
+% \subsection{\csh{xintSignBit}}
+% \added{1.4l}
+% \begin{macrocode}
+\def\xintSignBit {\romannumeral0\xintsignbit }%
+\def\xintsignbit #1{\expandafter\XINT_signbit\romannumeral0\xintraw {#1}\xint:}%
+\def\XINT_signbit #1#2\xint:
+{%
+ \xint_UDzerominusfork
+ #1-{ 0}%
+ 0#1{ 1}%
+ 0-{ 0}%
+ \krof
+}%
+% \end{macrocode}
% \subsection{\csh{xintGCD}}
% \changed{1.4}
% They replace the former \xintgcdnameimp macros of the same names which
@@ -33673,11 +34338,11 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
\expandafter\XINT_float_post
\romannumeral0\XINTinfloat[\XINTdigits]{#1}\XINTdigits.%
}%
-\def\XINT_float_opt [\xint:#1]%
+\def\XINT_float_opt [\xint:
{%
- \expandafter\XINT_float_opt_a\the\numexpr #1.%
+ \expandafter\XINT_float_opt_a\the\numexpr
}%
-\def\XINT_float_opt_a #1.#2%
+\def\XINT_float_opt_a #1]#2%
{%
\expandafter\XINT_float_post
\romannumeral0\XINTinfloat[#1]{#2}#1.%
@@ -33698,6 +34363,76 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
}%
\def\XINT_float_pos_done #1.#2;{ #2e#1}%
% \end{macrocode}
+% \subsection{\csh{xintFloatBraced}}
+% \added{1.4l}
+%\lverb|&
+% Je ne le fais pas comme un wrapper au-dessus de \xintFloat
+% car c'est pénible avec argument optionnel donc finalemnt
+% on est obligé de rajouter overhead comme ici.
+%
+%( Hésitation si on obéit à \xintFloatZero ou pas. Finalement non.
+%: Hésitation si on renvoie avec séparateur décimal ou pas.
+%: Hésitation si on met l'exposant scientifique en premier.
+%: Hésitation si on sépare le signe pour le mettre en premier.
+%: Hésitation si on renvoie un exposant pour mantisse normalisée&
+% ou pas normalisée.
+%)
+%
+% Finalement je décide {signe}{exposant}{mantisse sans point décimal}.
+% Avec en fait 0 ou 1 pour signe (mais ce sign bit mais ça n'a pas grand
+% sens en décimal...). Non finalement mantisse avec point décimal.
+% |
+% \begin{macrocode}
+\def\xintFloatBraced{\romannumeral0\xintfloatbraced }%
+\def\xintfloatbraced#1{\XINT_floatbr_chkopt #1\xint:}%
+\def\XINT_floatbr_chkopt #1%
+{%
+ \ifx [#1\expandafter\XINT_floatbr_opt
+ \else\expandafter\XINT_floatbr_noopt
+ \fi #1%
+}%
+\def\XINT_floatbr_noopt #1\xint:%
+{%
+ \expandafter\XINT_floatbr_post
+ \romannumeral0\XINTinfloat[\XINTdigits]{#1}\XINTdigits.%
+}%
+\def\XINT_floatbr_opt [\xint:
+{%
+ \expandafter\XINT_floatbr_opt_a\the\numexpr
+}%
+\def\XINT_floatbr_opt_a #1]#2%
+{%
+ \expandafter\XINT_floatbr_post
+ \romannumeral0\XINTinfloat[#1]{#2}#1.%
+}%
+\def\XINT_floatbr_post #1%
+{%
+ \xint_UDzerominusfork
+ #1-\XINT_floatbr_zero
+ 0#1\XINT_floatbr_neg
+ 0-\XINT_floatbr_pos
+ \krof #1%
+}%
+% \end{macrocode}
+%\lverb|&
+% Hésitation à faire
+%( \def\XINT_floatbr_zero #1]#2.{\expandafter\XINT_floatbr_zero_a\xintFloatZero e0e\relax}%
+%: \def\XINT_floatbr_zero_a#1e#2e#3\relax{{#1}{#2}}%
+%)
+% Finalement non. Et même je décide de renvoyer autant de zéros que P.
+% De plus depuis j'ai opté pour {sign bit}{exposant}{mantisse}
+% Hésitation si mantisse avec ou sans le séparateur décimal.
+% Est-ce que je devrais mettre plutôt -0+ au début?
+% |
+% \begin{macrocode}
+\def\XINT_floatbr_zero #1]#2.{\expanded{{0}{0}{0.\xintReplicate{#2-\xint_c_i}0}}}%
+\def\XINT_floatbr_neg-{\expandafter\XINT_floatbr_neg_a\romannumeral0\XINT_floatbr_pos}%
+\def\XINT_floatbr_neg_a#1{{1}}%
+\def\XINT_floatbr_pos #1#2[#3]#4.%
+{%
+ \expanded{{0}{\the\numexpr#3+#4-\xint_c_i}}{#1.#2}%
+}%
+% \end{macrocode}
% \subsection{\csh{XINTinFloat}, \csh{XINTinFloatS}}
% \lverb|&
% This routine is like \xintFloat but produces an output of the shape A[N]
@@ -33763,12 +34498,13 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
\def\XINT_infloatS_clean_a !#1.{ }%
% \end{macrocode}
% \lverb|début de la routine proprement dite,
-% l'argument optionnel est obligatoire.|
+% l'argument optionnel est obligatoire.
+% |
% \begin{macrocode}
-\def\XINT_infloat [#1]#2%
+\def\XINT_infloat [#1]%#2%
{%
\expandafter\XINT_infloat_a\the\numexpr #1\expandafter.%
- \romannumeral0\XINT_infrac {#2}%
+ \romannumeral0\XINT_infrac% {#2}%
}%
% \end{macrocode}
% \lverb| #1=P, #2=n, #3=A, #4=B.|
@@ -34077,6 +34813,11 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
% \added{1.3e}
% \lverb|Le comportement pour un input nul est non
% encore finalisé. Il changera lorsque NaN, +Inf, -Inf existeront.
+%
+% The optional argument [#1] is in fact mandatory and #1 is
+% not pre-expanded in a \numexpr.
+%
+% The return value here 2^31-2^15 is highly undecided.
% |
% \begin{macrocode}
\def\XINTFloatiLogTen {\the\numexpr\XINTfloatilogten}%
@@ -34089,79 +34830,8 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
\xint_orthat\XINT_floatilogten_b #1%
}%
\def\XINT_floatilogten_z 0[0]#1.{-"7FFF8000\relax}%
-\def\XINT_floatilogten_a !#1.#2[#3]#4.{#3-#1+#4-1\relax}%
-\def\XINT_floatilogten_b #1[#2]#3.{#2+#3-1\relax}%
-% \end{macrocode}
-% \subsection{\csh{xintFloatSciExp}}
-% \added[2022/05/16]{1.4k}
-% \lverb|Hesitation about whether keeping the general \romannumeral0
-% trigger which is documented as general rule.|
-% \begin{macrocode}
-\def\xintFloatSciExp {\the\numexpr\xintfloatsciexp }%
-\def\xintpfloatsciexp #1{\XINT_floatsciexp_chkopt #1\xint:}%
-\def\XINT_floatsciexp_chkopt #1%
-{%
- \ifx [#1\expandafter\XINT_floatsciexp_opt
- \else\expandafter\XINT_floatsciexp_noopt
- \fi #1%
-}%
-\def\XINT_floatsciexp_noopt #1\xint:%
-{%
- \expandafter\XINT_floatsciexp\romannumeral0\XINT_infloat[\XINTdigits]{#1}%
- \XINTdigits.%
-}%
-\def\XINT_floatsciexp_opt [\xint:#1]#2%
-{%
- \expandafter\XINT_floatsciexp\romannumeral0\XINT_infloat[#1]{#2}#1.%
-}%
-\def\XINT_floatsciexp #1{%
- \if #10\xint_dothis\XINT_floatsciexp_z\fi
- \if #1!\xint_dothis\XINT_floatsciexp_a\fi
- \xint_orthat\XINT_floatsciexp_b #1%
-}%
-\def\XINT_floatsciexp_z 0[0]#1.{0\relax}%
-\def\XINT_floatsciexp_a !#1.#2[#3]#4.{#3-#1+#4-1\relax}%
-\def\XINT_floatsciexp_b #1[#2]#3.{#2+#3-1\relax}%
-% \end{macrocode}
-% \subsection{\csh{xintFloatSignificand}}
-% \added[2022/05/16]{1.4k}
-% \lverb|Hesitation about whether returning abcd... or a.bcd...
-% with a separator
-% and slight hesitation about handling of zero.|
-% \begin{macrocode}
-\def\xintFloatSignificand {\romannumeral0\xintfloatsignificand}%
-\def\xintfloatsignificand #1{\XINT_floatsgf_chkopt #1\xint:}%
-\def\XINT_floatsgf_chkopt #1%
-{%
- \ifx [#1\expandafter\XINT_floatsgf_opt
- \else\expandafter\XINT_floatsgf_noopt
- \fi #1%
-}%
-\def\XINT_floatsgf_noopt #1\xint:%
-{%
- \expandafter\XINT_floatsgf_post
- \romannumeral0\XINTinfloat[\XINTdigits]{#1}\XINTdigits.%
-}%
-\def\XINT_floatsgf_opt [\xint:#1]%
-{%
- \expandafter\XINT_floatsgf_opt_a\the\numexpr #1.%
-}%
-\def\XINT_floatsgf_opt_a #1.#2%
-{%
- \expandafter\XINT_floatsgf_post
- \romannumeral0\XINTinfloat[#1]{#2}#1.%
-}%
-\def\XINT_floatsgf_post #1%
-{%
- \xint_UDzerominusfork
- #1-\XINT_floatsgf_zero
- 0#1\XINT_floatsgf_neg
- 0-\XINT_floatsgf_pos
- \krof #1%
-}%[
-\def\XINT_floatsgf_zero #1]#2.{\XINT_dsx_addzeros{#2};}%
-\def\XINT_floatsgf_neg-{\XINT_floatsgf_pos}%
-\def\XINT_floatsgf_pos #1[#2]#3.{ #1}%
+\def\XINT_floatilogten_a !#1.#2[#3]#4.{#3-#1+#4-\xint_c_i\relax}%
+\def\XINT_floatilogten_b #1[#2]#3.{#2+#3-\xint_c_i\relax}%
% \end{macrocode}
% \subsection{\csh{xintPFloat}}
% \added{1.1}
@@ -34221,7 +34891,7 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
% as it knows it will
% be used always with a [P] argument in the xintexpr.sty context.
% |
-% \changed[2022/05/18]{1.4k}
+% \changed{1.4k}
% \lverb|&
% Addition of customization via \xintPFloatZero, \xintPFloatLengthOneSuffix,
% \xintPFloatNoSciEmax, \xintPFloatNoSciEmin which replace formerly
@@ -34257,6 +34927,13 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
%
% Threshold customizable via \xintPFloatMinTrimmed.
% |
+% \changed[2022/05/22]{1.4l}
+% \lverb|The 1.4k check for canceling the trimming of trailing zeros
+% took over priority over the later check for being an integer when
+% decimal fixed point notation was used (or being only with a one-digit
+% trimmed mantissa). In particular if user set \xintPFloatMinTrimmed to
+% the value of Digits (or P) to avoid trimming it also prevented
+% recognition of some integers (but not all). Fixed at 1.4l|
% \begin{macrocode}
\def\xintPFloatE{e}%
\def\xintPFloatNoSciEmax{\xint_c_v}% 1e6 uses sci.not.
@@ -34283,7 +34960,8 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
\expandafter\XINT_pfloat\romannumeral0\XINTinfloatS[\XINTdigits]{#1}%
\XINTdigits.%
}%
-\def\XINT_pfloat_opt [\xint:#1]#2%
+\def\XINT_pfloat_opt [\xint:{\expandafter\XINT_pfloat_opt_a\the\numexpr}%
+\def\XINT_pfloat_opt_a #1]#2%
{%
\expandafter\XINT_pfloat\romannumeral0\XINTinfloatS[#1]{#2}%
#1.%
@@ -34308,28 +34986,15 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
#3.#2.#1.%
}%
% \end{macrocode}
-%\lverb|Needed for \xintFracToSci, which uses old pre 1.4k interface.|
-% \begin{macrocode}
-\def\XINT_pfloat_keeptrimmed_fork#1%
-{%
- \xint_UDzerominusfork
- #1-\XINT_pfloat_keeptrimmed_zero
- 0#1\XINT_pfloat_keeptrimmed_neg
- 0-\XINT_pfloat_keeptrimmed_pos
- \krof #1%
-}%
-\def\XINT_pfloat_keeptrimmed_zero#1]{\expanded{ \xintPFloatZero}}%
-\def\XINT_pfloat_keeptrimmed_neg-{\expandafter-\romannumeral0\XINT_pfloat_keeptrimmed_pos}%
-\def\XINT_pfloat_keeptrimmed_pos#1/1[#2]%
-{%
- \expandafter\XINT_pfloat_a\the\numexpr\xintLength{#1}.#2.#1.%
-}%
-% \end{macrocode}
%\lverb|&
%( #1 est la longueur de la mantisse trimmée
%: #2 est Digits ou P
-%: Si #2-#1 < MinTrimmed, on remet les trailing zeros
+%: Si #2-#1 < MinTrimmed, on se prépare à peut-être remettre les trailing zeros
%)
+%
+% On teste pour #2=#1, car c'est le cas le plus fréquent (mais est-ce
+% une bonne idée) car on sait qu'alors il n'y a pas de trailing zéros
+% donc on va direct vers \XINT_pfloat_a.
%|
% \begin{macrocode}
\def\XINT_pfloat_aa #1.#2.%
@@ -34340,39 +35005,79 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
\xint_orthat\XINT_pfloat_a #1.%
}%
% \end{macrocode}
+%\lverb|Needed for \xintFracToSci, which uses old pre 1.4k interface,
+% where the P parameter was not stored for counting how many zeros
+% were trimmed. \xintFracToSci trims always.|
+% \begin{macrocode}
+\def\XINT_pfloat_a_fork#1%
+{%
+ \xint_UDzerominusfork
+ #1-\XINT_pfloat_a_zero
+ 0#1\XINT_pfloat_a_neg
+ 0-\XINT_pfloat_a_pos
+ \krof #1%
+}%
+\def\XINT_pfloat_a_zero#1]{\expanded{ \xintPFloatZero}}%
+\def\XINT_pfloat_a_neg-{\expandafter-\romannumeral0\XINT_pfloat_a_pos}%
+\def\XINT_pfloat_a_pos#1/1[#2]%
+{%
+ \expandafter\XINT_pfloat_a\the\numexpr\xintLength{#1}.#2.#1.%
+}%
+% \end{macrocode}
%\lverb|&
-%( #2 est la longueur de la mantisse trimmée
-%: #1 est P mais peut être encore sous la forme \XINTdigits
+%( #1 est P > #2 mais peut être encore sous la forme \XINTdigits
+%: #2 est la longueur de la mantisse trimmée
%: #3 est l'exposant non normalisé
%: #4 est la mantisse
%)
+% On reconstitue les trailing zéros à remettre éventuellement.
%|
% \begin{macrocode}
-\def\XINT_pfloat_i #1.#2.#3.#4.%
+\def\XINT_pfloat_i #1.#2.%#3.#4.%
{%
- \expandafter\XINT_pfloat_j
- \the\numexpr#3+#2-#1\expandafter.%
- \romannumeral0\XINT_dsx_addzerosnofuss{#1-#2}#4;.#1.%
+ \expandafter\XINT_pfloat_j\romannumeral\xintreplicate{#1-#2}0.#2.%
}%
% \end{macrocode}
-%\lverb|&
-%( #1 est le nouvel exposant non normalisé
-%: #2 est la nouvelle mantisse à P chiffres
-%: #3 est P (peut être sous forme \XINTdigits)
+% \lverb|&
+%( #1 est les trailing zeros à remettre peut-être
+%: #2 est la longueur de la mantisse trimmée
+%: #3#4 est l'exposant N pour mantisse trimmée entière
+%: #5 serait la mantisse trimmée
%)
+% On calcule l'exposant scientifique.
+%
+% La façon bizarre de mettre #3 est liée aux versions anciennes
+% de la macro, héritage conservé pour minimiser effort d'adaptation.
%|
% \begin{macrocode}
-\def\XINT_pfloat_j #1.#2.#3.{\XINT_pfloat_a#3.#1.#2.}%
-\def\XINT_pfloat_a #1.#2#3.%
+\def\XINT_pfloat_j #1.#2.#3#4.%#5.
+{%
+ \expandafter\XINT_pfloat_b\the\numexpr#2+#3#4-\xint_c_i.%
+ #3#2.#1.%
+}%
+% \end{macrocode}
+% \lverb|&
+%( #1 est la longueur de la mantisse trimmée
+%: #2#3 est l'exposant N pour mantisse trimmée
+%: #4 serait la mantisse
+%)
+% On calcule l'exposant scientifique. On est arrivé ici dans
+% une branche où on n'a pas besoin de remettre les zéros trimmés
+% donc on positionne un dernier argument vide pour \XINT_pfloat_b
+% |
+% \begin{macrocode}
+\def\XINT_pfloat_a #1.#2#3.%#4.
{%
\expandafter\XINT_pfloat_b\the\numexpr#1+#2#3-\xint_c_i.%
- #2#1.%
+ #2#1..%
}%
% \end{macrocode}
% \lverb|&
%( #1 est l'exposant scientifique K
%: #2 est le signe ou premier chiffre de l'exposant N pour mantisse trimmée
-%: Il est suivi par la longueur de la mantisse trimmée
+%: #3 serait la longueur de la mantisse trimmée
+%: #4 serait les trailing zéros
+%: #5 serait la mantisse trimmée
%)
% On va vers \XINT_float_P lorsque l'on n'utilise pas la notation
% scientifique, mais qu'on a besoin de chiffres non nuls fractionnaires,
@@ -34382,7 +35087,7 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
% scientifique et que l'exposant scientifique était strictement négatif.
%|
% \begin{macrocode}
-\def\XINT_pfloat_b #1.#2%
+\def\XINT_pfloat_b #1.#2%#3.#4.#5.
{%
\ifnum \xintPFloatNoSciEmax<#1 \xint_dothis\XINT_pfloat_sci\fi
\ifnum \xintPFloatNoSciEmin>#1 \xint_dothis\XINT_pfloat_sci\fi
@@ -34393,8 +35098,8 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
}%
% \end{macrocode}
% \lverb|&
-% #1 is the scientific exponent, #2 is the length of the trimmed mantissa.
-% (may be the \XINTdigits token)
+% #1 is the scientific exponent, #2 is the length of the trimmed mantissa,
+% #3 are the trailing zeros, #4 is the trimmed integer mantissa
%
% \xintPFloatE can be replaced by any f-expandable macro with a dot-delimited
% argument which produces a dot-delimited output.
@@ -34405,7 +35110,7 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
\ifnum#2=\xint_c_i\expandafter\XINT_pfloat_sci_i\expandafter\fi
\expandafter\XINT_pfloat_sci_a\romannumeral`&&@\xintPFloatE #1.%
}%
-\def\XINT_pfloat_sci_a #1.#2#3.{ #2.#3#1}%
+\def\XINT_pfloat_sci_a #1.#2.#3#4.{ #3.#4#2#1}%
% \end{macrocode}
% \lverb|&
% #1#2=\fi\XINT_pfloat_sci_a
@@ -34414,44 +35119,46 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
% Finally at 1.4k, \xintPFloatLengthOneSuffix for customization.
% |
% \begin{macrocode}
-\def\XINT_pfloat_sci_i #1#2#3.#4.{\expanded{#1 #4\xintPFloatLengthOneSuffix}#3}%
+\def\XINT_pfloat_sci_i #1#2#3.#4.#5.{\expanded{#1 #5\xintPFloatLengthOneSuffix}#3}%
% \end{macrocode}
% \lverb|&
-% #1=sci.exp. K, #2=mant. wd L, #3=mantissa
+% #1=sci.exp. K, #2=mant. wd L, #3=trailing zéros, #4=trimmed mantissa
%
% For _N, #1 is at most -1, for _P, #1 is at least 0. For _P there
% will be fractional digits, and #1+1 digits before the mark.
% |
% \begin{macrocode}
-\def\XINT_pfloat_N#1.#2.#3.%
+\def\XINT_pfloat_N#1.#2.#3.#4.%
{%
- \expandafter\XINT_pfloat_N_e\romannumeral\xintreplicate{-#1}{0}#3%
+ \expandafter\XINT_pfloat_N_e\romannumeral\xintreplicate{-#1}{0}#4#3%
}%
\def\XINT_pfloat_N_e 0{ 0.}%
% \end{macrocode}
% \lverb|&
+% #1=sci.exp. K, #2=mant. wd L, #3=trailing zéros, #4=trimmed mantissa
+%
% Abusive usage of internal \XINT_split_fromleft_a.
% It means using x = -1 - #1 in \xintDecSplit from xint.sty.
% We benefit also with the way \xintDecSplit is built upon
% \XINT_split_fromleft with a final clean-up which here
-% we can shortcut (non \xint_bye. not \xint_bye..).
+% we can shortcut via using terminator "\xint_bye." not "\xint_bye.."
% |
% \begin{macrocode}
-\def\XINT_pfloat_P #1.#2.#3.%
+\def\XINT_pfloat_P #1.#2.#3.#4.%
{%
\expandafter\XINT_split_fromleft_a
- \the\numexpr\xint_c_vii-#1.#3\xint_bye2345678\xint_bye.%
+ \the\numexpr\xint_c_vii-#1.#4\xint_bye2345678\xint_bye.#3%
}%
% \end{macrocode}
% \lverb|&
-% Here we have an integer so we only need to postfix mantissa #3
-% with #1+1-#2 zeros (#1=sci exp., #2=mantissa width). Less cumbersome
-% to do that with \expanded.
+% Here we have an integer so we only need to postfix the trimmed mantissa #4
+% with #1+1-#2 zeros (#1=sci exp., #2=trimmed mantissa width). Less cumbersome
+% to do that with \expanded. And the trailing zeros #3 ignored here.
% |
% \begin{macrocode}
-\def\XINT_pfloat_Ps #1.#2.#3.%
+\def\XINT_pfloat_Ps #1.#2.#3.#4.%
{%
- \expanded{ #3%
+ \expanded{ #4%
\romannumeral\xintreplicate{#1+\xint_c_i-#2}{0}\xintPFloatIntSuffix}%
}%
% \end{macrocode}
@@ -34475,7 +35182,7 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
\expandafter\XINT_floattodec\romannumeral0\XINTinfloatS[#1]%
}%
% \end{macrocode}
-% \lverb|Tentation to try to use direct access to lower entry points
+% \lverb|Temptation to try to use direct access to lower entry points
% from \xintREZ, but it dates back from very early days and uses old \Z
% delimiters (same remarks for the code jumping from \xintFracToSci
% to \xintrez)|
@@ -36168,38 +36875,36 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
\catcode123=1 % {
\catcode125=2 % }
\catcode64=11 % @
- \catcode35=6 % #
\catcode44=12 % ,
- \catcode45=12 % -
\catcode46=12 % .
\catcode58=12 % :
- \let\z\endgroup
+ \catcode94=7 % ^
+ \def\empty{}\def\space{ }\newlinechar10
+ \def\z{\endgroup}%
\expandafter\let\expandafter\x\csname ver@xintseries.sty\endcsname
\expandafter\let\expandafter\w\csname ver@xintfrac.sty\endcsname
- \expandafter
- \ifx\csname PackageInfo\endcsname\relax
- \def\y#1#2{\immediate\write-1{Package #1 Info: #2.}}%
+ \expandafter\ifx\csname numexpr\endcsname\relax
+ \expandafter\ifx\csname PackageWarning\endcsname\relax
+ \immediate\write128{^^JPackage xintseries Warning:^^J%
+ \space\space\space\space
+ \numexpr not available, aborting input.^^J}%
\else
- \def\y#1#2{\PackageInfo{#1}{#2}}%
+ \PackageWarningNoLine{xintseries}{\numexpr not available, aborting input}%
\fi
- \expandafter
- \ifx\csname numexpr\endcsname\relax
- \y{xintseries}{\numexpr not available, aborting input}%
- \aftergroup\endinput
+ \def\z{\endgroup\endinput}%
\else
\ifx\x\relax % plain-TeX, first loading of xintseries.sty
\ifx\w\relax % but xintfrac.sty not yet loaded.
\def\z{\endgroup\input xintfrac.sty\relax}%
\fi
\else
- \def\empty {}%
\ifx\x\empty % LaTeX, first loading,
% variable is initialized, but \ProvidesPackage not yet seen
\ifx\w\relax % xintfrac.sty not yet loaded.
\def\z{\endgroup\RequirePackage{xintfrac}}%
\fi
\else
- \aftergroup\endinput % xintseries already loaded.
+ \def\z{\endgroup\endinput}% xintseries already loaded.
\fi
\fi
\fi
@@ -36210,7 +36915,7 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
% \begin{macrocode}
\XINT_providespackage
\ProvidesPackage{xintseries}%
- [2022/05/18 v1.4k Expandable partial sums with xint package (JFB)]%
+ [2022/05/29 v1.4l Expandable partial sums with xint package (JFB)]%
% \end{macrocode}
% \subsection{\csh{xintSeries}}
% \begin{macrocode}
@@ -36676,38 +37381,36 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
\catcode123=1 % {
\catcode125=2 % }
\catcode64=11 % @
- \catcode35=6 % #
\catcode44=12 % ,
- \catcode45=12 % -
\catcode46=12 % .
\catcode58=12 % :
- \let\z\endgroup
+ \catcode94=7 % ^
+ \def\empty{}\def\space{ }\newlinechar10
+ \def\z{\endgroup}%
\expandafter\let\expandafter\x\csname ver@xintcfrac.sty\endcsname
\expandafter\let\expandafter\w\csname ver@xintfrac.sty\endcsname
- \expandafter
- \ifx\csname PackageInfo\endcsname\relax
- \def\y#1#2{\immediate\write-1{Package #1 Info: #2.}}%
+ \expandafter\ifx\csname numexpr\endcsname\relax
+ \expandafter\ifx\csname PackageWarning\endcsname\relax
+ \immediate\write128{^^JPackage xintcfrac Warning:^^J%
+ \space\space\space\space
+ \numexpr not available, aborting input.^^J}%
\else
- \def\y#1#2{\PackageInfo{#1}{#2}}%
+ \PackageWarningNoLine{xintcfrac}{\numexpr not available, aborting input}%
\fi
- \expandafter
- \ifx\csname numexpr\endcsname\relax
- \y{xintcfrac}{\numexpr not available, aborting input}%
- \aftergroup\endinput
+ \def\z{\endgroup\endinput}%
\else
\ifx\x\relax % plain-TeX, first loading of xintcfrac.sty
\ifx\w\relax % but xintfrac.sty not yet loaded.
\def\z{\endgroup\input xintfrac.sty\relax}%
\fi
\else
- \def\empty {}%
\ifx\x\empty % LaTeX, first loading,
% variable is initialized, but \ProvidesPackage not yet seen
\ifx\w\relax % xintfrac.sty not yet loaded.
\def\z{\endgroup\RequirePackage{xintfrac}}%
\fi
\else
- \aftergroup\endinput % xintcfrac already loaded.
+ \def\z{\endgroup\endinput}% xintcfrac already loaded.
\fi
\fi
\fi
@@ -36718,7 +37421,7 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
% \begin{macrocode}
\XINT_providespackage
\ProvidesPackage{xintcfrac}%
- [2022/05/18 v1.4k Expandable continued fractions with xint package (JFB)]%
+ [2022/05/29 v1.4l Expandable continued fractions with xint package (JFB)]%
% \end{macrocode}
% \subsection{\csh{xintCFrac}}
% \begin{macrocode}
@@ -38052,26 +38755,25 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
\catcode123=1 % {
\catcode125=2 % }
\catcode64=11 % @
- \catcode35=6 % #
\catcode44=12 % ,
- \catcode45=12 % -
\catcode46=12 % .
\catcode58=12 % :
- \def\z {\endgroup}%
+ \catcode94=7 % ^
+ \def\empty{}\def\space{ }\newlinechar10
+ \def\z{\endgroup}%
\expandafter\let\expandafter\x\csname ver@xintexpr.sty\endcsname
\expandafter\let\expandafter\w\csname ver@xintfrac.sty\endcsname
\expandafter\let\expandafter\t\csname ver@xinttools.sty\endcsname
- \expandafter
- \ifx\csname PackageInfo\endcsname\relax
- \def\y#1#2{\immediate\write-1{Package #1 Info: #2.}}%
+ % I don't think engine exists providing \expanded but not \numexpr
+ \expandafter\ifx\csname expanded\endcsname\relax
+ \expandafter\ifx\csname PackageWarning\endcsname\relax
+ \immediate\write128{^^JPackage xintexpr Warning:^^J%
+ \space\space\space\space
+ \expanded not available, aborting input.^^J}%
\else
- \def\y#1#2{\PackageInfo{#1}{#2}}%
+ \PackageWarningNoLine{xintexpr}{\expanded not available, aborting input}%
\fi
- \expandafter
- % I don't think engine exists providing \expanded but not \numexpr
- \ifx\csname expanded\endcsname\relax
- \y{xintexpr}{\expanded not available, aborting input}%
- \aftergroup\endinput
+ \def\z{\endgroup\endinput}%
\else
\ifx\x\relax % plain-TeX, first loading of xintexpr.sty
\ifx\w\relax % but xintfrac.sty not yet loaded.
@@ -38083,7 +38785,6 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
{\z\input xinttools.sty\relax}%
\fi
\else
- \def\empty {}%
\ifx\x\empty % LaTeX, first loading,
% variable is initialized, but \ProvidesPackage not yet seen
\ifx\w\relax % xintfrac.sty not yet loaded.
@@ -38095,7 +38796,7 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
{\z\RequirePackage{xinttools}}%
\fi
\else
- \aftergroup\endinput % xintexpr already loaded.
+ \def\z{\endgroup\endinput}% xintexpr already loaded.
\fi
\fi
\fi
@@ -38111,7 +38812,7 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
% \begin{macrocode}
\XINT_providespackage
\ProvidesPackage{xintexpr}%
- [2022/05/18 v1.4k Expandable expression parser (JFB)]%
+ [2022/05/29 v1.4l Expandable expression parser (JFB)]%
\catcode`! 11
\let\XINT_Cmp \xintiiCmp
\def\XINTfstop{\noexpand\XINTfstop}%
@@ -38159,11 +38860,15 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
% technique made very difficult implementation of nested structures.
% \subsubsection{Bracketed list rendering with prettifying of leaves from nested
% braced contents}
-% \lverb|1.4 The braces in \XINT:expr:toblistwith are there because there is
-% an \expanded trigger.
-%
-% 1.4d: support for polexpr 0.8 polynomial type.
-% |
+% \added{1.4}
+% \lverb|The braces in \XINT:expr:toblistwith are there because there is
+% an \expanded trigger.|
+% \changed{1.4d}
+% \lverb|Add support for the polexpr 0.8 polynomial type. See \XINT:expr:toblist_a|
+% \changed{1.4l}
+% \lverb|Let \XINT:expr:toblist_b use #1{#2} with regular { and } in case
+% macro #1 is \protected and things are output to external file where former
+% #1<#2> would end up with catcode 12 < and >.|
% \begin{macrocode}
\def\XINT:expr:toblistwith#1#2%
{%
@@ -38186,10 +38891,12 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
<%
pol([\XINT:expr:toblist_b #1!#3}^])\XINT:expr:toblist_c #1!}%
>%
-\def\XINT:expr:toblist_b #1!#2}%
-<%
- \if\relax#2\relax\xintexprEmptyItem\else#1<#2>\fi\XINT:expr:toblist_c #1!}%
->%
+\catcode`{ 1 \catcode`} 2
+\def\XINT:expr:toblist_b #1{%
+\def\XINT:expr:toblist_b ##1!##2#1%
+{%
+ \if\relax##2\relax\xintexprEmptyItem\else##1{##2}\fi\XINT:expr:toblist_c ##1!#1%
+}}\catcode`{ 12 \catcode`} 12 \XINT:expr:toblist_b<}>%
\def\XINT:expr:toblist_c #1}#2%
<%
\if ^#2\xint_dothis<\xint_gob_til_^>\fi
@@ -38322,6 +39029,11 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
%
% This code is used by \xintiexpr and \xintfloatexpr in case of optional
% argument and by the «Universal functions».
+%
+% Comment at 1.4l: this seems to be used only at private package level, else
+% I should modify \XINT:expr:mapwithin_b like I did with \XINT:expr:toblist_b
+% to use regular braces in case the applied macro is \protected and
+% things end up in external file.
% |
%
% \begin{macrocode}
@@ -38335,7 +39047,7 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
\if ^#2\expandafter\xint_gob_til_^\else\expandafter\XINT:expr:mapwithin_a\fi
#1!#2%
}%
-\begingroup % should I check lccode s generally if corrupted context at load?
+\begingroup
\catcode`[ 1 \catcode`] 2 \lccode`[`{ \lccode`]`}
\catcode`< 1 \catcode`> 2 \catcode`{ 12 \catcode`} 12
\lowercase<\endgroup
@@ -38671,8 +39383,9 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
\def\xintifsgnfloatexpr #1{\romannumeral0\xintiiifsgn {\xintthefloatexpr #1\relax}}%
\def\xintifsgniiexpr #1{\romannumeral0\xintiiifsgn {\xinttheiiexpr #1\relax}}%
% \end{macrocode}
-% \subsubsection{\csh{xintFracToSci}}
+% \subsubsection{\csh{xint_FracToSci_x}}
% \added{1.4}
+% Under the name of |\xintFracToSci| and defined in \xintfracnameimp.
% \changed{1.4e}
% \lverb|Refactored and much simplified
%
@@ -38700,83 +39413,58 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
%: If N is not zero, scientific notation like \xintPFloat,&
% i.e. behaviour like \xintfloateval apart from the rounding&
% to significands of width Digits.&
-% At 1.4k, trimming of zeros is always done, i.e.&
+% At 1.4k, trimming of zeros from A is always done, i.e.&
% the \xintPFloatMinTrimmed is ignored to keep behaviour.&
-% unchanged.
+% unchanged. Trailing zeros of B are kept as is.
%: The zero gives 0, except in A[N] and A/B[N] cases, it may give&
% 0.0
%)
% |
% \changed{1.4k}
% Moved from \xintfracnameimp to \xintexprnameimp.
+% \changed{1.4l}
+% \lverb|&
+% Renamed to \xint_FracToSci_x to make it private and provide in
+% $xintfracnameimp another \xintFracToSci with same output but which behaves
+% like other macros there: f-expandable and accepting the whole range of
+% inputs accepted by the xintfrac public macros.
+%
+% The private x-expandable macro here will have an empty output for an empty
+% input but is never used for an empty input (see \xintexprEmptyItem).
+% |
% \begin{macrocode}
-\def\xintFracToSci #1{\expandafter\XINT_FracToSci\romannumeral`&&@#1/\W[\R}%
-\def\XINT_FracToSci #1/#2#3[#4%
-{%
- \xint_gob_til_W #2\XINT_FracToSci_noslash\W
- \xint_gob_til_R #4\XINT_FracToSci_slash_noN\R
- \XINT_FracToSci_slash_N #1/#2#3[#4%
-}%
-\def\XINT_FracToSci_noslash#1\XINT_FracToSci_slash_N #2[#3%
-{%
- \xint_gob_til_R #3\XINT_FracToSci_noslash_noN\R
- \XINT_FracToSci_noslash_N #2[#3%
-}%
-\def\XINT_FracToSci_noslash_noN\R\XINT_FracToSci_noslash_N #1/\W[\R{#1}%
-\def\XINT_FracToSci_noslash_N #1[#2]/\W[\R%
-{%
- \ifnum#2=\xint_c_ #1\else
- \romannumeral0\expandafter\XINT_pfloat_keeptrimmed_fork\romannumeral0\xintrez{#1[#2]}%
- \fi
-}%
-\def\XINT_FracToSci_slash_noN\R\XINT_FracToSci_slash_N #1#2/#3/\W[\R%
-{%
- #1\xint_gob_til_zero#1\expandafter\iffalse\xint_gobble_ii0\iftrue
- #2\if\XINT_isOne{#3}1\else/#3\fi\fi
-}%
-\def\XINT_FracToSci_slash_N #1#2/#3[#4]/\W[\R%
-{%
- \ifnum#4=\xint_c_ #1#2\else
- \romannumeral0\expandafter\XINT_pfloat_keeptrimmed_fork\romannumeral0\xintrez{#1#2[#4]}%
- \fi
- \if\XINT_isOne{#3}1\else\if#10\else/#3\fi\fi
-}%
-\let\xintexprPrintOne\xintFracToSci
-% \end{macrocode}
-% \subsubsection{\csh{xintFracToDecimal}}
-% \added{1.4k}
-% \begin{macrocode}
-\def\xintFracToDecimal #1{\expandafter\XINT_FracToDecimal\romannumeral`&&@#1/\W[\R}%
-\def\XINT_FracToDecimal #1/#2#3[#4%
+\def\xint_FracToSci_x #1{\expandafter\XINT_FracToSci_x\romannumeral`&&@#1/\W[\R}%
+\def\XINT_FracToSci_x #1/#2#3[#4%
{%
- \xint_gob_til_W #2\XINT_FracToDecimal_noslash\W
- \xint_gob_til_R #4\XINT_FracToDecimal_slash_noN\R
- \XINT_FracToDecimal_slash_N #1/#2#3[#4%
+ \xint_gob_til_W #2\XINT_FracToSci_x_noslash\W
+ \xint_gob_til_R #4\XINT_FracToSci_x_slash_noN\R
+ \XINT_FracToSci_x_slash_N #1/#2#3[#4%
}%
-\def\XINT_FracToDecimal_noslash#1\XINT_FracToDecimal_slash_N #2[#3%
+\def\XINT_FracToSci_x_noslash#1\XINT_FracToSci_x_slash_N #2[#3%
{%
- \xint_gob_til_R #3\XINT_FracToDecimal_noslash_noN\R
- \XINT_FracToDecimal_noslash_N #2[#3%
+ \xint_gob_til_R #3\XINT_FracToSci_x_noslash_noN\R
+ \XINT_FracToSci_x_noslash_N #2[#3%
}%
-\def\XINT_FracToDecimal_noslash_noN\R\XINT_FracToDecimal_noslash_N #1/\W[\R{#1}%
-\def\XINT_FracToDecimal_noslash_N #1[#2]/\W[\R%
+\def\XINT_FracToSci_x_noslash_noN\R\XINT_FracToSci_x_noslash_N #1/\W[\R{#1}%
+\def\XINT_FracToSci_x_noslash_N #1[#2]/\W[\R%
{%
\ifnum#2=\xint_c_ #1\else
- \romannumeral0\expandafter\XINT_dectostr\romannumeral0\xintrez{#1[#2]}%
+ \romannumeral0\expandafter\XINT_pfloat_a_fork\romannumeral0\xintrez{#1[#2]}%
\fi
}%
-\def\XINT_FracToDecimal_slash_noN\R\XINT_FracToDecimal_slash_N #1#2/#3/\W[\R%
+\def\XINT_FracToSci_x_slash_noN\R\XINT_FracToSci_x_slash_N #1#2/#3/\W[\R%
{%
#1\xint_gob_til_zero#1\expandafter\iffalse\xint_gobble_ii0\iftrue
#2\if\XINT_isOne{#3}1\else/#3\fi\fi
}%
-\def\XINT_FracToDecimal_slash_N #1#2/#3[#4]/\W[\R%
+\def\XINT_FracToSci_x_slash_N #1#2/#3[#4]/\W[\R%
{%
\ifnum#4=\xint_c_ #1#2\else
- \romannumeral0\expandafter\XINT_dectostr\romannumeral0\xintrez{#1#2[#4]}%
+ \romannumeral0\expandafter\XINT_pfloat_a_fork\romannumeral0\xintrez{#1#2[#4]}%
\fi
\if\XINT_isOne{#3}1\else\if#10\else/#3\fi\fi
}%
+\let\xintexprPrintOne\xint_FracToSci_x
% \end{macrocode}
% \subsubsection{Small bits we have to put somewhere}
% \lverb|&
@@ -45144,12 +45832,35 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
}%
\let\XINT_tmpa\undefined \let\XINT_tmpb\undefined \let\XINT_tmpc\undefined
\let\XINT_tmpd\undefined \let\XINT_tmpe\undefined
-\ifdefined\RequirePackage\expandafter\xint_firstoftwo\else\expandafter\xint_secondoftwo\fi
-{\RequirePackage{xinttrig}%
-\RequirePackage{xintlog}}%
-{\input xinttrig.sty
-\input xintlog.sty
-}%
+% \end{macrocode}
+%\lverb|1.4l makes \usepackage{xintlog} with no prior \usepackage{xintexpr}
+% not abort but attempt to do the right thing. We have to work-around the
+% fact that LaTeX will ignore a \usepackage here. Simpler for non-LaTeX.
+%
+% In all cases, notice that the input of xintlog.sty and xinttrig.sty is done
+% with xintexpr catcodes in place. And xintlog will sanitize catcodes at time
+% of loading poormanlog. Attention also to not mix-up things at time of
+% restoring catcodes. This is reason why xintlog.sty and xinttrig.sty have
+% their own endinput wrappers. And that the rescue attempt of loading
+% xintexpr (which will load xintlog) from xintlog itself is done carefully.
+%
+% |
+% \begin{macrocode}
+\ifdefined\RequirePackage
+ \ifcsname ver@xinttrig.sty\endcsname
+ \@@input xinttrig.sty\relax
+ \else
+ \RequirePackage{xinttrig}%
+ \fi
+ \ifcsname ver@xintlog.sty\endcsname
+ \@@input xintlog.sty\relax
+ \else
+ \RequirePackage{xintlog}%
+ \fi
+\else
+ \input xinttrig.sty
+ \input xintlog.sty
+\fi
\XINTrestorecatcodesendinput%
% \end{macrocode}
% \StoreCodelineNo {xintexpr}
@@ -45241,6 +45952,17 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
% 2021 standards (not a period of enlightenment generally speaking, though).
%
% \subsection{Catcodes, \protect\eTeX{} and reload detection}
+% \changed{1.4l}
+% \lverb|Silly paranoid modification of \z in case { and } do not have their
+% normal catcodes when xinttrig.sty is reloaded (initial loading via
+% xintexpr.sty does not need this), to define \XINTtrigendinput there and not
+% after the \endgroup from \z has already restored possibly bad catcodes.
+%
+% 1.4l handles much better the situation with \usepackage{xinttrig} without
+% previous loading of xintexpr (or same with \input and etex). cf comments in
+% xintlog.sty.
+%
+%|
% \begin{macrocode}
\begingroup\catcode61\catcode48\catcode32=10\relax%
\catcode13=5 % ^^M
@@ -45250,35 +45972,49 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
\catcode64=11 % @
\catcode35=6 % #
\catcode44=12 % ,
- \catcode45=12 % -
\catcode46=12 % .
\catcode58=12 % :
\catcode94=7 % ^
- \def\z{\endgroup}%
\def\empty{}\def\space{ }\newlinechar10
+ \def\z{\endgroup}%
+ \expandafter\let\expandafter\x\csname ver@xinttrig.sty\endcsname
\expandafter\let\expandafter\w\csname ver@xintexpr.sty\endcsname
\expandafter
- \ifx\csname PackageInfo\endcsname\relax
- \def\y#1#2{\immediate\write-1{Package #1 Info:^^J%
- \space\space\space\space#2.}}%
+ \ifx\csname PackageWarning\endcsname\relax
+ \def\y#1#2{\immediate\write128{^^JPackage #1 Warning:^^J%
+ \space\space\space\space#2.^^J}}%
\else
- \def\y#1#2{\PackageInfo{#1}{#2}}%
+ \def\y#1#2{\PackageWarningNoLine{#1}{#2}}%
\fi
\expandafter
\ifx\csname numexpr\endcsname\relax
\y{xinttrig}{\numexpr not available, aborting input}%
- \aftergroup\endinput
+ \def\z{\endgroup\endinput}%
\else
\ifx\w\relax % xintexpr.sty not yet loaded.
+ \edef\MsgBrk{^^J\space\space\space\space}%
\y{xinttrig}%
- {Loading should be via \ifx\x\empty\string\usepackage{xintexpr.sty}
- \else\string\input\space xintexpr.sty \fi
- rather, aborting}%
- \aftergroup\endinput
+ {\ifx\x\empty
+ xinttrig should not be loaded directly\MessageBreak
+ The correct way is \string\usepackage{xintexpr}.\MessageBreak
+ Will try that now%
+ \else
+ First loading of xinttrig.sty should be via
+ \string\input\space xintexpr.sty\relax\MsgBrk
+ Will try that now%
+ \fi
+ }%
+ \ifx\x\empty
+ \def\z{\endgroup\RequirePackage{xintexpr}\endinput}%
+ \else
+ \def\z{\endgroup\input xintexpr.sty\relax\endinput}%
+ \fi
+ \else
+ \def\z{\endgroup\edef\XINTtrigendinput{\XINTrestorecatcodes\noexpand\endinput}}%
\fi
\fi
\z%
-\edef\XINTtrigendinput{\XINTrestorecatcodes\noexpand\endinput}\XINTsetcatcodes%
+\XINTsetcatcodes%
\catcode`? 12
% \end{macrocode}
% \subsection{Library identification}
@@ -45288,11 +46024,11 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
\else
\expandafter\xint_secondoftwo
\fi
-{\immediate\write-1{Reloading xinttrig library using Digits=\xinttheDigits.}}%
-{\expandafter\gdef\csname xintlibver@trig\endcsname{2022/05/18 v1.4k}%
+{\immediate\write128{Reloading xinttrig library using Digits=\xinttheDigits.}}%
+{\expandafter\gdef\csname xintlibver@trig\endcsname{2022/05/29 v1.4l}%
\XINT_providespackage
\ProvidesPackage{xinttrig}%
-[2022/05/18 v1.4k Trigonometrical functions for xintexpr (JFB)]%
+[2022/05/29 v1.4l Trigonometrical functions for xintexpr (JFB)]%
}%
% \end{macrocode}
% \subsection{Ensure used letters are dummy letters}
@@ -46562,6 +47298,21 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
%
%
% \subsection{Catcodes, \protect\eTeX{} and reload detection}
+% \changed{1.4l}
+% \lverb|Silly paranoid modification of \z in case { and } do not have their
+% normal catcodes when xintlog.sty is reloaded (initial loading via
+% xintexpr.sty does not need this), to define \XINTlogendinput there and not
+% after the \endgroup from \z has already restored possibly bad catcodes.
+%
+%
+% 1.4l handles much better the situation with \usepackage{xintlog} without
+% previous loading of xintexpr (or same with \input and etex). Instead of
+% aborting with a message (which actually was wrong with LaTeX since 1.4e,
+% mentioning \input in place of \usepackage), it will initiate loading
+% xintexpr itself. This required an adaptation at end of xintexpr and some
+% care to not leave bad catcodes.
+%
+% |
% \begin{macrocode}
\begingroup\catcode61\catcode48\catcode32=10\relax%
\catcode13=5 % ^^M
@@ -46571,48 +47322,76 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
\catcode64=11 % @
\catcode35=6 % #
\catcode44=12 % ,
- \catcode45=12 % -
\catcode46=12 % .
\catcode58=12 % :
\catcode94=7 % ^
- \def\z{\endgroup}%
\def\empty{}\def\space{ }\newlinechar10
+ \def\z{\endgroup}%
+ \expandafter\let\expandafter\x\csname ver@xintlog.sty\endcsname
\expandafter\let\expandafter\w\csname ver@xintexpr.sty\endcsname
\expandafter
- \ifx\csname PackageInfo\endcsname\relax
- \def\y#1#2{\immediate\write-1{Package #1 Info:^^J%
- \space\space\space\space#2.}}%
+ \ifx\csname PackageWarning\endcsname\relax
+ \def\y#1#2{\immediate\write128{^^JPackage #1 Warning:^^J%
+ \space\space\space\space#2.^^J}}%
\else
- \def\y#1#2{\PackageInfo{#1}{#2}}%
+ \def\y#1#2{\PackageWarningNoLine{#1}{#2}}%
\fi
\expandafter
\ifx\csname numexpr\endcsname\relax
\y{xintlog}{\numexpr not available, aborting input}%
- \aftergroup\endinput
+ \def\z{\endgroup\endinput}%
\else
\ifx\w\relax % xintexpr.sty not yet loaded.
+ \edef\MsgBrk{^^J\space\space\space\space}%
\y{xintlog}%
- {Loading should be via \ifx\x\empty\string\usepackage{xintexpr.sty}
- \else\string\input\space xintexpr.sty \fi
- rather, aborting}%
- \aftergroup\endinput
+ {\ifx\x\empty
+ xintlog should not be loaded directly\MessageBreak
+ The correct way is \string\usepackage{xintexpr}.\MessageBreak
+ Will try that now%
+ \else
+ First loading of xintlog.sty should be via
+ \string\input\space xintexpr.sty\relax\MsgBrk
+ Will try that now%
+ \fi
+ }%
+ \ifx\x\empty
+ \def\z{\endgroup\RequirePackage{xintexpr}\endinput}%
+ \else
+ \def\z{\endgroup\input xintexpr.sty\relax\endinput}%
+ \fi
+ \else
+ \def\z{\endgroup\edef\XINTlogendinput{\XINTrestorecatcodes\noexpand\endinput}}%
\fi
\fi
\z%
-\edef\XINTendxintloginput{\XINTrestorecatcodes\noexpand\endinput}\XINTsetcatcodes%
+% \end{macrocode}
+% \lverb|Here we set catcodes to the package values, the current settings
+% having been saved in the \XINTlogendinput macro. We arrive here only if
+% xintlog is either loaded from xintexpr or is being reloaded via an \input
+% from \xintreloadxintlog. Else we aborted right before via \endinput and do
+% not modify catcodes. As xintexpr inputs xintlog.sty at a time the catcode
+% configuration is already the package one we pay attention to not use
+% \XINTsetupcatcodes which would badly redefine \XINTrestorecatcodesendinput
+% as executed at end of xintexpr.sty. There is slight inefficiency here to
+% execute \XINTsetcatcodes when xintexpr initiated the xintlog loading, but
+% let's live with it.|
+% \begin{macrocode}
+\XINTsetcatcodes%
% \end{macrocode}
% \subsection{Library identification}
+% \changed{1.4l}
+% \lverb|Reloading message also to Terminal not only log file.|
% \begin{macrocode}
\ifcsname xintlibver@log\endcsname
\expandafter\xint_firstoftwo
\else
\expandafter\xint_secondoftwo
\fi
-{\immediate\write-1{Reloading xintlog library using Digits=\xinttheDigits.}}%
-{\expandafter\gdef\csname xintlibver@log\endcsname{2022/05/18 v1.4k}%
+{\immediate\write128{Reloading xintlog library using Digits=\xinttheDigits.}}%
+{\expandafter\gdef\csname xintlibver@log\endcsname{2022/05/29 v1.4l}%
\XINT_providespackage
\ProvidesPackage{xintlog}%
-[2022/05/18 v1.4k Logarithms and exponentials for xintexpr (JFB)]%
+[2022/05/29 v1.4l Logarithms and exponentials for xintexpr (JFB)]%
}%
% \end{macrocode}
% \subsection{\csh{xintreloadxintlog}}
@@ -46626,23 +47405,20 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
% \lverb|&
% Attention to the catcode regime when loading poormanlog.
%
-% As I learned the hard way (I never use my user macros), at the worst moment
-% when wrapping up the final things for 1.3e release,
-% \xintexprSafeCatcodes MUST be followed by some \xintexprRestoreCatcodes
-% quickly, else next time it is used (for example by \xintdefvar) the
-% \xintexprRestoreCatcodes will restore an obsolete catcode regime...
%
% Also, for xintlog.sty to be multiple-times loadable, we need to avoid using
-% LaTeX's \RequirePackage twice.|
+% LaTeX's \RequirePackage twice.
+%
+%|
% \begin{macrocode}
-\xintexprSafeCatcodes\catcode`_ 11
+\xintexprSafeCatcodes
\unless\ifdefined\XINTinFloatPowTen
\ifdefined\RequirePackage
\RequirePackage{poormanlog}%
\else
\input poormanlog.tex
\fi\fi
-\xintexprRestoreCatcodes\XINTsetcatcodes
+\xintexprRestoreCatcodes
% \end{macrocode}
% \subsection{Macro layer on top of the poormanlog package}
% \lverb|This was moved here with some macro renames from xintfrac on occasion
@@ -47176,7 +47952,7 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
% \end{macrocode}
% \subsection{End of package loading for low Digits}
% \begin{macrocode}
-\ifnum\XINTdigits<9 \expandafter\XINTendxintloginput\fi%
+\ifnum\XINTdigits<9 \expandafter\XINTlogendinput\fi%
% \end{macrocode}
% \subsection{Stored constants}
% \lverb|The constants were obtained from Maple at 80 digits: fractional power
@@ -48635,7 +49411,7 @@ on input line \noexpand\the\inputlineno.&&J}}#2%
\XINTinFloat[\XINTdigitsormax-43]{1/9[0]}.%
}%
\fi
-\XINTendxintloginput%
+\XINTlogendinput%
% \end{macrocode}
% \StoreCodelineNo {xintlog}
% \cleardoublepage\let\xintlognameUp\undefined
@@ -48648,7 +49424,7 @@ xint.sty:205
xintbinhex.sty:53
xintcfrac.sty:183
xintcore.sty:272
-xintexpr.sty:465
+xintexpr.sty:461
xintfrac.sty:522
xintgcd.sty:41
xintkernel.sty:17
@@ -48658,15 +49434,15 @@ xinttools.sty:157
xinttrig.sty:65
\fi
% grep -o "^{%" xint*sty | wc -l
-\def\totala{ 2178}
+\def\totala{ 2174}
\iffalse
% grep -c -e "^}%" xint*sty
xint.sty:204
xintbinhex.sty:52
xintcfrac.sty:183
xintcore.sty:269
-xintexpr.sty:448
-xintfrac.sty:527
+xintexpr.sty:442
+xintfrac.sty:528
xintgcd.sty:43
xintkernel.sty:17
xintlog.sty:151
@@ -48675,7 +49451,7 @@ xinttools.sty:156
xinttrig.sty:64
\fi
% grep -o "^}%" xint*sty | wc -l
-\def\totalb{ 2162}
+\def\totalb{ 2157}
\cleardoublepage
\section{Cumulative line count}
@@ -48699,8 +49475,8 @@ xinttrig.sty:64
\TeX\strut. Version {\xintbndlversion} of {\xintbndldate}.\par
}
-\CheckSum {38925}% 1.4j
-% 38590 pour 1.4j, 38591 pour 1.4i, 38427 pour 1.4h
+\CheckSum {39032}% 1.4l
+% 38925 pour 1.4j, 38590 pour 1.4j, 38591 pour 1.4i, 38427 pour 1.4h
% 38423 pour 1.4g, 38212 pour 1.4f, 38813 pour 1.4e, 35184 pour 1.4d
% 35109 pour 1.4c, 35103 pour 1.4b, 34648 pour 1.4a, 34575 pour 1.4
% 33497 pour 1.3f, 33274 pour 1.3e, 31601 pour 1.3d, 31122 pour 1.3c
diff --git a/macros/generic/xint/xint.pdf b/macros/generic/xint/xint.pdf
index 52f8052d93..0042a3091a 100644
--- a/macros/generic/xint/xint.pdf
+++ b/macros/generic/xint/xint.pdf
Binary files differ
diff --git a/macros/latex/contrib/acmart/ACM-Reference-Format.bst b/macros/latex/contrib/acmart/ACM-Reference-Format.bst
index 7984639a6d..ef3470f542 100644
--- a/macros/latex/contrib/acmart/ACM-Reference-Format.bst
+++ b/macros/latex/contrib/acmart/ACM-Reference-Format.bst
@@ -152,7 +152,7 @@ FUNCTION { empty.or.unknown }
}
FUNCTION { empty.or.zero }
-{
+{
%% Examine the top entry and push 1 if it is empty, or is zero
duplicate$ empty$
{ pop$ #1 }
@@ -2005,7 +2005,7 @@ FUNCTION { calc.basic.label }
if$
duplicate$
year empty.or.unknown
- { "[n.\,d.]" }
+ { "{[n.\,d.]}" }
{ year field.or.null purify$ #-1 #4 substring$}
if$
*
@@ -2053,7 +2053,7 @@ FUNCTION { calc.label }
% save the year for sort processing afterwards (adding a, b, c, etc.)
%
year empty.or.unknown
- { "[n.\,d.]" }
+ { "{[n.\,d.]}" }
{ year field.or.null purify$ #-1 #4 substring$}
if$
'label.year :=
diff --git a/macros/latex/contrib/acmart/README b/macros/latex/contrib/acmart/README
index fd58d1d82e..0b833bdd1b 100644
--- a/macros/latex/contrib/acmart/README
+++ b/macros/latex/contrib/acmart/README
@@ -12,6 +12,12 @@ The production version is the one on CTAN and ACM sites.
Changes
+Version 1.85. Bug fixes
+ Added support for Creative Commons licenses (requires
+ doclicense images)
+ New journals
+ New format acmengage for ACM Engage CSEdu course materials
+
Version 1.84 Support for BibLaTeX rewritten (thanks to
Roberto Di Cosmo and Kartik Singhal)
Corrected German translation (thanks to Dirk Beyer)
@@ -45,7 +51,7 @@ Version 1.76 Added many journal abbreviations to the bst.
New experimental option: pbalance
ORCID linking code
-Version 1.75 \country is now obligatory for addresses.
+Version 1.75 Omitted \country now produces error.
Added \AtBeginMaketitle
Version 1.74 Bug fixes. A regression introduced in the font changes
@@ -53,7 +59,7 @@ Version 1.74 Bug fixes. A regression introduced in the font changes
Version 1.73 Bug fixes
The elements institution, city and country are now obligatory
- for affiliations
+ for affiliations. The absence of them produces a warning
Version 1.72 Bug fixes. Better handling of metadata.
diff --git a/macros/latex/contrib/acmart/acmart.dtx b/macros/latex/contrib/acmart/acmart.dtx
index e33a089ce8..dcb00ec66c 100644
--- a/macros/latex/contrib/acmart/acmart.dtx
+++ b/macros/latex/contrib/acmart/acmart.dtx
@@ -222,6 +222,7 @@
% \item \textsl{comment}, \url{http://www.ctan.org/pkg/comment}
% \item \textsl{cm-super}, \url{http://www.ctan.org/pkg/cm-super}
% \item \textsl{cmap}, \url{http://www.ctan.org/pkg/cmap}
+% \item \textsl{doclicense}, \url{http://www.ctan.org/pkg/doclicense}
% \item \textsl{draftwatermark}, \url{http://www.ctan.org/pkg/draftwatermark}
% \item \textsl{environ}, \url{http://www.ctan.org/pkg/environ}
% \item \textsl{etoolbox}, \url{http://www.ctan.org/pkg/etoolbox}
@@ -282,10 +283,10 @@
% \begin{verbatim}
% \documentclass[acmtog, review=false]{acmart}
% \end{verbatim}
-% The possible formats are listed in
-% Table~\ref{tab:opts_format}. Note that formats starting with |acm|
-% are intended for journals and transactions, while formats starting
-% with |sig| are intended for proceedings published as books.
+% The possible formats are listed in Table~\ref{tab:opts_format}.
+% Note that formats starting with |acm| are intended for journals,
+% transactions, and course materials, while formats starting with
+% |sig| are intended for proceedings published as books.
%
% Note that sometimes conference proceedings are published as a
% special issue (or issues) of an ACM journal. In this case, you
@@ -303,7 +304,7 @@
% manuscript & A manuscript. This is the default. \\
% acmsmall & Small single-column format. Used for CIE, CSUR,
% DLT, FAC, GAMES, JACM, JDIQ, JDS, JEA, JERIC,
-% JETC, PACMCGIT, PACMHCI, PACMPL, TAAS, TACCESS, TACO,
+% JETC, JRC, PACMCGIT, PACMHCI, PACMPL, TAAS, TACCESS, TACO,
% TALG, TALLIP (formerly TALIP), TCPS, TDS,
% TEAC, TECS, TELO, THRI, TIIS, TIOT, TISSEC, TIST, TKDD, TMIS,
% TOCE, TOCHI, TOCL,
@@ -319,6 +320,7 @@
% conferences (with the exceptions listed below) and all ICPS
% volumes.\\
% sigplan & Proceedings format for SIGPLAN conferences.\\
+%. acmengage & ACM EngageCSEdu Course materials.\\
% \bottomrule
% \end{tabularx}
% \end{table}
@@ -488,6 +490,7 @@
% Art, Science and Engineering of Programming (Programming '17)}
% \end{verbatim}
%
+%
% An ACM paper should have either \cs{acmJournal} or
% \cs{acmConference} command. If it has both (or more) commands, the
% last one takes precedence. Note that if you have the command
@@ -496,6 +499,11 @@
% formatting. In the samples directory there is a file
% |sample-acmsmall-conf.tex| with the example of this usage.
%
+% An ACM Engage material should \emph{not} use \cs{acmJournal} or
+% \cs{acmConference} command. It may use \cs{acmBooktitle} to
+% override the default \emph{ACM EngageCSEdu}. It should use \cs{acmYear}
+% to set the date of the material.
+%
%
%
% \DescribeMacro{\editor}%
@@ -1033,9 +1041,30 @@
% by IW3C2.\\
% \texttt{iw3c2w3g} & Special statement for conferences organized
% by IW3C2, when some authors are approved Google employees.\\
+% \texttt{cc} & Creative Commons license. If this key is set,
+% \textsl{doclicense} images are used to typeset the license. See
+% also \cs{setcctype} command.\\
% \bottomrule
% \end{tabularx}
% \end{table}
+%
+% \DescribeMacro{\setcctype}%
+% If Creative Commons license is used, the package by default chooses
+% CC-BY 4.0 Attribution 4.0 International license. You can override
+% this choice by the command \cs{setcctype}\oarg{version}\marg{type},
+% where \oarg{version} can be either 3.0 or 4.0 (4.0 by default), and
+% \marg{type} can be one of |zero|, |by|, |by-sa|, |by-nd|,
+% |by-nc|, |by-nc-sa|, |by-nc-nd| (see
+% \url{https://creativecommons.org/licenses/} for the explanation).
+% This command should be used in the preamble only.
+%
+% Material published under Creative Commons license should include
+% the corresponding icon. A modern \TeX\ distribution includes these
+% icons in the package \textsl{doclicense}. In case your distribution
+% does not have them, ACM provides a file \path{ccicons.zip} with
+% these icons. Just unzip it in the same directory where your
+% document is.
+%
% The ACM submission software should generate the right command for you
% to paste into your file.
%
@@ -1156,6 +1185,31 @@
% \end{verbatim}
%
%
+%\subsection{Top matter of ACM Engage materials}
+%\label{sec:ug_engage}
+%
+% ACM Engage materials resemble conference proceedings, but have some
+% special features. First, as a rule, they are released under a
+% Creative Commons license. By default CC-BY is used. However, if
+% you want to use another variant of CC license, use \cs{setcctype}
+% command, for example, |\setcctype{by-nc}|. Second, abstract is
+% called \emph{synopsis}. Third, there are special top matter items
+% used for the materials, such as \emph{Course,} \emph{Resource Type,}
+% \emph{Programming Language,} \emph{CS Topics}.
+%
+% \DescribeMacro{\setengagemetadata}%
+% These items are set with the command
+% \cs{setengagemetadata}\marg{name}\marg{value}, for example,
+% \begin{verbatim}
+% \setengagemetadata{Course}{CS1}
+% \setengagemetadata{Programming Language}{Python}
+% \setengagemetadata{Knowledge Unit}{Programming Concepts}
+% \setengagemetadata{CS Topics}{Functions, Data Types, Expressions,
+% Mathematical Reasoning}
+% \end{verbatim}
+%
+% Note that the type of Creative Commons license, if such license is
+% used, is automatically added to the metadata.
%
%\subsection{Internationalization}
%\label{sec:ug_i13n}
@@ -1963,6 +2017,7 @@
% JERIC & ACM Journal of Educational Resources in Computing\\
% JETC & ACM Journal on Emerging Technologies in Computing Systems \\
% JOCCH & ACM Journal on Computing and Cultural Heritage \\
+% JRC & ACM Journal on Responsible Computing \\
% PACMCGIT & Proceedings of the ACM on Computer Graphics and
% Interactive Techniques\\
% PACMHCI & PACM on Human-Computer Interaction\\
@@ -2087,7 +2142,7 @@
\ProvidesFile{acmart.dtx}
%</gobble>
%<class>\ProvidesClass{acmart}
-[2022/04/09 v1.84 Typesetting articles for the Association for Computing Machinery]
+[2022/05/10 v1.85 Typesetting articles for the Association for Computing Machinery]
% \end{macrocode}
%
% \changes{v1.00}{2016/04/14}{First released version}
@@ -2196,6 +2251,7 @@
% \changes{1.75}{2020/10/29}{Documentation update}
% \changes{1.78}{2021/05/01}{Documentation update: Word count}
% \changes{1.84}{2022/04/09}{New journals: JDS, GAMES}
+% \changes{1.85}{2022/05/08}{Added CC licenses}
%
% And the driver code:
% \begin{macrocode}
@@ -2253,11 +2309,12 @@
%
%
% \begin{macro}{format}
+% \changes{1.85}{2022/05/08}{New format: acmengage}
% The possible formats
% \begin{macrocode}
\define@choicekey*+{acmart.cls}{format}[\ACM@format\ACM@format@nr]{%
manuscript, acmsmall, acmlarge, acmtog, sigconf, siggraph,
- sigplan, sigchi, sigchi-a}[manuscript]{}{%
+ sigplan, sigchi, sigchi-a, acmengage}[manuscript]{}{%
\ClassError{\@classname}{The option format must be manuscript,
acmsmall, acmlarge, acmtog, sigconf, siggraph,
sigplan, sigchi or sigchi-a}}
@@ -2271,6 +2328,7 @@
\@DeclareACMFormat{sigplan}
\@DeclareACMFormat{sigchi}
\@DeclareACMFormat{sigchi-a}
+\@DeclareACMFormat{acmengage}
\ExecuteOptionsX{format}
% \end{macrocode}
%
@@ -2558,6 +2616,15 @@
%
% \end{macro}
%
+% \begin{macro}{\if@ACM@engage}
+% \changes{v1.85}{2022/05/05}{Introduced macro}
+% ACM Engage course materials have special formatting
+% \begin{macrocode}
+\newif\if@ACM@engage
+\@ACM@engagefalse
+% \end{macrocode}
+%
+% \end{macro}
%
% Setting up switches
% \begin{macrocode}
@@ -2612,6 +2679,9 @@
\or % sigchi-a
\@ACM@journalfalse
\@ACM@sigchiamodetrue
+\or % acmengage
+ \@ACM@journalfalse
+ \@ACM@engagetrue
\fi
\if@ACM@journal
\@ACM@journal@bibstriptrue
@@ -2845,6 +2915,9 @@
\else
\renewcommand\keywordsname{Keywords}%
\fi
+\if@ACM@engage
+ \renewcommand\abstractname{Synopsis}%
+\fi
\ifx\ACM@languages\@empty
\else
\RequirePackage[\ACM@languages]{babel}%
@@ -2855,6 +2928,9 @@
\renewcommand\keywordsname{Keywords}%
\fi
\renewcommand\acksname{Acknowledgements}%
+ \if@ACM@engage
+ \renewcommand\abstractname{Synopsis}%
+ \fi
}%
\addto\captionsfrench{%
\if@ACM@journal
@@ -3225,6 +3301,7 @@
% \changes{v1.55}{2018/10/20}{Now we use purple color for links}
% \changes{v1.58}{2019/26/01}{Suppressed \cs{addtocounter} in pdf
% subject}
+% \changes{1.85}{2022/05/08}{Added: acmengage}
% \begin{macrocode}
\let\@footnotemark@nolink\@footnotemark
\let\@footnotetext@nolink\@footnotetext
@@ -3249,6 +3326,7 @@
\or % sigchi
\or % sigchi-a
\urlstyle{sf}
+\or % acmengage
\fi
\AtEndPreamble{%
\if@ACM@urlbreakonhyphens
@@ -3436,13 +3514,21 @@
}%
\@mparswitchfalse
\reversemarginpar
+\or % acmengage
+ \geometry{twoside=true, head=13pt,
+ paperwidth=8.5in, paperheight=11in,
+ includeheadfoot, columnsep=2pc,
+ top=57pt, bottom=73pt, inner=54pt, outer=54pt,
+ marginparwidth=2pc,heightrounded
+ }%
\fi
% \end{macrocode}
%
%
% \begin{macro}{\parindent}
% \begin{macro}{\parskip}
-% Paragraphing
+% \changes{1.85}{2022/05/08}{Added: acmengage}
+% Paragraphing
% \begin{macrocode}
\setlength\parindent{10\p@}
\setlength\parskip{\z@}
@@ -3457,6 +3543,7 @@
\or % sigplan
\or % sigchi
\or % sigchi-a
+\or % acmengage
\fi
% \end{macrocode}
%
@@ -3563,6 +3650,8 @@
\or % sigchi
\flushbottom
\or % sigchi-a
+\or % acmengage
+ \flushbottom
\fi
% \end{macrocode}
%
@@ -3788,6 +3877,7 @@
textfont={bf, small}}
\captionsetup[table]{labelfont={bf, small},
textfont={bf, small}}
+ \or % acmengage
\fi
\fi
% \end{macrocode}
@@ -3938,6 +4028,7 @@
\def\labelenumiv{\theenumiv.}
\or % sigchi
\or % sigchi-a
+\or % acmengage
\fi
% \end{macrocode}
%
@@ -4050,6 +4141,7 @@
% \changes{1.82}{2022/02/05}{Updated abbreviations and codes for
% several journals}
% \changes{1.84}{2022/04/09}{New journals: JDS, GAMES}
+% \changes{1.85}{2022/05/08}{New journal: JRC}
%
% We use the |xkeyval| interface to define journal titles and the relevant
% information
@@ -4071,6 +4163,7 @@
JERIC,%
JETC,%
JOCCH,%
+ JRC,%
PACMCGIT,%
PACMHCI,%
PACMPL,%
@@ -4191,6 +4284,10 @@
\def\@journalNameShort{ACM J. Comput. Cult. Herit.}%
\def\@permissionCodeOne{1556-4673}%
\def\@permissionCodeTwo{1556-4711}%
+\or % JRC
+ \def\@journalName{ACM Journal on Responsible Computing}%
+ \def\@journalNameShort{ACM J. Responsib. Comput.}%
+ \def\@permissionCodeOne{2832-0565}%
\or % PACMCGIT
\def\@journalName{Proceedings of the ACM on Computer Graphics and Interactive Techniques}%
\def\@journalNameShort{Proc. ACM Comput. Graph. Interact. Tech.}%
@@ -5307,6 +5404,7 @@
% \changes{v1.51}{2018/04/05}{Suppress price if the copyright is set
% to iw3c2w3 or iw3c2w3g}
% \changes{v1.51}{2018/04/05}{Corrected the bug with price suppression}
+% \changes{v1.85}{2022/05/08}{Added CC licenses}
% Keys:
% \begin{macrocode}
\define@choicekey*{ACM@}{acmcopyrightmode}[%
@@ -5314,7 +5412,7 @@
acmcopyright,acmlicensed,rightsretained,%
usgov,usgovmixed,cagov,cagovmixed,licensedusgovmixed,%
licensedcagov,licensedcagovmixed,othergov,licensedothergov,%
- iw3c2w3,iw3c2w3g}{%
+ iw3c2w3,iw3c2w3g,cc}{%
\@printpermissiontrue
\@printcopyrighttrue
\@acmownedtrue
@@ -5361,6 +5459,10 @@
\ifnum\acm@copyrightmode=14\relax % iw3c2w3g
\@acmownedfalse
\AtBeginDocument{\acmPrice{}}%
+ \fi
+ \ifnum\acm@copyrightmode=15\relax % cc
+ \@acmownedfalse
+ \AtBeginDocument{\acmPrice{}}%
\fi}
% \end{macrocode}
%
@@ -5373,11 +5475,23 @@
%
% \end{macro}
%
+% \begin{macro}{\setcctype}
+% \changes{v1.85}{2022/05/08}{Added macro}
+% The type of Creative Commons license used
+% \begin{macrocode}
+\newcommand\setcctype[2][4.0]{%
+ \def\ACM@cc@version{#1}%
+ \def\ACM@cc@type{#2}}
+\setcctype{by}
+% \end{macrocode}
+%
+% \end{macro}
%
% \begin{macro}{\@copyrightowner}
% \changes{v1.40}{2017/06/16}{Added new copyright version:
% licensedcagov}
% \changes{v1.52}{2018/04/09}{Rewording of licenses}
+% \changes{v1.85}{2022/05/08}{Added CC licenses}
% Here is the owner of the copyright
% \begin{macrocode}
\def\@copyrightowner{%
@@ -5416,6 +5530,8 @@
\or % ic2w3wwwgoogle
IW3C2 (International World Wide Web Conference Committee), published
under Creative Commons CC-BY-NC-ND~4.0 License.
+ \or % cc
+ Copyright held by the owner/author(s).
\fi}
% \end{macrocode}
%
@@ -5436,6 +5552,7 @@
% \changes{v1.50}{2018/02/07}{New copyright statements for iw3c2w3[g]}
% \changes{v1.52}{2018/04/09}{Another rewording of copyright
% statements for iw3c2w3[g]}
+% \changes{v1.85}{2022/05/08}{Added CC licenses}
% The canned permission block.
% \begin{macrocode}
\def\@copyrightpermission{%
@@ -5560,6 +5677,23 @@
(CC-BY-NC-ND~4.0) license. Authors reserve their rights to
disseminate the work on their personal and corporate Web sites with
the appropriate attribution.
+ \or % CC
+ \IfEq{\ACM@cc@type}{zero}{%
+ \def\ACM@CC@Url{https://creativecommons.org/publicdomain/zero/1.0/legalcode}}{%
+ \edef\ACM@CC@Url{https://creativecommons.org/licenses/\ACM@cc@type/\ACM@cc@version/legalcode}}%
+ \href{\ACM@CC@Url}{\includegraphics[height=5ex]{doclicense-CC-\ACM@cc@type-88x31}}\\
+ \href{\ACM@CC@Url}{%
+ This work is licensed under a Creative Commons
+ \IfEq{\ACM@cc@type}{zero}{CC0 1.0 Universal}{%
+ \IfEq{\ACM@cc@type}{by}{Attribution}{}%
+ \IfEq{\ACM@cc@type}{by-sa}{Attribution-ShareAlike}{}%
+ \IfEq{\ACM@cc@type}{by-nd}{Attribution-NoDerivatives}{}%
+ \IfEq{\ACM@cc@type}{by-nc}{Attribution-NonCommercial}{}%
+ \IfEq{\ACM@cc@type}{by-nc-sa}{Attribution-NonCommercial-ShareAlike}{}%
+ \IfEq{\ACM@cc@type}{by-nc-nd}{Attribution-NonCommercial-NoDerivatives}{}%
+ ~\IfEq{\ACM@cc@version}{4.0}{4.0 International}{3.0 Unported}%
+ }
+ License.}%
\fi}
% \end{macrocode}
%
@@ -5657,6 +5791,30 @@
% \end{macrocode}
% \end{macro}
%
+%
+%\subsection{ACM Engage top matter}
+%\label{sec:acmengagetop}
+%
+% \begin{macro}{\@acmengagemetadata}
+% \changes{v1.85}{2022/05/08}{Introduced macro}
+% The special metadata for ACM engage course materials
+% \begin{macrocode}
+\def\@acmengagemetadata{}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\setengagemetadata}
+% \changes{v1.85}{2022/05/08}{Introduced macro}
+% Adding topic to engage metadata
+% \begin{macrocode}
+\def\setengagemetadata#1#2{%
+ \g@addto@macro{\@acmengagemetadata}{%
+ \@setengagemetadata{#1}{#2}}}
+% \end{macrocode}
+%
+% \end{macro}
+%
% \subsection{Typesetting top matter}
% \label{sec:maketitle}
%
@@ -5708,6 +5866,7 @@
% \changes{v1.75}{2020/11/15}{Added \cs{@beginmaketitlehook}}
% \changes{v1.76}{2021/04/05}{Put \cs{par} inside group for keywords}
% \changes{v1.83}{2022/02/20}{I13n}
+% \changes{v1.85}{2022/05/08}{acmengage}
% The (in)famous \cs{maketitle}. Note that in |sigchi-a| mode, authors
% are \emph{not} in the title box.
%
@@ -5765,7 +5924,11 @@
\fi
\if@ACM@manuscript\else
\if@ACM@journal@bibstrip\else % Print the conference information
+ \if@ACM@engage
+ {\itshape \@acmBooktitle, \@acmYear.}\par
+ \else
{\itshape \acmConference@shortname, \acmConference@date, \acmConference@venue}\par
+ \fi
\fi
\fi
\if@printcopyright
@@ -5806,6 +5969,7 @@
\fi}
\fi
\endgroup
+ \if@ACM@engage\@typesetengagemetadata\fi
\setcounter{footnote}{0}%
\@mkabstract
\ifx\@translatedabstracts\@empty\else
@@ -5860,7 +6024,8 @@
% \changes{v1.68}{2020/01/19}{Deleted grouping altogether}
% \changes{v1.69}{2020/02/02}{Changed dot to colon for sigplan}
% \changes{v1.78}{2021/05/02}{Again suppressed \cs{vspace} warning}
-% This macro starts sections for proceedings and uses \cs{small} for journals
+% \changes{1.85}{2022/05/08}{Added: acmengage}
+% This macro starts sections for proceedings and uses \cs{small} for journals
% \begin{macrocode}
\def\@specialsection#1{%
\let\@vspace\@vspace@orig
@@ -5884,6 +6049,8 @@
\section*{#1}%
\or % sigchi-a
\section*{#1}%
+ \or % acmengage
+ \section*{#1}%
\fi
\let\@vspace\@vspace@acm
\let\@vspacer\@vspacer@acm
@@ -5897,7 +6064,8 @@
% \changes{v1.06}{2016/05/01}{Added processing badges}
% \changes{v1.46}{2017/08/29}{Deleted rule}
% \changes{v1.78}{2021/05/16}{Added processing the overflowing title box}
-% The printing of top matter starts a new page and uses the given
+% \changes{1.85}{2022/05/08}{Added: acmengage}
+% The printing of top matter starts a new page and uses the given
% title box. Note that for |sigchi-a| we print badges here rather
% than in \cs{mktitle} since we want them in the margins.
%
@@ -5956,6 +6124,8 @@
\includegraphics[width=\@ACM@badge@width]{\@acmBadgeR@image}}%
\fi}%
\fi
+ \or % acmengage
+ \twocolumn[\box\mktitle@bx]%
\fi
}
% \end{macrocode}
@@ -5963,7 +6133,8 @@
% \end{macro}
%
% \begin{macro}{\@mktitle}
-% The title of the article
+% \changes{1.85}{2022/05/08}{Added: acmengage}
+% The title of the article
% \begin{macrocode}
\def\@mktitle{%
\ifcase\ACM@format@nr
@@ -5985,6 +6156,8 @@
\@mktitle@iii
\or % sigchi-a
\@mktitle@iv
+ \or % acmengage
+ \@mktitle@iii
\fi
}
% \end{macrocode}
@@ -5995,7 +6168,8 @@
% \changes{v1.06}{2016/05/01}{Added macro}
% \changes{v1.45}{2017/08/15}{Switched \cs{bfeseries}\cs{sffamily} to
% \cs{sffamily}\cs{bfseries}}
-% The font to typeset the title
+% \changes{1.85}{2022/05/08}{Added: acmengage}
+% The font to typeset the title
% \begin{macrocode}
\def\@titlefont{%
\ifcase\ACM@format@nr
@@ -6017,6 +6191,8 @@
\Huge\sffamily\bfseries
\or % sigchi-a
\Huge\bfseries
+ \or % acmengage
+ \Huge\sffamily\bfseries
\fi}
% \end{macrocode}
%
@@ -6025,7 +6201,8 @@
% \begin{macro}{\@subtitlefont}
% \changes{v1.06}{2016/05/01}{Added macro}
% \changes{v1.33}{2017/03/12}{Added \cs{normalsize}}
-% The font to typeset the subtitle
+% \changes{1.85}{2022/05/08}{Added: acmengage}
+% The font to typeset the subtitle
% \begin{macrocode}
\def\@subtitlefont{\normalsize
\ifcase\ACM@format@nr
@@ -6047,6 +6224,8 @@
\LARGE\mdseries
\or % sigchi-a
\mdseries
+ \or % acmengage
+ \LARGE\mdseries
\fi}
% \end{macrocode}
%
@@ -6257,7 +6436,8 @@
% \begin{macro}{\@mkauthors}
% \changes{v1.17}{2016/07/09}{TOG now uses the same authors block as
% other journals}
-% Typesetting the authors
+% \changes{1.85}{2022/05/08}{Added: acmengage}
+% Typesetting the authors
% \begin{macrocode}
\def\@mkauthors{\begingroup
\hsize=\textwidth
@@ -6280,6 +6460,8 @@
\@mkauthors@iii
\or % sigchi-a
\@mkauthors@iv
+ \or % acmengage
+ \@mkauthors@iii
\fi
\endgroup
}
@@ -6330,6 +6512,9 @@
\or % sigchi-a
\def\@authorfont{\bfseries}
\def\@affiliationfont{\mdseries}
+\or % acmengage
+ \def\@authorfont{\LARGE}
+ \def\@affiliationfont{\large}
\fi
% \end{macrocode}
%
@@ -6877,7 +7062,16 @@
%
% \end{macro}
%
-%
+% \begin{macro}{\@typesetengagemetadata}
+% \changes{v1.85}{2022/05/08}{Introduced macro}
+% Typesetting special metadata for ACM Engage
+% \begin{macrocode}
+\def\@typesetengagemetadata{%
+ \def\@setengagemetadata##1##2{\par\noindent\textbf{##1} ##2\par}%
+ \@acmengagemetadata}
+% \end{macrocode}
+%
+% \end{macro}
%
%\subsection{Headers and Footers}
%\label{sec:head_foot}
@@ -6957,7 +7151,8 @@
% \changes{v1.33}{2017/03/29}{Added macro}
% \changes{v1.34}{2017/04/10}{Rulers now are continuous}
% \changes{v1.69}{2020/02/02}{Do not increase numbers in one column format}
-% How to display the box on the right. In one column formats we do
+% \changes{1.85}{2022/05/08}{Added: acmengage}
+% How to display the box on the right. In one column formats we do
% not step the numbers.
% \begin{macrocode}
\def\ACM@linecountR{%
@@ -6981,6 +7176,8 @@
\ACM@mk@linecount
\or % sigchi-a
\ACM@mk@linecount
+ \or % acmengage
+ \ACM@mk@linecount
\fi
\begin{picture}(0,0)%
\put(20,-22){\usebox{\ACM@linecount@bx}}%
@@ -7442,6 +7639,7 @@
% \changes{v1.45}{2017/08/15}{Switched \cs{bfeseries}\cs{sffamily} to
% \cs{sffamily}\cs{bfseries}}
% \changes{v1.67}{2020/01/11}{Deleted redefinitions of sections}
+% \changes{1.85}{2022/05/08}{Added: acmengage}
% Fonts for sections etc. are different for different formats.
% \begin{macrocode}
\def\@secfont{\sffamily\bfseries\section@raggedright\MakeTextUppercase}
@@ -7478,6 +7676,9 @@
\setcounter{secnumdepth}{0}
\def\@secfont{\sffamily\bfseries\section@raggedright\MakeTextUppercase}
\def\@subsecfont{\sffamily\bfseries\section@raggedright}
+\or % acmengage
+ \def\@secfont{\bfseries\Large\section@raggedright\MakeTextUppercase}
+ \def\@subsecfont{\bfseries\Large\section@raggedright}
\fi
% \end{macrocode}
%
@@ -7569,6 +7770,7 @@
\def\@acmplainnotefont{\normalfont}
\or % sigchi
\or % sigchi-a
+\or % acmengage
\fi
% \end{macrocode}
%
@@ -7639,6 +7841,7 @@
\def\@acmdefinitionnotefont{\normalfont}
\or % sigchi
\or % sigchi-a
+\or % acmengage
\fi
% \end{macrocode}
%
@@ -7737,6 +7940,7 @@
\def\@proofindent{\noindent}
\or % sigchi
\or % sigchi-a
+\or % acmengage
\fi
% \end{macrocode}
%
@@ -7783,6 +7987,8 @@
\or % sigchi
\RequirePackage{pbalance}%
\or % sigchi-a
+ \or % acmengage
+ \RequirePackage{pbalance}%
\fi
\fi
\if@ACM@balance
@@ -7805,6 +8011,8 @@
\RequirePackage{balance}%
\or % sigchi-a
\global\@ACM@balancefalse
+ \or % acmengage
+ \RequirePackage{balance}%
\fi
\fi
}
diff --git a/macros/latex/contrib/acmart/acmart.pdf b/macros/latex/contrib/acmart/acmart.pdf
index eff9c12b4a..1ea8df54c4 100644
--- a/macros/latex/contrib/acmart/acmart.pdf
+++ b/macros/latex/contrib/acmart/acmart.pdf
Binary files differ
diff --git a/macros/latex/contrib/acmart/acmguide.pdf b/macros/latex/contrib/acmart/acmguide.pdf
index 7ae163f224..2ad7f38b26 100644
--- a/macros/latex/contrib/acmart/acmguide.pdf
+++ b/macros/latex/contrib/acmart/acmguide.pdf
Binary files differ
diff --git a/macros/latex/contrib/acmart/samples/sample-acmengage.pdf b/macros/latex/contrib/acmart/samples/sample-acmengage.pdf
new file mode 100644
index 0000000000..cd50ae2a4e
--- /dev/null
+++ b/macros/latex/contrib/acmart/samples/sample-acmengage.pdf
Binary files differ
diff --git a/macros/latex/contrib/acmart/samples/sample-acmlarge.pdf b/macros/latex/contrib/acmart/samples/sample-acmlarge.pdf
index 712051ef4b..63c033e8ea 100644
--- a/macros/latex/contrib/acmart/samples/sample-acmlarge.pdf
+++ b/macros/latex/contrib/acmart/samples/sample-acmlarge.pdf
Binary files differ
diff --git a/macros/latex/contrib/acmart/samples/sample-acmsmall-biblatex.pdf b/macros/latex/contrib/acmart/samples/sample-acmsmall-biblatex.pdf
index c8359ae059..8ca28a339b 100644
--- a/macros/latex/contrib/acmart/samples/sample-acmsmall-biblatex.pdf
+++ b/macros/latex/contrib/acmart/samples/sample-acmsmall-biblatex.pdf
Binary files differ
diff --git a/macros/latex/contrib/acmart/samples/sample-acmsmall-conf.pdf b/macros/latex/contrib/acmart/samples/sample-acmsmall-conf.pdf
index 6825c8a90f..7ce11c18ef 100644
--- a/macros/latex/contrib/acmart/samples/sample-acmsmall-conf.pdf
+++ b/macros/latex/contrib/acmart/samples/sample-acmsmall-conf.pdf
Binary files differ
diff --git a/macros/latex/contrib/acmart/samples/sample-acmsmall-submission.pdf b/macros/latex/contrib/acmart/samples/sample-acmsmall-submission.pdf
index bd3a38698d..a669bf6e70 100644
--- a/macros/latex/contrib/acmart/samples/sample-acmsmall-submission.pdf
+++ b/macros/latex/contrib/acmart/samples/sample-acmsmall-submission.pdf
Binary files differ
diff --git a/macros/latex/contrib/acmart/samples/sample-acmsmall.pdf b/macros/latex/contrib/acmart/samples/sample-acmsmall.pdf
index 627a0f494d..1d4570b898 100644
--- a/macros/latex/contrib/acmart/samples/sample-acmsmall.pdf
+++ b/macros/latex/contrib/acmart/samples/sample-acmsmall.pdf
Binary files differ
diff --git a/macros/latex/contrib/acmart/samples/sample-acmtog.pdf b/macros/latex/contrib/acmart/samples/sample-acmtog.pdf
index 8558edb183..78e6c02e70 100644
--- a/macros/latex/contrib/acmart/samples/sample-acmtog.pdf
+++ b/macros/latex/contrib/acmart/samples/sample-acmtog.pdf
Binary files differ
diff --git a/macros/latex/contrib/acmart/samples/sample-authordraft.pdf b/macros/latex/contrib/acmart/samples/sample-authordraft.pdf
index 37f660358a..a1894beb3a 100644
--- a/macros/latex/contrib/acmart/samples/sample-authordraft.pdf
+++ b/macros/latex/contrib/acmart/samples/sample-authordraft.pdf
Binary files differ
diff --git a/macros/latex/contrib/acmart/samples/sample-base.bib b/macros/latex/contrib/acmart/samples/sample-base.bib
index a782f26eda..6cebd818e2 100644
--- a/macros/latex/contrib/acmart/samples/sample-base.bib
+++ b/macros/latex/contrib/acmart/samples/sample-base.bib
@@ -1508,12 +1508,20 @@ pages = "24--31"}
@online{CTANacmart,
author = {Boris Veytsman},
- title = {acmart---{C}lass for typesetting publications of {ACM}},
+ title = {acmart---{Class} for typesetting publications of {ACM}},
year = 2017,
url = {http://www.ctan.org/pkg/acmart},
lastaccessed = {May 27, 2017}
}
+@online{doclicense,
+ author = {Robin Schneider},
+ title = {The \textsl{doclicense} package},
+ year = 2022,
+ url = {http://www.ctan.org/pkg/doclicense},
+ lastaccessed = {May 27, 2022}
+ }
+
@ARTICLE{bowman:reasoning,
author = {Bowman, Mic and Debray, Saumya K. and Peterson, Larry L.},
title = {Reasoning About Naming Systems},
diff --git a/macros/latex/contrib/acmart/samples/sample-lualatex.pdf b/macros/latex/contrib/acmart/samples/sample-lualatex.pdf
index e52aea57e9..678fa91b4c 100644
--- a/macros/latex/contrib/acmart/samples/sample-lualatex.pdf
+++ b/macros/latex/contrib/acmart/samples/sample-lualatex.pdf
Binary files differ
diff --git a/macros/latex/contrib/acmart/samples/sample-manuscript.pdf b/macros/latex/contrib/acmart/samples/sample-manuscript.pdf
index ae1d5b4670..1e4e320907 100644
--- a/macros/latex/contrib/acmart/samples/sample-manuscript.pdf
+++ b/macros/latex/contrib/acmart/samples/sample-manuscript.pdf
Binary files differ
diff --git a/macros/latex/contrib/acmart/samples/sample-sigconf-biblatex.pdf b/macros/latex/contrib/acmart/samples/sample-sigconf-biblatex.pdf
index 77e4cc038b..830091259d 100644
--- a/macros/latex/contrib/acmart/samples/sample-sigconf-biblatex.pdf
+++ b/macros/latex/contrib/acmart/samples/sample-sigconf-biblatex.pdf
Binary files differ
diff --git a/macros/latex/contrib/acmart/samples/sample-sigconf-i13n.pdf b/macros/latex/contrib/acmart/samples/sample-sigconf-i13n.pdf
index 54f5fdf09c..d809b00c0c 100644
--- a/macros/latex/contrib/acmart/samples/sample-sigconf-i13n.pdf
+++ b/macros/latex/contrib/acmart/samples/sample-sigconf-i13n.pdf
Binary files differ
diff --git a/macros/latex/contrib/acmart/samples/sample-sigconf.pdf b/macros/latex/contrib/acmart/samples/sample-sigconf.pdf
index 0267a91592..c2405c25d6 100644
--- a/macros/latex/contrib/acmart/samples/sample-sigconf.pdf
+++ b/macros/latex/contrib/acmart/samples/sample-sigconf.pdf
Binary files differ
diff --git a/macros/latex/contrib/acmart/samples/sample-sigplan.pdf b/macros/latex/contrib/acmart/samples/sample-sigplan.pdf
index df60a4d500..126b953ab3 100644
--- a/macros/latex/contrib/acmart/samples/sample-sigplan.pdf
+++ b/macros/latex/contrib/acmart/samples/sample-sigplan.pdf
Binary files differ
diff --git a/macros/latex/contrib/acmart/samples/sample-xelatex.pdf b/macros/latex/contrib/acmart/samples/sample-xelatex.pdf
index 3a4a9dc312..246ab3e7be 100644
--- a/macros/latex/contrib/acmart/samples/sample-xelatex.pdf
+++ b/macros/latex/contrib/acmart/samples/sample-xelatex.pdf
Binary files differ
diff --git a/macros/latex/contrib/acmart/samples/samples.dtx b/macros/latex/contrib/acmart/samples/samples.dtx
index a0f638aecb..a6738fc897 100644
--- a/macros/latex/contrib/acmart/samples/samples.dtx
+++ b/macros/latex/contrib/acmart/samples/samples.dtx
@@ -54,12 +54,12 @@
\acmConference[Conference acronym 'XX]{Make sure to enter the correct
conference title from your rights confirmation emai}{June 03--05,
2018}{Woodstock, NY}
-%
-% Uncomment \acmBooktitle if th title of the proceedings is different
-% from ``Proceedings of ...''!
-%
-%\acmBooktitle{Woodstock '18: ACM Symposium on Neural Gaze Detection,
-% June 03--05, 2018, Woodstock, NY}
+%%
+%% Uncomment \acmBooktitle if the title of the proceedings is different
+%% from ``Proceedings of ...''!
+%%
+%%\acmBooktitle{Woodstock '18: ACM Symposium on Neural Gaze Detection,
+%% June 03--05, 2018, Woodstock, NY}
\acmPrice{15.00}
\acmISBN{978-1-4503-XXXX-X/18/06}
%</manuscript|sigconf|authordraft|sigplan|sigchi|sigchi-a|acmsmall-conf|sigconf-i13n>
@@ -400,7 +400,6 @@ The majority of conference proceedings documentation will use the {\verb|acmconf
\begin{itemize}
\item {\texttt{acmconf}}: The default proceedings template style.
\item{\texttt{sigchi}}: Used for SIGCHI conference articles.
-\item{\texttt{sigchi-a}}: Used for SIGCHI ``Extended Abstract'' articles.
\item{\texttt{sigplan}}: Used for SIGPLAN conference articles.
\end{itemize}
@@ -961,3 +960,254 @@ massa et mattis lacinia.
\end{document}
%</manuscript|acmsmall|acmsmall-submission|acmsmall-biblatex|acmlarge|acmtog|sigconf|sigconf-biblatex|authordraft|sigplan|sigchi|sigchi-a|acmsmall-conf|sigconf-i13n>
+%
+% ACM Engage course material
+%
+%<*acmengage>
+%%
+%%
+%% Commands for TeXCount
+%<<TCMACROS
+%TC:macro \cite [option:text,text]
+%TC:macro \citep [option:text,text]
+%TC:macro \citet [option:text,text]
+%TC:envir table 0 1
+%TC:envir table* 0 1
+%TC:envir tabular [ignore] word
+%TC:envir displaymath 0 word
+%TC:envir math 0 word
+%TC:envir comment 0 0
+%TCMACROS
+%%
+%%
+%% The first command in your LaTeX source must be the \documentclass command.
+\documentclass[acmengage]{acmart}
+
+%% \BibTeX command to typeset BibTeX logo in the docs
+\AtBeginDocument{%
+ \providecommand\BibTeX{{%
+ Bib\TeX}}}
+
+%% Rights management information. This information is sent to you
+%% when you complete the rights form. These commands have SAMPLE
+%% values in them; it is your responsibility as an author to replace
+%% the commands and values with those provided to you when you
+%% complete the rights form. Note that by default course materials
+%% use Creative Commons license
+%
+\setcopyright{cc}
+\setcctype{by}
+\copyrightyear{2022}
+\acmYear{May 2022}
+\acmBooktitle{ACM EngageCSEdu}
+\acmDOI{XXXXXXX.XXXXXXX}
+
+\begin{document}
+\title{EngageCSEdu Submission Title (600 char limit)}
+\author{Author One}
+\email{author1@institution.edu}
+\affiliation{%
+ \institution{University of XXX}
+ \city{SomeCity}
+ \country{SomeCountry}}
+
+\author{Author Two}
+\email{author2@institution.xxx}
+\affiliation{%
+ \institution{Some School}
+ \city{SomeCity}
+ \country{SomeCountry}}
+
+\author{Author Three}
+\email{author3@school.xxx}
+\affiliation{%
+ \institution{A3 affiliation}
+ \city{SomeCity}
+ \country{SomeCountry}}
+
+%% The synopsis is a name for the abstract
+\begin{abstract}
+A required section. The synopsis is similar to a paper abstract. The synop-
+sis will display in the digital library as the abstract. The synopsis should
+be copied into ScholarOne as the abstract for submission. The synopsis
+should contain an overall description of the Open Educational Resource
+(OER). The synopsis lets other instructors quickly understand what this
+material is about. Include any learning objectives and a description of the
+approach taken. Put details about implementation and necessary prerequi-
+site knowledge in the Recommendations section. The following template is
+a suggested format:
+This [assignment/project/homework/lab] helps students gain experience
+and proficiency with [ e.g. arrays, for/while loops, conditional statements.]
+Students will learn how to [skills acquired].
+The reader should get an understanding of what topic is associated with
+the OER and what, if anything, the students will be asked to do.
+\end{abstract}
+
+%% Metadata for the course
+\setengagemetadata{Course}{CS1}
+\setengagemetadata{Programming Language}{Python}
+\setengagemetadata{Knowledge Unit}{Programming Concepts}
+\setengagemetadata{CS Topics}{Functions, Data Types, Expressions,
+ Mathematical Reasoning}
+
+%% Keywords
+\keywords{Arithmetic Operators, Assignment Statements, Comprehension,
+ Student Voice}
+\maketitle
+
+\section{Engagement Highlights}
+
+A required section. This section of the paper should detail how the OER engages the students. The engagement must be based on at least one evidenced-based teaching practice known to broaden participation or improve student learning. Examples include the practices from the NCWIT Engagement Practices Framework: using meaningful and relevant content, making interdisciplinary connections to CS, addressing misconceptions about the field of CS, incorporating student choice, giving effective encouragement, mitigating stereotype threat, offering student-centered assessments, providing opportunities for interaction with faculty, avoiding stereotypes, using well-structured collaborative learning, or encouraging student interaction. Other potential evidence-based practices include using culturally relevant pedagogy, or universal design for learning. All submissions must identify what evidence-based practice they incorporate and be specific in how the practice is included within the OER.
+
+Information on how to differentiate this assignment (i.e. provide different versions for students of differing abilities) could also go in this section. It could also outline how instructors might modify
+the assignment to increase enhance student engagement. If these modifications are extensive, they could also be discussed in their own section.
+
+\section{Recommendations}
+
+A required section. In this section authors should give specific recommendations and advice to other instructors who might want to adapt this resource for their own classroom. Important information to include in this section includes identifying how much time is required to introduce or complete the task, potential pitfalls or student struggles, lessons learned from using the OER, and any information on extensions or differentiation for students. Think of this section as the information you would provide a colleague before they use this OER in their classroom.
+
+\section{Additional Sections}
+
+Optional. Authors may add additional sections to fully explain all the pieces of their OER. It can (and probably should) have multiple sections and the section headers are at the discretion of the authors. Sections may expand on information presented in the synopsis, recommendations, and engagement highlights. Suggested sections include: Introduction, Background Material, Implementation Guidelines, Marking Guidelines, Extensions and Modifications, Pitfalls, Acknowledgements, Student Feedback, and References.
+
+\section{Related Online Resources}
+
+EngageCSEdu requires that all materials that are part of the OER submission be included with the submission and not just URL links to materials stored on other sites. However, any related background or reference material used to provide instructor or student knowledge as opposed to instructional material may be included as citations within the paper
+(see section \ref{sec:citations})
+or you may include a numbered list of external links and extensions in an optional section titled ``Auxilary Materials" that should come immediately before "References".
+
+\section{Materials}
+
+A required section. You must provide a list of the contents of the zipped file including a description of each contained file. This may be provided as text or as an unordered list.
+
+A single zipped file containing all the OER instructional materials including assignment handouts / specification, starter code, rubric, solution, etc. will also be submitted.
+
+\section{Meta-Data}
+
+This section is included in the template to explain the choices for the meta-data at the top of the paper. It should not be included in the final paper submission.
+
+\subsection{Course}
+
+Current courses are:
+
+\begin{itemize}
+ \item CS0 -- a breadth first introductory computing course similar to Exploring Computer Science or AP CS Principles
+ \item CS1 -- an introductory programming course covering topics normally associated with an imperative or functional programming course. Similar to an AP CS A course
+ \item Data Structures -- a follow-on course occurring after CS1 that introduces linear and non-linear data structures including implementation and usage
+ \item Discrete Math -- a course covering discrete mathematical structures such as integers, graphs and logic statements. This may include logic, set theory, combinatorics, graphy theory, number theory, topology, etc.
+\end{itemize}
+
+More than one course may be selected. If you are submitting an OER for a special topics issue of Engage, please discuss the appropriate course choice with the guest editors of the special issue.
+
+\subsection{Programming Language}
+Authors may select all that apply from the following list:
+\begin{itemize}
+ \item C
+ \item C++
+ \item C\#
+ \item Java
+ \item JavaScript
+ \item Processing
+ \item Python
+ \item Racket (DrScheme)
+ \item Scheme
+ \item Scratch
+ \item Pseudocode
+ \item Other
+ \item None
+\end{itemize}
+
+\subsection{Resource Type}
+One resource type must be selected. Current list to select from includes:
+
+\begin{itemize}
+ \item Assignment -- the most common OER type. Typically represents a task assigned to individual or groups of students that will be completed outside of class time.
+ \item Lecture slides -- an annotated set of presentation slides to introduce or explain a topic, typically a cutting-edge research topic, to a more lay audience. An example might be explaining a specific cryptography algorithm, blockchain, or an AI / ML solution to a problem.
+ \item Lab -- this represents a task assigned to an individual or group of students to be completed under supervision, usually during a closed-lab model
+ \item Project -- an assignment that is of a longer duration, perhaps multiple weeks to an entire term
+ \item Tutorial -- a task usually completed by an individual to learn some material on their own
+ \item Other -- any other type of OER that does not fit into one of the above categories
+\end{itemize}
+
+\subsection{CS Concepts}
+This is selectable from the ontology of topics found at \url{https://www.engage-csedu.org/ontology}. Up to three topics may be selected. Eventually this page will be a tool allowing you to select up to three nodes in the tree and then copy / paste the descriptive text into your document and the submission system.
+
+\subsection{Knowledge Unit}
+Authors will select the most appropriate one from the following list:
+
+\begin{itemize}
+ \item Programming Concepts -- anything involving programming
+ \item Data Structures -- anything involving data structures
+ \item Software Development Methods -- if the OER centers around software development (i.e., requirements gathering, testing, maintenance, code reviews) rather than the actual programming content
+ \item Discrete Math -- anything involving discrete math
+ \item N/A -- not applicable
+\end{itemize}
+
+\subsection{Creative Commons License}
+During the submission process on ScholarOne, authors will select one create commons license from the following list:
+
+\begin{itemize}
+ \item CC BY-SA
+ \item CC BY-NC
+ \item CC BY-NC-ND
+ \item CC BY-NC-SA
+ \item CC BY-ND
+ \item CC BY
+\end{itemize}
+
+The correct typesetting of materials under creative commons license
+requires the corresponding CC icon. A modern \TeX\ distribution
+includes these icons in the package \textsl{doclicense}
+\cite{doclicense}. In case your distribution does not have them, ACM
+provides a file \path{ccicons.zip} with these icons. Just unzip it in
+the same directory where your document is.
+
+More information on Creative Common Licensing may be found at \url{https://creativecommons.org/licenses/}.
+
+\section{Submission}
+When you make a submission using ScholarOne you must upload:
+
+\begin{itemize}
+ \item an anonymized version of this paper for review
+ \item a zipped file containing all the student-facing materials. The materials in this file must also be anonymized for the purposes of fully anonymous review.
+\end{itemize}
+
+\section{Citations and References}
+\label{sec:citations}
+We recommend using \BibTeX\ to prepare your references. The bibliography is included
+in your source document with these two commands, placed just before
+the \verb|\end{document}| command:
+\begin{verbatim}
+ \bibliographystyle{ACM-Reference-Format}
+ \bibliography{bibfile}
+\end{verbatim}
+where ``\verb|bibfile|'' is the name, without the ``\verb|.bib|''
+suffix, of the \BibTeX\ file.
+
+Here are a few examples of the types of things you might cite in an EngageCSEdu submission:
+ a book \cite{Kosiur01},
+ a journal article \cite{Abril07},
+ an informally published work \cite{Harel78},
+ an online document / world wide web resource \cite{Thornburg01, Ablamowicz07},
+ a video \cite{Obama08},
+ a software package \cite{R}, and an online dataset \cite{UMassCitations}.
+
+For other examples, see the file sample-acmsmall-conf.tex \cite{CTANacmart}.
+
+\section{Auxiliary Materials}
+This section is optional, but if included must immediately precede the References section. If there are no References, Auxiliary Materials should be last. This should be
+a numbered list of URLs with an optional brief description of the content found at each URL. Here is an example.
+\begin{enumerate}
+\item \url{https://somenews.org/xxx/} A news article relevant to this OER.
+\item \url{https://somesite.gov/xxx/} A relevant government report.
+\item \url{https://someplace.edu/xxxx/} A public data set of interest.
+\item \url{https://github.com/xxxx/} A public github project that is related.
+\end{enumerate}
+
+\bibliographystyle{ACM-Reference-Format}
+\bibliography{sample-base}
+
+
+
+\end{document}
+%</acmengage>
diff --git a/macros/latex/contrib/acmart/samples/samples.ins b/macros/latex/contrib/acmart/samples/samples.ins
index af2d55e4d9..f2331d1088 100644
--- a/macros/latex/contrib/acmart/samples/samples.ins
+++ b/macros/latex/contrib/acmart/samples/samples.ins
@@ -21,5 +21,6 @@
\file{sample-sigplan.tex}{\from{samples.dtx}{sigplan}}
\file{sample-acmsmall-conf.tex}{\from{samples.dtx}{acmsmall-conf}}
\file{sample-sigconf-i13n.tex}{\from{samples.dtx}{sigconf-i13n}}
+ \file{sample-acmengage.tex}{\from{samples.dtx}{acmengage}}
}
diff --git a/macros/latex/contrib/beamer-contrib/themes/beamerthemeamurmaple/LICENSE b/macros/latex/contrib/beamer-contrib/themes/beamerthemeamurmaple/LICENSE
new file mode 100644
index 0000000000..ffd12ae975
--- /dev/null
+++ b/macros/latex/contrib/beamer-contrib/themes/beamerthemeamurmaple/LICENSE
@@ -0,0 +1,14 @@
+Copyright 2022 Maxime CHUPIN
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3
+of this license or (at your option) any later version.
+The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.3 or later is part of all distributions of LaTeX
+version 2005/12/01 or later.
+
+This work has the LPPL maintenance status `maintained'.
+
+The Current Maintainer of this work is Maxime CHUPIN.
+
diff --git a/macros/latex/contrib/beamer-contrib/themes/beamerthemeamurmaple/README.md b/macros/latex/contrib/beamer-contrib/themes/beamerthemeamurmaple/README.md
new file mode 100644
index 0000000000..8ef8c1579d
--- /dev/null
+++ b/macros/latex/contrib/beamer-contrib/themes/beamerthemeamurmaple/README.md
@@ -0,0 +1,30 @@
+# Amurmaple
+
+This Beamer theme is a suitable theme for my use of Beamer in applied mathematics research. It meets my needs in my work. However, if you like this theme, and if you want to ask for or make improvements, don’t hesitate to write to me !
+
+## Use
+
+```latex
+\usetheme{Amurmaple}
+```
+
+## Documentation
+
+See the [PDF file](doc/beamer-amurmaple-doc.pdf).
+
+
+## Local installation
+
+Paste the file `beamerthemeAmurmaple.sty` in your local `~/texmf/tex/latex/contrib/beamer-contrib/themes/beamer-amurmaple/`.
+
+## Licence
+
+Copyright (C) 2022 by Maxime CHUPIN
+<chupin at ceremade.dauphine.fr>
+
+This work may be distributed and/or modified under the conditions of the LaTeX Project Public License, either version 1.3 of this license or (at your option) any later version. The latest version of this license is in [http://www.latex-project.org/lppl.txt](http://www.latex-project.org/lppl.txt) and version 1.3 or later is part of all distributions of LaTeXversion 2005/12/01 or later.
+%
+## Author:
+Maxime CHUPIN chupin at ceremade.dauphine.fr
+
+This work has the LPPL maintenance status "author-maintained".
diff --git a/macros/latex/contrib/beamer-contrib/themes/beamerthemeamurmaple/doc/beamer-amurmaple-doc.pdf b/macros/latex/contrib/beamer-contrib/themes/beamerthemeamurmaple/doc/beamer-amurmaple-doc.pdf
new file mode 100644
index 0000000000..02313f5b23
--- /dev/null
+++ b/macros/latex/contrib/beamer-contrib/themes/beamerthemeamurmaple/doc/beamer-amurmaple-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/beamer-contrib/themes/beamerthemeamurmaple/doc/beamer-amurmaple-doc.tex b/macros/latex/contrib/beamer-contrib/themes/beamerthemeamurmaple/doc/beamer-amurmaple-doc.tex
new file mode 100644
index 0000000000..3b07affb7b
--- /dev/null
+++ b/macros/latex/contrib/beamer-contrib/themes/beamerthemeamurmaple/doc/beamer-amurmaple-doc.tex
@@ -0,0 +1,577 @@
+% Copyright (C) 2022 by Maxime CHUPIN
+% <chupin at ceremade.dauphine.fr>
+% -------------------------------------------------------
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% Author: Maxime CHUPIN
+% chupin at ceremade.dauphine.fr
+%
+% This work has the LPPL maintenance status "author-maintained".
+
+\documentclass[10pt,aspectratio=169,english]{beamer}
+\usepackage[charter]{mathdesign}
+\usepackage{hologo}
+\usepackage{luamesh}
+
+\usepackage{babel}
+\usepackage{pgfpages}
+\usepackage{tcolorbox}
+\usepackage{biblatex}
+%\hypersetup{colorlinks=true}
+
+\tcbuselibrary{listings,breakable}
+\tcbuselibrary{documentation}
+\tcbset{
+ color command=AmurmapleRed,
+ color environment=AmurmapleRed,
+ color option=AmurmapleGreen
+}
+\usetheme[
+%nogauge,
+nomail,
+delaunay,
+%amurmapleblue
+]{Amurmaple}
+
+\lstset{
+ numberstyle=\footnotesize\color{gray},
+ keywordstyle=\ttfamily\bfseries\color{structure},
+ basicstyle=\ttfamily\normalsize,
+ commentstyle=\itshape\color{gray},
+ stringstyle=\ttfamily,
+ showstringspaces=false,
+ language=[LaTeX]TeX,
+ breaklines=true,
+ breakindent=30pt,
+ defaultdialect=[LaTeX]TeX,
+ morekeywords={usetheme,definecolor, beamerbutton, beamerskipbutton,
+ beamerreturnbutton, structure, alert, sectionpage, mail, webpage,
+ collaboration, subtitle, institute, titlegraphic, sepframe, includegraphics,
+ thanksframe, inserttitlegraphic, framesection, boxalert,appendix}
+ % frame=tb
+}
+
+
+\newtcblisting{Code}{%
+ arc=0pt,outer arc=0pt,
+ colback=structure!3,
+ colframe=structure,
+ breakable,
+ boxsep=0pt,left=5pt,right=5pt,top=5pt,bottom=5pt, bottomtitle =
+ 3pt, toptitle=3pt,
+ boxrule=0pt,bottomrule=0.5pt,toprule=0.5pt, toprule at break =
+ 0pt, bottomrule at break = 0pt,
+ listing options={breaklines,basicstyle=\ttfamily},listing only,
+}
+
+\newtcblisting{Exemple}{%
+ arc=0pt,outer arc=0pt,
+ colback=structure!3,
+ colframe=structure,
+ breakable,
+ boxsep=0pt,left=3pt,right=3pt,top=2pt,bottom=2pt, bottomtitle =
+ 0pt, toptitle=0pt,
+ boxrule=0pt,bottomrule=0.5pt,toprule=0.5pt, toprule at break =
+ 0pt, bottomrule at break = 0pt,
+ listing options={breaklines,basicstyle=\ttfamily},
+}
+
+\newtcblisting{CodePreambule}{%
+ arc=0pt,outer arc=0pt,
+ colback=AmurmapleBlue!5,
+ colframe=AmurmapleBlue,
+ breakable,
+ boxsep=0pt,left=5pt,right=5pt,top=5pt,bottom=5pt, bottomtitle =
+ 3pt, toptitle=3pt,
+ boxrule=0pt,bottomrule=0.5pt,toprule=0.5pt, toprule at break =
+ 0pt, bottomrule at break = 0pt,
+ enhanced,
+ overlay ={%
+ \node[ minimum width=1cm,
+ anchor=south east,yshift=-0cm,fill=AmurmapleBlue] at (frame.south east)
+ {\itshape\color{white} preamble};
+ % \node[ minimum width=1cm,
+ % anchor=south east,yshift=-0cm,color=gray,opacity=0.7] at (frame.south east)
+ % {\itshape\small préambule};
+ },
+ listing options={
+ breaklines,
+ basicstyle=\ttfamily,
+ },listing only,
+}
+
+
+
+
+\title[Amurmaple documentation]{Amurmaple Beamer Theme}
+\author[M.~Chupin]{Maxime Chupin}
+\subtitle{documentation\quad v.1.0}
+\institute[CNRS]{CNRS\\
+University of Paris-Dauphine}
+\date{Mai 28, 2022}
+\titlegraphic{\includegraphics[width=4cm]{logo.png}}
+\mail{chupin@ceremade.dauphine.fr}
+\webpage{www.ceremade.dauphine.fr/~chupin/}
+\collaboration{in collaboration with Beamer and \hologo{LaTeX3}}
+
+\bibliography{biblio.bib}
+\usefonttheme{serif}
+
+
+
+
+
+
+\begin{document}
+
+\maketitle
+
+\sepframe[title={Table of contents}]
+\section{Introduction}
+
+\begin{frame}{Introduction}
+\begin{information}
+This Beamer theme is a suitable theme for my use of Beamer in applied
+mathematics research.
+
+It meets my needs in my work. However, if you like this theme, and if you want
+to ask for or make improvements, don't hesitate to write to me !
+
+Obviously, we refer to the documentation of the Beamer class for details, and we
+will assume in this little documentation that the reader is familiar with the
+Beamer class.
+\end{information}
+
+\end{frame}
+
+
+\section{How to use it}
+
+\sepframe
+
+\begin{frame}[fragile]{How to use Amurmaple theme}
+ \begin{itemize}
+ \item The Amurmaple beamer theme consists in the file
+ \texttt{beamerthemeAmurmaple.sty} that you can put in your local
+ \texttt{\~{}/texmf/tex/latex/contrib/beamer-contrib/themes/beamer-amurmaple}
+ directory.
+ \item Simply add in your preamble\footnote{Note that the listing environments
+ of this document are not provided by Amurmaple theme.}
+ \begin{CodePreambule}
+\documentclass{beamer}
+\usetheme{Amurmaple}
+\end{CodePreambule}
+\item This theme depends on the following packages:
+ \begin{multicols}{2}
+ \begin{itemize}
+ \item \lstinline+tcolorbox+;
+ \item \lstinline+multicol+;
+ \item \lstinline+xparse+;
+ \item \lstinline+xfp+;
+ \item \lstinline+expl3+;
+ \item \lstinline+iftex+.
+ \end{itemize}
+\end{multicols}
+\end{itemize}
+\end{frame}
+
+\subsection{Theme Options}
+
+\begin{frame}[fragile]{Theme Options}
+ There are some options available :
+ \begin{description}
+ \item[nogauge:] that suppresses the gauge at the top of the vertical side bar
+ of the current slide ;
+ \item[nomail:] that suppresses the mail in the vertical side bar of
+ the current slide ;
+ \item[delaunay:] that produces a Delaunay mesh of random points in
+ the ``structure'' slides (title, section, etc.). \alert{This option can only be
+ used with \hologo{LuaLaTeX}} and depends on the
+ package~\lstinline{luamesh}\footfullcite{Luamesh};
+ \item[amurmapleblue:] that changes the main color (\lstinline+structure+) to a
+ certain blue (see slide~\ref{sl:color}) ;
+ \item[amurmaplegreen:] that changes the main color (\lstinline+structure+) to a
+ certain green (see slide~\ref{sl:color});
+ \end{description}
+ For example, these slides are produced with the following call\footnote{We use
+ the \texttt{charter} font family of \texttt{mathdesign} with the serif Beamer theme.}:
+ \begin{CodePreambule}
+\usetheme[nomail,delaunay]{Amurmaple}
+ \end{CodePreambule}
+\end{frame}
+
+
+
+\section{Classical Beamer Tools}
+\sepframe
+\subsection{Colors}
+
+\begin{frame}[fragile, allowframebreaks]{Colors of the theme}
+ This theme provides some colors :
+ \begin{Code}
+\definecolor{AmurmapleRed}{rgb}{0.6,0.,0.}
+\definecolor{AmurmapleOrange}{RGB}{230,108,17}
+\definecolor{AmurmapleBlue}{RGB}{55,119,231}
+\definecolor{AmurmapleGreen}{rgb}{0.1,0.4,0.1}
+\end{Code}
+
+\textcolor{AmurmapleRed}{\lstinline+AmurmapleRed+} is used to redefine the \lstinline+structure+
+Beamer color\footnote{So if you redefine the \lstinline+structure+ color, the Amurmaple
+theme should change correctly.}, \textcolor{AmurmapleOrange}{\lstinline+AmurmapleOrange+} is used to redefine
+the \lstinline+text alerted+ Beamer color, \textcolor{AmurmapleGreen}{\lstinline+AmurmapleGreen+} is
+used for the math definition (see slide~\ref{sl:definition}) and for the
+\lstinline+block title example+ Beamer color, and the
+\textcolor{AmurmapleBlue}{\lstinline+AmurmapleBlue+} for the new environnement
+\lstinline+information+ (see slide~\ref{sl:information}).
+\framebreak
+
+\framesection{Color Theme Option}\label{sl:color}
+
+This theme provides two theme options to change the color settings:
+\begin{description}
+\item[amurmapleblue] that sets \texttt{AmurmapleBlue!80!black} as \texttt{structure}
+ color ;
+\item[amurmaplegreen] that sets \texttt{AmurmapleGreen!80!black} as \texttt{structure}
+ color.
+\end{description}
+In fact, internally, four colors are defined: \lstinline+Amurmaple@structure+,
+\lstinline+Amurmaple@alert+, \lstinline+Amurmaple@info+ and
+\lstinline+Amurmaple@example+.
+
+The color theme option is used as follow
+\begin{Code}
+ \usetheme[amurmapleblue]{amurmaple}
+\end{Code}
+\end{frame}
+
+\subsection{Classical commands}
+
+\begin{frame}[fragile]{Classical Beamer Commands}
+ \framesubtitle{Customization}
+ \framesection{Beamer buttons}
+ \begin{Exemple}
+\beamerbutton{Button}~\beamerskipbutton{Skip Button}~\beamerreturnbutton{Return}
+\end{Exemple}
+\framesection{Alert and structure commands}
+\begin{Exemple}
+\structure{Test structure} \alert{Test alert}
+\end{Exemple}
+\end{frame}
+
+\begin{frame}[fragile]{Results of \texttt{$\backslash$tableofcontents}}
+ \tableofcontents
+\end{frame}
+
+\subsection{Classical environnement}
+
+\begin{frame}[allowframebreaks,fragile]{Classical Beamer environments}
+ \framesection{Block environments}
+ \begin{block}{Block}
+ Test of the \lstinline+\begin{block}...\end{block}+ Beamer environment.
+ \end{block}
+ \begin{alertblock}{Alert Block}
+ Test of the \lstinline+\begin{alertblock}...\end{alertblock}+ Beamer environment.
+ \end{alertblock}
+ \begin{exampleblock}{Example Block}
+ Test of the \lstinline+\begin{exampleblock}...\end{exampleblock}+ Beamer environment.
+ \end{exampleblock}
+
+ \framebreak
+
+\framesection{Abstract environment}
+
+ \begin{abstract}
+ This is the result of the \lstinline+\begin{abstract}...\end{abstract}+
+ environment.
+ \end{abstract}
+
+ \framesection{Quotation environment}
+
+ The environment \lstinline+\begin{quotation}[+\meta{author(s)}\lstinline+]...\end{quotation}+ has been
+ redefined allowing an optional argument to provide the author(s) of the
+ quotation.
+
+ \begin{quotation}[Donald E. Knuth, \emph{The \TeX book}]
+Gentle reader: This is a handbook about \TeX, a new typesetting system G
+intended for the creation of beautiful books—and especially for books that
+contain a lot of mathematics.
+\end{quotation}
+
+\framebreak
+\framesection{Lists}
+
+The style of the standard enumerate and itemize lists has been modified as you
+can see below
+
+\begin{multicols}{2}
+ \begin{itemize}
+\item Eggs
+\item Plants
+ \begin{itemize}
+ \item Flowers
+ \end{itemize}
+\item Animals
+\end{itemize}
+\columnbreak
+\begin{enumerate}
+\item Eggs
+\item Plants
+\item Animals
+ \begin{enumerate}
+ \item Dogs
+ \item Cats
+ \end{enumerate}
+\end{enumerate}
+\end{multicols}
+\end{frame}
+
+
+\subsection{Section and Part Frames}
+
+\newsavebox{\codebox}% To store any verbatim content
+\begin{lrbox}{\codebox}
+ \begin{Code}
+\begin{frame}
+\sectionpage
+\end{frame}
+
+%\begin{frame}
+%\partpage
+%\end{frame}
+\end{Code}
+\end{lrbox}
+
+\begin{frame}[fragile]{Section and Part Frames}
+ The standard \texttt{section page} and \texttt{part page} have been modified.
+
+ The following code produce the next slide (the part slide is not generated
+ because this document does not use part sectionning).
+
+ \usebox{\codebox}
+
+\end{frame}
+
+\begin{frame}
+\sectionpage
+\end{frame}
+
+\subsection{Maths}
+
+\begin{frame}[fragile,allowframebreaks]{Maths environnement}
+ \begin{itemize}
+ \item \lstinline+\begin{theorem}+\oarg{Title of th. (optional)}\lstinline+...\end{theorem}+
+ \begin{theorem}[Title of th. (optional)]
+ There exists an infinite set.
+ \end{theorem}
+ \item \lstinline+\begin{example}...\end{example}+
+ \begin{example}
+ The set of natural numbers is infinite.
+ \end{example}
+ \item \lstinline+\begin{definition}+\oarg{Title of def. (optional)}\lstinline+...\end{definition}+\label{sl:definition}
+ \begin{definition}[Title of def. (optional)]
+ A simple definition.
+ \end{definition}
+ \framebreak
+ \item \lstinline+\begin{corollary}+\oarg{Title of corollary (optional)}\lstinline+...\end{corollary}+
+ \begin{corollary}[Title of corollary (optional)]
+ A simple corollary.
+ \end{corollary}
+ \item \lstinline+\begin{proof}...\end{proof}+
+ \begin{proof}
+ This follows from the axiom of infinity.
+ \end{proof}
+ \end{itemize}
+\end{frame}
+
+
+
+\section{Title Page}
+
+\sepframe
+
+\begin{frame}[fragile,allowframebreaks]{Title Page}
+ As shown in this document, the title page has been customized.
+ In addition to the classic commands for making the title page, the Amurmaple
+ theme provides new commands.
+
+ The new commands are :
+ \begin{itemize}
+ \item \lstinline+\mail+\marg{mail}: that is used to provide the mail. Without the theme option
+ \lstinline+nomail+, it is also added on the vertical side bar on the current
+ slide.
+ \item \lstinline+\webpage+\marg{webpage}: that is used to provide the personal webpage of
+ the speaker (or the project website).
+ \item \lstinline+\collaboration+\marg{collaboration(s)}: that is used to provide the collaborators
+ for the presented work.
+ \end{itemize}
+
+ \framebreak
+
+ Here the example used to generate this documentation.
+ \begin{Code}
+\title[Amurmaple documentation]{Amurmaple Beamer Theme}
+\author[M.~Chupin]{Maxime Chupin}
+\subtitle{documentation}
+\institute[CNRS]{CNRS\\
+University of Paris-Dauphine}
+\date{Mai 08, 2022}
+\titlegraphic{\includegraphics[width=4cm]{logo.png}}
+\mail{chupin@ceremade.dauphine.fr}
+\webpage{www.ceremade.dauphine.fr/~chupin/}
+\collaboration{in collaboration with Beamer and \hologo{LaTeX3}}
+\end{Code}
+
+\end{frame}
+
+\section{New Frame Commands}
+
+\sepframe
+
+\begin{frame}[fragile]{\texttt{sepframe} command}
+\bigskip
+\begin{docCommand}{sepframe}{\oarg{title=\meta{mytitle},image=\meta{my image}}}
+The newcommand \lstinline+\sepframe+ is provided by the Amurmaple theme. This
+command allows you to generate a slide in the manner of a section page but with
+a slight improvement. In the red part below is generated the table of contents
+(with depth 1).
+
+Moreover, this command admits two optional arguments:
+\begin{description}
+\item[title:] this optional argument allows to modify the default title of the
+ frame (which is the current section name) ;
+\item[image:] this optional argument allows to add an image to the frame (no
+ image by default).
+\end{description}
+
+\end{docCommand}
+
+
+
+For exemple, we could use
+\begin{Code}
+\sepframe[title={My title},image={\includegraphics[width=5cm]{logo.png}}]
+\end{Code}
+
+The result is the next frame.
+\end{frame}
+
+\sepframe[title={My title},image={\includegraphics[width=5cm]{logo.png}}]
+
+\begin{frame}[fragile]{\texttt{thanksframe} command}
+
+ \begin{docCommand}{thanksframe}{\marg{thanking message}}
+ The newcommand \lstinline+\thanksframe+ is provided by the Amurmaple
+ theme. This command allows you to generate a slide to thank the audience.
+ The text written to thank is a mandatory argument (e.g. ``\emph{The end}'')
+ and the optional argument allows to change the default image which is the
+ \emph{title graphics} (\lstinline+\inserttitlegraphic+ exactly).
+\end{docCommand}
+The following code produces the next slide.
+ \begin{Code}
+\thanksframe{Merci beaucoup~!}
+ \end{Code}
+\end{frame}
+
+\thanksframe{Merci beaucoup~!}
+
+\section{New Commands and Environments}
+
+\begin{frame}[fragile,allowframebreaks]{Some New Commands and Environments}
+ The Amurmaple theme provides some other commands and environments.
+
+ \framesection{New Commands}
+
+ \begin{docCommand}{framesection}{\marg{text}}
+ Command to add a section title inside a frame.
+
+ The following example produced the previous frame sectioning \emph{New Commands}
+ \begin{Code}
+\framesection{New Commands}
+\end{Code}
+\end{docCommand}
+\begin{docCommand}{boxalert}{\marg{text}}
+Another \lstinline+\alert+ command with a colored box.
+ \begin{Exemple}
+\boxalert{This is another} command box to compare to \alert{this one}.
+ \end{Exemple}
+\end{docCommand}
+\framebreak
+
+\framesection{New Environments}
+{\itshape \structure{Note:} Each environment provided by the Amurmaple theme uses
+translations for title names. Hence, depending on the \texttt{babel} setting,
+\emph{Remark} becomes \emph{Remarque, Bemerkung,}\dots}
+
+\begin{docEnvironment}{information}{\oarg{changed title}}
+ The Amurmaple theme provides an information environment.\label{sl:information}
+ \begin{Code}
+\begin{information}
+ This is important information.
+\end{information}
+ \end{Code}
+ \begin{information}
+ This is an important information.
+ \end{information}
+
+ This environment has an optional argument to change the \emph{Information}
+ title.
+ \begin{Code}
+\begin{information}[More information]
+ Maybe more important information?
+\end{information}
+\end{Code}
+
+\begin{information}[More information]
+ Maybe more important information?
+\end{information}
+Because this environment is built with a \texttt{tcolorbox}, to use a footnote in it, you have to use \lstinline+\footnote[frame]{...}+.
+\end{docEnvironment}
+
+\begin{docEnvironment}{remark}{\oarg{title complement}}
+The Amurmaple theme provides a remark environment with an optional
+ argument to add a comment in the title (as for the theorem environment).
+ \begin{Code}
+\begin{remark}[Some complement]
+ This is a capital remark.
+\end{remark}
+\end{Code}
+\begin{remark}[Some complement]
+ This is a capital remark.
+\end{remark}
+
+Because this environment is built with a \texttt{tcolorbox}, to use a footnote in it, you have to use \lstinline+\footnote[frame]{...}+.
+\end{docEnvironment}
+
+\end{frame}
+
+\appendix
+
+\section{Appendix}
+
+\sepframe
+
+\begin{frame}[fragile]{Appendix}
+ In the appendix part of the document, (after the command
+ \lstinline+\appendix+) the display is slightly modified as you
+ can see in this slide. If the gauge exists, it disappears, the numbering
+ of slides is reset and the display is in roman form.
+\end{frame}
+
+
+\thanksframe{The end!}
+
+
+
+\end{document}
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: t
+%%% End:
diff --git a/macros/latex/contrib/beamer-contrib/themes/beamerthemeamurmaple/doc/logo.png b/macros/latex/contrib/beamer-contrib/themes/beamerthemeamurmaple/doc/logo.png
new file mode 100644
index 0000000000..687f327f42
--- /dev/null
+++ b/macros/latex/contrib/beamer-contrib/themes/beamerthemeamurmaple/doc/logo.png
Binary files differ
diff --git a/macros/latex/contrib/beamer-contrib/themes/beamerthemeamurmaple/tex/beamerthemeAmurmaple.sty b/macros/latex/contrib/beamer-contrib/themes/beamerthemeamurmaple/tex/beamerthemeAmurmaple.sty
new file mode 100644
index 0000000000..6167a9d3f7
--- /dev/null
+++ b/macros/latex/contrib/beamer-contrib/themes/beamerthemeamurmaple/tex/beamerthemeAmurmaple.sty
@@ -0,0 +1,629 @@
+% Copyright (C) 2022 by Maxime CHUPIN
+% <chupin at ceremade.dauphine.fr>
+% -------------------------------------------------------
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% Author: Maxime CHUPIN
+% chupin at ceremade.dauphine.fr
+%
+% This work has the LPPL maintenance status "author-maintained".
+
+\NeedsTeXFormat{LaTeX2e}[2021-11-15]
+\ProvidesPackage{beamerthemeAmurmaple}[2022/05/28 v.1.0 Theme for the Beamer
+class]%
+
+\newif\ifbeamer@nogauge
+\beamer@nogaugetrue
+\DeclareOptionBeamer{nogauge}{\beamer@nogaugefalse}
+\newif\ifbeamer@nomail
+\beamer@nomailtrue
+\DeclareOptionBeamer{nomail}{\beamer@nomailfalse}
+\newif\ifbeamer@delaunay
+\beamer@delaunayfalse
+\DeclareOptionBeamer{delaunay}{\beamer@delaunaytrue}
+\newif\ifbeamer@amurmapleblue
+\beamer@amurmaplebluefalse
+\DeclareOptionBeamer{amurmapleblue}{\beamer@amurmaplebluetrue}
+\newif\ifbeamer@amurmaplegreen
+\beamer@amurmaplegreenfalse
+\DeclareOptionBeamer{amurmaplegreen}{\beamer@amurmaplegreentrue}
+\ProcessOptionsBeamer
+
+\RequirePackage{tcolorbox}
+\RequirePackage{multicol}
+\RequirePackage{xparse}
+\RequirePackage{xfp}
+\RequirePackage{expl3}
+\RequirePackage{iftex}
+
+
+
+\ifbeamer@delaunay
+\ifLuaTeX
+\else
+\errmessage{Delaunay option only available with luaLaTeX}
+\fi
+\fi
+
+
+% dimensions
+\ExplSyntaxOn
+\dim_const:Nn \c_amurmaple_barre_dim { 15pt }
+\dim_const:Nn \c_amurmaple_margin {10pt}
+\tl_set:Nx \l_amurmaple_margin_left { \dim_eval:n { \c_amurmaple_barre_dim+\c_amurmaple_margin } }
+
+\setbeamersize
+{
+ text~ margin~ left=\l_amurmaple_margin_left,
+ text~ margin~ right=\c_amurmaple_margin
+}
+\ExplSyntaxOff
+
+\ifLuaTeX
+\RequirePackage{luamesh}
+\fi
+
+% randomseed
+\ExplSyntaxOn
+\sys_gset_rand_seed:n {\time}
+\ExplSyntaxOff
+
+% counters to set the depth of toc in \sepframe
+\newcounter{amurmapletoc}
+\setcounter{amurmapletoc}{1}
+\newcounter{amurmaple@oldtoc}
+
+\ExplSyntaxOn
+% stores all students, separated by commas
+\tl_new:N \l_amurmaple_mail_tl
+\tl_new:N \l_amurmaple_webpage_tl
+\tl_new:N \l_amurmaple_collab_tl
+
+\NewDocumentCommand{\mail}{m}{
+ \tl_set:Nn \l_amurmaple_mail_tl {#1}
+}
+
+\NewDocumentCommand{\webpage}{m}{
+ \tl_set:Nn \l_amurmaple_webpage_tl {#1}
+}
+
+\NewDocumentCommand{\collaboration}{m}{
+ \tl_set:Nn \l_amurmaple_collab_tl {#1}
+}
+
+
+\NewDocumentCommand{\amurmaple@printmail}{}{
+ \IfValueT { \l_amurmaple_mail_tl} {
+ \tl_use:N \l_amurmaple_mail_tl
+ }
+}
+\NewDocumentCommand{\amurmaple@printwebpage}{}{
+ \IfValueT { \l_amurmaple_webpage_tl} {
+ \tl_use:N \l_amurmaple_webpage_tl
+ }
+}
+\ExplSyntaxOff
+\mode<presentation>
+
+\useinnertheme{rectangles}
+
+\tcbuselibrary{skins}
+
+
+\usefonttheme{professionalfonts}
+\usetikzlibrary{backgrounds}
+\usetikzlibrary{quotes,angles}
+\usetikzlibrary{automata}
+\usetikzlibrary{arrows}
+
+% some colors
+\definecolor{AmurmapleRed}{rgb}{0.6,0.,0.}
+\definecolor{AmurmapleOrange}{RGB}{230,108,17}
+\definecolor{AmurmapleBlue}{RGB}{55,119,231}
+\definecolor{AmurmapleGreen}{rgb}{0.1,0.4,0.1}
+
+\colorlet{Amurmaple@structure}{AmurmapleRed}
+\colorlet{Amurmaple@alert}{AmurmapleOrange}
+\colorlet{Amurmaple@info}{AmurmapleBlue}
+\colorlet{Amurmaple@example}{AmurmapleGreen}
+%
+\ifbeamer@amurmapleblue
+\colorlet{Amurmaple@structure}{AmurmapleBlue!80!black}
+\colorlet{Amurmaple@alert}{AmurmapleOrange}
+\colorlet{Amurmaple@info}{AmurmapleRed}
+\colorlet{Amurmaple@example}{AmurmapleGreen}
+\fi
+\ifbeamer@amurmaplegreen
+\colorlet{Amurmaple@structure}{AmurmapleGreen!80!black}
+\colorlet{Amurmaple@alert}{AmurmapleOrange}
+\colorlet{Amurmaple@info}{AmurmapleRed}
+\colorlet{Amurmaple@example}{AmurmapleBlue}
+\fi
+
+\setbeamercolor{structure}{fg=Amurmaple@structure}
+\setbeamercolor{itemize item}{fg=structure!60}
+\setbeamercolor{itemize subitem}{fg=structure!60}
+\setbeamercolor{enumerate item}{bg=structure!60,fg=white}
+\setbeamercolor{enumerate subitem}{fg=structure!60}
+\setbeamercolor{block title}{fg=structure}
+%\setbeamercolor{section in head/foot}{bg=Brown}
+%\setbeamercolor{author in head/foot}{bg=Brown}
+%\setbeamercolor{date in head/foot}{fg=Brown}
+\setbeamercolor{alerted text}{fg=Amurmaple@alert,bg=Amurmaple@alert!20}
+\setbeamercolor{subsection in toc}{fg=gray!70!black}
+% new
+\setbeamercolor{mail}{fg=structure!60}
+
+\setbeamertemplate{subsection in toc}
+ {\leavevmode\leftskip=2em\rule{0.6em}{0.6em}\hskip0.5em\inserttocsubsection\par}
+
+
+\def\amurmaple@gauge{%
+ \def\pourc{\numexpr(10*\insertframenumber/\insertmainframenumber)}%
+ \def\xj{\numexpr(4.95*\pourc)}
+ %\resetcolorseries[9]{PiedDePage}%
+ \begin{tikzpicture}[x=0.7cm,y=0.7cm]
+ \draw[color=white] (-.1,-.1)--(1.6,-.1)--(1.6,.2)--(-.1,.2)--cycle;
+ \foreach \i in {0,...,10}{%
+ \ifnum\i<\pourc%
+ \fill[color=white]%PiedDePage!!+]
+ (0+0.15*\i,0)--(0.15+0.15*\i,0)--(0.15+0.15*\i,.1)--(0+0.15*\i,.1)--cycle;
+ \fi
+ }
+ \end{tikzpicture}
+}
+
+% background
+\ExplSyntaxOn
+\setbeamertemplate{background}%
+{%
+ \hypersetup{linkcolor=white}
+ \begin{tikzpicture}[remember~picture,overlay]
+ \fill[Amurmaple@structure]
+ (current~page.south~west) rectangle ([xshift=\c_amurmaple_barre_dim]current~
+ page.north~west);
+ \node[anchor=north~west,rotate=90,color=white] at (current~page.south~west)
+ (title) {\scriptsize\insertshorttitle\quad---\quad \insertshortauthor
+ \ifbeamer@nomail
+ \quad \texttt{\amurmaple@printmail}
+ \fi
+ };
+ \ifbeamer@nogauge
+ \ifnum\insertframenumber>\insertmainframenumber % gauge only in main part
+ \else
+ \node[anchor=north~east,rotate=90,color=white] at (current~page.north~west)
+ (gauge) {\amurmaple@gauge};
+ \fi
+ \fi
+ \end{tikzpicture}
+}
+\ExplSyntaxOff
+%
+%
+\setbeamertemplate{navigation symbols}{}
+\newcounter{amurmaple@appendixframenumber}
+\newcounter{amurmaple@appendixtotalframenumber}
+\newcounter{amurmaple@numberofframes}
+\newcounter{amurmaple@numberofmainframes}
+\addtobeamertemplate{navigation symbols}{}{%
+ \hspace{1em}%
+ \setcounter{amurmaple@numberofframes}{\inserttotalframenumber}
+ \setcounter{amurmaple@numberofmainframes}{\insertmainframenumber}
+ \setcounter{amurmaple@appendixtotalframenumber}{\numexpr\value{amurmaple@numberofframes}-\value{amurmaple@numberofmainframes}}
+ \setcounter{amurmaple@appendixframenumber}{\numexpr\value{framenumber}-\value{amurmaple@numberofmainframes}}
+ \ifnum\insertframenumber>\insertmainframenumber% appendix
+ \footnotesize\color{black}\roman{amurmaple@appendixframenumber}/\roman{amurmaple@appendixtotalframenumber}
+ \else % main part
+ \footnotesize\color{black}\insertframenumber/\insertmainframenumber
+ \fi
+}
+
+% TOC
+\setbeamertemplate{section in toc}[square]
+\setbeamercolor{section number projected}{bg=white,fg=structure}
+
+
+% itemize enumerate
+\setbeamertemplate{itemize item}{$\blacktriangleright$}
+\setbeamertemplate{itemize subitem}{\small$\blacktriangleright$}
+\setbeamertemplate{enumerate item}
+{
+ \hbox{%
+ \usebeamerfont*{item projected}%
+ \usebeamercolor[bg]{enumerate item}% original: [bg]
+ \vrule width2.25ex height1.85ex depth.4ex%
+ \hskip-2.25ex%
+ \hbox to2.25ex{%
+ \hfil%
+ \usebeamercolor[fg]{enumerate item}\insertenumlabel% original: [fg]
+ \hfil}%
+ }%
+}
+\setbeamertemplate{enumerate subitem}{\alph{enumii}.}
+
+% some fonts
+\setbeamerfont{block title}{size=\bfseries}
+\setbeamerfont{author}{size=\bfseries\large}
+\setbeamerfont{institute}{size=\normalsize\itshape}
+\setbeamerfont{title}{size=\huge\bfseries}
+\setbeamerfont{date}{size=\footnotesize}
+\setbeamerfont{subtitle}{size=\Large\normalfont\slshape}
+% new
+\setbeamerfont{mail}{size=\small\ttfamily}
+
+% title page
+\ExplSyntaxOn
+% list to get the points
+\tl_new:N \l_delaunaypointlist_tl
+\NewDocumentCommand\amurmaple@buildpoints{}{
+ \tl_clear:N \l_delaunaypointlist_tl
+ \int_set:Nn \l_tmpa_int { 1 }
+ \tl_put_right:Nn \l_delaunaypointlist_tl {(0,0);(16,0);(16,4.5);(0,4.5);}
+ \int_do_while:nNnn { \l_tmpa_int} < {40}
+ {
+ \tl_put_right:Nn \l_delaunaypointlist_tl {(\fpeval{16*rand()},\fpeval{4.5*rand()});}
+ \int_incr:N \l_tmpa_int
+ }
+ \tl_put_right:Nn \l_delaunaypointlist_tl {(\fpeval{16*rand()},\fpeval{4.5*rand()})}
+}
+
+\NewExpandableDocumentCommand\amurmaple@buildmesh{}{
+\node[anchor = north~west] at
+ ([xshift=-50pt,yshift=30pt]current~page.north~west){\resizebox{1.5\paperwidth}{0.8\paperheight}{\buildMeshBW[color=structure!15,colorBbox=structure!15,scale=2cm]{\l_delaunaypointlist_tl}}};
+}
+
+\setbeamertemplate{title~page}{%
+ \bgroup
+ \setbeamertemplate{background}%
+ {}
+ \begin{tikzpicture}[remember~picture,overlay]
+ \fill[white]
+ ([yshift=15pt]current~page.west) rectangle (current~page.north~
+ east);
+ \ifbeamer@delaunay
+ \ifLuaTeX
+ \amurmaple@buildpoints
+ \amurmaple@buildmesh
+ \fi
+ \fi
+ \fill[structure]
+ ([yshift=15pt]current~page.west)~rectangle~(current~page.south~
+ east);
+ \node[anchor=east]~
+ at~([yshift=-35pt,xshift=-20pt]current~page.north~east)~(author)~
+ {\parbox[t]{.6\paperwidth}{\raggedleft%
+ \usebeamerfont{author}\color{structure}%
+ \insertauthor
+ \IfValueT { \l_amurmaple_mail_tl} {
+ \par \usebeamerfont{mail}\usebeamercolor[fg]{mail} \tl_use:N \l_amurmaple_mail_tl
+ }
+ \IfValueT { \l_amurmaple_webpage_tl} {
+ \par \usebeamerfont{mail}\usebeamercolor[fg]{mail} \expandafter\url{\tl_use:N \l_amurmaple_webpage_tl}
+ }
+ }};
+ \node[anchor=north~east]
+ at~([yshift=-60pt,xshift=-20pt]current~page.north~east)
+ (institute)
+ {\parbox[t]{.78\paperwidth}{\raggedleft%
+ \usebeamerfont{institute}\textcolor{gray}{\insertinstitute}}};
+ \node[anchor=south~east]
+ at ([yshift=15pt,xshift=-20pt]current~page.east)
+ (date)
+ {\parbox[t]{.78\paperwidth}{\raggedleft%
+ \usebeamerfont{date}\textcolor{black}{\insertdate}}};
+ \node[anchor=south~west]
+ at ([yshift=20pt]current~page.west)~(logo)
+ {\parbox[t]{.19\paperwidth}{\raggedleft%
+ \usebeamercolor[fg]{titlegraphic}\inserttitlegraphic}};
+ \node[anchor=east]
+ at ([yshift=-25pt,xshift=-20pt]current~
+ page.east) (title)
+ {\parbox[t]{\textwidth}{\raggedleft%
+ \usebeamerfont{title}\color{white}%
+ \inserttitle
+ \ifx\insertsubtitle\@empty%
+ \else\par\bigskip \usebeamerfont{subtitle}\color{white}\insertsubtitle
+ \fi
+ }};
+ \IfValueT { \l_amurmaple_collab_tl} {
+ \node[anchor=south,white,text~width=0.95\linewidth,align=center] at ([yshift=10pt]current~page.south) {\itshape\tl_use:N \l_amurmaple_collab_tl};
+ }
+\end{tikzpicture}
+\egroup
+}
+\ExplSyntaxOff
+
+\renewcommand{\maketitle}{%
+ \begingroup
+ \setbeamertemplate{background}%
+ {}
+ \setbeamertemplate{navigation symbols}{}
+ \setbeamercolor{background canvas}{bg=white}
+ \begin{frame}[noframenumbering,plain]
+ \titlepage
+ \end{frame}
+ \endgroup
+}
+
+% section page
+\setbeamertemplate{section page}{
+ \hypersetup{linkcolor=structure}
+ \begin{tikzpicture}[remember picture,overlay]
+ \fill[white]
+ ([yshift=15pt]current page.west) rectangle (current page.north
+ east);
+ \ifbeamer@delaunay
+ \ifLuaTeX
+ \amurmaple@buildpoints
+ \amurmaple@buildmesh
+ \fi
+ \fi
+ \fill[structure]
+ ([yshift=15pt]current page.west) rectangle (current page.south
+ east);
+ \node[anchor=east, font=\huge, text width=0.95\linewidth,align=right]
+ at ([yshift=-50pt,xshift=-20pt]current page.north east) (section)
+ { Section \insertsectionnumber: \bfseries\textcolor{structure}{\insertsection}};
+ \end{tikzpicture}
+}
+
+% part page
+\setbeamertemplate{part page}{
+ \hypersetup{linkcolor=structure}
+ \begin{tikzpicture}[remember picture,overlay]
+ \fill[white]
+ ([yshift=15pt]current page.west) rectangle (current page.south
+ east);
+ \fill[structure]
+ ([yshift=15pt]current page.west) rectangle (current page.north
+ east);
+
+ \node[anchor=north]
+ at ([yshift=-20pt]current page.north) (section)
+ {\Large\textcolor{white}{Part~\insertpartnumber}};
+ \node[anchor=north, font=\huge\bfseries, text width=0.9\linewidth,align=center]
+ at ([yshift=-50pt]current page.north) (part)
+ {\textcolor{white}{\insertpart}};
+ \end{tikzpicture}
+}
+
+
+
+% frame title
+\setbeamercolor{frametitle}{fg=structure}
+\setbeamerfont{frametitle}{size=\bfseries\Large}
+\setbeamertemplate{frametitle}{%
+ \raggedleft
+ \usebeamerfont{frametitle}\insertframetitle%
+ \vphantom{g}% To avoid fluctuations per frame
+ \par
+ \raggedleft
+ \vspace*{-0.3cm}
+ \rule{0.5\paperwidth}{2pt}\hspace*{-1cm}%%
+ \par
+ \raggedleft
+ \vspace*{-0.3cm}%
+ {\ifx\insertframesubtitle\@empty%
+ \else%
+ \usebeamerfont{framesubtitle}\insertframesubtitle%
+ \fi}%
+ \par
+}
+
+%%%%%%%%%%%%%%
+%%% commands
+%%%%%%%%%%%%%%
+
+\newenvironment{boxalertenv}{\begin{altenv}%
+ {\usebeamertemplate{alerted text begin}\usebeamercolor[fg]{alerted text}\usebeamerfont{alerted text}\colorbox{bg}}
+ {\usebeamertemplate{alerted text end}}{\color{.}}{}}{\end{altenv}}
+
+\newcommand<>{\boxalert}[1]{{%
+ \begin{boxalertenv}#2{#1}\end{boxalertenv}%
+}}
+
+% new one a subtitle inside a frame
+\NewDocumentCommand{\framesection}{m}{
+ \medskip
+ \noindent{\large\bfseries\textcolor{structure}{#1}}\par\vspace*{-0.2cm}
+ \hspace*{-0.5cm}{\color{structure}\rule{0.4\paperwidth}{2pt}}\par\smallskip%
+}
+% new one define a separation frame with a title and the TOC
+
+%% key/value
+\ExplSyntaxOn
+\keys_define:nn { amurmaple/sepframe } {
+ title .tl_set:N = \l_sepframetitle_tl ,
+ image .tl_set:N = \l_sepframeimage_tl
+}
+
+\NewDocumentCommand{\sepframe}{o}{
+ % key/value
+ \IfNoValueF{#1}{
+ \keys_set:nn { amurmaple/sepframe} {#1}
+ }
+ \begingroup
+ \setcounter{amurmaple@oldtoc}{\value{tocdepth}}
+ \setbeamercolor{section~in~toc}{fg=white}
+ \str_if_eq:VnTF{\l_sepframetitle_tl}{}{%
+ \def\amurmaple@septitle{\secname}
+ }{%
+ \def\amurmaple@septitle{\l_sepframetitle_tl}
+ }
+ \setbeamertemplate{background}{}
+ \setbeamertemplate{navigation~symbols}{}
+ \setbeamercolor{background~canvas}{bg=white}
+ \begin{frame}[noframenumbering,plain]
+ \begin{tikzpicture}[remember~picture,overlay]
+ \ifbeamer@delaunay
+ \ifLuaTeX
+ \amurmaple@buildpoints
+ \amurmaple@buildmesh
+ \fi
+ \fi
+ \fill[structure]
+ ([yshift=15pt]current~page.west) rectangle (current~page.south~
+ east);
+ \node[anchor=east,text~width = 0.75\linewidth, font=\huge\bfseries,align=right]
+ at ([yshift=-50pt,xshift=-20pt]current~page.north~east) (section)
+ {\textcolor{structure}{\amurmaple@septitle}};
+ \node[]
+ at ([yshift=-40pt]current~page.center) (toc)
+ {\color{white}\begin{minipage}{0.9\paperwidth}%
+ \begin{multicols}{2}\hypersetup{linkcolor=white}\setcounter{tocdepth}{\theamurmapletoc}\tableofcontents%
+ \end{multicols}\end{minipage}
+ };
+ \str_if_eq:VnTF{\l_sepframeimage_tl}{}{%
+ }{
+ \node[anchor=south~west]
+ at ([yshift=20pt]current~page.west) (logo)
+ {\parbox[t]{.19\paperwidth}{\raggedleft%
+ \usebeamercolor[fg]{titlegraphic}\l_sepframeimage_tl}};
+ }
+ \end{tikzpicture}
+ \setcounter{tocdepth}{\value{amurmaple@oldtoc}}
+ \end{frame}
+ \endgroup
+ \tl_clear:N \l_sepframetitle_tl
+ \tl_clear:N \l_sepframeimage_tl
+}
+
+\ExplSyntaxOff
+
+
+% new one define a thanks frame with a simple message to thank
+\NewDocumentCommand{\thanksframe}{o m}{
+ \begingroup
+ \setbeamertemplate{background}{}
+ \setbeamertemplate{navigation symbols}{}
+ \setbeamercolor{background canvas}{bg=white}
+ \IfNoValueTF{#1}{%
+ \def\amurmaple@finalgraphic{\inserttitlegraphic}
+ }{%
+ \def\amurmaple@finalgraphic{#1}
+ }
+ \begin{frame}[noframenumbering,plain]
+ \begin{tikzpicture}[remember picture,overlay]
+ \ifbeamer@delaunay
+ \ifLuaTeX
+ \amurmaple@buildpoints
+ \amurmaple@buildmesh
+ \fi
+ \fi
+ \fill[structure]
+ ([yshift=15pt]current page.west) rectangle (current page.south
+ east);
+ \node[anchor=east,text width = 0.95\linewidth, font=\huge\bfseries,align=right]
+ at ([yshift=50pt,xshift=-20pt]current page.south east) (section)
+ {\textcolor{white}{#2}};
+ \node[anchor=south west]
+ at ([yshift=20pt]current page.west) (logo)
+ {\parbox[t]{.19\paperwidth}{\raggedleft%
+ \usebeamercolor[fg]{titlegraphic}\amurmaple@finalgraphic}};
+ \end{tikzpicture}
+ \end{frame}
+ \endgroup
+}
+
+
+\setbeamertemplate{button}{\tikz
+ \node[
+ inner xsep=4pt,
+ minimum height = 2em,
+ draw=structure!80,
+ fill=structure!50,
+ rounded corners=1pt,
+ align=center] {\footnotesize\insertbuttontext};}
+
+\RenewDocumentEnvironment{abstract}{}{%
+ \begin{tcolorbox}[boxrule=0pt,frame hidden,sharp corners,enhanced,borderline
+ north={1pt}{0pt}{structure},borderline
+ south={1pt}{0pt}{structure}]
+ \begin{center}\bfseries
+ \abstractname
+ \end{center}\itshape
+ }
+ {%
+ \end{tcolorbox}%
+}%
+
+\RenewDocumentEnvironment{quotation}{o}{%
+ \begin{tcolorbox}[boxrule=0pt,frame hidden,sharp corners,enhanced,borderline west={4pt}{0pt}{structure}]\itshape
+ }
+ {%
+ \IfNoValueTF{#1}{%
+ }{
+ \begin{flushright}
+ \normalfont #1
+ \end{flushright}
+ \end{tcolorbox}%
+ }%
+}
+
+\newcommand\amurmaple@info{\raisebox{-1mm}{\tikz{\node[circle,fill=Amurmaple@info,align=center,text
+ width=1em,inner sep = 0.0mm]
+ {\rmfamily\itshape\bfseries\color{white} i};}}}
+
+\NewDocumentEnvironment{information}{o}{%
+ \tcbset{leftrule=1mm,rightrule=0mm,toprule=0mm, bottomrule=0mm,%
+ colframe=Amurmaple@info,
+ sharp corners,
+ detach title,%
+ before title={\amurmaple@info~},
+ fonttitle = \color{black}\bfseries\sffamily,
+ before upper={\tcbtitle\par\medskip}
+ }
+ \IfNoValueTF{#1}{%
+ \begin{tcolorbox}[title=\translate{Information}]
+ }{
+ \begin{tcolorbox}[title=#1]
+ }
+ }%
+ {%
+ \end{tcolorbox}
+ }%
+
+ \NewDocumentEnvironment{remark}{o}{
+ \tcbset{%
+ arc=0pt,outer arc=0pt,colback=gray!10!white,colframe=gray!60!white,
+ boxsep=0pt,left=10pt,right=10pt,top=8pt,bottom=10pt, bottomtitle = 3pt, toptitle=3pt,
+ boxrule=0pt,bottomrule=0.5pt,toprule=0.5pt
+ }
+ \smallskip
+ \begin{tcolorbox}[fonttitle=\bfseries,title={\translate{Remark} \IfNoValueF{#1}{(#1)}}]}%
+ {\end{tcolorbox}\medskip
+}
+
+
+%%%%%%%%%%%% maths
+
+\AtBeginEnvironment{theorem}{%
+ \setbeamercolor{block body}{fg=black,bg=gray!20}
+ \setbeamercolor{block title}{fg=white,bg=structure}
+}
+
+\AtBeginEnvironment{definition}{%
+ \setbeamercolor{block body}{fg=black,bg=gray!10}
+ \setbeamercolor{block title}{fg=Amurmaple@example,bg=Amurmaple@example!40}
+}
+
+\AtBeginEnvironment{corollary}{%
+ \setbeamercolor{block body}{fg=black,bg=gray!10}
+ \setbeamercolor{block title}{fg=structure,bg=structure!30}
+}
+
+
+\setbeamercolor{block title alerted}{use=structure,fg=white,bg=Amurmaple@alert}
+\setbeamercolor{block body alerted}{parent=normal text,use=block
+ title,bg=gray!10}
+
+\setbeamercolor{block title example}{fg=Amurmaple@example}
+\mode
+<all> \ No newline at end of file
diff --git a/macros/latex/contrib/fixdif/fixdif.dtx b/macros/latex/contrib/fixdif/fixdif.dtx
index 95099c0b74..9e06f1067a 100644
--- a/macros/latex/contrib/fixdif/fixdif.dtx
+++ b/macros/latex/contrib/fixdif/fixdif.dtx
@@ -126,7 +126,7 @@ Copyright (C) 2022 by Zhang Tingxuan <alphaztx@163.com>.
%</internal>
%
%<*driver>
-\ProvidesFile{fixdif.dtx}[2022/05/27 (c) Copyright 2022 by Zhang Tingxuan]
+\ProvidesFile{fixdif.dtx}[2022/05/29 (c) Copyright 2022 by Zhang Tingxuan]
\documentclass{ltxdoc}
\usepackage{xcolor}
@@ -145,7 +145,7 @@ Copyright (C) 2022 by Zhang Tingxuan <alphaztx@163.com>.
\title{The \pkg{fixdif} Package}
\author{Zhang Tingxuan}
-\date{2022/05/27\quad Version 1.0\thanks{\url{https://github.com/AlphaZTX/fixdif}}}
+\date{2022/05/29\quad Version 1.1\thanks{\url{https://github.com/AlphaZTX/fixdif}}}
\usepackage{hyperref}
\hypersetup{
@@ -413,7 +413,7 @@ Copyright (C) 2022 by Zhang Tingxuan <alphaztx@163.com>.
% Check the \TeX{} format and provides the package name.
% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{fixdif}[2022/05/26 Interface for defining the differential operator.]
+\ProvidesPackage{fixdif}[2022/05/29 Interface for defining the differential operator.]
% \end{macrocode}
%
% \subsection{Control the skip between slash and differential operator}
@@ -486,9 +486,7 @@ Copyright (C) 2022 by Zhang Tingxuan <alphaztx@163.com>.
% \cs{@dif} is the differential operator produced by \cs{d} in math mode.
% Here we prefer \cs{mathinner} to |\mathbin| to make the skip.
% \begin{macrocode}
-\def\@dif{\ifmmode%
- \mathinner{\@@dif}\mup@tch%
-\fi}
+\def\@dif{\mathinner{\@@dif}\mup@tch}
% \end{macrocode}
% \DescribeMacro{\d@accent}
% Restore the \cs{d} command in text by \cs{d@accent} with the \cs{let}
@@ -499,7 +497,7 @@ Copyright (C) 2022 by Zhang Tingxuan <alphaztx@163.com>.
% \DescribeMacro{\d}
% Redefine the \cs{d} command. In text, we need to expand the stuffs after \cs{d}
% \begin{macrocode}
-\gdef\d{\ifmmode\@dif\else\expandafter\d@accent\fi}
+\gdef\d{\relax\ifmmode\@dif\else\expandafter\d@accent\fi}
% \end{macrocode}
%
% \subsection{User's interface for defining new differential operators}
diff --git a/macros/latex/contrib/fixdif/fixdif.pdf b/macros/latex/contrib/fixdif/fixdif.pdf
index fd3208d669..dd066756f0 100644
--- a/macros/latex/contrib/fixdif/fixdif.pdf
+++ b/macros/latex/contrib/fixdif/fixdif.pdf
Binary files differ
diff --git a/macros/latex/contrib/typed-checklist/README.md b/macros/latex/contrib/typed-checklist/README.md
index bea5d768f3..8f491cbf8b 100644
--- a/macros/latex/contrib/typed-checklist/README.md
+++ b/macros/latex/contrib/typed-checklist/README.md
@@ -1,9 +1,9 @@
The typed-checklist package
===========================
-Copyright (C) 2013-2019 Richard Grewe
+Copyright (C) 2013-2022 Richard Grewe
-Released under the [LaTeX Project Public License](http://www.latex-project.org/lppl/) version 1.2 or later
+Released under the [LaTeX Project Public License](http://www.latex-project.org/lppl/) version 1.3c or later
## Purpose
diff --git a/macros/latex/contrib/typed-checklist/typed-checklist.dtx b/macros/latex/contrib/typed-checklist/typed-checklist.dtx
index 44fccc37dc..9bd1cfc053 100644
--- a/macros/latex/contrib/typed-checklist/typed-checklist.dtx
+++ b/macros/latex/contrib/typed-checklist/typed-checklist.dtx
@@ -1,17 +1,17 @@
% \iffalse meta-comment
%
-% Copyright (C) 2013-2019 by Richard Grewe <r-g+tex@posteo.net>
+% Copyright (C) 2013-2022 by Richard Grewe <r-g+tex@posteo.net>
% -------------------------------------------------------
%
% This file may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.2
+% 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:
+% The latest version of this license is in
+% https://www.latex-project.org/lppl.txt
+% and version 1.3c or later is part of all distributions of LaTeX
+% version 2008 or later.
%
-% http://www.latex-project.org/lppl.txt
-%
-% and version 1.2 or later is part of all distributions of LaTeX
-% version 1999/12/01 or later.
+% This file has the LPPL maintenance status "maintained".
%
% \fi
%
@@ -22,7 +22,7 @@
%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<package>\ProvidesPackage{typed-checklist}
%<*package>
- [2019/01/11 v2.0 A package for layouting checklists]
+ [2022/05/28 v2.1 A package for layouting checklists]
%</package>
%
%<*driver>
@@ -865,16 +865,13 @@
%
% \subsection{Table Packages}\label{sec:tablepkg}
%
-% The |table| layout by default uses the \pkgname{tabu} package for
+% \changes{v2.1}{2022/05/28}{Changed default table package to \pkgname{xltabular}, removed \pkgname{tabu}}
+% The |table| layout by default uses the \pkgname{xltabular} package for
% layouting the tables. The default can be changed through the
% |tablepkg| package option. The following values are available:
% \begin{KeyValTable}{ValDesc}
% \Row{val=ltablex,
% desc={This option uses the \pkgname{ltablex} package. }}
-% \Row{val=tabu,
-% desc={This option uses the \pkgname{tabu} package, which is the
-% default. That is, specifying this option does not change the
-% package behavior.}}
% \Row{val=tabularx,
% desc={This option uses the \pkgname{tabularx} package from the
% \hologo{LaTeX} core. When using this table type, keep in mind
@@ -884,10 +881,6 @@
% of \pkgname{ltablex}.}}
% \end{KeyValTable}
%
-% Note:
-% In the future, the default might change if the \pkgname{tabu} package
-% remains unmaintained.
-%
% \section{Related Packages}
%
% The following \LaTeX{} packages provide related functionalities to
@@ -2200,24 +2193,6 @@
\CheckListDefineFieldFormat{table}{NC}{&}
% \end{macrocode}
% The following macros define the package-specific table code.
-% \begin{macro}{\tchklst@inittab@tabu}
-% \begin{macro}{\tchklst@begintab@tabu}
-% \begin{macro}{\tchklst@endtab@tabu}
-% The following three macros specify how the \pkgname{tabu} package is
-% initialized (i.e., how the package is loaded) and how table
-% environments are started and, respectively, ended.
-% \begin{macrocode}
-\newcommand\tchklst@inittab@tabu{%
- \RequirePackage{longtable,tabu}}
-\newcommand\tchklst@begintab@tabu{%
- \tabulinesep=0.5ex\relax
- \def\tchklst@@endhead{\endhead}%
- \longtabu to \linewidth {|c|X|l|r|}}
-\newcommand\tchklst@endtab@tabu{\tchklst@@newline\endlongtabu}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
% \begin{macro}{\tchklst@inittab@xltabular}
% \begin{macro}{\tchklst@begintab@xltabular}
% \begin{macro}{\tchklst@endtab@xltabular}
@@ -2305,7 +2280,7 @@
% \changes{v2.0}{2018/12/24}{Package option `tablepkg' added}
% \begin{macrocode}
\define@choicekey[tchklst]{PackageOptions}{tablepkg}[\val]
- {ltablex,tabu,tabularx,xltabular}{%
+ {ltablex,tabularx,xltabular}{%
\letcs\tchklst@@inittab{tchklst@inittab@\val}%
\letcs\tchklst@@begintab{tchklst@begintab@\val}%
\letcs\tchklst@@endtab{tchklst@endtab@\val}%
@@ -2326,7 +2301,7 @@
% \begin{macrocode}
\ExecuteOptionsX[tchklst]<PackageOptions,GlobalListOptions>{%
withAsciilist=false,
- tablepkg=tabu,
+ tablepkg=xltabular,
onecounter=true,
layout=list,
input-dates=d.m.y,
diff --git a/macros/latex/contrib/typed-checklist/typed-checklist.ins b/macros/latex/contrib/typed-checklist/typed-checklist.ins
index 42e1a032e1..534bfd3c60 100644
--- a/macros/latex/contrib/typed-checklist/typed-checklist.ins
+++ b/macros/latex/contrib/typed-checklist/typed-checklist.ins
@@ -1,15 +1,22 @@
%%
-%% Copyright (C) 2013-2019 by Richard Grewe <r-g+tex@posteo.net>
+%% Copyright (C) 2013-2022 by Richard Grewe <r-g+tex@posteo.net>
%%
-%% This file may be distributed and/or modified under the conditions of
-%% the LaTeX Project Public License, either version 1.2 of this license
-%% or (at your option) any later version. The latest version of this
-%% license is in:
-%%
-%% http://www.latex-project.org/lppl.txt
-%%
-%% and version 1.2 or later is part of all distributions of LaTeX version
-%% 1999/12/01 or later.
+%% 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 2008 or later.
+%%
+%% This file has the LPPL maintenance status "maintained".
+%%
+%% As this file contains legal notices, it is NOT PERMITTED to modify
+%% this file in any way that the legal information placed into
+%% generated files is changed (i.e., the files generated when the
+%% original file is executed). This restriction does not apply if
+%% (parts of) the content is reused in a different WORK producing its
+%% own generated files.
%%
\input docstrip.tex
\keepsilent
@@ -17,22 +24,27 @@
\usedir{tex/latex/typed-checklist}
\preamble
-Copyright (C) 2013-2019 by Richard Grewe <r-g+tex@posteo.net>
+Copyright (C) 2013-2022 by Richard Grewe <r-g+tex@posteo.net>
-This file may be distributed and/or modified under the conditions of
-the LaTeX Project Public License, either version 1.2 of this license
-or (at your option) any later version. The latest version of this
-license is in:
+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 2008 or later.
- http://www.latex-project.org/lppl.txt
+This file has the LPPL maintenance status "maintained".
-and version 1.2 or later is part of all distributions of LaTeX version
-1999/12/01 or later.
+As this file contains legal notices, it is NOT PERMITTED to modify
+this file in any way that the legal information placed into
+generated files is changed (i.e., the files generated when the
+original file is executed). This restriction does not apply if
+(parts of) the content is reused in a different WORK producing its
+own generated files.
\endpreamble
\generate{\file{typed-checklist.sty}{\from{typed-checklist.dtx}{package}}}
-\nopreamble\nopostamble
-
\endbatchfile
diff --git a/macros/latex/contrib/typed-checklist/typed-checklist.pdf b/macros/latex/contrib/typed-checklist/typed-checklist.pdf
index a208b62661..6c27776c1c 100644
--- a/macros/latex/contrib/typed-checklist/typed-checklist.pdf
+++ b/macros/latex/contrib/typed-checklist/typed-checklist.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/nwafuthesis/nwafuthesis.dtx b/macros/unicodetex/latex/nwafuthesis/nwafuthesis.dtx
index 9ece7e75af..720524e68b 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.14 2022-05-28 Nan Geng <nangeng@nwafu.edu.cn> $
+%<!readme>\GetIdInfo $Id: nwafuthesis.dtx 1.15 2022-05-29 Nan Geng <nangeng@nwafu.edu.cn> $
%<class> {Thesis template for Northwest A\&F University}
%<class>\ProvidesExplClass{\ExplFileName}
%<definition> {Definition file for nwafuthesis}
@@ -143,12 +143,12 @@
\textbf{\nwafuthesis: 西北农林科技大学学位论文
\xpinyin[font=\sffamily,format=\color{MaterialIndigo800}]{模}{mu2}板}}}
\author{耿楠}
-\date{\today\quad v1.14%
+\date{\today\quad v1.15%
\thanks{\url{https://gitee.com/nwafu_nan/nwafuthesis-l3}.}}
\begin{document}
%<!--CODEDOC--> \DisableImplementation
- \EnableImplementation
+\EnableImplementation
%<!--CODEDOC--> \def\nwafuCODEDOC{}
\DocInput{nwafuthesis.dtx}
\DocInput{nwafuthesis-doc.dtx}
@@ -375,7 +375,6 @@
% \textbf{文件} & \textbf{功能说明} \\
% \midrule
% \file{nwafuthesis.cls} & 模板文档类 \\
-% \file{nwafudoc.cls} & 编译该用户手册时需要的文档类 \\
% \file{nwafuthesis.pdf} & 用户手册 \\
% \bottomrule
% \end{tabular}
@@ -806,6 +805,13 @@
% 选择论文章标题格式为章格式(如:第1章 绪论)还是报告格式(如:1 绪论),默认为章格式。
% \end{function}
%
+% \begin{function}[added=2022-05-29]{style/withsig}
+% \begin{nwafusyntax}[emph={[1]withsig}]
+% withsig = (*<\TFF>*)
+% \end{nwafusyntax}
+% 题名页是否需要签名。
+% \end{function}
+%
% \begin{function}[added=2022-05-24]{style/chapnum}
% \begin{nwafusyntax}[emph={[1]chapnum}]
% chapnum = (*<zh|(en)>*)
@@ -1800,6 +1806,15 @@
% \end{macrocode}
% \end{variable}
%
+% \changes{v1.15}{2022/05/29}{添加研究生题名页签字判断变量。}
+%
+% \begin{variable}{\l_@@_withsignature_bool}
+% 研究生题名页中的作者、指导教师和答辩委员会姓名是否需要签名。
+% \begin{macrocode}
+\bool_new:N \l_@@_withsignature_bool
+% \end{macrocode}
+% \end{variable}
+%
% \changes{v1.12}{2022/05/24}{添加本科生中文章编号处理。}
%
% \begin{variable}{\g_@@_chapnum_int}
@@ -3879,6 +3894,10 @@
withchapter .default:n = true,
withchapter .initial:n = true,
+ withsig .bool_set:N = \l_@@_withsignature_bool,
+ withsig .default:n = true,
+ withsig .initial:n = false,
+
chapnum .choice:,
chapnum .value_required:n = true,
chapnum .choices:nn =
@@ -5639,9 +5658,10 @@
% \end{macrocode}
% \end{macro}
%
+% \changes{v1.15}{2022/05/29}{为研究生题名页签字位置留空位。}
+%
% \begin{macro}{\@@_cover_instructors:}
-% 标题内页作者、指导教师、指导小组签名,仅对研究生有效。
-% 此处应该是签名,在此直接设计为打印出姓名。
+% 题名页作者、指导教师、指导小组签名,仅对研究生有效。
% \begin{macrocode}
\cs_new_protected:Npn \@@_cover_instructors:
{
@@ -5666,52 +5686,62 @@
% \begin{macrocode}
\tl_set:Nn \l_@@_tmpa_tl {\clist_use:Nn \l_@@_info_instructors_clist {\@@_quad: }}
% \end{macrocode}
-% 作者、导师、指导小组信息变量值,并取得最宽宽度。
+% 判断是否需要签名。
+% \begin{macrocode}
+ \bool_if:NTF \l_@@_withsignature_bool
+% \end{macrocode}
+% 不输出姓名,输出下划线,留作签名空间。
% \begin{macrocode}
- \clist_set:Nx \l_@@_tmpb_clist
{
- {\l_@@_info_author_tl },
- {\l_@@_info_supervisor_tl },
- {\l_@@_tmpa_tl },
- }
- \@@_get_max_text_width:NN \l_@@_tmpb_dim \l_@@_tmpb_clist
+ \begin{minipage} [ c ] { 17em }
+ \flushleft
+ \c_@@_name_author_tl
+ \c_@@_fwid_colon_tl
+ \@@_blank_underline:n{ 12em }
+ \skip_vertical:n { 1.6 ex }
+ \c_@@_name_supervisor_tl
+ \c_@@_fwid_colon_tl
+ \@@_blank_underline:n{ 12em }
+ \skip_vertical:n { 1.6 ex }
+ \c_@@_name_instructors_tl
+ \c_@@_fwid_colon_tl
+ \@@_blank_underline:n{ 12em }
+ \skip_vertical:n { 1 ex }
+ \end{minipage}
+ }{
% \end{macrocode}
-% 计算小页环境宽度。
+% 作者、导师、指导小组信息变量值,并取得最宽宽度。
% \begin{macrocode}
- \dim_set_eq:NN \l_@@_tmpt_dim \l_@@_tmpa_dim
- \dim_add:Nn \l_@@_tmpt_dim { \l_@@_tmpb_dim }
- \dim_add:Nn \l_@@_tmpt_dim {2.5em}
- \begin{minipage} [ c ] { \l_@@_tmpt_dim }
- \centering
+ \clist_set:Nx \l_@@_tmpb_clist
+ {
+ {\l_@@_info_author_tl },
+ {\l_@@_info_supervisor_tl },
+ {\l_@@_tmpa_tl },
+ }
+ \@@_get_max_text_width:NN \l_@@_tmpb_dim \l_@@_tmpb_clist
% \end{macrocode}
-% 用循环输出各字段。
+% 计算小页宽度。
% \begin{macrocode}
- \bool_until_do:nn
- { \clist_if_empty_p:N \l_@@_tmpa_clist }
- {
- \clist_pop:NN \l_@@_tmpa_clist \l_@@_tmpa_tl
- \clist_pop:NN \l_@@_tmpb_clist \l_@@_tmpb_tl
- \l_@@_tmpa_tl
- \c_@@_fwid_colon_tl
- \@@_center_box:Vn \l_@@_tmpb_dim { \l_@@_tmpb_tl }
- \skip_vertical:n { 1 ex }
- }
+ \dim_set_eq:NN \l_@@_tmpt_dim \l_@@_tmpa_dim
+ \dim_add:Nn \l_@@_tmpt_dim { \l_@@_tmpb_dim }
+ \dim_add:Nn \l_@@_tmpt_dim {2.5em}
% \end{macrocode}
-% 不输出姓名,输出下划线,留作签名空间(暂未启用)。
+% 循环输出作者、导师、指导小组姓名。
% \begin{macrocode}
- % \c_@@_name_author_tl
- % \c_@@_fwid_colon_tl
- % \@@_blank_underline:n{ 12em }
- % \skip_vertical:n { 1 ex }
- % \c_@@_name_supervisor_tl
- % \c_@@_fwid_colon_tl
- % \@@_blank_underline:n{ 12em }
- % \skip_vertical:n { 1 ex }
- % \c_@@_name_instructors_tl
- % \c_@@_fwid_colon_tl
- % \@@_blank_underline:n{ 12em }
- % \skip_vertical:n { 1 ex }
- \end{minipage}
+ \begin{minipage} [ c ] { \l_@@_tmpt_dim }
+ \centering
+ \bool_until_do:nn { \clist_if_empty_p:N \l_@@_tmpa_clist }
+ {
+ \clist_pop:NN \l_@@_tmpa_clist \l_@@_tmpa_tl
+ \clist_pop:NN \l_@@_tmpb_clist \l_@@_tmpb_tl
+ \l_@@_tmpa_tl
+ \c_@@_fwid_colon_tl
+ \@@_center_box:Vn \l_@@_tmpb_dim { \l_@@_tmpb_tl }
+ \skip_vertical:n { 1.6 ex }
+ }
+ \skip_vertical:n { -0.6 ex }
+ \end{minipage}
+ }
}
% \end{macrocode}
% 硕士生,仅需作者和导师。
@@ -5727,50 +5757,55 @@
}
\@@_get_max_text_width:NN \l_@@_tmpa_dim \l_@@_tmpa_clist
% \end{macrocode}
-% 作者、导师信息,并取得最宽宽度。
-% \begin{macrocode}
- \clist_set:Nx \l_@@_tmpb_clist
- {
- {\l_@@_info_author_tl },
- {\l_@@_info_supervisor_tl },
- }
- \@@_get_max_text_width:NN \l_@@_tmpb_dim \l_@@_tmpb_clist
- \dim_add:Nn \l_@@_tmpb_dim { \l_@@_tmpb_dim }
-% \end{macrocode}
-% 计算小页环境宽度。
+% 判断是否需要签名。
% \begin{macrocode}
- \dim_set_eq:NN \l_@@_tmpt_dim \l_@@_tmpa_dim
- \dim_add:Nn \l_@@_tmpt_dim { \l_@@_tmpb_dim }
- \dim_add:Nn \l_@@_tmpt_dim {2.5em}
- \begin{minipage} [ c ] { \l_@@_tmpt_dim }
- \centering
+ \bool_if:NTF \l_@@_withsignature_bool
% \end{macrocode}
-% 用循环输出各字段。
+% 不输出姓名,输出下划线,留作签名空间(暂未启用)。
% \begin{macrocode}
- \bool_until_do:nn
- { \clist_if_empty_p:N \l_@@_tmpa_clist }
- {
- \clist_pop:NN \l_@@_tmpa_clist \l_@@_tmpa_tl
- \clist_pop:NN \l_@@_tmpb_clist \l_@@_tmpb_tl
- \l_@@_tmpa_tl
+ {
+ \begin{minipage} [ c ] { 17em }
+ \flushleft
+ \c_@@_name_author_tl
+ \c_@@_fwid_colon_tl
+ \@@_blank_underline:n{ 12em }
+ \skip_vertical:n { 1.6 ex }
+ \c_@@_name_supervisor_tl
\c_@@_fwid_colon_tl
- \@@_center_box:Vn \l_@@_tmpb_dim { \l_@@_tmpb_tl }
+ \@@_blank_underline:n{ 12em }
\skip_vertical:n { 1 ex }
- }
+ \end{minipage}
+ }{
% \end{macrocode}
-% 不输出姓名,输出下划线,留作签名空间(暂未启用)。
+% 作者、导师信息,并取得最宽宽度。
% \begin{macrocode}
- % \begin{minipage} [ c ] { 17em }
- % \flushleft
- % \c_@@_name_author_tl
- % \c_@@_fwid_colon_tl
- % \@@_blank_underline:n{ 12em }
- % \skip_vertical:n { 1 ex }
- % \c_@@_name_supervisor_tl
- % \c_@@_fwid_colon_tl
- % \@@_blank_underline:n{ 12em }
- % \skip_vertical:n { 1 ex }
- \end{minipage}
+ \clist_set:Nx \l_@@_tmpb_clist
+ {
+ {\l_@@_info_author_tl },
+ {\l_@@_info_supervisor_tl },
+ }
+ \@@_get_max_text_width:NN \l_@@_tmpb_dim \l_@@_tmpb_clist
+ \dim_add:Nn \l_@@_tmpb_dim { \l_@@_tmpb_dim }
+% \end{macrocode}
+% 计算小页环境宽度后,用循环输出各姓名字段。
+% \begin{macrocode}
+ \dim_set_eq:NN \l_@@_tmpt_dim \l_@@_tmpa_dim
+ \dim_add:Nn \l_@@_tmpt_dim { \l_@@_tmpb_dim }
+ \dim_add:Nn \l_@@_tmpt_dim {2.5em}
+ \begin{minipage} [ c ] { \l_@@_tmpt_dim }
+ \centering
+ \bool_until_do:nn { \clist_if_empty_p:N \l_@@_tmpa_clist }
+ {
+ \clist_pop:NN \l_@@_tmpa_clist \l_@@_tmpa_tl
+ \clist_pop:NN \l_@@_tmpb_clist \l_@@_tmpb_tl
+ \l_@@_tmpa_tl
+ \c_@@_fwid_colon_tl
+ \@@_center_box:Vn \l_@@_tmpb_dim { \l_@@_tmpb_tl }
+ \skip_vertical:n { 1.6 ex }
+ }
+ \skip_vertical:n { -0.6 ex }
+ \end{minipage}
+ }
}
}
}
@@ -7522,6 +7557,7 @@
%
% \changes{v1.10}{2022/03/17}{直接使用胡振震制定的gb7714-NWAFU实现参考文献样式控制。}
% \changes{v1.14}{2022/05/26}{调整作者姓在前名在后,缩写不加点。}
+% \changes{v1.15}{2022/05/28}{调整姓在前名在后缩写标点符号。}
%
% \subsection{参考文献著录与引用}
%
@@ -7570,16 +7606,16 @@
% \end{macrocode}
% 其它参数。
% \begin{macrocode}
- \@@_pass_options_to_biblatex:n
- {
+ % \@@_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,
+ % gbnamefmt=lowercase,
% doi=false, isbn=false,
% gbfieldtype=true, gbpunctin=false,
- }
+ % }
}
\cs_new_protected:Npn \@@_biblatex_post_setup:
{
@@ -7608,6 +7644,54 @@
}
}
}
+% \end{macrocode}
+% 修订姓名之间及名缩写后的标点符号。
+% \begin{macrocode}
+ \def\gbcaselocalset{%
+ \renewrobustcmd*{\bibinitperiod}{}%
+ \renewcommand*{\revsdnamepunct}{}%
+ %\renewrobustcmd*{\bibinitdelim}{}%
+ }
+
+ \renewbibmacro*{name:family-given}[4]{%
+ \gbcaselocalset%
+ \ifuseprefix{%
+ \usebibmacro{name:delim}{##3##1}%
+ \usebibmacro{name:hook}{##3##1}%
+ \mkbibcompletenamefamilygiven{%
+ \ifdefvoid{##3}{}
+ {%
+ \ifcapital
+ {\mkbibnameprefix{\MakeCapital{##3}}\isdot}
+ {\mkbibnameprefix{##3}\isdot}%
+ \ifprefchar{}{\bibnamedelimc}
+ }%
+ \mkbibnamefamily{##1}\isdot
+ \ifdefvoid{##4}{}
+ {\bibnamedelimd\mkbibnamesuffix{##4}\isdot}%
+ \ifdefvoid{##2}{}
+ {\revsdnamepunct\bibnamedelimd\mkbibnamegiven{##2}\isdot}
+ }
+ }{%
+ \usebibmacro{name:delim}{##1}%
+ \usebibmacro{name:hook}{##1}%
+ \mkbibcompletenamefamilygiven{%
+ \mkbibnamefamily{##1}\isdot
+ \ifdefvoid{##4}{}
+ {\bibnamedelimd\mkbibnamesuffix{##4}\isdot}%
+ \ifboolexpe{%
+ test {\ifdefvoid{##2}}
+ and
+ test {\ifdefvoid{##3}}
+ }{}
+ {\revsdnamepunct}%
+ \ifdefvoid{##2}{}
+ {\bibnamedelimd\mkbibnamegiven{##2}\isdot}%
+ \ifdefvoid{##3}{}
+ {\bibnamedelimd\mkbibnameprefix{##3}\isdot}
+ }
+ }
+ }
}
\cs_new_protected:Npn \@@_pass_options_to_biblatex:n #1
{ \PassOptionsToPackage {#1} { biblatex } }
diff --git a/macros/unicodetex/latex/nwafuthesis/nwafuthesis.pdf b/macros/unicodetex/latex/nwafuthesis/nwafuthesis.pdf
index dce2ecb8f5..9b7bd35d2d 100644
--- a/macros/unicodetex/latex/nwafuthesis/nwafuthesis.pdf
+++ b/macros/unicodetex/latex/nwafuthesis/nwafuthesis.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 740d8f5694..2fb633af5c 100644
--- a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+++ b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
@@ -15,6 +15,7 @@ $mirrors = {
'https://mirrors.bfsu.edu.cn/CTAN/' => 1,
'https://mirrors.cloud.tencent.com/CTAN/' => 1,
'https://mirrors.cqu.edu.cn/CTAN/' => 1,
+ 'https://mirrors.dgut.edu.cn/CTAN/' => 1,
'https://mirrors.hit.edu.cn/CTAN/' => 1,
'https://mirrors.nju.edu.cn/CTAN/' => 1,
'https://mirrors.nwafu.edu.cn/ctan/' => 1,
@@ -50,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,
},
@@ -104,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,
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
index 4978d51049..098565065d 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/63431
+depend revision/63439
name 00texlive.image
category TLCore
-revision 63430
+revision 63439
shortdesc TeX Live files only in the source repository
longdesc The files here are not copied by the installer and containers
longdesc are not built for them; they exist only in the source
@@ -40,7 +40,7 @@ longdesc IgnorePatterns in the check_files routine in tlmgr.pl augment
longdesc this list. Those are not included in the source/ tarball. For
longdesc information on the 00texlive prefix see
longdesc 00texlive.installation(.tlpsrc)
-runfiles size=12866
+runfiles size=12894
.mkisofsrc
autorun.inf
texmf-dist/README
@@ -4573,7 +4573,7 @@ depend setting_available_architectures:aarch64-linux amd64-freebsd amd64-netbsd
name 00texlive.installer
category TLCore
-revision 63417
+revision 63433
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
@@ -8678,21 +8678,23 @@ catalogue-version 3.13c
name acmart
category Package
-revision 63003
+revision 63437
shortdesc Class for typesetting publications of ACM
relocated 1
longdesc This package provides a class for typesetting publications of
longdesc the Association for Computing Machinery (ACM).
-containersize 41388
-containerchecksum 13eecb196e2146464a75b2adb2c5071e26b6a499d1a666fb9a7278eb409f0a3cb4b392139515dcb4b6f245910199c8005efd6e62345fa5a07dac461d9f539590
-doccontainersize 4235964
-doccontainerchecksum 5c918f9b271400339c370b85f861159eb66872bcb1d7d5a507f02f2c4a9ee61f0976d4f2753cbcac6be6cf905f9dc9735ac969dc372db5b27396b131a934f251
-docfiles size=3270
+containersize 41920
+containerchecksum df6134dcaf3d99e8eb578a3bf03d034cbdc7354babda3a92cc15da1569bf455e1e9f2090fcf071a3be8f26b5b74fcfbb6090d2f6c639ab1462058914e927a747
+doccontainersize 4654032
+doccontainerchecksum fbd16e9c45c4187fd8a754812697e2738c1b33195a9dfc76b07a7c4cb624b9dcd589f64c7f7135fad2360e37c2974d8ca9b9012e8bb9494b56f3ee3ce28e02ed
+docfiles size=3386
RELOC/doc/latex/acmart/README details="Readme"
RELOC/doc/latex/acmart/acmart.bib
RELOC/doc/latex/acmart/acmart.pdf details="Documentation"
RELOC/doc/latex/acmart/acmguide.pdf
RELOC/doc/latex/acmart/samples/abbrev.bib
+ RELOC/doc/latex/acmart/samples/sample-acmengage.pdf
+ RELOC/doc/latex/acmart/samples/sample-acmengage.tex
RELOC/doc/latex/acmart/samples/sample-acmlarge.pdf
RELOC/doc/latex/acmart/samples/sample-acmlarge.tex
RELOC/doc/latex/acmart/samples/sample-acmsmall-biblatex.pdf
@@ -8727,9 +8729,9 @@ docfiles size=3270
RELOC/doc/latex/acmart/samples/samples.ins
RELOC/doc/latex/acmart/samples/sampleteaser.pdf
RELOC/doc/latex/acmart/samples/software.bib
-srccontainersize 57556
-srccontainerchecksum f84c4cb9774162d3694b3304edfd18ffc76a8d24f2b2fd3f4c669970bacce2b42fd2415dca41532c34404b6a571243513e47c65285cdc6cca581d0c5e42cefac
-srcfiles size=68
+srccontainersize 58960
+srccontainerchecksum 912e74057e4811cd9ffb7eb09f964aa435ff6549ddb840eb74bc4458bc5456e92c4906dcd57918e450e93a25054a9b80330dc44260f1bf50c004f8da7df653fc
+srcfiles size=70
RELOC/source/latex/acmart/Makefile
RELOC/source/latex/acmart/acmart.dtx
RELOC/source/latex/acmart/acmart.ins
@@ -8747,7 +8749,7 @@ catalogue-contact-repository https://github.com/borisveytsman/acmart/
catalogue-ctan /macros/latex/contrib/acmart
catalogue-license lppl1.3
catalogue-topics class comp-sci comp-theory engineering journalpub
-catalogue-version 1.84
+catalogue-version 1.85
name acmconf
category Package
@@ -97025,24 +97027,24 @@ catalogue-version 2.08m
name dtk-bibliography
category Package
-revision 63107
+revision 63439
shortdesc Bibliography of "Die TeXnische Komodie"
relocated 1
longdesc This package contains the bibliography for "Die TeXnische
longdesc Komodie", the journal of the German-speaking TeX User Group. It
longdesc is updated on a quarterly basis.
-containersize 2340
-containerchecksum f972c83103ea370ea4b41df0c29f073e84be38dc13e6ef340ba1335f318895a9508758e8540a95614a2a807e8d6aa169da240f800ab5da5281105b28fe2ed8aa
-doccontainersize 426416
-doccontainerchecksum 957334caf122e546208d28cc6496c7025e199fc90ee1104203dd79a96207e077223c848a55c76c386064dd78908d8606dd0bb39cda334bbd8b8f56e33ff28e88
-docfiles size=228
+containersize 51852
+containerchecksum 08a2d482182bbef42e87a738fcb8255ac6470a4f1d9d17bb6540c17783136cb8e745c0da314cd4237b35b2a232005e3226249cd45443b051577f2edc148304cb
+doccontainersize 376536
+doccontainerchecksum db3257fe5e2d93be136d44142d35490f7ce289bb27e0ebb85501a3fc03c9ac89468ad4cb137d4b357784dc2e7e0d8d9322a0d96756b2bdcadb89151af5d80813
+docfiles size=96
RELOC/doc/bibtex/dtk-bibliography/README.md details="Readme"
- RELOC/doc/bibtex/dtk-bibliography/dtk-authoryear.bbx
- RELOC/doc/bibtex/dtk-bibliography/dtk-authoryear.dbx
- RELOC/doc/bibtex/dtk-bibliography/dtk-bibliography.bib
RELOC/doc/bibtex/dtk-bibliography/dtk-bibliography.pdf details="The document itself"
RELOC/doc/bibtex/dtk-bibliography/dtk-bibliography.tex
-runfiles size=2
+runfiles size=134
+ RELOC/bibtex/bib/dtk-bibliography/dtk-bibliography.bib
+ RELOC/tex/latex/dtk-bibliography/dtk-authoryear.bbx
+ RELOC/tex/latex/dtk-bibliography/dtk-authoryear.dbx
RELOC/tex/latex/dtk-bibliography/dtk-logos.sty
catalogue-contact-bugs https://github.com/dante-ev/dtk-bibliography/issues
catalogue-contact-repository https://github.com/dante-ev/dtk-bibliography
@@ -228829,7 +228831,7 @@ catalogue-version 0.0.1
name nwafuthesis
category Package
-revision 63429
+revision 63438
shortdesc A thesis template package for Northwest A&F University, China
relocated 1
longdesc This template supports doctoral and master dissertations and
@@ -228839,11 +228841,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 19424
-containerchecksum ac8f627b24620fc6760ccc4e43baa02bd1483c1a0ad120a10536ea52efcd4a35e6ed9e9efe905b79bac7097afe4442b7dec0aebdcefc1e3a597b1dbbdd5f8e78
-doccontainersize 2257412
-doccontainerchecksum 3c4c015cfa8056be5a6a0f3624a167db52f3d59d5c7726698b33a30474fd59cd56a185ca4e6aa2593a93e1665a91d6f3be16677c99a0dadc6524009d605a2860
-docfiles size=981
+containersize 19760
+containerchecksum fb446200dd57be37bca4e526506124bcfe3c35c3af452cbe542bf3f5e7c56f3108d5482131641a9bb8b379c4aa713152fdc13ee9f1aedb6a97c545328c0f04a1
+doccontainersize 2263888
+doccontainerchecksum 009615c925755952d8a26a8d51f6d8d066b644a9168e241b339a137e56365bb17452016c8befe3fa3dbdccf6ae68daea3f29b99ae8d8c8e50e8028570620da2f
+docfiles size=982
RELOC/doc/latex/nwafuthesis/README.md details="Readme"
RELOC/doc/latex/nwafuthesis/logo/building.jpg
RELOC/doc/latex/nwafuthesis/logo/motto.png
@@ -228852,9 +228854,9 @@ docfiles size=981
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 62048
-srccontainerchecksum 6688b2e49a2540ac42a541490d1caa062163f95545e9a68f17c8ca426256238cbff1f4475300e5612943c4b07c77533aad884cc812df60fbd5f2527f6a8fea5e
-srcfiles size=84
+srccontainersize 62492
+srccontainerchecksum d2544ff7f20410b3f84459776d5f5b29c0b0b88e3cd9a1da6f3280f6e536996ca04c15cfb831c859b2c7a95d9bc8c93ca45b4a5fd3967d9c5b4d49969b9e7c06
+srcfiles size=85
RELOC/source/latex/nwafuthesis/build-win.bat
RELOC/source/latex/nwafuthesis/build.sh
RELOC/source/latex/nwafuthesis/nwafuthesis-doc.dtx
@@ -228866,7 +228868,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.14
+catalogue-version 1.15
name nwejm
category Package
@@ -304684,7 +304686,7 @@ docfiles size=376
name texlive-scripts
category TLCore
-revision 63417
+revision 63433
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.
@@ -304692,11 +304694,11 @@ 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 ff852eb127d7aba98c8ffde813cf904629ec9ab37ccf6e3f643bccbd2085c65dd5738517b7c927f0b6c6508bb1aa03388d52192c7c1437b53bca88ace06fb6f3
-doccontainersize 406832
-doccontainerchecksum 1f532a05087a055ad4d6757f49d13d7f1bb59d0c88209a85aed3c8f9068de600e5a1a6cf62e9288c4d96c96e6a2b3f2581f3e1072557a1ee4c56153c404a223c
-docfiles size=506
+containersize 109760
+containerchecksum 8e81b5b760fa1b53cfdaa4500a57d577750a70d3f3d9c3dd5afceed5e0893eded75ed79d9b5df57888f2ba96bebd9da87eacd55f1fa6cfc3eea6610eff3a2a8f
+doccontainersize 406816
+doccontainerchecksum b33309d0cc267aeaf31fa537b6f259d7b41950b073f402a8441bd1b227448c01b6b6293335ede8f0f299c5778514f5a4f1fba820b19b21e5581d5a6f56c6afd2
+docfiles size=507
doc.html
texmf-dist/doc/man/man1/fmtutil-sys.1
texmf-dist/doc/man/man1/fmtutil-sys.man1.pdf
@@ -343943,7 +343945,7 @@ binfiles arch=x86_64-linux size=1272
name xint
category Package
-revision 63338
+revision 63436
shortdesc Expandable operations on long numbers
relocated 1
longdesc The xint bundle main modules are: xinttools utilities of
@@ -343968,18 +343970,18 @@ longdesc display of continued fractions). All computations are
longdesc compatible with expansion-only context. The packages may be
longdesc used with Plain TeX, LaTeX, or (a priori) any other macro
longdesc format built upon TeX.
-containersize 80628
-containerchecksum cd80a99c1e0312f16a59f5c491a738d37b98af528c7fa29f980d3f0cc5828e599d593ce646a57c37fff2dd68eb16f9581cf23b3a746e2f3f8b7b287f0a437068
-doccontainersize 2191912
-doccontainerchecksum e37b846dad7998055f976d7412831c13cd0da142cfe2fcd1bb297f43e27a3f894219125ef3f16cd7ac022d5d8ab9bcf4ea6f6d5e2304b7092aa53a7ffcc48327
-docfiles size=582
+containersize 80792
+containerchecksum fa81589efa4c6870246ab4b5c9f33c9e461e939d20abb68892c1e0cb9726152b0c6c96107022cf28e0c066cf7f11deb720b8a28df0ba9c237ff5dc1261af2660
+doccontainersize 2203600
+doccontainerchecksum 0c6d7af8cbdeac284ab9a4a5807d3220854c42acc4eac8c0f880196ec9abe90db4597b8df08d40b567988cc2e05e156e93a22af6cad1fde09219da2f70b8d185
+docfiles size=586
RELOC/doc/generic/xint/CHANGES.html details="Changes (HTML)"
RELOC/doc/generic/xint/README.md details="Readme"
RELOC/doc/generic/xint/sourcexint.pdf details="Documented source code"
RELOC/doc/generic/xint/xint.pdf details="Package documentation"
-srccontainersize 401508
-srccontainerchecksum 4626fe36a2ace8e04f97911506b9f3afbdab8b727f81b0888a642a8625d38584b1ff992f0c3f49ffa4df58195fecc1cd5803161392551a7628176b1fdc3c8327
-srcfiles size=463
+srccontainersize 408648
+srccontainerchecksum e61c4a7772cfb9f40a995d52d379ee629fd258654ed58fc1b0984da759df9774676228f077828791b99860e69a2008b8f8d24b408bf1ae899fa6048350d866ff
+srcfiles size=470
RELOC/source/generic/xint/Makefile
RELOC/source/generic/xint/xint.dtx
runfiles size=163
@@ -343999,7 +344001,7 @@ catalogue-alias xintexpr
catalogue-ctan /macros/generic/xint
catalogue-license lppl1.3c
catalogue-topics arithmetic calculation
-catalogue-version 1.4k
+catalogue-version 1.4l
name xintsession
category Package
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
index 64870743ef..b03111774b 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
@@ -1 +1 @@
-077d9d54ede04db57088108e3df3be6f texlive.tlpdb
+217f06deb3075704c38000186ce0fd89 texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
index b1ff60e6f1..43d63e2cbe 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
@@ -1 +1 @@
-66e409b5dfa7c5855e9c490f3d19cd17c2019e1ea5cdcb474901e8b9414eb12ea5a883de36b1f97873f32e05f3eb9616173ca2491ccbf1450eb1602389334129 texlive.tlpdb
+e00fd00ae1cbd46d2cf1d4bce70e2506a0667f6cefb02e3e39b88d3a041218ca68271aaf50a3f70b89ca159aef24c58a11447944f2a758618a53d575d34d3219 texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
index 64caf81f03..0923175a03 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-----
-iQEcBAEBCgAGBQJikrZBAAoJEEzhh34ZQ4xwYrQH/iNUTvI9de3tCIKxdR0u/EmT
-87rZFjK98UYKN9v23mpyFd+8FBThjuB/GSi+LJpJHkYk9jarSr/LJ+Eje3uTa/f6
-m41+4Sf0HsrhTqmzDD6ysSNraFG+AKMtEzj0VFJ6OwUrnIDZp/StkewhHjM9m++z
-SxCLuPPA7G2BMVnfq3uLeCQ8odh6dClMI/Bn1PxXARukYD+H2EC9ykk5GoczNsEp
-i0pwHlarcexRl+856Oo8708XduHbFdSWWhKJI/w4fs40SSYf02bHK2MoH4dELqMV
-fzD43cX2/9QKaibnZew4gUn5wGGp6Jv4JopGsIVXQ/u1d2DRvXk+G9Zwy/5cq4s=
-=xvVX
+iQEcBAEBCgAGBQJilAgPAAoJEEzhh34ZQ4xw/IQH+gITodWR+QObxOKW51xtv4nB
+Bt/WXQbPUNwEae+rcHmBxq8SFHe03y84+O0htt+WG82dTU0CTnLG0LkrXRb/dsGc
+tf5bHHkTCmXLwj5iyUvXV7W1gjGYoA6a+9Zzeyg3d/LJzjypRxcPp8EasKtjLaVU
+j5cbK9HaiLe5rsEcLz4D8WW+MLAoPCrqA70Q5phx6bVkh0oiqj7sTq8SATahFwwk
+ARqZQdh84hdOldwlQECWYnfgu8/T3SUDg2zAMugE+duX6KxxNrkn/KjO/Kwz3bo0
+KCvK7lM+LRXFwdBeKws8miIBRVuxnO5fMY37zhwDK2Wd/yHjO7tef7VWrcTiAEo=
+=1l2H
-----END PGP SIGNATURE-----
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
index aac6ed79d6..cfb1a3d65b 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 6748939262..1ffa6c35ac 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=1653769080
+date=1653855475
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=310b4b699df60fe2e3c5b40c0f6f74a1
+lstdigest=726143979cfcbcc3c7bd26d32d17b4da
numpkg=5626
relstate=next
-version=8183
+version=8184
;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows.
;;;;-----BEGIN MIKTEX SIGNATURE-----
-;;;; signature/miktex: Cyrh9avpR0pZyb2/OdbRDnqSXdSmbremi9Y287dSvbyh58BnAgBRfW3mJA9nZ3ohFAZk03z7S2MvypAPwHpoR+ej7PZE39W6GTxlooy6/EWn+EBxdv/3eN+T2xodqz3FkzqJ0FJXXs/RoYrMxggoyev8Qr8HKjDlrMeHU4UfnMX/GhBxxI7L+1TwbO4eTZ5sinhu5oc2mEtJWoGR3nswVZzHFAF5x9JhNkmEkhHOsInQCOCe/zYyyx6+tvgIf7GHXqXLx4+h0elQ1sHqoLlsXR1ldLr5NWdx9iTzWTX3XNehUWztQrlxydlDuhdd+AdJmeiPGfggXV/wSTx3aFES2Q==
+;;;; signature/miktex: urfjvACi8br8C0Jqb964FE5R/lqvjFN7PLOQDTGsgC3TJEF8gPyesZZF45ONEpIA80OWnqHzagyPsY1Th+Y6JU31+JlWGT0uRMf9RhBHSiDJZfuBkzn1NDwbAMNQWA10CuSod469Ytfe8YA6qzud3HmWu52hk2jnTwsaKlyLPZ1T2REsGZjUCGBg+RJdoHg8oO0N1tNiepV57a8cb5yjKHsrXlhfn4OJ+a7pe8tbDvclIq4+i18jCoA1XH+BIV4QNmce6TwtVi9/wkJDUc4TXQDPAUDbGN2lsChb9c3r2aegaxoNlyOdFaeeE863/wPMwnMNzfLGuFsIgchQqolQOQ==
;;;;-----END MIKTEX SIGNATURE-----
diff --git a/systems/win32/miktex/tm/packages/pr.ini b/systems/win32/miktex/tm/packages/pr.ini
index b29915014b..6b18adb234 100644
--- a/systems/win32/miktex/tm/packages/pr.ini
+++ b/systems/win32/miktex/tm/packages/pr.ini
@@ -1,13 +1,13 @@
[repository]
-date=1653768689
+date=1653855081
lastupd=adjmulticol adjmulticol__doc adjmulticol__source babel babel__doc babel__source beamer beamer__doc biblatex-gb7714-2015 biblatex-gb7714-2015__doc biblatex-gb7714-2015__source bidi bidi__doc bidi__source bxghost bxghost__doc causets causets__doc causets__source create-theorem
-lstdigest=edcde0e3a304c743d7746367033bae50
+lstdigest=15afb2351617c4d07c3b0e5f31b9cc22
numpkg=5626
relstate=stable
-version=8183
+version=8184
;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows.
;;;;-----BEGIN MIKTEX SIGNATURE-----
-;;;; signature/miktex: kdJfL/mGVsM+0Y1l+yXfiWDeuVwUznAZaqQ7ut/N00gUbJtRsnJ3rnDGA42BOjfCDJfOfuZniXx3ZY1iyknPqS8mJJA/+y26i/SpRiINBhahWVgp4VIo/OB358gRW15fW7otowW5Pmxgn5eqPgzJG19QcaC60P1wEjFuNEXdzKB9kYZsD0Vtnlt716RLL/Bhqu8/QGHjyo2d2vPg8x4moVqSeFScxPvWi+pjBIWOFcLwZtv53AzBkTPP3kJ5H4voypuAfgiR5ceUIjSc0F7TKEnF0Hhm4C6zmgEGNiDGdTzm+GKM8w5+KZmO6IQClqGmdu+JTN/oSDGLYaRhMZ/eqw==
+;;;; signature/miktex: i0F6sM3T3/m3lsnzodb2VskQxFXBWsnZit7WSZQ4MPkY99CW+TZ7wEUoEEygj2kE14bGcXgXtyxJZ+iU66IxCZJKdZRdzyUKGoPKLLsREqq2dyH6rQ/Xx1z6xJrvSNl8yIM5lMsw1B+1gmn5eabtn49OReZeh/NJg2qRhzQdJzjnm4kz6ADQvXcMqHEvGHKKA97n/Kdo5ECkqLuHU97MIScW5rdI8btZ0ZnbgISegUVna6NZGowbUOakMU71cSHJHM4hwPRVcizjQ0zuoYnettTdRtNpwsok3OBXpk3aTsennQbVPDOe4k6wGWekFNz/RDp3DiFw1tyfbU44Chc7Lg==
;;;;-----END MIKTEX SIGNATURE-----
diff --git a/timestamp b/timestamp
index 597802a770..e1f9cdd2ca 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-29-02-02
+2022-05-30-02-02