summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FILES.byname287
-rw-r--r--FILES.byname.gzbin2545106 -> 2545434 bytes
-rw-r--r--FILES.last07days407
-rw-r--r--biblio/ctan-bibdata/ctan.bib43
-rw-r--r--biblio/ctan-bibdata/ctan.pdfbin3703057 -> 3701172 bytes
-rw-r--r--graphics/pgf/contrib/hobby/hobby.pdfbin506560 -> 506510 bytes
-rw-r--r--graphics/pgf/contrib/hobby/hobby_code.dtx18
-rw-r--r--graphics/pgf/contrib/hobby/hobby_code.pdfbin514512 -> 514679 bytes
-rw-r--r--macros/context/contrib/context-handlecsv/VERSION2
-rw-r--r--macros/context/contrib/context-handlecsv/context-presvoz-master-5196bdec981cf48b83896ec7b7009fda20d9106f/doc/context/third/presvoz/gvoz.pdfbin39795 -> 0 bytes
-rw-r--r--macros/context/contrib/context-handlecsv/context-presvoz-master-5196bdec981cf48b83896ec7b7009fda20d9106f/doc/context/third/presvoz/presvoz.pdfbin45582 -> 0 bytes
-rw-r--r--macros/context/contrib/context-handlecsv/context-presvoz-master-5196bdec981cf48b83896ec7b7009fda20d9106f/fonts/opentype/presvoz/Flechitas.otfbin8276 -> 0 bytes
-rw-r--r--macros/context/contrib/context-handlecsv/context-presvoz-master-5196bdec981cf48b83896ec7b7009fda20d9106f/fonts/opentype/presvoz/iRaccoonShowBold.otfbin305436 -> 0 bytes
-rwxr-xr-xmacros/context/contrib/context-handlecsv/context-presvoz-master-5196bdec981cf48b83896ec7b7009fda20d9106f/tex/context/third/presvoz/gvoz.py574
-rw-r--r--macros/context/contrib/context-handlecsv/context-presvoz-master-5196bdec981cf48b83896ec7b7009fda20d9106f/tex/context/third/presvoz/mtx-context-third-presvoz.tex798
-rw-r--r--macros/context/contrib/context-handlecsv/context-presvoz-master-5196bdec981cf48b83896ec7b7009fda20d9106f/tex/context/third/presvoz/presvoz.mkxl183
-rw-r--r--macros/context/contrib/context-handlecsv/doc/context/third/handlecsv/handlecsv.epubbin0 -> 808121 bytes
-rw-r--r--macros/context/contrib/context-handlecsv/doc/context/third/handlecsv/handlecsv.pdfbin0 -> 181427 bytes
-rw-r--r--macros/context/contrib/context-handlecsv/tex/context/third/handlecsv/t-handlecsv-extra.lua151
-rw-r--r--macros/context/contrib/context-handlecsv/tex/context/third/handlecsv/t-handlecsv-tools.lua178
-rw-r--r--macros/context/contrib/context-handlecsv/tex/context/third/handlecsv/t-handlecsv.lua1403
-rw-r--r--macros/context/contrib/context-handlecsv/tex/context/third/handlecsv/t-handlecsv.tex29
-rw-r--r--macros/latex/contrib/highlightx/README.md3
-rw-r--r--macros/latex/contrib/highlightx/doc/highlightx-doc.pdfbin167620 -> 119988 bytes
-rw-r--r--macros/latex/contrib/highlightx/doc/highlightx-doc.tex292
-rw-r--r--macros/latex/contrib/highlightx/tex/highlightx.sty236
-rw-r--r--macros/latex/contrib/iwonamath/Makefile87
-rw-r--r--macros/latex/contrib/iwonamath/README5
-rw-r--r--macros/latex/contrib/iwonamath/iwonamath.bib29
-rw-r--r--macros/latex/contrib/iwonamath/iwonamath.dtx451
-rw-r--r--macros/latex/contrib/iwonamath/iwonamath.ins13
-rw-r--r--macros/latex/contrib/iwonamath/iwonamath.pdfbin0 -> 502258 bytes
-rwxr-xr-xmacros/latex/contrib/iwonamath/makeiwonamathfd.sh15
-rw-r--r--macros/latex/contrib/iwonamath/omliwonamath.fd39
-rw-r--r--macros/latex/contrib/iwonamath/omliwonamathc.fd39
-rw-r--r--macros/latex/contrib/iwonamath/omliwonamathl.fd39
-rw-r--r--macros/latex/contrib/iwonamath/omliwonamathlc.fd39
-rw-r--r--macros/latex/contrib/iwonamath/omsiwonamath.fd39
-rw-r--r--macros/latex/contrib/iwonamath/omsiwonamathc.fd39
-rw-r--r--macros/latex/contrib/iwonamath/omsiwonamathl.fd39
-rw-r--r--macros/latex/contrib/iwonamath/omsiwonamathlc.fd39
-rw-r--r--macros/latex/contrib/iwonamath/omxiwonamath.fd39
-rw-r--r--macros/latex/contrib/iwonamath/omxiwonamathc.fd39
-rw-r--r--macros/latex/contrib/iwonamath/omxiwonamathl.fd39
-rw-r--r--macros/latex/contrib/iwonamath/omxiwonamathlc.fd39
-rw-r--r--macros/latex/contrib/iwonamath/ot1iwonamath.fd40
-rw-r--r--macros/latex/contrib/iwonamath/ot1iwonamathc.fd40
-rw-r--r--macros/latex/contrib/iwonamath/ot1iwonamathcm.fd38
-rw-r--r--macros/latex/contrib/iwonamath/ot1iwonamathl.fd40
-rw-r--r--macros/latex/contrib/iwonamath/ot1iwonamathlc.fd40
-rw-r--r--macros/latex/contrib/iwonamath/ot1iwonamathlcm.fd38
-rw-r--r--macros/latex/contrib/iwonamath/ot1iwonamathlm.fd38
-rw-r--r--macros/latex/contrib/iwonamath/ot1iwonamathm.fd38
-rw-r--r--macros/latex/contrib/iwonamath/sample.pdfbin0 -> 382573 bytes
-rw-r--r--macros/latex/contrib/iwonamath/sample.tex79
-rw-r--r--macros/latex/contrib/jwjournal/jwjournal.cls23
-rw-r--r--macros/latex/contrib/siunitx/CHANGELOG.md10
-rw-r--r--macros/latex/contrib/siunitx/siunitx-code.pdfbin647812 -> 647898 bytes
-rw-r--r--macros/latex/contrib/siunitx/siunitx-print.dtx23
-rw-r--r--macros/latex/contrib/siunitx/siunitx.dtx2
-rw-r--r--macros/latex/contrib/siunitx/siunitx.pdfbin705662 -> 705591 bytes
-rw-r--r--macros/latex/contrib/udes-genie-these/Exemple/acronymes.tex (renamed from macros/latex/contrib/udes-genie-these/acronymes.tex)0
-rw-r--r--macros/latex/contrib/udes-genie-these/Exemple/document.tex (renamed from macros/latex/contrib/udes-genie-these/document.tex)4
-rw-r--r--macros/latex/contrib/udes-genie-these/Exemple/lexique.tex (renamed from macros/latex/contrib/udes-genie-these/lexique.tex)0
-rw-r--r--macros/latex/contrib/udes-genie-these/Exemple/merci.tex (renamed from macros/latex/contrib/udes-genie-these/merci.tex)0
-rw-r--r--macros/latex/contrib/udes-genie-these/Exemple/references.bib (renamed from macros/latex/contrib/udes-genie-these/references.bib)0
-rw-r--r--macros/latex/contrib/udes-genie-these/Exemple/resume-anglais.tex (renamed from macros/latex/contrib/udes-genie-these/resume-anglais.tex)0
-rw-r--r--macros/latex/contrib/udes-genie-these/Exemple/resume-francais.tex (renamed from macros/latex/contrib/udes-genie-these/resume-francais.tex)0
-rw-r--r--macros/latex/contrib/udes-genie-these/Exemple/symboles.tex (renamed from macros/latex/contrib/udes-genie-these/symboles.tex)0
-rw-r--r--macros/latex/contrib/udes-genie-these/README.md2
-rw-r--r--macros/latex/contrib/udes-genie-these/udes-genie-these.dtx669
-rw-r--r--macros/latex/contrib/udes-genie-these/udes-genie-these.ins6
-rw-r--r--macros/latex/contrib/udes-genie-these/udes-genie-these.pdfbin129528 -> 180308 bytes
-rw-r--r--macros/latex/contrib/wrapfig2/README.txt64
-rw-r--r--macros/latex/contrib/wrapfig2/wrapfig2.dtx194
-rw-r--r--macros/latex/contrib/wrapfig2/wrapfig2.pdfbin706149 -> 705915 bytes
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb248
-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.asc16
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.xzbin2466444 -> 2468780 bytes
-rw-r--r--timestamp2
-rw-r--r--usergrps/usergrps/lugs.html19
83 files changed, 4376 insertions, 2973 deletions
diff --git a/FILES.byname b/FILES.byname
index fabad9bedb..6ff0c512a8 100644
--- a/FILES.byname
+++ b/FILES.byname
@@ -2056,12 +2056,12 @@
2023/07/04 | 1675 | biblio/citation-style-language/README.md
2023/07/04 | 12878 | biblio/citation-style-language/vancouver.csl
2023/07/04 | 4522435 | biblio/citation-style-language.zip
-2023/08/31 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
+2023/09/01 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
2022/10/08 | 127 | biblio/ctan-bibdata/biblatex-ctan/ctan.cbx
-2023/08/31 | 2806965 | biblio/ctan-bibdata/ctan.bib
-2023/08/31 | 3700823 | biblio/ctan-bibdata/ctan.pdf
+2023/09/01 | 2807358 | biblio/ctan-bibdata/ctan.bib
+2023/09/01 | 3703057 | biblio/ctan-bibdata/ctan.pdf
2023/01/16 | 1489 | biblio/ctan-bibdata/README
-2023/08/31 | 4102237 | biblio/ctan-bibdata.zip
+2023/09/01 | 4104087 | biblio/ctan-bibdata.zip
2023/02/23 | 3126 | biblio/pbibtex/pbibtex-base/cpp.awk
2023/02/23 | 1009 | biblio/pbibtex/pbibtex-base/generate.sh
2023/02/23 | 22362 | biblio/pbibtex/pbibtex-base/jabbrv.bst
@@ -5421,7 +5421,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
-2023/08/31 | 67312 | FILES.last07days
+2023/09/01 | 72271 | 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
@@ -160169,12 +160169,12 @@
2014/07/25 | 124608 | graphics/pgf/contrib/hf-tikz/hf-tikz.pdf
2014/07/25 | 499 | graphics/pgf/contrib/hf-tikz/README
2014/07/26 | 133052 | graphics/pgf/contrib/hf-tikz.zip
-2023/08/30 | 114625 | graphics/pgf/contrib/hobby/hobby_code.dtx
-2023/08/30 | 514512 | graphics/pgf/contrib/hobby/hobby_code.pdf
-2023/08/30 | 506560 | graphics/pgf/contrib/hobby/hobby.pdf
+2023/09/01 | 114651 | graphics/pgf/contrib/hobby/hobby_code.dtx
+2023/09/01 | 514679 | graphics/pgf/contrib/hobby/hobby_code.pdf
+2023/09/01 | 506510 | graphics/pgf/contrib/hobby/hobby.pdf
2023/08/30 | 43450 | graphics/pgf/contrib/hobby/hobby.tex
-2023/08/30 | 638 | graphics/pgf/contrib/hobby/README
-2023/08/30 | 1038831 | graphics/pgf/contrib/hobby.zip
+2023/09/01 | 638 | graphics/pgf/contrib/hobby/README
+2023/09/01 | 1038875 | graphics/pgf/contrib/hobby.zip
2022/03/22 | 808805 | graphics/pgf/contrib/istgame/istgame-doc.pdf
2022/03/22 | 31586 | graphics/pgf/contrib/istgame/istgame-doc.tex
2022/03/22 | 291467 | graphics/pgf/contrib/istgame/istgame-doc-v2.1.tex
@@ -194598,7 +194598,7 @@
2021/11/10 | 657160 | install/macros/latex/contrib/sdaps.tds.zip
2023/07/04 | 2531068 | install/macros/latex/contrib/se2thesis.tds.zip
2019/12/10 | 544332 | install/macros/latex/contrib/selinput.tds.zip
-2023/08/31 | 1594079 | install/macros/latex/contrib/siunitx.tds.zip
+2023/09/01 | 1594167 | install/macros/latex/contrib/siunitx.tds.zip
2019/10/15 | 315856 | install/macros/latex/contrib/skmath.tds.zip
2019/10/16 | 345652 | install/macros/latex/contrib/skrapport.tds.zip
2016/02/18 | 469004 | install/macros/latex/contrib/splitindex.tds.zip
@@ -194631,7 +194631,7 @@
2015/06/21 | 1065698 | install/macros/latex/contrib/tufte-latex.tds.zip
2023/04/09 | 13181593 | install/macros/latex/contrib/uantwerpendocs.tds.zip
2019/07/20 | 179217 | install/macros/latex/contrib/ucbthesis.tds.zip
-2022/11/17 | 156965 | install/macros/latex/contrib/udes-genie-these.tds.zip
+2023/09/01 | 171522 | install/macros/latex/contrib/udes-genie-these.tds.zip
2021/02/23 | 659103 | install/macros/latex/contrib/udesoftec.tds.zip
2023/02/14 | 376314 | install/macros/latex/contrib/undolabl.tds.zip
2019/12/15 | 297300 | install/macros/latex/contrib/uniquecounter.tds.zip
@@ -201837,14 +201837,15 @@
2013/05/09 | 36072 | macros/context/contrib/context-gnuplot/tex/context/third/gnuplot/t-gnuplot.mkiv
2018/03/05 | 11 | macros/context/contrib/context-gnuplot/VERSION
2018/03/22 | 482462 | macros/context/contrib/context-gnuplot.zip
-2019/06/02 | 808121 | macros/context/contrib/context-handlecsv/handlecsv-context-suite/doc/context/third/handlecsv/handlecsv.epub
-2019/06/02 | 201450 | macros/context/contrib/context-handlecsv/handlecsv-context-suite/doc/context/third/handlecsv/handlecsv.pdf
-2019/06/02 | 6052 | macros/context/contrib/context-handlecsv/handlecsv-context-suite/tex/context/third/handlecsv/t-handlecsv-extra.lua
-2019/06/02 | 66777 | macros/context/contrib/context-handlecsv/handlecsv-context-suite/tex/context/third/handlecsv/t-handlecsv.lua
-2019/06/02 | 1097 | macros/context/contrib/context-handlecsv/handlecsv-context-suite/tex/context/third/handlecsv/t-handlecsv.tex
-2019/06/02 | 8115 | macros/context/contrib/context-handlecsv/handlecsv-context-suite/tex/context/third/handlecsv/t-handlecsv-tools.lua
-2023/05/08 | 11 | macros/context/contrib/context-handlecsv/VERSION
-2023/05/09 | 987664 | macros/context/contrib/context-handlecsv.zip
+2023/05/12 | 39795 | macros/context/contrib/context-handlecsv/context-presvoz-master-5196bdec981cf48b83896ec7b7009fda20d9106f/doc/context/third/presvoz/gvoz.pdf
+2023/05/12 | 45582 | macros/context/contrib/context-handlecsv/context-presvoz-master-5196bdec981cf48b83896ec7b7009fda20d9106f/doc/context/third/presvoz/presvoz.pdf
+2023/05/12 | 8276 | macros/context/contrib/context-handlecsv/context-presvoz-master-5196bdec981cf48b83896ec7b7009fda20d9106f/fonts/opentype/presvoz/Flechitas.otf
+2023/05/12 | 305436 | macros/context/contrib/context-handlecsv/context-presvoz-master-5196bdec981cf48b83896ec7b7009fda20d9106f/fonts/opentype/presvoz/iRaccoonShowBold.otf
+2023/05/12 | 25828 | macros/context/contrib/context-handlecsv/context-presvoz-master-5196bdec981cf48b83896ec7b7009fda20d9106f/tex/context/third/presvoz/gvoz.py
+2023/05/12 | 28296 | macros/context/contrib/context-handlecsv/context-presvoz-master-5196bdec981cf48b83896ec7b7009fda20d9106f/tex/context/third/presvoz/mtx-context-third-presvoz.tex
+2023/05/12 | 5153 | macros/context/contrib/context-handlecsv/context-presvoz-master-5196bdec981cf48b83896ec7b7009fda20d9106f/tex/context/third/presvoz/presvoz.mkxl
+2023/08/31 | 11 | macros/context/contrib/context-handlecsv/VERSION
+2023/09/01 | 300357 | macros/context/contrib/context-handlecsv.zip
2008/07/15 | 8844 | macros/context/contrib/context-inifile/doc/context/third/inifile/inifile-demo.pdf
2008/07/15 | 79148 | macros/context/contrib/context-inifile/doc/context/third/inifile/inifile-doc.pdf
2008/07/15 | 5667 | macros/context/contrib/context-inifile/tex/context/third/inifile/t-inifile.tex
@@ -225194,11 +225195,11 @@
2021/03/15 | 1073 | macros/latex/contrib/highlightlatex/LICENSE.txt
2021/03/15 | 10991 | macros/latex/contrib/highlightlatex/README.md
2021/03/15 | 227994 | macros/latex/contrib/highlightlatex.zip
-2023/08/31 | 167620 | macros/latex/contrib/highlightx/doc/highlightx-doc.pdf
-2023/08/31 | 34745 | macros/latex/contrib/highlightx/doc/highlightx-doc.tex
-2023/08/30 | 543 | macros/latex/contrib/highlightx/README.md
-2023/08/31 | 11656 | macros/latex/contrib/highlightx/tex/highlightx.sty
-2023/08/31 | 177399 | macros/latex/contrib/highlightx.zip
+2023/09/01 | 119988 | macros/latex/contrib/highlightx/doc/highlightx-doc.pdf
+2023/09/01 | 35654 | macros/latex/contrib/highlightx/doc/highlightx-doc.tex
+2023/09/01 | 456 | macros/latex/contrib/highlightx/README.md
+2023/09/01 | 3724 | macros/latex/contrib/highlightx/tex/highlightx.sty
+2023/09/01 | 128429 | macros/latex/contrib/highlightx.zip
1999/01/08 | 7421 | macros/latex/contrib/hilowres/hilowres.dtx
1999/01/08 | 2245 | macros/latex/contrib/hilowres/hilowres.ins
1999/01/08 | 584 | macros/latex/contrib/hilowres/readme.txt
@@ -226409,6 +226410,36 @@
2015/06/02 | 1406 | macros/latex/contrib/iwhdp/iwhdp_paper.tex
2015/06/01 | 939 | macros/latex/contrib/iwhdp/README
2015/06/02 | 438057 | macros/latex/contrib/iwhdp.zip
+2023/09/01 | 743 | macros/latex/contrib/iwonamath/iwonamath.bib
+2023/09/01 | 13586 | macros/latex/contrib/iwonamath/iwonamath.dtx
+2023/08/31 | 466 | macros/latex/contrib/iwonamath/iwonamath.ins
+2023/09/01 | 502258 | macros/latex/contrib/iwonamath/iwonamath.pdf
+2023/09/01 | 1727 | macros/latex/contrib/iwonamath/Makefile
+2023/08/31 | 577 | macros/latex/contrib/iwonamath/makeiwonamathfd.sh
+2023/09/01 | 1232 | macros/latex/contrib/iwonamath/omliwonamathc.fd
+2023/09/01 | 1221 | macros/latex/contrib/iwonamath/omliwonamath.fd
+2023/09/01 | 1240 | macros/latex/contrib/iwonamath/omliwonamathlc.fd
+2023/09/01 | 1229 | macros/latex/contrib/iwonamath/omliwonamathl.fd
+2023/09/01 | 1229 | macros/latex/contrib/iwonamath/omsiwonamathc.fd
+2023/09/01 | 1218 | macros/latex/contrib/iwonamath/omsiwonamath.fd
+2023/09/01 | 1237 | macros/latex/contrib/iwonamath/omsiwonamathlc.fd
+2023/09/01 | 1226 | macros/latex/contrib/iwonamath/omsiwonamathl.fd
+2023/09/01 | 1226 | macros/latex/contrib/iwonamath/omxiwonamathc.fd
+2023/09/01 | 1215 | macros/latex/contrib/iwonamath/omxiwonamath.fd
+2023/09/01 | 1234 | macros/latex/contrib/iwonamath/omxiwonamathlc.fd
+2023/09/01 | 1223 | macros/latex/contrib/iwonamath/omxiwonamathl.fd
+2023/09/01 | 1312 | macros/latex/contrib/iwonamath/ot1iwonamathc.fd
+2023/09/01 | 1149 | macros/latex/contrib/iwonamath/ot1iwonamathcm.fd
+2023/09/01 | 1299 | macros/latex/contrib/iwonamath/ot1iwonamath.fd
+2023/09/01 | 1321 | macros/latex/contrib/iwonamath/ot1iwonamathlc.fd
+2023/09/01 | 1156 | macros/latex/contrib/iwonamath/ot1iwonamathlcm.fd
+2023/09/01 | 1308 | macros/latex/contrib/iwonamath/ot1iwonamathl.fd
+2023/09/01 | 1147 | macros/latex/contrib/iwonamath/ot1iwonamathlm.fd
+2023/09/01 | 1140 | macros/latex/contrib/iwonamath/ot1iwonamathm.fd
+2023/09/01 | 286 | macros/latex/contrib/iwonamath/README
+2023/09/01 | 382573 | macros/latex/contrib/iwonamath/sample.pdf
+2023/09/01 | 2087 | macros/latex/contrib/iwonamath/sample.tex
+2023/09/01 | 884543 | macros/latex/contrib/iwonamath.zip
2019/02/27 | 20061 | macros/latex/contrib/jacow/annexes-A4.tex
2019/02/27 | 20058 | macros/latex/contrib/jacow/annexes-Letter.tex
2022/04/15 | 21531 | macros/latex/contrib/jacow/jacow.cls
@@ -227276,17 +227307,17 @@
2011/10/28 | 1485 | macros/latex/contrib/jvlisting/README
2011/11/17 | 8454 | macros/latex/contrib/jvlisting/test.tex
2011/11/18 | 202406 | macros/latex/contrib/jvlisting.zip
-2023/08/31 | 12 | macros/latex/contrib/jwjournal/DEPENDS.txt
-2023/08/31 | 15531 | macros/latex/contrib/jwjournal/jwjournal.cls
-2023/08/31 | 115307 | macros/latex/contrib/jwjournal/jwjournal-demo-cn.pdf
-2023/08/31 | 2770 | macros/latex/contrib/jwjournal/jwjournal-demo-cn.tex
-2023/08/31 | 75218 | macros/latex/contrib/jwjournal/jwjournal-demo-en.pdf
-2023/08/31 | 2860 | macros/latex/contrib/jwjournal/jwjournal-demo-en.tex
-2023/08/31 | 77570 | macros/latex/contrib/jwjournal/jwjournal-demo-fr.pdf
-2023/08/31 | 3317 | macros/latex/contrib/jwjournal/jwjournal-demo-fr.tex
-2023/08/31 | 19106 | macros/latex/contrib/jwjournal/LICENSE
-2023/08/31 | 9889 | macros/latex/contrib/jwjournal/README.md
-2023/08/31 | 277235 | macros/latex/contrib/jwjournal.zip
+2023/09/01 | 12 | macros/latex/contrib/jwjournal/DEPENDS.txt
+2023/09/01 | 15689 | macros/latex/contrib/jwjournal/jwjournal.cls
+2023/09/01 | 115307 | macros/latex/contrib/jwjournal/jwjournal-demo-cn.pdf
+2023/09/01 | 2770 | macros/latex/contrib/jwjournal/jwjournal-demo-cn.tex
+2023/09/01 | 75218 | macros/latex/contrib/jwjournal/jwjournal-demo-en.pdf
+2023/09/01 | 2860 | macros/latex/contrib/jwjournal/jwjournal-demo-en.tex
+2023/09/01 | 77570 | macros/latex/contrib/jwjournal/jwjournal-demo-fr.pdf
+2023/09/01 | 3317 | macros/latex/contrib/jwjournal/jwjournal-demo-fr.tex
+2023/09/01 | 19106 | macros/latex/contrib/jwjournal/LICENSE
+2023/09/01 | 9889 | macros/latex/contrib/jwjournal/README.md
+2023/09/01 | 277260 | macros/latex/contrib/jwjournal.zip
2018/09/21 | 71114 | macros/latex/contrib/kalendarium/kalendarium.dtx
2018/09/21 | 2343 | macros/latex/contrib/kalendarium/kalendarium.ins
2018/09/21 | 399783 | macros/latex/contrib/kalendarium/kalendarium.pdf
@@ -237099,33 +237130,33 @@
2007/12/02 | 2971 | macros/latex/contrib/SIunits/SIunits.ins
2007/12/02 | 328621 | macros/latex/contrib/SIunits/SIunits.pdf
2007/12/02 | 296391 | macros/latex/contrib/SIunits.zip
-2023/08/31 | 77204 | macros/latex/contrib/siunitx/CHANGELOG.md
-2023/08/31 | 1179 | macros/latex/contrib/siunitx/README.md
-2023/08/31 | 11266 | macros/latex/contrib/siunitx/siunitx-abbreviation.dtx
-2023/08/31 | 4748 | macros/latex/contrib/siunitx/siunitx-abbreviations.cfg
-2023/08/31 | 18431 | macros/latex/contrib/siunitx/siunitx-angle.dtx
-2023/08/31 | 1729 | macros/latex/contrib/siunitx/siunitx-binary.cfg
-2023/08/31 | 2951 | macros/latex/contrib/siunitx/siunitx-binary.dtx
-2023/08/31 | 647812 | macros/latex/contrib/siunitx/siunitx-code.pdf
-2023/08/31 | 2636 | macros/latex/contrib/siunitx/siunitx-code.tex
-2023/08/31 | 8866 | macros/latex/contrib/siunitx/siunitx-command.dtx
-2023/08/31 | 39321 | macros/latex/contrib/siunitx/siunitx-complex.dtx
-2023/08/31 | 43799 | macros/latex/contrib/siunitx/siunitx-compound.dtx
-2023/08/31 | 22231 | macros/latex/contrib/siunitx/siunitx.dtx
-2023/08/31 | 31812 | macros/latex/contrib/siunitx/siunitx-emulation.dtx
-2023/08/31 | 3687 | macros/latex/contrib/siunitx/siunitx.ins
-2023/08/31 | 5831 | macros/latex/contrib/siunitx/siunitx-locale.dtx
-2023/08/31 | 162177 | macros/latex/contrib/siunitx/siunitx-number.dtx
-2023/08/31 | 705662 | macros/latex/contrib/siunitx/siunitx.pdf
-2023/08/31 | 37606 | macros/latex/contrib/siunitx/siunitx-print.dtx
-2023/08/31 | 15234 | macros/latex/contrib/siunitx/siunitx-quantity.dtx
-2023/08/31 | 9239 | macros/latex/contrib/siunitx/siunitx-symbol.dtx
-2023/08/31 | 55728 | macros/latex/contrib/siunitx/siunitx-table.dtx
-2023/08/31 | 168660 | macros/latex/contrib/siunitx/siunitx.tex
-2023/08/31 | 103551 | macros/latex/contrib/siunitx/siunitx-unit.dtx
-2023/08/31 | 273398 | macros/latex/contrib/siunitx/siunitx-v2.sty
-2023/08/31 | 31738 | macros/latex/contrib/siunitx/siunitx-version-1.cfg
-2023/08/31 | 1546811 | macros/latex/contrib/siunitx.zip
+2023/09/01 | 77463 | macros/latex/contrib/siunitx/CHANGELOG.md
+2023/09/01 | 1179 | macros/latex/contrib/siunitx/README.md
+2023/09/01 | 11266 | macros/latex/contrib/siunitx/siunitx-abbreviation.dtx
+2023/09/01 | 4748 | macros/latex/contrib/siunitx/siunitx-abbreviations.cfg
+2023/09/01 | 18431 | macros/latex/contrib/siunitx/siunitx-angle.dtx
+2023/09/01 | 1729 | macros/latex/contrib/siunitx/siunitx-binary.cfg
+2023/09/01 | 2951 | macros/latex/contrib/siunitx/siunitx-binary.dtx
+2023/09/01 | 647898 | macros/latex/contrib/siunitx/siunitx-code.pdf
+2023/09/01 | 2636 | macros/latex/contrib/siunitx/siunitx-code.tex
+2023/09/01 | 8866 | macros/latex/contrib/siunitx/siunitx-command.dtx
+2023/09/01 | 39321 | macros/latex/contrib/siunitx/siunitx-complex.dtx
+2023/09/01 | 43799 | macros/latex/contrib/siunitx/siunitx-compound.dtx
+2023/09/01 | 22231 | macros/latex/contrib/siunitx/siunitx.dtx
+2023/09/01 | 31812 | macros/latex/contrib/siunitx/siunitx-emulation.dtx
+2023/09/01 | 3687 | macros/latex/contrib/siunitx/siunitx.ins
+2023/09/01 | 5831 | macros/latex/contrib/siunitx/siunitx-locale.dtx
+2023/09/01 | 162177 | macros/latex/contrib/siunitx/siunitx-number.dtx
+2023/09/01 | 705591 | macros/latex/contrib/siunitx/siunitx.pdf
+2023/09/01 | 37716 | macros/latex/contrib/siunitx/siunitx-print.dtx
+2023/09/01 | 15234 | macros/latex/contrib/siunitx/siunitx-quantity.dtx
+2023/09/01 | 9239 | macros/latex/contrib/siunitx/siunitx-symbol.dtx
+2023/09/01 | 55728 | macros/latex/contrib/siunitx/siunitx-table.dtx
+2023/09/01 | 168660 | macros/latex/contrib/siunitx/siunitx.tex
+2023/09/01 | 103551 | macros/latex/contrib/siunitx/siunitx-unit.dtx
+2023/09/01 | 273398 | macros/latex/contrib/siunitx/siunitx-v2.sty
+2023/09/01 | 31738 | macros/latex/contrib/siunitx/siunitx-version-1.cfg
+2023/09/01 | 1546902 | macros/latex/contrib/siunitx.zip
2011/06/03 | 662398 | macros/latex/contrib/skb/doc/skb.pdf
2011/03/15 | 1485 | macros/latex/contrib/skb/doc/user-guide/database/acronyms.tex
2011/03/15 | 722 | macros/latex/contrib/skb/doc/user-guide/database/bibliography.tex
@@ -241714,19 +241745,19 @@
2004/12/19 | 2922 | macros/latex/contrib/ucthesis/uctest.tex
2004/12/19 | 45780 | macros/latex/contrib/ucthesis/ucthesis.cls
2005/04/27 | 39529 | macros/latex/contrib/ucthesis.zip
-2022/11/17 | 284 | macros/latex/contrib/udes-genie-these/acronymes.tex
-2022/11/17 | 2817 | macros/latex/contrib/udes-genie-these/document.tex
-2022/11/17 | 337 | macros/latex/contrib/udes-genie-these/lexique.tex
-2022/11/17 | 192 | macros/latex/contrib/udes-genie-these/merci.tex
-2022/11/17 | 1716 | macros/latex/contrib/udes-genie-these/README.md
-2022/11/17 | 6716 | macros/latex/contrib/udes-genie-these/references.bib
-2022/11/17 | 165 | macros/latex/contrib/udes-genie-these/resume-anglais.tex
-2022/11/17 | 186 | macros/latex/contrib/udes-genie-these/resume-francais.tex
-2022/11/17 | 397 | macros/latex/contrib/udes-genie-these/symboles.tex
-2022/11/17 | 68448 | macros/latex/contrib/udes-genie-these/udes-genie-these.dtx
-2022/11/17 | 1933 | macros/latex/contrib/udes-genie-these/udes-genie-these.ins
-2022/11/17 | 129528 | macros/latex/contrib/udes-genie-these/udes-genie-these.pdf
-2022/11/17 | 149210 | macros/latex/contrib/udes-genie-these.zip
+2023/09/01 | 284 | macros/latex/contrib/udes-genie-these/Exemple/acronymes.tex
+2023/09/01 | 2848 | macros/latex/contrib/udes-genie-these/Exemple/document.tex
+2023/09/01 | 337 | macros/latex/contrib/udes-genie-these/Exemple/lexique.tex
+2023/09/01 | 192 | macros/latex/contrib/udes-genie-these/Exemple/merci.tex
+2023/09/01 | 6716 | macros/latex/contrib/udes-genie-these/Exemple/references.bib
+2023/09/01 | 165 | macros/latex/contrib/udes-genie-these/Exemple/resume-anglais.tex
+2023/09/01 | 186 | macros/latex/contrib/udes-genie-these/Exemple/resume-francais.tex
+2023/09/01 | 397 | macros/latex/contrib/udes-genie-these/Exemple/symboles.tex
+2023/09/01 | 1716 | macros/latex/contrib/udes-genie-these/README.md
+2023/09/01 | 71095 | macros/latex/contrib/udes-genie-these/udes-genie-these.dtx
+2023/09/01 | 1932 | macros/latex/contrib/udes-genie-these/udes-genie-these.ins
+2023/09/01 | 180308 | macros/latex/contrib/udes-genie-these/udes-genie-these.pdf
+2023/09/01 | 163621 | macros/latex/contrib/udes-genie-these.zip
2021/02/23 | 11461 | macros/latex/contrib/udesoftec/CHANGELOG
2021/02/23 | 1794 | macros/latex/contrib/udesoftec/README
2021/02/23 | 9799 | macros/latex/contrib/udesoftec/udesoftec-bibcommon.sty
@@ -242947,11 +242978,11 @@
2018/08/17 | 14778 | macros/latex/contrib/worksheet/worksheet.sty
2018/08/17 | 16462 | macros/latex/contrib/worksheet/worksheet.tex
2018/08/17 | 99332 | macros/latex/contrib/worksheet.zip
-2023/02/23 | 1741 | macros/latex/contrib/wrapfig2/README.txt
+2023/09/01 | 1610 | macros/latex/contrib/wrapfig2/README.txt
2020/05/23 | 64157 | macros/latex/contrib/wrapfig2/stele-todi-small.jpg
-2023/02/23 | 96093 | macros/latex/contrib/wrapfig2/wrapfig2.dtx
-2023/02/23 | 706149 | macros/latex/contrib/wrapfig2/wrapfig2.pdf
-2023/02/23 | 783680 | macros/latex/contrib/wrapfig2.zip
+2023/09/01 | 95082 | macros/latex/contrib/wrapfig2/wrapfig2.dtx
+2023/09/01 | 705915 | macros/latex/contrib/wrapfig2/wrapfig2.pdf
+2023/09/01 | 783389 | macros/latex/contrib/wrapfig2.zip
2003/02/24 | 5342 | macros/latex/contrib/wrapfig/multiple-span.txt
2011/04/09 | 330855 | macros/latex/contrib/wrapfig/wrapfig-doc.pdf
2011/04/09 | 15201 | macros/latex/contrib/wrapfig/wrapfig-doc.tex
@@ -286025,7 +286056,7 @@
2021/05/03 | 629 | support/TeX4ht/doc/README
2020/08/24 | 358454 | support/TeX4ht/doc/TeX4ht-doc.tex
2021/05/11 | 262 | support/TeX4ht/README
-2023/08/16 | 228832 | support/TeX4ht/source/ChangeLog
+2023/09/01 | 229461 | support/TeX4ht/source/ChangeLog
2021/05/03 | 1375 | support/TeX4ht/source/checklog.lua
2021/05/03 | 1189 | support/TeX4ht/source/common-code.tex
2021/05/03 | 2727 | support/TeX4ht/source/common-info.tex
@@ -286037,14 +286068,14 @@
2021/05/03 | 1121 | support/TeX4ht/source/README
2021/05/03 | 1744 | support/TeX4ht/source/t1fontmake.lua
2021/05/03 | 297 | support/TeX4ht/source/t1fontsample.tex
-2023/08/16 | 1164746 | support/TeX4ht/source/tex4ht-4ht.tex
+2023/09/01 | 1164745 | support/TeX4ht/source/tex4ht-4ht.tex
2021/05/03 | 7127 | support/TeX4ht/source/tex4ht-auto-script.tex
2021/05/16 | 1539 | support/TeX4ht/source/tex4ht-bibtex2.tex
2022/06/05 | 21307 | support/TeX4ht/source/tex4ht-cond4ht.tex
2021/05/03 | 807 | support/TeX4ht/source/tex4ht-cpright.tex
2021/06/17 | 418876 | support/TeX4ht/source/tex4ht-c.tex
2021/05/03 | 420 | support/TeX4ht/source/tex4ht-dir.m4
-2023/08/13 | 101227 | support/TeX4ht/source/tex4ht-docbook.tex
+2023/09/01 | 101221 | support/TeX4ht/source/tex4ht-docbook.tex
2021/05/03 | 12368 | support/TeX4ht/source/tex4ht-docbook-xtpipes.tex
2021/05/03 | 47591 | support/TeX4ht/source/tex4ht-env.tex
2021/05/03 | 3704153 | support/TeX4ht/source/tex4ht-fonts-4hf.tex
@@ -286066,7 +286097,7 @@
2021/05/03 | 14218 | support/TeX4ht/source/tex4ht-htcmd.tex
2021/05/03 | 70683 | support/TeX4ht/source/tex4ht-html0.tex
2021/05/03 | 164748 | support/TeX4ht/source/tex4ht-html32.tex
-2023/08/19 | 625312 | support/TeX4ht/source/tex4ht-html4.tex
+2023/09/01 | 625718 | support/TeX4ht/source/tex4ht-html4.tex
2023/01/10 | 12023 | support/TeX4ht/source/tex4ht-html5.tex
2021/06/17 | 648233 | support/TeX4ht/source/tex4ht-html-speech.tex
2021/05/03 | 59483 | support/TeX4ht/source/tex4ht-html-speech-xtpipes.tex
@@ -286086,7 +286117,7 @@
2021/05/03 | 102444 | support/TeX4ht/source/tex4ht-mathltx.tex
2023/08/13 | 147855 | support/TeX4ht/source/tex4ht-mathml.tex
2021/05/03 | 8860 | support/TeX4ht/source/tex4ht-mathplayer.tex
-2023/08/16 | 46497 | support/TeX4ht/source/tex4ht-mkht.tex
+2023/09/01 | 46498 | support/TeX4ht/source/tex4ht-mkht.tex
2021/05/03 | 26652 | support/TeX4ht/source/tex4ht-moz.tex
2023/01/25 | 338567 | support/TeX4ht/source/tex4ht-ooffice.tex
2021/05/03 | 11161 | support/TeX4ht/source/tex4ht-ooimpress.tex
@@ -292405,7 +292436,7 @@
2020/03/04 | 408 | systems/texlive/tlnet/archive/collection-langpolish.r54074.tar.xz
2023/05/16 | 400 | systems/texlive/tlnet/archive/collection-langportuguese.r67125.tar.xz
2023/06/09 | 396 | systems/texlive/tlnet/archive/collection-langspanish.r67307.tar.xz
-2023/08/28 | 6948 | systems/texlive/tlnet/archive/collection-latexextra.r68087.tar.xz
+2023/09/01 | 6932 | systems/texlive/tlnet/archive/collection-latexextra.r68123.tar.xz
2022/06/10 | 700 | systems/texlive/tlnet/archive/collection-latex.r63515.tar.xz
2023/01/11 | 744 | systems/texlive/tlnet/archive/collection-latexrecommended.r65512.tar.xz
2023/08/26 | 1008 | systems/texlive/tlnet/archive/collection-luatex.r68053.tar.xz
@@ -295565,6 +295596,8 @@
2022/07/10 | 1236 | systems/texlive/tlnet/archive/hideanswer.r63852.tar.xz
2021/03/16 | 223808 | systems/texlive/tlnet/archive/highlightlatex.doc.r58392.tar.xz
2021/03/16 | 3548 | systems/texlive/tlnet/archive/highlightlatex.r58392.tar.xz
+2023/09/01 | 174996 | systems/texlive/tlnet/archive/highlightx.doc.r68123.tar.xz
+2023/09/01 | 3388 | systems/texlive/tlnet/archive/highlightx.r68123.tar.xz
2021/02/16 | 44964 | systems/texlive/tlnet/archive/hindawi-latex-template.doc.r57757.tar.xz
2021/02/16 | 524 | systems/texlive/tlnet/archive/hindawi-latex-template.r57757.tar.xz
2021/01/11 | 85732 | systems/texlive/tlnet/archive/hindmadurai.doc.r57360.tar.xz
@@ -295957,8 +295990,8 @@
2019/02/28 | 348 | systems/texlive/tlnet/archive/installfont.x86_64-linuxmusl.r46840.tar.xz
2019/02/28 | 344 | systems/texlive/tlnet/archive/installfont.x86_64-linux.r19743.tar.xz
2019/02/28 | 344 | systems/texlive/tlnet/archive/installfont.x86_64-solaris.r19743.tar.xz
-2023/07/02 | 822040 | systems/texlive/tlnet/archive/install-latex-guide-zh-cn.doc.r67522.tar.xz
-2023/07/02 | 568 | systems/texlive/tlnet/archive/install-latex-guide-zh-cn.r67522.tar.xz
+2023/09/01 | 824856 | systems/texlive/tlnet/archive/install-latex-guide-zh-cn.doc.r68122.tar.xz
+2023/09/01 | 568 | systems/texlive/tlnet/archive/install-latex-guide-zh-cn.r68122.tar.xz
2019/12/18 | 423196 | systems/texlive/tlnet/archive/intcalc.doc.r53168.tar.xz
2019/12/18 | 5436 | systems/texlive/tlnet/archive/intcalc.r53168.tar.xz
2019/12/18 | 12576 | systems/texlive/tlnet/archive/intcalc.source.r53168.tar.xz
@@ -296163,8 +296196,8 @@
2019/02/28 | 197100 | systems/texlive/tlnet/archive/jvlisting.doc.r24638.tar.xz
2019/02/28 | 2552 | systems/texlive/tlnet/archive/jvlisting.r24638.tar.xz
2019/02/28 | 6744 | systems/texlive/tlnet/archive/jvlisting.source.r24638.tar.xz
-2023/08/31 | 123904 | systems/texlive/tlnet/archive/jwjournal.doc.r68116.tar.xz
-2023/08/31 | 3380 | systems/texlive/tlnet/archive/jwjournal.r68116.tar.xz
+2023/09/01 | 182360 | systems/texlive/tlnet/archive/jwjournal.doc.r68124.tar.xz
+2023/09/01 | 3528 | systems/texlive/tlnet/archive/jwjournal.r68124.tar.xz
2019/02/28 | 365480 | systems/texlive/tlnet/archive/kalendarium.doc.r48744.tar.xz
2019/02/28 | 3540 | systems/texlive/tlnet/archive/kalendarium.r48744.tar.xz
2019/02/28 | 16432 | systems/texlive/tlnet/archive/kalendarium.source.r48744.tar.xz
@@ -297634,9 +297667,9 @@
2019/02/28 | 1858004 | systems/texlive/tlnet/archive/mathabx-type1.r21129.tar.xz
2021/11/19 | 1888792 | systems/texlive/tlnet/archive/mathalpha.doc.r61089.tar.xz
2021/11/19 | 7156 | systems/texlive/tlnet/archive/mathalpha.r61089.tar.xz
-2022/11/05 | 584908 | systems/texlive/tlnet/archive/mathastext.doc.r64930.tar.xz
-2022/11/05 | 17188 | systems/texlive/tlnet/archive/mathastext.r64930.tar.xz
-2022/11/05 | 105248 | systems/texlive/tlnet/archive/mathastext.source.r64930.tar.xz
+2023/09/01 | 580888 | systems/texlive/tlnet/archive/mathastext.doc.r68125.tar.xz
+2023/09/01 | 17152 | systems/texlive/tlnet/archive/mathastext.r68125.tar.xz
+2023/09/01 | 105372 | systems/texlive/tlnet/archive/mathastext.source.r68125.tar.xz
2021/06/08 | 452340 | systems/texlive/tlnet/archive/mathcommand.doc.r59512.tar.xz
2021/06/08 | 4748 | systems/texlive/tlnet/archive/mathcommand.r59512.tar.xz
2021/06/08 | 12088 | systems/texlive/tlnet/archive/mathcommand.source.r59512.tar.xz
@@ -298028,8 +298061,8 @@
2019/02/28 | 6528 | systems/texlive/tlnet/archive/mi-solns.source.r49651.tar.xz
2022/01/24 | 14130568 | systems/texlive/tlnet/archive/missaali.doc.r61719.tar.xz
2022/01/24 | 85820 | systems/texlive/tlnet/archive/missaali.r61719.tar.xz
-2023/07/23 | 2333360 | systems/texlive/tlnet/archive/mitthesis.doc.r67708.tar.xz
-2023/07/23 | 13180 | systems/texlive/tlnet/archive/mitthesis.r67708.tar.xz
+2023/09/01 | 2228328 | systems/texlive/tlnet/archive/mitthesis.doc.r68126.tar.xz
+2023/09/01 | 14940 | systems/texlive/tlnet/archive/mitthesis.r68126.tar.xz
2019/02/28 | 340 | systems/texlive/tlnet/archive/mkgrkindex.aarch64-linux.r46208.tar.xz
2019/02/28 | 340 | systems/texlive/tlnet/archive/mkgrkindex.amd64-freebsd.r16472.tar.xz
2019/02/28 | 340 | systems/texlive/tlnet/archive/mkgrkindex.amd64-netbsd.r30191.tar.xz
@@ -300359,8 +300392,8 @@
2019/02/28 | 5092 | systems/texlive/tlnet/archive/randomwalk.source.r49513.tar.xz
2019/02/28 | 672 | systems/texlive/tlnet/archive/randtext.doc.r15878.tar.xz
2019/02/28 | 2804 | systems/texlive/tlnet/archive/randtext.r15878.tar.xz
-2022/01/24 | 400892 | systems/texlive/tlnet/archive/rank-2-roots.doc.r61719.tar.xz
-2022/01/24 | 3984 | systems/texlive/tlnet/archive/rank-2-roots.r61719.tar.xz
+2023/09/01 | 447584 | systems/texlive/tlnet/archive/rank-2-roots.doc.r68121.tar.xz
+2023/09/01 | 4132 | systems/texlive/tlnet/archive/rank-2-roots.r68121.tar.xz
2021/06/08 | 524452 | systems/texlive/tlnet/archive/ran_toks.doc.r59515.tar.xz
2021/06/08 | 5324 | systems/texlive/tlnet/archive/ran_toks.r59515.tar.xz
2021/06/08 | 12204 | systems/texlive/tlnet/archive/ran_toks.source.r59515.tar.xz
@@ -300989,9 +301022,9 @@
2021/06/26 | 250232 | systems/texlive/tlnet/archive/siunits.doc.r59702.tar.xz
2021/06/26 | 6040 | systems/texlive/tlnet/archive/siunits.r59702.tar.xz
2021/06/26 | 34532 | systems/texlive/tlnet/archive/siunits.source.r59702.tar.xz
-2023/08/25 | 1290228 | systems/texlive/tlnet/archive/siunitx.doc.r68048.tar.xz
-2023/08/25 | 67356 | systems/texlive/tlnet/archive/siunitx.r68048.tar.xz
-2023/08/25 | 122228 | systems/texlive/tlnet/archive/siunitx.source.r68048.tar.xz
+2023/09/01 | 1288264 | systems/texlive/tlnet/archive/siunitx.doc.r68127.tar.xz
+2023/09/01 | 67672 | systems/texlive/tlnet/archive/siunitx.r68127.tar.xz
+2023/09/01 | 122916 | systems/texlive/tlnet/archive/siunitx.source.r68127.tar.xz
2022/01/24 | 200108 | systems/texlive/tlnet/archive/skak.doc.r61719.tar.xz
2019/02/28 | 316212 | systems/texlive/tlnet/archive/skaknew.doc.r20031.tar.xz
2019/02/28 | 160064 | systems/texlive/tlnet/archive/skaknew.r20031.tar.xz
@@ -301528,9 +301561,9 @@
2019/09/11 | 1292 | systems/texlive/tlnet/archive/tagging.r52064.tar.xz
2019/02/28 | 68912 | systems/texlive/tlnet/archive/tagpair.doc.r42138.tar.xz
2019/02/28 | 1244 | systems/texlive/tlnet/archive/tagpair.r42138.tar.xz
-2023/08/08 | 2109884 | systems/texlive/tlnet/archive/tagpdf.doc.r67840.tar.xz
-2023/08/08 | 34968 | systems/texlive/tlnet/archive/tagpdf.r67840.tar.xz
-2023/08/08 | 64896 | systems/texlive/tlnet/archive/tagpdf.source.r67840.tar.xz
+2023/09/01 | 2128908 | systems/texlive/tlnet/archive/tagpdf.doc.r68128.tar.xz
+2023/09/01 | 35780 | systems/texlive/tlnet/archive/tagpdf.r68128.tar.xz
+2023/09/01 | 65980 | systems/texlive/tlnet/archive/tagpdf.source.r68128.tar.xz
2019/02/28 | 131060 | systems/texlive/tlnet/archive/talk.doc.r42428.tar.xz
2019/02/28 | 4676 | systems/texlive/tlnet/archive/talk.r42428.tar.xz
2019/02/28 | 556 | systems/texlive/tlnet/archive/talk.source.r42428.tar.xz
@@ -301638,13 +301671,13 @@
2023/08/16 | 108860 | systems/texlive/tlnet/archive/tex4ht.amd64-freebsd.r67940.tar.xz
2023/08/16 | 87320 | systems/texlive/tlnet/archive/tex4ht.amd64-netbsd.r67940.tar.xz
2023/08/16 | 69948 | systems/texlive/tlnet/archive/tex4ht.armhf-linux.r67940.tar.xz
-2023/08/19 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r67975.tar.xz
+2023/09/01 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r68129.tar.xz
2023/08/16 | 93764 | systems/texlive/tlnet/archive/tex4ht.i386-freebsd.r67940.tar.xz
2023/08/16 | 91236 | systems/texlive/tlnet/archive/tex4ht.i386-linux.r67940.tar.xz
2023/08/16 | 76184 | systems/texlive/tlnet/archive/tex4ht.i386-netbsd.r67940.tar.xz
2023/08/16 | 83936 | systems/texlive/tlnet/archive/tex4ht.i386-solaris.r67940.tar.xz
-2023/08/19 | 1103040 | systems/texlive/tlnet/archive/tex4ht.r67975.tar.xz
-2023/08/19 | 1451008 | systems/texlive/tlnet/archive/tex4ht.source.r67975.tar.xz
+2023/09/01 | 1102992 | systems/texlive/tlnet/archive/tex4ht.r68129.tar.xz
+2023/09/01 | 1453692 | systems/texlive/tlnet/archive/tex4ht.source.r68129.tar.xz
2023/08/16 | 184636 | systems/texlive/tlnet/archive/tex4ht.universal-darwin.r67940.tar.xz
2023/08/16 | 62092 | systems/texlive/tlnet/archive/tex4ht.windows.r67940.tar.xz
2023/08/16 | 57992 | systems/texlive/tlnet/archive/tex4ht.x86_64-cygwin.r67940.tar.xz
@@ -301879,7 +301912,7 @@
2021/03/23 | 276 | systems/texlive/tlnet/archive/texlive-it.r58653.tar.xz
2023/03/09 | 1945084 | systems/texlive/tlnet/archive/texlive-ja.doc.r66482.tar.xz
2023/03/09 | 276 | systems/texlive/tlnet/archive/texlive-ja.r66482.tar.xz
-2023/08/09 | 151800 | systems/texlive/tlnet/archive/texlive-msg-translations.r67843.tar.xz
+2023/09/01 | 151780 | systems/texlive/tlnet/archive/texlive-msg-translations.r68130.tar.xz
2019/02/28 | 344 | systems/texlive/tlnet/archive/texliveonfly.aarch64-linux.r46208.tar.xz
2019/02/28 | 344 | systems/texlive/tlnet/archive/texliveonfly.amd64-freebsd.r24062.tar.xz
2019/02/28 | 344 | systems/texlive/tlnet/archive/texliveonfly.amd64-netbsd.r30191.tar.xz
@@ -301905,7 +301938,7 @@
2022/09/13 | 600 | systems/texlive/tlnet/archive/texlive-scripts.amd64-freebsd.r64356.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.amd64-netbsd.r64356.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.armhf-linux.r64356.tar.xz
-2023/08/31 | 428848 | systems/texlive/tlnet/archive/texlive-scripts.doc.r68113.tar.xz
+2023/09/01 | 428932 | systems/texlive/tlnet/archive/texlive-scripts.doc.r68120.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
@@ -301927,7 +301960,7 @@
2022/09/13 | 592 | systems/texlive/tlnet/archive/texlive-scripts.i386-linux.r64356.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.i386-netbsd.r64356.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.i386-solaris.r64356.tar.xz
-2023/08/31 | 114120 | systems/texlive/tlnet/archive/texlive-scripts.r68113.tar.xz
+2023/09/01 | 114128 | systems/texlive/tlnet/archive/texlive-scripts.r68120.tar.xz
2022/09/13 | 580 | systems/texlive/tlnet/archive/texlive-scripts.universal-darwin.r64356.tar.xz
2023/05/14 | 60312 | systems/texlive/tlnet/archive/texlive-scripts.windows.r67095.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.x86_64-cygwin.r64356.tar.xz
@@ -303798,16 +303831,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
2023/08/07 | 125713 | systems/texlive/tlnet/install-tl
-2023/08/31 | 5741040 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2023/08/31 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2023/08/31 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2023/09/01 | 5741513 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2023/09/01 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2023/09/01 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2023/05/13 | 5083 | systems/texlive/tlnet/install-tl-windows.bat
-2023/08/31 | 21038732 | systems/texlive/tlnet/install-tl-windows.exe
-2023/08/31 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2023/08/31 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2023/08/31 | 26028713 | systems/texlive/tlnet/install-tl.zip
-2023/08/31 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2023/08/31 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2023/09/01 | 21039884 | systems/texlive/tlnet/install-tl-windows.exe
+2023/09/01 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2023/09/01 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2023/09/01 | 26028715 | systems/texlive/tlnet/install-tl.zip
+2023/09/01 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2023/09/01 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc
2023/03/19 | 1229 | systems/texlive/tlnet/README.md
2023/03/19 | 0 | systems/texlive/tlnet/TEXLIVE_2023
2023/01/17 | 8401 | systems/texlive/tlnet/tlpkg/gpg/pubring.gpg
@@ -303817,7 +303850,7 @@
2023/01/17 | 1280 | systems/texlive/tlnet/tlpkg/gpg/trustdb.gpg
2023/08/03 | 50576 | systems/texlive/tlnet/tlpkg/installer/config.guess
2010/11/11 | 11651 | systems/texlive/tlnet/tlpkg/installer/COPYING.MinGW-runtime.txt
-2023/08/30 | 7363 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+2023/08/31 | 7409 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2023/08/23 | 221470 | 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
@@ -303859,12 +303892,12 @@
2023/02/21 | 20371 | systems/texlive/tlnet/tlpkg/TeXLive/TLCrypto.pm
2021/12/21 | 5429 | systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm
2023/04/08 | 28167 | systems/texlive/tlnet/tlpkg/TeXLive/TLPaper.pm
-2023/08/31 | 18222881 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
-2023/08/31 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2023/09/01 | 18224326 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2023/09/01 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
2023/02/20 | 86803 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm
-2023/08/31 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
-2023/08/31 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2023/08/31 | 2467656 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2023/09/01 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2023/09/01 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2023/09/01 | 2466444 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
2023/02/20 | 58928 | systems/texlive/tlnet/tlpkg/TeXLive/TLPOBJ.pm
2023/06/11 | 42749 | systems/texlive/tlnet/tlpkg/TeXLive/TLPSRC.pm
2023/02/21 | 16138 | systems/texlive/tlnet/tlpkg/TeXLive/TLTREE.pm
@@ -306570,7 +306603,7 @@
2023/08/08 | 81631 | systems/texlive/tlnet/tlpkg/translations/es.po
2023/08/08 | 94433 | systems/texlive/tlnet/tlpkg/translations/fr.po
2023/08/08 | 87939 | systems/texlive/tlnet/tlpkg/translations/it.po
-2023/08/08 | 62854 | systems/texlive/tlnet/tlpkg/translations/ja.po
+2023/09/01 | 62857 | systems/texlive/tlnet/tlpkg/translations/ja.po
2023/08/08 | 47295 | systems/texlive/tlnet/tlpkg/translations/messages.pot
2023/08/08 | 58302 | systems/texlive/tlnet/tlpkg/translations/nl.po
2023/08/08 | 67354 | systems/texlive/tlnet/tlpkg/translations/pl.po
@@ -314553,7 +314586,7 @@
2014/07/05 | 611 | systems/win32/yandy/README
2014/07/05 | 1004628 | systems/win32/yandy/yandy-src.tar.xz
2014/07/05 | 1012416 | systems/win32/yandy.zip
-2023/09/01 | 186 | timestamp
+2023/09/02 | 186 | timestamp
2002/08/26 | 61898 | usergrps/dante/antrag.pdf
2002/08/26 | 118217 | usergrps/dante/antrag.ps
2021/11/11 | 917 | usergrps/dante/dtk/doc/beispiel.bib
@@ -315911,7 +315944,7 @@
2022/09/26 | 9542 | usergrps/usergrps/labels.pdf
2022/05/12 | 2105 | usergrps/usergrps/labels.tex
2023/07/11 | 9295 | usergrps/usergrps/lt.html
-2023/07/11 | 32142 | usergrps/usergrps/lugs.html
+2023/09/01 | 31890 | usergrps/usergrps/lugs.html
2022/09/26 | 48927 | usergrps/usergrps/lugs.pdf
2023/06/21 | 20937 | usergrps/usergrps/lugs.tex
2023/07/11 | 9245 | usergrps/usergrps/mx.html
diff --git a/FILES.byname.gz b/FILES.byname.gz
index aa62a9dfaf..e45119f389 100644
--- a/FILES.byname.gz
+++ b/FILES.byname.gz
Binary files differ
diff --git a/FILES.last07days b/FILES.last07days
index d21f83ca51..268c84fdc3 100644
--- a/FILES.last07days
+++ b/FILES.last07days
@@ -1,15 +1,159 @@
+2023/09/01 | 9889 | macros/latex/contrib/jwjournal/README.md
+2023/09/01 | 95082 | macros/latex/contrib/wrapfig2/wrapfig2.dtx
+2023/09/01 | 9239 | macros/latex/contrib/siunitx/siunitx-symbol.dtx
+2023/09/01 | 8866 | macros/latex/contrib/siunitx/siunitx-command.dtx
+2023/09/01 | 884543 | macros/latex/contrib/iwonamath.zip
+2023/09/01 | 824856 | systems/texlive/tlnet/archive/install-latex-guide-zh-cn.doc.r68122.tar.xz
2023/09/01 | 799431 | info/install-latex-guide-zh-cn/install-latex-guide-zh-cn.pdf
+2023/09/01 | 783389 | macros/latex/contrib/wrapfig2.zip
+2023/09/01 | 77570 | macros/latex/contrib/jwjournal/jwjournal-demo-fr.pdf
+2023/09/01 | 77463 | macros/latex/contrib/siunitx/CHANGELOG.md
+2023/09/01 | 75218 | macros/latex/contrib/jwjournal/jwjournal-demo-en.pdf
+2023/09/01 | 743 | macros/latex/contrib/iwonamath/iwonamath.bib
+2023/09/01 | 71095 | macros/latex/contrib/udes-genie-these/udes-genie-these.dtx
+2023/09/01 | 705915 | macros/latex/contrib/wrapfig2/wrapfig2.pdf
+2023/09/01 | 705591 | macros/latex/contrib/siunitx/siunitx.pdf
2023/09/01 | 6991 | info/install-latex-guide-zh-cn/appendix/updateinfo.tex
+2023/09/01 | 6932 | systems/texlive/tlnet/archive/collection-latexextra.r68123.tar.xz
+2023/09/01 | 67672 | systems/texlive/tlnet/archive/siunitx.r68127.tar.xz
+2023/09/01 | 6716 | macros/latex/contrib/udes-genie-these/Exemple/references.bib
+2023/09/01 | 65980 | systems/texlive/tlnet/archive/tagpdf.source.r68128.tar.xz
+2023/09/01 | 647898 | macros/latex/contrib/siunitx/siunitx-code.pdf
+2023/09/01 | 638 | graphics/pgf/contrib/hobby/README
+2023/09/01 | 62857 | systems/texlive/tlnet/tlpkg/translations/ja.po
+2023/09/01 | 625718 | support/TeX4ht/source/tex4ht-html4.tex
+2023/09/01 | 5831 | macros/latex/contrib/siunitx/siunitx-locale.dtx
+2023/09/01 | 580888 | systems/texlive/tlnet/archive/mathastext.doc.r68125.tar.xz
+2023/09/01 | 5741513 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2023/09/01 | 568 | systems/texlive/tlnet/archive/install-latex-guide-zh-cn.r68122.tar.xz
+2023/09/01 | 55728 | macros/latex/contrib/siunitx/siunitx-table.dtx
+2023/09/01 | 514679 | graphics/pgf/contrib/hobby/hobby_code.pdf
+2023/09/01 | 506510 | graphics/pgf/contrib/hobby/hobby.pdf
+2023/09/01 | 502258 | macros/latex/contrib/iwonamath/iwonamath.pdf
+2023/09/01 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2023/09/01 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2023/09/01 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2023/09/01 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2023/09/01 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2023/09/01 | 4748 | macros/latex/contrib/siunitx/siunitx-abbreviations.cfg
+2023/09/01 | 46498 | support/TeX4ht/source/tex4ht-mkht.tex
+2023/09/01 | 456 | macros/latex/contrib/highlightx/README.md
+2023/09/01 | 447584 | systems/texlive/tlnet/archive/rank-2-roots.doc.r68121.tar.xz
+2023/09/01 | 43799 | macros/latex/contrib/siunitx/siunitx-compound.dtx
+2023/09/01 | 428932 | systems/texlive/tlnet/archive/texlive-scripts.doc.r68120.tar.xz
+2023/09/01 | 4132 | systems/texlive/tlnet/archive/rank-2-roots.r68121.tar.xz
+2023/09/01 | 4104087 | biblio/ctan-bibdata.zip
+2023/09/01 | 397 | macros/latex/contrib/udes-genie-these/Exemple/symboles.tex
+2023/09/01 | 39321 | macros/latex/contrib/siunitx/siunitx-complex.dtx
+2023/09/01 | 382573 | macros/latex/contrib/iwonamath/sample.pdf
+2023/09/01 | 37716 | macros/latex/contrib/siunitx/siunitx-print.dtx
+2023/09/01 | 3724 | macros/latex/contrib/highlightx/tex/highlightx.sty
+2023/09/01 | 3703057 | biblio/ctan-bibdata/ctan.pdf
+2023/09/01 | 3687 | macros/latex/contrib/siunitx/siunitx.ins
+2023/09/01 | 35780 | systems/texlive/tlnet/archive/tagpdf.r68128.tar.xz
+2023/09/01 | 35654 | macros/latex/contrib/highlightx/doc/highlightx-doc.tex
+2023/09/01 | 3528 | systems/texlive/tlnet/archive/jwjournal.r68124.tar.xz
+2023/09/01 | 3388 | systems/texlive/tlnet/archive/highlightx.r68123.tar.xz
+2023/09/01 | 337 | macros/latex/contrib/udes-genie-these/Exemple/lexique.tex
+2023/09/01 | 3317 | macros/latex/contrib/jwjournal/jwjournal-demo-fr.tex
+2023/09/01 | 31890 | usergrps/usergrps/lugs.html
+2023/09/01 | 31812 | macros/latex/contrib/siunitx/siunitx-emulation.dtx
+2023/09/01 | 31738 | macros/latex/contrib/siunitx/siunitx-version-1.cfg
+2023/09/01 | 300357 | macros/context/contrib/context-handlecsv.zip
+2023/09/01 | 2951 | macros/latex/contrib/siunitx/siunitx-binary.dtx
+2023/09/01 | 286 | macros/latex/contrib/iwonamath/README
+2023/09/01 | 2860 | macros/latex/contrib/jwjournal/jwjournal-demo-en.tex
+2023/09/01 | 284 | macros/latex/contrib/udes-genie-these/Exemple/acronymes.tex
+2023/09/01 | 2848 | macros/latex/contrib/udes-genie-these/Exemple/document.tex
2023/09/01 | 2824 | info/install-latex-guide-zh-cn/chapter/preface.tex
+2023/09/01 | 2807358 | biblio/ctan-bibdata/ctan.bib
+2023/09/01 | 277260 | macros/latex/contrib/jwjournal.zip
+2023/09/01 | 2770 | macros/latex/contrib/jwjournal/jwjournal-demo-cn.tex
+2023/09/01 | 273398 | macros/latex/contrib/siunitx/siunitx-v2.sty
+2023/09/01 | 2636 | macros/latex/contrib/siunitx/siunitx-code.tex
+2023/09/01 | 26028715 | systems/texlive/tlnet/install-tl.zip
+2023/09/01 | 2466444 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2023/09/01 | 229461 | support/TeX4ht/source/ChangeLog
+2023/09/01 | 2228328 | systems/texlive/tlnet/archive/mitthesis.doc.r68126.tar.xz
+2023/09/01 | 22231 | macros/latex/contrib/siunitx/siunitx.dtx
+2023/09/01 | 2128908 | systems/texlive/tlnet/archive/tagpdf.doc.r68128.tar.xz
+2023/09/01 | 21039884 | systems/texlive/tlnet/install-tl-windows.exe
+2023/09/01 | 2087 | macros/latex/contrib/iwonamath/sample.tex
+2023/09/01 | 1932 | macros/latex/contrib/udes-genie-these/udes-genie-these.ins
+2023/09/01 | 192 | macros/latex/contrib/udes-genie-these/Exemple/merci.tex
+2023/09/01 | 19106 | macros/latex/contrib/jwjournal/LICENSE
+2023/09/01 | 186 | macros/latex/contrib/udes-genie-these/Exemple/resume-francais.tex
+2023/09/01 | 18431 | macros/latex/contrib/siunitx/siunitx-angle.dtx
+2023/09/01 | 182360 | systems/texlive/tlnet/archive/jwjournal.doc.r68124.tar.xz
+2023/09/01 | 18224326 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2023/09/01 | 180308 | macros/latex/contrib/udes-genie-these/udes-genie-these.pdf
+2023/09/01 | 174996 | systems/texlive/tlnet/archive/highlightx.doc.r68123.tar.xz
+2023/09/01 | 1729 | macros/latex/contrib/siunitx/siunitx-binary.cfg
+2023/09/01 | 1727 | macros/latex/contrib/iwonamath/Makefile
+2023/09/01 | 1716 | macros/latex/contrib/udes-genie-these/README.md
+2023/09/01 | 17152 | systems/texlive/tlnet/archive/mathastext.r68125.tar.xz
+2023/09/01 | 171522 | install/macros/latex/contrib/udes-genie-these.tds.zip
+2023/09/01 | 168660 | macros/latex/contrib/siunitx/siunitx.tex
+2023/09/01 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
+2023/09/01 | 165 | macros/latex/contrib/udes-genie-these/Exemple/resume-anglais.tex
+2023/09/01 | 163621 | macros/latex/contrib/udes-genie-these.zip
+2023/09/01 | 162177 | macros/latex/contrib/siunitx/siunitx-number.dtx
+2023/09/01 | 1610 | macros/latex/contrib/wrapfig2/README.txt
+2023/09/01 | 1594167 | install/macros/latex/contrib/siunitx.tds.zip
+2023/09/01 | 15689 | macros/latex/contrib/jwjournal/jwjournal.cls
+2023/09/01 | 1546902 | macros/latex/contrib/siunitx.zip
+2023/09/01 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2023/09/01 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2023/09/01 | 15234 | macros/latex/contrib/siunitx/siunitx-quantity.dtx
+2023/09/01 | 151780 | systems/texlive/tlnet/archive/texlive-msg-translations.r68130.tar.xz
+2023/09/01 | 14940 | systems/texlive/tlnet/archive/mitthesis.r68126.tar.xz
+2023/09/01 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2023/09/01 | 1453692 | systems/texlive/tlnet/archive/tex4ht.source.r68129.tar.xz
+2023/09/01 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2023/09/01 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r68129.tar.xz
+2023/09/01 | 13586 | macros/latex/contrib/iwonamath/iwonamath.dtx
+2023/09/01 | 1321 | macros/latex/contrib/iwonamath/ot1iwonamathlc.fd
2023/09/01 | 13165 | info/install-latex-guide-zh-cn/chapter/ubuntu.tex
-2023/08/31 | 9889 | macros/latex/contrib/jwjournal/README.md
+2023/09/01 | 1312 | macros/latex/contrib/iwonamath/ot1iwonamathc.fd
+2023/09/01 | 1308 | macros/latex/contrib/iwonamath/ot1iwonamathl.fd
+2023/09/01 | 12 | macros/latex/contrib/jwjournal/DEPENDS.txt
+2023/09/01 | 1299 | macros/latex/contrib/iwonamath/ot1iwonamath.fd
+2023/09/01 | 1288264 | systems/texlive/tlnet/archive/siunitx.doc.r68127.tar.xz
+2023/09/01 | 128429 | macros/latex/contrib/highlightx.zip
+2023/09/01 | 1240 | macros/latex/contrib/iwonamath/omliwonamathlc.fd
+2023/09/01 | 1237 | macros/latex/contrib/iwonamath/omsiwonamathlc.fd
+2023/09/01 | 1234 | macros/latex/contrib/iwonamath/omxiwonamathlc.fd
+2023/09/01 | 1232 | macros/latex/contrib/iwonamath/omliwonamathc.fd
+2023/09/01 | 1229 | macros/latex/contrib/iwonamath/omsiwonamathc.fd
+2023/09/01 | 1229 | macros/latex/contrib/iwonamath/omliwonamathl.fd
+2023/09/01 | 122916 | systems/texlive/tlnet/archive/siunitx.source.r68127.tar.xz
+2023/09/01 | 1226 | macros/latex/contrib/iwonamath/omxiwonamathc.fd
+2023/09/01 | 1226 | macros/latex/contrib/iwonamath/omsiwonamathl.fd
+2023/09/01 | 1223 | macros/latex/contrib/iwonamath/omxiwonamathl.fd
+2023/09/01 | 1221 | macros/latex/contrib/iwonamath/omliwonamath.fd
+2023/09/01 | 1218 | macros/latex/contrib/iwonamath/omsiwonamath.fd
+2023/09/01 | 1215 | macros/latex/contrib/iwonamath/omxiwonamath.fd
+2023/09/01 | 119988 | macros/latex/contrib/highlightx/doc/highlightx-doc.pdf
+2023/09/01 | 1179 | macros/latex/contrib/siunitx/README.md
+2023/09/01 | 1164745 | support/TeX4ht/source/tex4ht-4ht.tex
+2023/09/01 | 1156 | macros/latex/contrib/iwonamath/ot1iwonamathlcm.fd
+2023/09/01 | 115307 | macros/latex/contrib/jwjournal/jwjournal-demo-cn.pdf
+2023/09/01 | 1149 | macros/latex/contrib/iwonamath/ot1iwonamathcm.fd
+2023/09/01 | 1147 | macros/latex/contrib/iwonamath/ot1iwonamathlm.fd
+2023/09/01 | 114651 | graphics/pgf/contrib/hobby/hobby_code.dtx
+2023/09/01 | 114128 | systems/texlive/tlnet/archive/texlive-scripts.r68120.tar.xz
+2023/09/01 | 1140 | macros/latex/contrib/iwonamath/ot1iwonamathm.fd
+2023/09/01 | 11266 | macros/latex/contrib/siunitx/siunitx-abbreviation.dtx
+2023/09/01 | 1102992 | systems/texlive/tlnet/archive/tex4ht.r68129.tar.xz
+2023/09/01 | 105372 | systems/texlive/tlnet/archive/mathastext.source.r68125.tar.xz
+2023/09/01 | 1038875 | graphics/pgf/contrib/hobby.zip
+2023/09/01 | 103551 | macros/latex/contrib/siunitx/siunitx-unit.dtx
+2023/09/01 | 101221 | support/TeX4ht/source/tex4ht-docbook.tex
2023/08/31 | 988533 | macros/luatex/generic/luaotfload/fontloader-reference.lua
2023/08/31 | 9881 | macros/luatex/generic/luaotfload/fontloader-fonts-gbn.lua
2023/08/31 | 94857 | macros/luatex/generic/luaotfload/fontloader-font-otr.lua
2023/08/31 | 94462 | macros/luatex/generic/luaotfload/fontloader-font-cff.lua
-2023/08/31 | 9239 | macros/latex/contrib/siunitx/siunitx-symbol.dtx
2023/08/31 | 912 | macros/luatex/generic/luaotfload/fontloader-fonts-mis.lua
-2023/08/31 | 8866 | macros/latex/contrib/siunitx/siunitx-command.dtx
2023/08/31 | 885632 | macros/luatex/generic/luaotfload/fontloader-2023-08-19.lua
2023/08/31 | 8597 | macros/luatex/generic/luaotfload/filegraph.tex
2023/08/31 | 8562 | macros/luatex/generic/luaotfload/shaper-demo-graphite.pdf
@@ -20,32 +164,26 @@
2023/08/31 | 79551 | macros/luatex/generic/luaotfload/luaotfload-conf.pdf
2023/08/31 | 7917 | macros/luatex/generic/luaotfload/luaotfload-unicode.lua
2023/08/31 | 7904 | macros/luatex/generic/luaotfload/fontloader-font-oti.lua
-2023/08/31 | 77570 | macros/latex/contrib/jwjournal/jwjournal-demo-fr.pdf
-2023/08/31 | 77204 | macros/latex/contrib/siunitx/CHANGELOG.md
2023/08/31 | 76967 | macros/luatex/generic/luaotfload/luaotfload-tool.pdf
2023/08/31 | 75492 | systems/texlive/tlnet/archive/xepersian.source.r68117.tar.xz
2023/08/31 | 7528 | macros/luatex/generic/luaotfload/luaotfload-tounicode.lua
-2023/08/31 | 75218 | macros/latex/contrib/jwjournal/jwjournal-demo-en.pdf
+2023/08/31 | 7409 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2023/08/31 | 7272 | macros/luatex/generic/luaotfload/luaotfload-dvi.lua
2023/08/31 | 7260 | macros/luatex/generic/luaotfload/fontloader-fonts-ext.lua
-2023/08/31 | 705662 | macros/latex/contrib/siunitx/siunitx.pdf
2023/08/31 | 699 | macros/luatex/generic/luaotfload/scripts-demo.tex
2023/08/31 | 6955 | macros/luatex/generic/luaotfload/fontloader-l-string.lua
2023/08/31 | 6848 | macros/luatex/generic/luaotfload/fontloader-font-afk.lua
2023/08/31 | 67617 | macros/luatex/generic/luaotfload/fontloader-font-ttf.lua
2023/08/31 | 660 | macros/latex/contrib/huawei/DEPENDS.txt
2023/08/31 | 65279 | macros/luatex/generic/luaotfload/fontloader-font-otj.lua
-2023/08/31 | 647812 | macros/latex/contrib/siunitx/siunitx-code.pdf
2023/08/31 | 6405 | macros/luatex/generic/luaotfload/fontloader-l-lua.lua
2023/08/31 | 63505 | macros/luatex/generic/luaotfload/fontloader-font-con.lua
2023/08/31 | 6317 | macros/luatex/generic/luaotfload/luaotfload-status.lua
2023/08/31 | 6309 | macros/luatex/generic/luaotfload/luaotfload-szss.lua
2023/08/31 | 60332 | systems/texlive/tlnet/archive/xepersian.r68117.tar.xz
2023/08/31 | 5885 | macros/luatex/generic/luaotfload/fontloader-reference-load-order.tex
-2023/08/31 | 5831 | macros/latex/contrib/siunitx/siunitx-locale.dtx
-2023/08/31 | 5741040 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2023/08/31 | 577 | macros/latex/contrib/iwonamath/makeiwonamathfd.sh
2023/08/31 | 57342 | macros/luatex/generic/luaotfload/fontloader-fonts-lig.lua
-2023/08/31 | 55728 | macros/latex/contrib/siunitx/siunitx-table.dtx
2023/08/31 | 5502 | macros/luatex/generic/luaotfload/fontloader-font-cid.lua
2023/08/31 | 547 | graphics/pgf/contrib/rank-2-roots/README
2023/08/31 | 5477 | macros/luatex/generic/luaotfload/fontloader-data-con.lua
@@ -53,34 +191,22 @@
2023/08/31 | 52 | macros/luatex/generic/luaotfload/luaotfload-blacklist.cnf
2023/08/31 | 520558 | biblio/bibtex/bibtex-x.zip
2023/08/31 | 506335 | macros/luatex/generic/luaotfload/luaotfload-latex.pdf
-2023/08/31 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
-2023/08/31 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2023/08/31 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc
-2023/08/31 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2023/08/31 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2023/08/31 | 48728 | macros/luatex/generic/luaotfload/fontloader-basics-chr.lua
-2023/08/31 | 4748 | macros/latex/contrib/siunitx/siunitx-abbreviations.cfg
+2023/08/31 | 466 | macros/latex/contrib/iwonamath/iwonamath.ins
2023/08/31 | 46560 | macros/luatex/generic/luaotfload/fontloader-util-str.lua
2023/08/31 | 450813 | graphics/pgf/contrib/rank-2-roots.zip
2023/08/31 | 448699 | graphics/pgf/contrib/rank-2-roots/rank-2-roots.pdf
-2023/08/31 | 43799 | macros/latex/contrib/siunitx/siunitx-compound.dtx
-2023/08/31 | 428848 | systems/texlive/tlnet/archive/texlive-scripts.doc.r68113.tar.xz
2023/08/31 | 42452 | macros/luatex/generic/luaotfload/fontloader-l-table.lua
2023/08/31 | 42312 | macros/luatex/generic/luaotfload/luaotfload-harf-plug.lua
2023/08/31 | 41303 | macros/luatex/generic/luaotfload/fontloader-l-unicode.lua
-2023/08/31 | 4102237 | biblio/ctan-bibdata.zip
2023/08/31 | 410132 | systems/texlive/tlnet/archive/metsymb.doc.r68118.tar.xz
2023/08/31 | 4050 | macros/luatex/generic/luaotfload/luaotfload-harf-var-t2-writer.lua
2023/08/31 | 4047 | macros/luatex/generic/luaotfload/luaotfload-fallback.lua
2023/08/31 | 4042 | macros/luatex/generic/luaotfload/fontloader-font-imp-italics.lua
2023/08/31 | 40007 | macros/luatex/generic/luaotfload/filegraph.pdf
-2023/08/31 | 39321 | macros/latex/contrib/siunitx/siunitx-complex.dtx
2023/08/31 | 38742 | macros/luatex/generic/luaotfload/fontloader-l-lpeg.lua
2023/08/31 | 3821 | macros/luatex/generic/luaotfload/fontloader-fonts-def.lua
2023/08/31 | 3784 | macros/luatex/generic/luaotfload/README.md
-2023/08/31 | 37606 | macros/latex/contrib/siunitx/siunitx-print.dtx
-2023/08/31 | 3700823 | biblio/ctan-bibdata/ctan.pdf
-2023/08/31 | 3687 | macros/latex/contrib/siunitx/siunitx.ins
2023/08/31 | 3674 | macros/luatex/generic/luaotfload/luaotfload-bcp47.lua
2023/08/31 | 3674 | macros/luatex/generic/luaotfload/fontloader-fonts-syn.lua
2023/08/31 | 36357 | macros/luatex/generic/luaotfload/fontloader-font-ott.lua
@@ -88,49 +214,33 @@
2023/08/31 | 36119 | macros/luatex/generic/luaotfload/fontloader-font-otc.lua
2023/08/31 | 3594 | macros/luatex/generic/luaotfload/fontloader-font-imp-ligatures.lua
2023/08/31 | 35359 | macros/luatex/generic/luaotfload/luaotfload-features.lua
-2023/08/31 | 34745 | macros/latex/contrib/highlightx/doc/highlightx-doc.tex
2023/08/31 | 34239 | macros/luatex/generic/luaotfload/luaotfload-auxiliary.lua
2023/08/31 | 34195 | macros/luatex/generic/luaotfload/fontloader-font-otl.lua
2023/08/31 | 34054 | macros/luatex/generic/luaotfload/luaotfload-configuration.lua
-2023/08/31 | 3380 | systems/texlive/tlnet/archive/jwjournal.r68116.tar.xz
2023/08/31 | 33619 | macros/latex/contrib/huawei/huawei.dtx
2023/08/31 | 3355 | macros/luatex/generic/luaotfload/fontloader-font-imp-tex.lua
-2023/08/31 | 3317 | macros/latex/contrib/jwjournal/jwjournal-demo-fr.tex
2023/08/31 | 3287334 | macros/luatex/generic/luaotfload/luaotfload-characters.lua
-2023/08/31 | 31812 | macros/latex/contrib/siunitx/siunitx-emulation.dtx
-2023/08/31 | 31738 | macros/latex/contrib/siunitx/siunitx-version-1.cfg
2023/08/31 | 31101 | macros/luatex/generic/luaotfload/fontloader-font-one.lua
2023/08/31 | 30765 | graphics/pgf/contrib/rank-2-roots/rank-2-roots.tex
2023/08/31 | 30436 | macros/luatex/generic/luaotfload/luaotfload-parsers.lua
-2023/08/31 | 2951 | macros/latex/contrib/siunitx/siunitx-binary.dtx
-2023/08/31 | 2860 | macros/latex/contrib/jwjournal/jwjournal-demo-en.tex
-2023/08/31 | 2806965 | biblio/ctan-bibdata/ctan.bib
-2023/08/31 | 277235 | macros/latex/contrib/jwjournal.zip
-2023/08/31 | 2770 | macros/latex/contrib/jwjournal/jwjournal-demo-cn.tex
2023/08/31 | 275 | macros/luatex/generic/luaotfload/luaotfload-main.lua
-2023/08/31 | 273398 | macros/latex/contrib/siunitx/siunitx-v2.sty
2023/08/31 | 2679 | macros/luatex/generic/luaotfload/fontloader-l-math.lua
2023/08/31 | 2667 | macros/luatex/generic/luaotfload/fontloader-font-vfc.lua
-2023/08/31 | 2636 | macros/latex/contrib/siunitx/siunitx-code.tex
2023/08/31 | 2626 | macros/latex/contrib/huawei/huawei.ins
2023/08/31 | 2625 | macros/luatex/generic/luaotfload/fontloader-fonts-enc.lua
-2023/08/31 | 26028713 | systems/texlive/tlnet/install-tl.zip
2023/08/31 | 2582 | macros/luatex/generic/luaotfload/luaotfload-suppress.lua
2023/08/31 | 253724 | macros/latex/contrib/huawei/huawei-cover-picture.pdf
2023/08/31 | 25336 | macros/luatex/generic/luaotfload/luaotfload-filelist.lua
2023/08/31 | 25264 | macros/luatex/generic/luaotfload/fontloader-font-ocl.lua
2023/08/31 | 2506 | macros/luatex/generic/luaotfload/luaotfload-scripts.lua
-2023/08/31 | 2467656 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
2023/08/31 | 2377790 | macros/latex/contrib/tagpdf.zip
2023/08/31 | 23702 | macros/luatex/generic/luaotfload/fontloader-font-oto.lua
2023/08/31 | 23399 | macros/luatex/generic/luaotfload/fontloader-fonts-tfm.lua
2023/08/31 | 22637 | macros/luatex/generic/luaotfload/fontloader-l-file.lua
2023/08/31 | 22347 | macros/luatex/generic/luaotfload/NEWS
-2023/08/31 | 22231 | macros/latex/contrib/siunitx/siunitx.dtx
2023/08/31 | 21858 | macros/luatex/generic/luaotfload/luaotfload-diagnostics.lua
2023/08/31 | 21682 | macros/luatex/generic/luaotfload/scripts-demo.pdf
2023/08/31 | 21067 | graphics/pgf/contrib/rank-2-roots/rank-2-roots.sty
-2023/08/31 | 21038732 | systems/texlive/tlnet/install-tl-windows.exe
2023/08/31 | 20523 | macros/luatex/generic/luaotfload/luaotfload-harf-var-ttf.lua
2023/08/31 | 20268 | macros/luatex/generic/luaotfload/luaotfload-letterspace.lua
2023/08/31 | 2000 | systems/texlive/tlnet/archive/collection-fontsextra.r68118.tar.xz
@@ -142,69 +252,45 @@
2023/08/31 | 19564 | macros/luatex/generic/luaotfload/fontloader-font-map.lua
2023/08/31 | 19482 | macros/luatex/generic/luaotfload/luaotfload-harf-define.lua
2023/08/31 | 191 | macros/luatex/generic/luaotfload/shaper-demo-graphite.tex
-2023/08/31 | 19106 | macros/latex/contrib/jwjournal/LICENSE
2023/08/31 | 188827 | macros/luatex/generic/luaotfload/fontloader-font-ots.lua
2023/08/31 | 18714 | macros/luatex/generic/luaotfload/COPYING
2023/08/31 | 18604 | macros/luatex/generic/luaotfload/fontloader-font-onr.lua
2023/08/31 | 1850 | macros/luatex/generic/luaotfload/fontloader-l-boolean.lua
-2023/08/31 | 18431 | macros/latex/contrib/siunitx/siunitx-angle.dtx
2023/08/31 | 18390 | macros/luatex/generic/luaotfload/fontloader-font-ota.lua
2023/08/31 | 18372 | macros/luatex/generic/luaotfload/luaotfload-colors.lua
2023/08/31 | 182 | macros/luatex/generic/luaotfload/shaper-demo.tex
-2023/08/31 | 18222881 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
2023/08/31 | 1812 | macros/luatex/generic/luaotfload/luaotfload.sty
2023/08/31 | 18035 | macros/luatex/generic/luaotfload/luaotfload.conf.5
-2023/08/31 | 177399 | macros/latex/contrib/highlightx.zip
2023/08/31 | 1770 | macros/luatex/generic/luaotfload/fontloader-font-ini.lua
-2023/08/31 | 1729 | macros/latex/contrib/siunitx/siunitx-binary.cfg
-2023/08/31 | 168660 | macros/latex/contrib/siunitx/siunitx.tex
-2023/08/31 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
-2023/08/31 | 167620 | macros/latex/contrib/highlightx/doc/highlightx-doc.pdf
2023/08/31 | 16728 | systems/texlive/tlnet/archive/metsymb.r68118.tar.xz
-2023/08/31 | 162177 | macros/latex/contrib/siunitx/siunitx-number.dtx
2023/08/31 | 16214 | macros/luatex/generic/luaotfload/luaotfload-latex.tex
2023/08/31 | 16116 | macros/luatex/generic/luaotfload/luaotfload-tool.rst
2023/08/31 | 16116 | macros/luatex/generic/luaotfload/luaotfload-case.lua
-2023/08/31 | 1594079 | install/macros/latex/contrib/siunitx.tds.zip
2023/08/31 | 15712 | systems/texlive/tlnet/archive/metsymb.source.r68118.tar.xz
2023/08/31 | 155745 | macros/luatex/generic/luaotfload/fontloader-font-dsp.lua
-2023/08/31 | 15531 | macros/latex/contrib/jwjournal/jwjournal.cls
-2023/08/31 | 1546811 | macros/latex/contrib/siunitx.zip
-2023/08/31 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2023/08/31 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2023/08/31 | 15234 | macros/latex/contrib/siunitx/siunitx-quantity.dtx
2023/08/31 | 15196 | macros/luatex/generic/luaotfload/fontloader-reference-load-order.lua
2023/08/31 | 1513 | macros/latex/contrib/huawei/README.md
2023/08/31 | 15068 | macros/luatex/generic/luaotfload/luaotfload-multiscript.lua
-2023/08/31 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2023/08/31 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
2023/08/31 | 1449 | macros/luatex/generic/luaotfload/fontloader-font-lua.lua
2023/08/31 | 14126 | macros/luatex/generic/luaotfload/luaotfload-harf-var-cff2.lua
2023/08/31 | 13972 | macros/luatex/generic/luaotfload/fontloader-font-shp.lua
2023/08/31 | 13565 | macros/luatex/generic/luaotfload/luaotfload.lua
2023/08/31 | 135012 | macros/luatex/generic/luaotfload/luaotfload-database.lua
-2023/08/31 | 12 | macros/latex/contrib/jwjournal/DEPENDS.txt
2023/08/31 | 128777 | macros/luatex/generic/luaotfload/fontloader-font-oup.lua
2023/08/31 | 12829 | macros/luatex/generic/luaotfload/luaotfload-tool.1
2023/08/31 | 12745 | macros/luatex/generic/luaotfload/fontloader-basics-gen.lua
2023/08/31 | 12704 | macros/luatex/generic/luaotfload/fontloader-font-imp-effects.lua
-2023/08/31 | 123904 | systems/texlive/tlnet/archive/jwjournal.doc.r68116.tar.xz
2023/08/31 | 12258 | macros/luatex/generic/luaotfload/luaotfload-notdef.lua
+2023/08/31 | 11 | macros/context/contrib/context-handlecsv/VERSION
2023/08/31 | 11988 | macros/luatex/generic/luaotfload/fontloader-l-io.lua
2023/08/31 | 118486 | macros/luatex/generic/luaotfload/fontloader-font-osd.lua
-2023/08/31 | 1179 | macros/latex/contrib/siunitx/README.md
-2023/08/31 | 11656 | macros/latex/contrib/highlightx/tex/highlightx.sty
-2023/08/31 | 115307 | macros/latex/contrib/jwjournal/jwjournal-demo-cn.pdf
2023/08/31 | 11474 | macros/luatex/generic/luaotfload/fontloader-util-fil.lua
-2023/08/31 | 114120 | systems/texlive/tlnet/archive/texlive-scripts.r68113.tar.xz
2023/08/31 | 11323 | macros/luatex/generic/luaotfload/luaotfload-log.lua
-2023/08/31 | 11266 | macros/latex/contrib/siunitx/siunitx-abbreviation.dtx
2023/08/31 | 11209 | macros/luatex/generic/luaotfload/luaotfload-resolvers.lua
2023/08/31 | 1083 | macros/latex/contrib/huawei/LICENSE.txt
2023/08/31 | 107636 | macros/luatex/generic/luaotfload/luaotfload-main.tex
2023/08/31 | 10733 | macros/luatex/generic/luaotfload/luaotfload-loaders.lua
2023/08/31 | 1051913 | macros/latex/contrib/huawei.zip
-2023/08/31 | 103551 | macros/latex/contrib/siunitx/siunitx-unit.dtx
2023/08/31 | 102502 | macros/luatex/generic/luaotfload/luaotfload-glyphlist.lua
2023/08/31 | 10207 | macros/luatex/generic/luaotfload/fontloader-basics-nod.lua
2023/08/31 | 1004 | macros/luatex/generic/luaotfload/luaotfload-embolden.lua
@@ -223,7 +309,6 @@
2023/08/30 | 788860 | systems/texlive/tlnet/archive/ppt-slides.doc.r68108.tar.xz
2023/08/30 | 7854 | macros/latex/contrib/tagpdf/ex-formula-problem-luatex.pdf
2023/08/30 | 777229 | macros/xetex/latex/xepersian/xepersian.pdf
-2023/08/30 | 7363 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2023/08/30 | 71387 | macros/xetex/latex/xepersian/xepersian-doc-basics.ltx
2023/08/30 | 700 | macros/latex/contrib/tagpdf/ex-spaceglyph-listings.tex
2023/08/30 | 698 | macros/latex/contrib/tagpdf/ex-tagpdf-template.tex
@@ -232,7 +317,6 @@
2023/08/30 | 68820 | macros/latex/contrib/tagpdf/tagpdf-struct.dtx
2023/08/30 | 66 | fonts/metsymb/AUTHORS
2023/08/30 | 6626 | macros/latex/contrib/tagpdf/ex-attribute-luatex.pdf
-2023/08/30 | 638 | graphics/pgf/contrib/hobby/README
2023/08/30 | 6364 | systems/texlive/tlnet/archive/ppt-slides.source.r68108.tar.xz
2023/08/30 | 61129 | fonts/metsymb/source/metsymb.sfd
2023/08/30 | 60 | fonts/metsymb/source/metsymb_mwe.mplstyle
@@ -240,14 +324,11 @@
2023/08/30 | 574466 | macros/latex/contrib/mathastext/mathastext.pdf
2023/08/30 | 5461 | macros/latex/contrib/mathastext/README.md
2023/08/30 | 5447 | macros/xetex/latex/xepersian/xepersian-doc-envcs.ltx
-2023/08/30 | 543 | macros/latex/contrib/highlightx/README.md
2023/08/30 | 5416 | macros/latex/contrib/mitthesis/README.md
2023/08/30 | 53708 | systems/texlive/tlnet/archive/pdfmanagement-testphase.r68107.tar.xz
2023/08/30 | 514716 | systems/texlive/tlnet/archive/schooldocs.doc.r68109.tar.xz
-2023/08/30 | 514512 | graphics/pgf/contrib/hobby/hobby_code.pdf
2023/08/30 | 5109 | macros/latex/contrib/tagpdf/tagpdf-space.dtx
2023/08/30 | 5101 | fonts/metsymb/README.md
-2023/08/30 | 506560 | graphics/pgf/contrib/hobby/hobby.pdf
2023/08/30 | 49177 | fonts/metsymb/source/testfont.pdf
2023/08/30 | 490683 | macros/latex/contrib/mitthesis/MIT-Thesis.pdf
2023/08/30 | 4593 | macros/latex/contrib/tagpdf/tagpdfdocu-patches.sty
@@ -365,7 +446,6 @@
2023/08/30 | 1177 | macros/latex/contrib/tagpdf/README.md
2023/08/30 | 11660 | macros/latex/contrib/mitthesis/MIT-thesis-template/MIT-Thesis.tex
2023/08/30 | 1160 | macros/latex/contrib/tagpdf/ex-AF-file.tex
-2023/08/30 | 114625 | graphics/pgf/contrib/hobby/hobby_code.dtx
2023/08/30 | 1136200 | systems/texlive/tlnet/archive/hvextern.doc.r68104.tar.xz
2023/08/30 | 1123565 | macros/xetex/latex/xepersian.zip
2023/08/30 | 110 | fonts/metsymb/source/umetsymb.fd
@@ -373,7 +453,6 @@
2023/08/30 | 10896 | macros/xetex/latex/xepersian/img/weather/sun.jpg
2023/08/30 | 1082447 | macros/latex/contrib/tagpdf/tagpdf.pdf
2023/08/30 | 1063 | macros/latex/contrib/tagpdf/ex-list.tex
-2023/08/30 | 1038831 | graphics/pgf/contrib/hobby.zip
2023/08/30 | 1021980 | systems/texlive/tlnet/archive/babel.doc.r68111.tar.xz
2023/08/29 | 9999 | macros/latex/contrib/l3kernel/l3news10.tex
2023/08/29 | 9953 | macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md
@@ -627,7 +706,6 @@
2023/08/28 | 751 | info/latex4wp/HOW-TO-TYPESET
2023/08/28 | 719 | macros/latex/contrib/lwarp/lwarp_baseline_marker.eps
2023/08/28 | 71183 | macros/luatex/generic/penlightplus.zip
-2023/08/28 | 6948 | systems/texlive/tlnet/archive/collection-latexextra.r68087.tar.xz
2023/08/28 | 520 | systems/texlive/tlnet/archive/niceframe-type1.doc.r68091.tar.xz
2023/08/28 | 501990 | fonts/utilities/ps2pk.zip
2023/08/28 | 4729768 | systems/texlive/tlnet/archive/novel.doc.r68090.tar.xz
@@ -748,188 +826,5 @@
2023/08/26 | 155292 | systems/texlive/tlnet/archive/photobook.doc.r68057.tar.xz
2023/08/26 | 1495202 | macros/luatex/latex/novel/doc/extras/novel-scripts.zip
2023/08/26 | 1166577 | macros/latex/contrib/teubner.zip
-2023/08/26 | 11511 | macros/latex/contrib/mitthesis/MIT-thesis-template/mitthesis-sample.bib
2023/08/26 | 10629314 | fonts/newtx.zip
2023/08/26 | 1008 | systems/texlive/tlnet/archive/collection-luatex.r68053.tar.xz
-2023/08/25 | 9856 | macros/luatex/latex/novel/doc/html-resources/graytext.png
-2023/08/25 | 98505 | macros/luatex/latex/novel/doc/extras/novel-example.pdf
-2023/08/25 | 97027 | macros/latex/contrib/exesheet/exesheet.dtx
-2023/08/25 | 959 | macros/luatex/latex/novel/lualatex/novel-JC200103.clo
-2023/08/25 | 9584 | macros/luatex/latex/novel/doc/html-resources/sixpage-frontmatter.png
-2023/08/25 | 95659 | macros/luatex/latex/novel/doc/html-resources/colorsampler-softproof.png
-2023/08/25 | 947 | macros/luatex/latex/novel/lualatex/novel-FOGRA39.clo
-2023/08/25 | 946 | macros/luatex/latex/novel/lualatex/novel-CGATSTR001.clo
-2023/08/25 | 9411 | macros/luatex/latex/novel/doc/html-resources/robberies.png
-2023/08/25 | 93304 | macros/latex/contrib/teubner/teubner-doc.tex
-2023/08/25 | 8967 | macros/latex/contrib/proflycee/tex/proflycee-tools-recreat.tex
-2023/08/25 | 8821 | macros/luatex/latex/novel/lualatex/novel-PostLayout.sty
-2023/08/25 | 8608 | systems/texlive/tlnet/archive/profsio.r68045.tar.xz
-2023/08/25 | 8567 | macros/luatex/latex/novel/doc/html-resources/megatitlepagesm.png
-2023/08/25 | 85400 | systems/texlive/tlnet/archive/expex-acro.doc.r68046.tar.xz
-2023/08/25 | 8518 | macros/luatex/latex/novel/doc/html-resources/fluffy-conspiracy.png
-2023/08/25 | 847468 | systems/texlive/tlnet/archive/witharrows.doc.r68047.tar.xz
-2023/08/25 | 8187 | macros/luatex/latex/novel/doc/html-resources/headfont-default.png
-2023/08/25 | 8144 | macros/luatex/latex/novel/doc/html-resources/fpaper.png
-2023/08/25 | 80977 | macros/luatex/latex/novel/doc/html-resources/novel-color-sampler.png
-2023/08/25 | 7940 | macros/luatex/latex/novel/doc/html-resources/headfont-roboto.png
-2023/08/25 | 7616 | macros/luatex/latex/novel/doc/html-resources/Iboxcap.png
-2023/08/25 | 7562 | macros/luatex/latex/novel/lualatex/novel-DropCap.sty
-2023/08/25 | 7449 | macros/luatex/latex/novel/doc/html-resources/map.png
-2023/08/25 | 742618 | macros/luatex/generic/evangelion-jfm.zip
-2023/08/25 | 7415 | macros/luatex/latex/novel/doc/html-resources/emblemimg.png
-2023/08/25 | 7288 | systems/texlive/tlnet/archive/expex-acro.source.r68046.tar.xz
-2023/08/25 | 7254 | macros/luatex/latex/novel/doc/html-resources/headfont-montserrat-el.png
-2023/08/25 | 7222 | macros/luatex/latex/novel/doc/novel.tex
-2023/08/25 | 7134 | macros/luatex/latex/novel/doc/html-resources/smythsewn.png
-2023/08/25 | 7043 | macros/luatex/latex/novel/doc/html-resources/jollybeers.png
-2023/08/25 | 6947 | macros/luatex/latex/novel/lualatex/novel-FileData.sty
-2023/08/25 | 69115 | macros/luatex/latex/novel/doc/extras/novel-testsuite.pdf
-2023/08/25 | 69093 | macros/luatex/latex/novel/doc/html-resources/jump-change.png
-2023/08/25 | 6806 | macros/luatex/latex/novel/doc/html-resources/dropcap-scalebloat.png
-2023/08/25 | 67356 | systems/texlive/tlnet/archive/siunitx.r68048.tar.xz
-2023/08/25 | 6676 | systems/texlive/tlnet/archive/lualinalg.r68049.tar.xz
-2023/08/25 | 6548 | macros/luatex/latex/novel/doc/html-resources/dropcap-antestar.png
-2023/08/25 | 6412 | macros/luatex/latex/novel/doc/html-resources/looseheads.png
-2023/08/25 | 6336 | macros/luatex/latex/novel/lualatex/novel-microtype.cfg
-2023/08/25 | 62302 | macros/luatex/latex/novel/doc/html-resources/workedforme.png
-2023/08/25 | 6181 | macros/luatex/latex/novel/doc/html-resources/dropcap-gap.png
-2023/08/25 | 615572 | systems/texlive/tlnet/archive/commutative-diagrams.doc.r68044.tar.xz
-2023/08/25 | 610 | macros/luatex/generic/evangelion-jfm/make.sh
-2023/08/25 | 608 | macros/luatex/latex/novel/doc/html-resources/10trueold.png
-2023/08/25 | 6019 | macros/luatex/latex/novel/doc/html-resources/emblemdingbats.png
-2023/08/25 | 59903 | macros/luatex/latex/novel/doc/novel.pdf
-2023/08/25 | 5898 | macros/luatex/latex/novel/doc/html-resources/CPmodified-sample.png
-2023/08/25 | 563 | macros/luatex/latex/novel/doc/html-resources/10transold.png
-2023/08/25 | 56275 | macros/luatex/latex/novel/doc/html-resources/skygrad.jpg
-2023/08/25 | 5508 | macros/luatex/latex/novel/doc/html-resources/I-shade.png
-2023/08/25 | 5479 | macros/luatex/latex/novel/doc/html-resources/emblembar.png
-2023/08/25 | 5475 | macros/luatex/latex/novel/doc/html-resources/acronym2.png
-2023/08/25 | 5448 | macros/luatex/latex/novel/doc/html-resources/smallcapsrealfake.png
-2023/08/25 | 54423 | macros/luatex/latex/novel/doc/html-resources/colorsampler.png
-2023/08/25 | 54344 | systems/texlive/tlnet/archive/witharrows.source.r68047.tar.xz
-2023/08/25 | 5233 | macros/luatex/latex/novel/doc/html-resources/signature.png
-2023/08/25 | 52088 | macros/luatex/latex/novel/doc/extras/CPmodified.otf
-2023/08/25 | 518 | macros/luatex/latex/novel/README.md
-2023/08/25 | 5151 | macros/luatex/latex/novel/doc/html-resources/fontbyfamily.png
-2023/08/25 | 5029 | macros/luatex/latex/novel/doc/html-resources/frankenfont.png
-2023/08/25 | 495 | macros/latex/contrib/creationboites/README.md
-2023/08/25 | 47618 | macros/luatex/generic/evangelion-jfm/Evangelion-JFM.dtx
-2023/08/25 | 4711 | macros/luatex/latex/novel/doc/html-resources/badaboom.png
-2023/08/25 | 4693 | macros/luatex/generic/evangelion-jfm/README.md
-2023/08/25 | 4599 | macros/luatex/latex/novel/doc/html-resources/pngcolortype.png
-2023/08/25 | 4556 | systems/texlive/tlnet/archive/expex-acro.r68046.tar.xz
-2023/08/25 | 4533 | macros/luatex/latex/novel/doc/html-resources/jpgcolorspace.png
-2023/08/25 | 4523 | macros/luatex/latex/novel/doc/html-resources/ctimg35.png
-2023/08/25 | 449 | macros/luatex/generic/evangelion-jfm/figure/fig.tex
-2023/08/25 | 439290 | macros/latex/contrib/teubner/teubner-doc.pdf
-2023/08/25 | 437 | macros/luatex/generic/evangelion-jfm/makefile
-2023/08/25 | 4372 | systems/texlive/tlnet/archive/luamaths.r68050.tar.xz
-2023/08/25 | 4331 | macros/luatex/latex/novel/doc/html-resources/fontbyfilenamei.png
-2023/08/25 | 4256 | macros/luatex/latex/novel/doc/html-resources/wrapme.png
-2023/08/25 | 42231 | macros/luatex/latex/novel/doc/html-resources/inlineimagest.png
-2023/08/25 | 42202 | macros/luatex/latex/novel/doc/extras/NovelDeco-glyphs.pdf
-2023/08/25 | 418 | macros/luatex/latex/novel/doc/needed-packages
-2023/08/25 | 41850 | macros/luatex/latex/novel/doc/html-resources/trimsize.png
-2023/08/25 | 3939 | macros/luatex/latex/novel/doc/extras/novel-example.tex
-2023/08/25 | 39286 | macros/luatex/latex/novel/doc/html-resources/doordie.png
-2023/08/25 | 3819 | macros/luatex/latex/novel/lualatex/novel-Sandbox.sty
-2023/08/25 | 37436 | macros/luatex/latex/novel/doc/html-resources/gnome-censored.png
-2023/08/25 | 36954 | macros/luatex/latex/novel/doc/html-resources/parascale.png
-2023/08/25 | 34282 | macros/luatex/latex/novel/doc/html-resources/no-brainer.png
-2023/08/25 | 34135 | macros/luatex/latex/novel/doc/html-resources/ublibser.png
-2023/08/25 | 33975 | macros/luatex/latex/novel/doc/html-resources/imgdialogs.png
-2023/08/25 | 33749 | macros/luatex/latex/novel/doc/html-resources/quickchapter.png
-2023/08/25 | 3358 | macros/luatex/latex/novel/lualatex/novel-xmppacket.sty
-2023/08/25 | 332291 | macros/luatex/latex/novel/doc/novel-documentation.html
-2023/08/25 | 316752 | systems/texlive/tlnet/archive/profsio.doc.r68045.tar.xz
-2023/08/25 | 311166 | macros/luatex/latex/novel/doc/extras/novel-Gallery-ChapterStart.pdf
-2023/08/25 | 30606 | macros/luatex/latex/novel/doc/html-resources/margins-trim-media.png
-2023/08/25 | 30516 | macros/luatex/latex/novel/doc/html-resources/mediasize.png
-2023/08/25 | 30022 | macros/luatex/latex/novel/doc/html-resources/shademargins.png
-2023/08/25 | 293501 | macros/latex/contrib/exesheet/exesheet.pdf
-2023/08/25 | 278982 | macros/luatex/generic/evangelion-jfm/Eva-JFM_doc-jp.pdf
-2023/08/25 | 27873 | macros/luatex/latex/novel/doc/html-resources/endnotetext.png
-2023/08/25 | 27867 | macros/luatex/latex/novel/doc/html-resources/trdol.png
-2023/08/25 | 2703 | macros/latex/contrib/teubner/README
-2023/08/25 | 265161 | macros/luatex/generic/evangelion-jfm/Eva-JFM_doc-sc.pdf
-2023/08/25 | 25213 | macros/luatex/latex/novel/doc/html-resources/scenebreaks.png
-2023/08/25 | 246911 | macros/luatex/latex/novel/doc/html-resources/bixby-softproof.png
-2023/08/25 | 246157 | macros/luatex/latex/novel/doc/html-resources/raffaelino-original.png
-2023/08/25 | 2456 | macros/luatex/latex/novel/doc/extras/novel-testscript.jpg
-2023/08/25 | 24517 | macros/luatex/latex/novel/doc/html-resources/megadocprops.png
-2023/08/25 | 24344 | systems/texlive/tlnet/archive/dviasm.doc.r68043.tar.xz
-2023/08/25 | 24156 | macros/luatex/latex/novel/lualatex/novel.cls
-2023/08/25 | 241149 | macros/luatex/latex/novel/doc/html-resources/raffaelino-softproof.png
-2023/08/25 | 239173 | macros/luatex/latex/novel/doc/html-resources/bixby-original.png
-2023/08/25 | 2349 | macros/luatex/latex/novel/doc/html-resources/dorfmcnorf.png
-2023/08/25 | 2335 | macros/luatex/latex/novel/doc/extras/novel-extras-README.html
-2023/08/25 | 22507 | macros/luatex/latex/novel/doc/html-resources/cropmarks.png
-2023/08/25 | 22434 | macros/luatex/latex/novel/doc/html-resources/bookmanglerdashboard.png
-2023/08/25 | 22150 | macros/luatex/generic/evangelion-jfm/jfm-eva.lua
-2023/08/25 | 22144 | macros/luatex/latex/novel/doc/html-resources/bookofbeirh.png
-2023/08/25 | 21698 | macros/luatex/latex/novel/lualatex/novel-TextMacros.sty
-2023/08/25 | 21460 | macros/luatex/latex/novel/doc/html-resources/chaptertitlesubtitle.png
-2023/08/25 | 212786 | info/spanish/antique-spanish-units.zip
-2023/08/25 | 20701 | macros/luatex/latex/novel/doc/html-resources/mcdingle.png
-2023/08/25 | 2064 | macros/luatex/latex/novel/doc/extras/novel-testscript.png
-2023/08/25 | 1990 | macros/luatex/latex/novel/doc/extras/novel-testimage.jpg
-2023/08/25 | 19907 | macros/luatex/latex/novel/doc/html-resources/cropview.png
-2023/08/25 | 19795 | macros/luatex/latex/novel/lualatex/novel-Images.sty
-2023/08/25 | 19633 | macros/luatex/latex/novel/doc/html-resources/printgamut.png
-2023/08/25 | 196028 | systems/texlive/tlnet/archive/lualinalg.doc.r68049.tar.xz
-2023/08/25 | 19382 | macros/luatex/latex/novel/doc/html-resources/closecrop.png
-2023/08/25 | 19235 | macros/luatex/latex/novel/doc/html-resources/unsafe-vs-margin.png
-2023/08/25 | 1908 | macros/luatex/latex/novel/doc/extras/novel-testimage.png
-2023/08/25 | 19012 | macros/luatex/latex/novel/doc/html-resources/whichgutter.png
-2023/08/25 | 1894 | macros/luatex/latex/novel/doc/html-resources/shakepi.png
-2023/08/25 | 18804 | macros/luatex/latex/novel/doc/html-resources/monitorgamut.png
-2023/08/25 | 18412 | macros/luatex/latex/novel/doc/html-resources/simpletoc.png
-2023/08/25 | 18252 | macros/luatex/latex/novel/doc/html-resources/dropcap.png
-2023/08/25 | 18082 | macros/luatex/latex/novel/lualatex/novel-HeadFootStyles.sty
-2023/08/25 | 17690 | macros/luatex/latex/novel/doc/html-resources/firstlinespecial.png
-2023/08/25 | 17688 | macros/luatex/latex/novel/doc/html-resources/firstletterspecial.png
-2023/08/25 | 17236 | macros/luatex/latex/novel/lualatex/novel-LayoutSettings.sty
-2023/08/25 | 17173 | macros/luatex/latex/novel/doc/html-resources/lowdown.png
-2023/08/25 | 17156 | macros/luatex/latex/novel/lualatex/novel-Fonts.sty
-2023/08/25 | 16911 | macros/luatex/latex/novel/lualatex/novel-pdfx.sty
-2023/08/25 | 164073 | macros/luatex/generic/evangelion-jfm/Eva-JFM_doc-en.pdf
-2023/08/25 | 16097 | macros/luatex/latex/novel/doc/html-resources/human-robot-talk.png
-2023/08/25 | 15781 | macros/luatex/latex/novel/lualatex/novel-Footnotes.sty
-2023/08/25 | 15625 | macros/luatex/latex/novel/doc/html-resources/head-foot-jumps.png
-2023/08/25 | 15612 | macros/luatex/latex/novel/doc/extras/novel-testsuite.tex
-2023/08/25 | 15444 | systems/texlive/tlnet/archive/witharrows.r68047.tar.xz
-2023/08/25 | 15268 | macros/luatex/latex/novel/doc/html-resources/font-tree.png
-2023/08/25 | 15026 | macros/luatex/latex/novel/doc/html-resources/overflowrule.png
-2023/08/25 | 14973 | macros/luatex/latex/novel/doc/html-resources/headfoot5.png
-2023/08/25 | 14605 | macros/luatex/latex/novel/doc/html-resources/headfoot4.png
-2023/08/25 | 14569 | macros/luatex/latex/novel/doc/html-resources/headfoot1.png
-2023/08/25 | 14429 | macros/luatex/latex/novel/doc/html-resources/headfoot6.png
-2023/08/25 | 14287 | macros/luatex/latex/novel/doc/html-resources/colormax-softproof.png
-2023/08/25 | 14281 | macros/luatex/latex/novel/lualatex/novel-ChapterScene.sty
-2023/08/25 | 142528 | macros/luatex/latex/novel/doc/html-resources/authorsnote.png
-2023/08/25 | 14028 | macros/luatex/latex/novel/doc/html-resources/headfoot3.png
-2023/08/25 | 14028 | macros/luatex/latex/novel/doc/html-resources/headfoot2.png
-2023/08/25 | 13553 | macros/luatex/latex/novel/doc/html-resources/toc.png
-2023/08/25 | 13322 | macros/luatex/latex/novel/doc/html-resources/smfingerprint8.png
-2023/08/25 | 132008 | macros/luatex/latex/novel/opentype/NovelDeco.otf
-2023/08/25 | 13085 | macros/luatex/latex/novel/lualatex/novel-CalculateLayout.sty
-2023/08/25 | 1290228 | systems/texlive/tlnet/archive/siunitx.doc.r68048.tar.xz
-2023/08/25 | 12898 | macros/luatex/latex/novel/doc/html-resources/page-leaf.png
-2023/08/25 | 1288 | macros/luatex/latex/novel/doc/html-resources/info18.png
-2023/08/25 | 12760 | systems/texlive/tlnet/archive/commutative-diagrams.r68044.tar.xz
-2023/08/25 | 12701 | macros/luatex/latex/novel/doc/html-resources/colormax-original.png
-2023/08/25 | 12250 | macros/luatex/latex/novel/doc/html-resources/topmargins.png
-2023/08/25 | 122228 | systems/texlive/tlnet/archive/siunitx.source.r68048.tar.xz
-2023/08/25 | 12057 | macros/luatex/latex/novel/doc/html-resources/jackbequick.png
-2023/08/25 | 11807802 | support/bib2gls.zip
-2023/08/25 | 112352 | systems/texlive/tlnet/archive/luamaths.doc.r68050.tar.xz
-2023/08/25 | 11185 | macros/luatex/latex/novel/doc/html-resources/alphabetagamma.png
-2023/08/25 | 10831 | macros/luatex/latex/novel/doc/html-resources/charscaletext.png
-2023/08/25 | 10690 | macros/luatex/latex/novel/doc/html-resources/win10libser.png
-2023/08/25 | 1063 | macros/luatex/generic/evangelion-jfm/LICENSE
-2023/08/25 | 10535 | macros/luatex/generic/evangelion-jfm/figure/fig-tc.pdf
-2023/08/25 | 10407 | macros/luatex/latex/novel/doc/html-resources/perfectbinding.png
-2023/08/25 | 10304 | systems/texlive/tlnet/archive/dviasm.r68043.tar.xz
-2023/08/25 | 1027 | macros/latex/contrib/exesheet/README.md
-2023/08/25 | 10279 | macros/latex/contrib/teubner/teubner.txt
-2023/08/25 | 10077 | macros/luatex/generic/evangelion-jfm/figure/fig-jp.pdf
diff --git a/biblio/ctan-bibdata/ctan.bib b/biblio/ctan-bibdata/ctan.bib
index 695471d76f..c678868d20 100644
--- a/biblio/ctan-bibdata/ctan.bib
+++ b/biblio/ctan-bibdata/ctan.bib
@@ -1,7 +1,7 @@
%% bib file of all CTAN packages
%% (C) Herbert Voß
%%
-%% created at 01-09-2023, 02:00:13
+%% created at 02-09-2023, 02:01:20
%%
%% This file is provided under the terms of the LPPL v1.3 or
@@ -31677,10 +31677,10 @@
@manual{ctan-highlightx,
title = {The \texttt{highlightx} package},
- subtitle = {Highlight formulas or paragraphs, with handwriting effect},
+ subtitle = {Highlight formulas or paragraphs},
author = {Cédric Pierquet},
- date = {2023-08-31},
- version = {0.1.0},
+ date = {2023-09-01},
+ version = {0.1.1},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/latex/contrib/highlightx},
url = {https://ctan.org/pkg/highlightx},
@@ -31906,9 +31906,9 @@
title = {The \texttt{hobby} package},
subtitle = {An implementation of Hobby’s algorithm for PGF/TikZ},
author = {Andrew Stacey},
- date = {2023-08-31},
- version = {1.10},
- license = {lppl1.3},
+ date = {2023-09-01},
+ version = {1.12},
+ license = {lppl1.3c},
mirror = {https://mirror.ctan.org/graphics/pgf/contrib/hobby},
url = {https://ctan.org/pkg/hobby},
}
@@ -34771,6 +34771,17 @@
url = {https://ctan.org/pkg/iwona},
}
+@manual{ctan-iwonamath,
+ title = {The \texttt{iwonamath} package},
+ subtitle = {\LaTeX{} support for scaled Iwona math fonts},
+ author = {Boris Veytsman},
+ date = {2023-09-01},
+ version = {1.0},
+ license = {lppl1.3c},
+ mirror = {https://mirror.ctan.org/macros/latex/contrib/iwonamath},
+ url = {https://ctan.org/pkg/iwonamath},
+}
+
@manual{ctan-izhitsa,
title = {The \texttt{izhitsa} package},
subtitle = {Support for the old Russian font "Izhitsa"},
@@ -35641,7 +35652,7 @@
title = {The \texttt{jwjournal} package},
subtitle = {A personal class for writing journals},
author = {Jinwen XU},
- date = {2023-08-31},
+ date = {2023-09-01},
version = {},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/latex/contrib/jwjournal},
@@ -51194,9 +51205,9 @@
@manual{ctan-parsianfonts,
title = {The \texttt{parsianfonts} package},
- subtitle = {Some of the most used fonts among Persian language users},
+ subtitle = {High Quality Persian Fonts},
author = {Sajad Kazemi},
- date = {2023-08-30},
+ date = {2023-09-01},
version = {1.0.3},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/fonts/parsianfonts},
@@ -62794,8 +62805,8 @@
title = {The \texttt{siunitx} package},
subtitle = {A comprehensive (SI) units package},
author = {Joseph Wright},
- date = {2023-08-31},
- version = {3.3.5},
+ date = {2023-09-01},
+ version = {3.3.6},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/latex/contrib/siunitx},
url = {https://ctan.org/pkg/siunitx},
@@ -72733,8 +72744,8 @@
title = {The \texttt{udes-genie-these} package},
subtitle = {A thesis class file for the Faculté de génie at the Université de Sherbrooke},
author = {Charles-Antoine Brunet},
- date = {2022-11-17},
- version = {3.0.1},
+ date = {2023-09-01},
+ version = {3.1.0},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/latex/contrib/udes-genie-these},
url = {https://ctan.org/pkg/udes-genie-these},
@@ -76316,8 +76327,8 @@
title = {The \texttt{wrapfig2} package},
subtitle = {Wrap text around figures},
author = {Claudio Beccari},
- date = {2023-02-23},
- version = {6.1.1},
+ date = {2023-09-01},
+ version = {6.2.0},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/latex/contrib/wrapfig2},
url = {https://ctan.org/pkg/wrapfig2},
diff --git a/biblio/ctan-bibdata/ctan.pdf b/biblio/ctan-bibdata/ctan.pdf
index 92304eda2d..b2d6df51a1 100644
--- a/biblio/ctan-bibdata/ctan.pdf
+++ b/biblio/ctan-bibdata/ctan.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/hobby/hobby.pdf b/graphics/pgf/contrib/hobby/hobby.pdf
index 7b6065ea02..e2ed1ad05b 100644
--- a/graphics/pgf/contrib/hobby/hobby.pdf
+++ b/graphics/pgf/contrib/hobby/hobby.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/hobby/hobby_code.dtx b/graphics/pgf/contrib/hobby/hobby_code.dtx
index 03eb60574c..1d616477f2 100644
--- a/graphics/pgf/contrib/hobby/hobby_code.dtx
+++ b/graphics/pgf/contrib/hobby/hobby_code.dtx
@@ -56,8 +56,8 @@ version 2005/12/01 or later.
This work is "maintained" (as per LPPL maintenance status) by
Andrew Stacey.
-This work consists of the files hobby.dtx
- hobby_doc.tex
+This work consists of the files hobby_code.dtx
+ hobby.tex
and the derived files hobby.code.tex
pgflibraryhobby.code.tex
tikzlibraryhobby.code.tex
@@ -70,11 +70,11 @@ and the derived files hobby.code.tex
\endpostamble
\usedir{tex/latex/hobby}
-\generate{\file{tikzlibraryhobby.code.tex} {\from{hobby.dtx}{tikzlibrary}}}
-\generate{\file{pgflibraryhobby.code.tex} {\from{hobby.dtx}{pgflibrary}}}
-\generate{\file{hobby.code.tex} {\from{hobby.dtx}{hobby}}}
-\generate{\file{pml3array.sty} {\from{hobby.dtx}{array}}}
-\generate{\file{hobby-l3draw.sty} {\from{hobby.dtx}{l3hobby}}}
+\generate{\file{tikzlibraryhobby.code.tex} {\from{hobby_code.dtx}{tikzlibrary}}}
+\generate{\file{pgflibraryhobby.code.tex} {\from{hobby_code.dtx}{pgflibrary}}}
+\generate{\file{hobby.code.tex} {\from{hobby_code.dtx}{hobby}}}
+\generate{\file{pml3array.sty} {\from{hobby_code.dtx}{array}}}
+\generate{\file{hobby-l3draw.sty} {\from{hobby_code.dtx}{l3hobby}}}
%</install>
%<install>\endbatchfile
%<*internal>
@@ -181,8 +181,8 @@ and the derived files hobby.code.tex
\tl_new:N \g__hobby_version
\tl_new:N \g__hobby_date
-\tl_gset:Nn \g__hobby_version {1.10}
-\tl_gset:Nn \g__hobby_date {2023-08-30}
+\tl_gset:Nn \g__hobby_version {1.12}
+\tl_gset:Nn \g__hobby_date {2023-09-01}
\DeclareDocumentCommand \hobbyVersion {}
{
\tl_use:N \g__hobby_version
diff --git a/graphics/pgf/contrib/hobby/hobby_code.pdf b/graphics/pgf/contrib/hobby/hobby_code.pdf
index f58e42fcfc..7bb9bca6f4 100644
--- a/graphics/pgf/contrib/hobby/hobby_code.pdf
+++ b/graphics/pgf/contrib/hobby/hobby_code.pdf
Binary files differ
diff --git a/macros/context/contrib/context-handlecsv/VERSION b/macros/context/contrib/context-handlecsv/VERSION
index a81cff9619..4487f90172 100644
--- a/macros/context/contrib/context-handlecsv/VERSION
+++ b/macros/context/contrib/context-handlecsv/VERSION
@@ -1 +1 @@
-2023-08-31
+2023-09-01
diff --git a/macros/context/contrib/context-handlecsv/context-presvoz-master-5196bdec981cf48b83896ec7b7009fda20d9106f/doc/context/third/presvoz/gvoz.pdf b/macros/context/contrib/context-handlecsv/context-presvoz-master-5196bdec981cf48b83896ec7b7009fda20d9106f/doc/context/third/presvoz/gvoz.pdf
deleted file mode 100644
index 06c4f78b97..0000000000
--- a/macros/context/contrib/context-handlecsv/context-presvoz-master-5196bdec981cf48b83896ec7b7009fda20d9106f/doc/context/third/presvoz/gvoz.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-handlecsv/context-presvoz-master-5196bdec981cf48b83896ec7b7009fda20d9106f/doc/context/third/presvoz/presvoz.pdf b/macros/context/contrib/context-handlecsv/context-presvoz-master-5196bdec981cf48b83896ec7b7009fda20d9106f/doc/context/third/presvoz/presvoz.pdf
deleted file mode 100644
index 1e09286df2..0000000000
--- a/macros/context/contrib/context-handlecsv/context-presvoz-master-5196bdec981cf48b83896ec7b7009fda20d9106f/doc/context/third/presvoz/presvoz.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-handlecsv/context-presvoz-master-5196bdec981cf48b83896ec7b7009fda20d9106f/fonts/opentype/presvoz/Flechitas.otf b/macros/context/contrib/context-handlecsv/context-presvoz-master-5196bdec981cf48b83896ec7b7009fda20d9106f/fonts/opentype/presvoz/Flechitas.otf
deleted file mode 100644
index 0107c921d2..0000000000
--- a/macros/context/contrib/context-handlecsv/context-presvoz-master-5196bdec981cf48b83896ec7b7009fda20d9106f/fonts/opentype/presvoz/Flechitas.otf
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-handlecsv/context-presvoz-master-5196bdec981cf48b83896ec7b7009fda20d9106f/fonts/opentype/presvoz/iRaccoonShowBold.otf b/macros/context/contrib/context-handlecsv/context-presvoz-master-5196bdec981cf48b83896ec7b7009fda20d9106f/fonts/opentype/presvoz/iRaccoonShowBold.otf
deleted file mode 100644
index 487baf938b..0000000000
--- a/macros/context/contrib/context-handlecsv/context-presvoz-master-5196bdec981cf48b83896ec7b7009fda20d9106f/fonts/opentype/presvoz/iRaccoonShowBold.otf
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-handlecsv/context-presvoz-master-5196bdec981cf48b83896ec7b7009fda20d9106f/tex/context/third/presvoz/gvoz.py b/macros/context/contrib/context-handlecsv/context-presvoz-master-5196bdec981cf48b83896ec7b7009fda20d9106f/tex/context/third/presvoz/gvoz.py
deleted file mode 100755
index b7efcb3d2e..0000000000
--- a/macros/context/contrib/context-handlecsv/context-presvoz-master-5196bdec981cf48b83896ec7b7009fda20d9106f/tex/context/third/presvoz/gvoz.py
+++ /dev/null
@@ -1,574 +0,0 @@
-#!/usr/bin/env python3
-# coding: utf-8
-#
-# Copyright 2021-2022 (C) Pablo Rodríguez
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-# MA 02110-1301, USA or see <http://www.gnu.org/licenses/gpl.html>.
-
-import os, sys, shutil
-import xml.etree.ElementTree as ET
-import cairo
-import gi
-gi.require_version("Gtk", "3.0")
-gi.require_version("Gst", "1.0")
-from gi.repository import Gtk, Gdk, GObject, GLib, Gst, GdkPixbuf
-gi.require_version('Poppler', '0.18')
-from gi.repository import Poppler
-
-Gst.init(sys.argv)
-
-class gvoz:
- def __init__(self):
-
- self.execname = os.path.splitext(os.path.basename(sys.argv[0]))[0]
- self.real_path = os.path.dirname(os.path.realpath(os.path.abspath(sys.argv[0])))
- self.program_version = "0.9.9.2"
-
- if(len(sys.argv) < 2):
- self.on_file_selection()
- print("")
- print(" " + self.execname + "-" + self.program_version
- + " (https://gvoz.presvoz.tk)")
- print(" Written by Pablo Rodríguez")
- print(" Usage: " + self.execname + " presentation.pdf")
- print("")
-
- if len(sys.argv) > 1:
- self.main_filename = sys.argv[1]
- elif self.dialog_filename != "":
- self.main_filename = self.dialog_filename
-
- self.filename = os.path.splitext(self.main_filename)[0]
-
- if os.path.splitext(self.main_filename)[1] != (".pdf" or ".PDF"):
- self.pdffilename = os.path.splitext(self.main_filename)[0] + ".pdf"
- if os.path.isfile(self.pdffilename) == False:
- self.pdffilename = os.path.splitext(self.main_filename)[0] + ".PDF"
- if os.path.isfile(self.pdffilename) == False:
- self.on_file_selection()
- elif os.path.isfile(self.pdffilename) == False:
- self.on_file_selection()
- else:
- self.pdffilename = self.main_filename
-
- self.define_soundtimesnames()
-
- self.uri = Gst.filename_to_uri(os.path.abspath(self.pdffilename))
-
- self.document = Poppler.Document.new_from_file(self.uri, None)
- self.n_pages = self.document.get_n_pages()
- self.page_selector = self.document.get_page(0)
- self.current_page = 0
-
- self.win = Gtk.Window()
- self.win.set_icon_from_file(self.real_path + '/gvoz.svg')
- self.doc_title = self.document.get_title() or "χαλεπὰ τὰ καλά"
- self.win.set_title (self.execname + " — " + str(self.current_page + 1) + "/" + str(self.n_pages) + " — " + self.doc_title)
-
- self.win.set_default_size(500, 500)
- self.win.set_position(Gtk.WindowPosition.CENTER_ALWAYS)
-
- self.box = Gtk.Box()
-
- self.area = Gtk.DrawingArea()
- self.area.connect("draw", self.on_draw)
-
- self.box.pack_start(self.area, True, True, 0)
-
- self.win.add(self.box)
- self.win.connect("destroy", Gtk.main_quit)
- self.win.show_all()
-
- self.win.connect('key-press-event', self.key_press_event)
-
- self.width, self.height = self.win.get_size()
- self.page_width, self.page_height= self.page_selector.get_size()
-
- self.surface = cairo.ImageSurface(cairo.FORMAT_RGB24,
- int(self.width),
- int(self.height))
-
- if sys.platform.startswith('win'):
- self.player = Gst.parse_launch("wasapisrc low-latency=true ! audio/x-raw,format=F32LE ! wavenc ! filesink location=\"" + self.audiofilename + "\"")
- else:
- self.player = Gst.parse_launch("autoaudiosrc ! audio/x-raw,format=F32LE,rate=48000,channels=1 ! wavenc ! filesink location=\"" + self.audiofilename + "\"")
-
- bus = self.player.get_bus()
- bus.add_signal_watch()
- bus.connect('message', self.on_message)
-
- xmp = self.document.get_metadata()
- if xmp != None and xmp != "":
- xmp_root = ET.fromstring(xmp)
- for language in xmp_root.findall(".//{http://purl.org/dc/elements/1.1/}language"):
- doc_lang = language.text
- else:
- print("The PDF document has no language information")
-
- title_separator = ". "
-
- self.sound_metadata = { "title" : "The Title" }
- self.sound_metadata["genre"] = "Other/Presentation"
- self.sound_metadata["application-name"] = "GVoz"
- self.sound_metadata["encoder"] = self.sound_metadata["application-name"]
- self.sound_metadata["encoder-version"] = self.program_version
- self.sound_metadata["datetime"] = Gst.DateTime.new_now_local_time()
- self.sound_metadata["date"] = GLib.Date.new_dmy(self.sound_metadata["datetime"].get_day(),
- self.sound_metadata["datetime"].get_month(), self.sound_metadata["datetime"].get_year())
-
- try:
- doc_lang
- except NameError:
- print("\n\"" + os.path.basename(self.pdffilename) +
- "\" contains no language information.")
- self.doc_lang = None
- else:
- if doc_lang != None and doc_lang != "":
- self.sound_metadata["language-code"] = doc_lang
- self.sound_metadata["language-name"] = GstTag.tag_get_language_name(language_code)
- if doc_lang.startswith('en'):
- title_separator = ": "
- else:
- title_separator = ". "
-
- if self.document.get_subject() != None and self.document.get_subject() != "":
- self.sound_metadata["comment"] = self.document.get_subject()
- elif self.document.get_title() != None and self.document.get_title() != "":
- self.sound_metadata["title"] = self.document.get_title()
- if self.document.get_keywords() != None and self.document.get_keywords() != "":
- self.sound_metadata["keywords"] = self.document.get_keywords()
- if self.document.get_author() != None and self.document.get_author() != "":
- self.sound_metadata["artist"] = self.document.get_author()
- self.sound_metadata["copyright"] = "© " + str(self.sound_metadata["datetime"].get_year()) + " " + self.document.get_author()
- else:
- self.sound_metadata["copyright"] = "© " + str(self.sound_metadata["datetime"].get_year())
-
- self.taglist = Gst.TagList.new_empty()
-
- self.mp3_converter = Gst.parse_launch("filesrc location=\"" + self.audiofilename + "\" ! decodebin ! audioconvert ! audioresample ! lamemp3enc mono=true cbr=true target=bitrate bitrate=32 ! id3v2mux ! filesink location=\"" + self.mp3_audio + "\"")
-
- mp3_bus = self.mp3_converter.get_bus()
- mp3_bus.add_signal_watch()
- mp3_bus.connect('message', self.on_mp3_message)
-
- self.mp3_metadata = True
-
- tagsetter = self.mp3_converter.get_by_interface(Gst.TagSetter)
- for tag_key, tag_value in self.sound_metadata.items():
- try:
- self.taglist.add_value(Gst.TagMergeMode.REPLACE, tag_key, tag_value)
- except ValueError:
- print("WARNING: skipping tag %s; value %s is not valid" % (tag_key, tag_value))
- if not self.taglist.is_empty() and self.mp3_metadata:
- tagsetter.merge_tags(self.taglist, Gst.TagMergeMode.REPLACE_ALL)
- print(type(self.mp3_metadata))
- print(self.taglist.to_string() + "\n")
- else:
- print("<<<< WARNING: Could not find element to set tags. >>>")
-
- # ~ self.opus_converter = Gst.parse_launch("filesrc location=\"" + self.audiofilename + "\" ! decodebin ! audioconvert ! audioresample ! opusenc audio-type=voice bitrate=16000 ! oggmux ! filesink location=\"" + self.opus_audio + "\"")
-
- # ~ opus_bus = self.opus_converter.get_bus()
- # ~ opus_bus.add_signal_watch()
- # ~ opus_bus.connect('message', self.on_opus_message)
-
- # ~ self.opus_metadata = True
-
- # ~ tagsetter = self.opus_converter.get_by_interface(Gst.TagSetter)
- # ~ if not self.taglist.is_empty() and self.opus_metadata:
- # ~ tagsetter.merge_tags(self.taglist, Gst.TagMergeMode.REPLACE_ALL)
- # ~ else:
- # ~ print("<<<< WARNING: Could not find element to set tags. >>>")
-
- self.use_presvoz = True
-
- def on_message(self, bus, message):
- t = message.type
- if t == Gst.MessageType.EOS:
- self.player.set_state(Gst.State.NULL)
- # ~ Gtk.main_quit()
- elif t == Gst.MessageType.ERROR:
- err, debug = message.parse_error()
- print ("Error: %s" % err, debug)
- self.player.set_state(Gst.State.NULL)
-
- def on_mp3_message(self, mp3_bus, message):
- t = message.type
- if t == Gst.MessageType.EOS:
- self.mp3_converter.set_state(Gst.State.NULL)
- self.generate_presentation()
- Gtk.main_quit()
- elif t == Gst.MessageType.ERROR:
- err, debug = message.parse_error()
- print ("Error: %s" % err, debug)
- self.mp3_converter.set_state(Gst.State.NULL)
-
- # ~ def on_opus_message(self, opus_bus, message):
- # ~ t = message.type
- # ~ if t == Gst.MessageType.EOS:
- # ~ self.opus_converter.set_state(Gst.State.NULL)
- # ~ Gtk.main_quit()
- # ~ elif t == Gst.MessageType.ERROR:
- # ~ err, debug = message.parse_error()
- # ~ print ("Error: %s" % err, debug)
- # ~ self.opus_converter.set_state(Gst.State.NULL)
-
- def generate_presentation (self):
- if shutil.which("context") != None and shutil.which("context") != "" and self.use_presvoz:
- os.system("context --purgeall --extra=third-presvoz " + self.pdffilename)
- if os.path.isfile(self.js_timesfilename):
- os.remove(self.js_timesfilename)
-
- def define_soundtimesnames (self):
- if sys.platform.startswith('win'):
- self.audiofilename = self.filename.replace("\\", "/") + "-audio.wav"
- self.mp3_audio = self.filename.replace("\\", "/") + "-audio.mp3"
- self.opus_audio = self.filename.replace("\\", "/") + "-audio.opus"
- else:
- self.audiofilename = self.filename + "-audio.wav"
- self.mp3_audio = self.filename + "-audio.mp3"
- self.opus_audio = self.filename + "-audio.opus"
-
- self.times = []
- self.timesfilename = self.filename + '-times.txt'
- self.js_timesfilename = self.filename + '-times.js'
-
- def on_metadata_info (self):
- if self.document.get_title() != None and self.document.get_title() != "":
- metadata_info = "\n<b>Title:</b> <i>" + self.document.get_title() + "</i>"
- if self.document.get_author() != None and self.document.get_author() != "":
- metadata_info += "\n\n<b>Author:</b> <i>" + self.document.get_author() + "</i>"
- if self.document.get_subject() != None and self.document.get_subject() != "":
- metadata_info += "\n\n<b>Comments:</b> <i>" + self.document.get_subject() + "</i>"
- if self.document.get_keywords() != None and self.document.get_keywords() != "":
- metadata_info += "\n\n<b>Keywords:</b> <i>" + self.document.get_keywords() + "</i>"
- if self.doc_lang != None and self.doc_lang != "":
- metadata_info += "\n\n<b>Language:</b> <i>" + self.sound_metadata['language-name'] + "</i>"
- else:
- metadata_info = "\nThe PDF document contains no metadata"
-
-
- self.sound_metadata["comment"] = self.document.get_subject()
- if self.document.get_author() != None and self.document.get_author() != "":
- self.sound_metadata["artist"] = self.document.get_author()
- self.sound_metadata["copyright"] = "© " + str(self.sound_metadata["datetime"].get_year()) + " " + self.document.get_author()
- else:
- self.sound_metadata["copyright"] = "© " + str(self.sound_metadata["datetime"].get_year())
-
- dialog = Gtk.MessageDialog(
- # ~ transient_for=self,
- flags=0,
- message_type=Gtk.MessageType.INFO,
- buttons=Gtk.ButtonsType.OK,
- text="Metadata from PDF Document",
- )
-
- dialog.format_secondary_text(metadata_info)
-
- dialog.props.secondary_use_markup = True
-
- dialog.run()
-
- dialog.destroy()
-
- def on_keys_info (self):
- keys_info = "\n<b>space</b>\t\tGo to next slide and write its time"
- keys_info += "\n\t\t\tThis starts and finishes sound recording"
- keys_info += "\n\t\t\tAfter that, <i>PresVoz</i> will generate the presentation"
- keys_info += "\n\n<b>a</b>\t\t\tAbout <i>GVoz</i>"
- keys_info += "\n\n<b>c</b>\t\t\tDon’t generate PDF and <i>Flash</i> presentations with <i>PresVoz</i>"
- keys_info += "\n\n<b>d</b>\t\t\tShow metadata imported from the PDF document"
- keys_info += "\n\n<b>h</b>\t\t\tShow key information"
- keys_info += "\n\n<b>m</b>\t\t\tEnable mouse–click to advance slides"
- keys_info += "\n\n<b>p</b>\t\t\tPause / unpause sound and times recording"
- keys_info += "\n\t\t\tWith paused recording, <i>GVoz</i> will exit full–screen"
- keys_info += "\n\t\t\tWith recording started again, <i>GVoz</i> will go full–screen"
- # ~ keys_info += "\n\n<b>x</b>\t\t\tRemove metadata in MP3 file\n\t\t\tTitle and author are read from the PDF document\n\t\t\tDates and times are set from the recording"
- keys_info += "\n\n<b>q</b>\t\t\tQuit <i>GVoz</i> (presentation won’t be generated)"
-
- dialog = Gtk.MessageDialog(
- # ~ transient_for=self,
- flags=0,
- message_type=Gtk.MessageType.INFO,
- buttons=Gtk.ButtonsType.OK,
- text="Keyboard Info",
- )
- dialog.format_secondary_text(
- keys_info
- )
-
- dialog.props.secondary_use_markup = True
-
- dialog.run()
-
- dialog.destroy()
-
- def on_presvoz_info (self):
- presvoz_info = "\nPresentation won’t be generated after sound and times recording."
- presvoz_info += "\n\nIf you want to generate it, just use <i>Presvoz</i> after <i>GVoz</i> finishes."
-
- dialog = Gtk.MessageDialog(
- # ~ transient_for=self,
- flags=0,
- message_type=Gtk.MessageType.INFO,
- buttons=Gtk.ButtonsType.OK,
- text="Presentation Disabled",
- )
- dialog.format_secondary_text(
- presvoz_info
- )
-
- dialog.props.secondary_use_markup = True
-
- dialog.run()
-
- dialog.destroy()
-
- def on_mouse_info (self):
- mouse_info = "\nMouse has been activated to advance slides."
- mouse_info += "\n\nMouse–clicks have been enabled to advance slides."
- mouse_info += "\n\nThere is no way to disable the mouse again."
-
- dialog = Gtk.MessageDialog(
- # ~ transient_for=self,
- flags=0,
- message_type=Gtk.MessageType.INFO,
- buttons=Gtk.ButtonsType.OK,
- text="Mouse Enabled",
- )
- dialog.format_secondary_text(mouse_info)
-
- dialog.props.secondary_use_markup = True
-
- dialog.run()
-
- dialog.destroy()
-
- def on_presvoz_presentation (self):
- presvoz_presentation = "\nThe selected PDF document is already a presentation with voice."
- presvoz_presentation += "\n\nPlease, select other PDF document not already generated by <i>PresVoz</i>."
-
- dialog = Gtk.MessageDialog(
- # ~ transient_for=self,
- flags=0,
- message_type=Gtk.MessageType.INFO,
- buttons=Gtk.ButtonsType.OK,
- text="<big><b><i>PresVoz</i> Presentation Detected</b></big>",
- )
-
- dialog.format_secondary_text(presvoz_presentation)
-
- dialog.props.use_markup = True
- dialog.props.secondary_use_markup = True
-
- response = dialog.run()
- if response == Gtk.ResponseType.OK:
- self.on_file_selection()
-
- dialog.run()
-
- dialog.destroy()
-
- def on_existing_files (self):
- already_recorded_files = "\nVoice and times have already been recorded in a previous session."
- already_recorded_files += "\n\nIf you proceed, <tt>" + os.path.basename(self.audiofilename) + "</tt> and <tt>" + os.path.basename(self.timesfilename) + "</tt> will be lost forever."
- already_recorded_files += "\n\nIf you cancel, you will quit <i>GVoz</i>."
- already_recorded_files += "\n\nIf you want to keep <tt>" + os.path.basename(self.audiofilename) + "</tt> and <tt>" + os.path.basename(self.timesfilename) + "</tt>, please quit and rename them or move them to another directory."
- already_recorded_files += "\n\nDo you really want to proceed?\n"
-
- dialog = Gtk.MessageDialog(
- # ~ transient_for=self,
- flags=0,
- message_type=Gtk.MessageType.WARNING,
- buttons=Gtk.ButtonsType.YES_NO,
- text="Existing Sound and Times",
- )
-
- dialog.format_secondary_text(already_recorded_files)
-
- dialog.set_default_response(Gtk.ResponseType.NO)
-
- dialog.props.secondary_use_markup = True
-
- response = dialog.run()
- if response == Gtk.ResponseType.YES:
- if os.path.isfile(self.audiofilename):
- os.remove(self.audiofilename)
- if os.path.isfile(self.timesfilename):
- os.remove(self.timesfilename)
- if os.path.isfile(self.mp3_audio):
- os.remove(self.mp3_audio)
- if os.path.isfile(self.opus_audio):
- os.remove(self.opus_audio)
- elif response == Gtk.ResponseType.NO:
- Gtk.main_quit()
-
- dialog.destroy()
-
- def button_press_event(self, widget, event):
- if event.button == 1:
- self.record_and_advance()
-
- def key_press_event(self, widget, event):
- if event.keyval != Gdk.keyval_from_name("a"):
- if event.keyval != Gdk.keyval_from_name("h"):
- if event.keyval != Gdk.keyval_from_name("q"):
- if event.keyval != Gdk.keyval_from_name("x"):
- if event.keyval != Gdk.keyval_from_name("c"):
- if event.keyval != Gdk.keyval_from_name("m"):
- if event.keyval != Gdk.keyval_from_name("d"):
- if self.player.get_state(0)[1] == Gst.State.NULL and self.current_page + 1 <= self.n_pages:
- if os.path.exists(self.audiofilename) or os.path.exists(self.timesfilename):
- self.on_existing_files()
- elif self.document.get_subject() != None:
- if self.document.get_subject().endswith('🤞🐞 – https://www.presvoz.tk'):
- self.on_presvoz_presentation()
- if event.keyval == Gdk.keyval_from_name("h"):
- self.on_keys_info()
- if event.keyval == Gdk.keyval_from_name("a"):
- self.about_info()
- if event.keyval == Gdk.keyval_from_name("q"):
- if self.player.get_state(0)[1] == Gst.State.PLAYING or self.player.get_state(0)[1] == Gst.State.PAUSED:
- self.player.set_state(Gst.State.NULL)
- self.file_times.close()
- if os.path.isfile(self.audiofilename):
- self.mp3_converter.set_state(Gst.State.PLAYING)
- self.win.set_title (self.execname + " — Converting sound to MP3 format…")
- Gtk.main_quit()
- if event.keyval == Gdk.keyval_from_name("x"):
- self.mp3_metadata = False
- self.opus_metadata = False
- if event.keyval == Gdk.keyval_from_name("c"):
- self.use_presvoz = False
- self.on_presvoz_info()
- if event.keyval == Gdk.keyval_from_name("d"):
- self.on_metadata_info()
- if event.keyval == Gdk.keyval_from_name("m"):
- self.win.connect('button-press-event', self.button_press_event)
- self.on_mouse_info()
- if event.keyval == Gdk.keyval_from_name("p"):
- if self.player.get_state(0)[1] == Gst.State.PLAYING:
- self.win.unfullscreen()
- self.win.set_title (self.execname + " — " + str(self.current_page + 1) + "/" + str(self.n_pages) + " — " + self.doc_title)
- self.player.set_state(Gst.State.PAUSED)
- elif self.player.get_state(0)[1] == Gst.State.PAUSED:
- self.win.fullscreen()
- self.player.set_state(Gst.State.PLAYING)
- if event.keyval == Gdk.keyval_from_name("space"):
- self.record_and_advance()
-
- def record_and_advance(self):
- if self.player.get_state(0)[1] == Gst.State.NULL and self.current_page + 1 <= self.n_pages:
- self.win.fullscreen()
- self.player.set_state(Gst.State.PLAYING)
- self.file_times = open(self.timesfilename, 'w')
- elif self.player.get_state(0)[1] == Gst.State.PLAYING:
- if self.current_page + 1 < self.n_pages:
- self.current_page += 1
- self.page_selector = self.document.get_page(self.current_page)
- self.area.set_size_request(int(self.width),int(self.height))
- self.area.queue_draw()
- self.file_times.write(str(int(self.player.get_pipeline_clock().get_time()/1000000)) + "\n")
- elif self.current_page + 1 == self.n_pages:
- self.win.unfullscreen()
- self.win.set_title (self.execname + " — " + str(self.current_page + 1) + "/" + str(self.n_pages) + " — " + self.doc_title)
- self.player.send_event(Gst.Event.new_eos())
- self.file_times.write(str(int(self.player.get_pipeline_clock().get_time()/1000000)))
- self.file_times.close()
- self.current_page += 1
- self.mp3_converter.set_state(Gst.State.PLAYING)
- self.win.set_title (self.execname + " — Converting sound to MP3 format…")
- if shutil.which("context") != None and shutil.which("context") != "" and self.use_presvoz:
- self.win.set_title (self.execname + " — Generating presentation…")
- # ~ self.opus_converter.set_state(Gst.State.PLAYING)
- # ~ self.win.set_title (self.execname + " — Converting sound to Opus format…")
-
- def on_file_selection(self):
- dialog = Gtk.FileChooserDialog(
- title="Please choose a PDF document", action=Gtk.FileChooserAction.OPEN
- )
- dialog.add_buttons(
- Gtk.STOCK_CANCEL,
- Gtk.ResponseType.CANCEL,
- Gtk.STOCK_OPEN,
- Gtk.ResponseType.OK,
- )
-
- self.add_filters(dialog)
-
- response = dialog.run()
- if response == Gtk.ResponseType.OK:
- self.dialog_filename = dialog.get_filename()
- self.pdffilename = self.dialog_filename
- self.filename = os.path.splitext(self.dialog_filename)[0]
- self.define_soundtimesnames()
-
- dialog.destroy()
-
- def add_filters(self, dialog):
- filter_pdf = Gtk.FileFilter()
- filter_pdf.set_name("PDF documents")
- filter_pdf.add_mime_type("application/pdf")
- dialog.add_filter(filter_pdf)
-
- def on_draw(self, widget, cairo_context):
- add_x = 0
- add_y = 0
-
- if (self.area.get_allocated_width()/self.page_width) < (self.area.get_allocated_height()/self.page_height):
- self.scale = self.area.get_allocated_width()/self.page_width
- add_y = (((self.area.get_allocated_height()-(self.page_height*self.scale))/2)/self.scale)
- else:
- self.scale = self.area.get_allocated_height()/self.page_height
- add_x = (((self.area.get_allocated_width()-(self.page_width*self.scale))/2)/self.scale)
-
- # ~ cr = Gdk.cairo_create(self.win.get_window()) # deprecated
- # ~ cairo_context = cairo.Context(self.surface) # new, seems not required
-
- cairo_context.set_source_surface(self.surface)
- cairo_context.set_source_rgba(1, 1, 1)
-
- if self.scale != 1:
- cairo_context.scale(self.scale, self.scale)
-
- cairo_context.translate(add_x, add_y)
- cairo_context.rectangle(0, 0, self.page_width, self.page_height)
- cairo_context.fill()
- self.page_selector.render(cairo_context)
-
- def about_info (self):
- dialog = Gtk.AboutDialog()
- dialog.set_program_name("GVoz")
- dialog.set_version(self.program_version)
- dialog.set_comments("Record and create presentations with voice")
- dialog.set_website("https://gvoz.presvoz.tk")
- dialog.set_website_label("https://gvoz.presvoz.tk")
- dialog.set_authors(["Pablo Rodríguez"])
- dialog.set_copyright("© 2021-2022 Pablo Rodríguez")
- dialog.set_license_type(Gtk.License.GPL_2_0)
- dialog.set_wrap_license = True
- dialog.set_logo(GdkPixbuf.Pixbuf.new_from_file(self.real_path + "/gvoz.svg"))
- dialog.connect('response', lambda dialog, data: dialog.destroy())
- dialog.show_all()
-
- def gtk_main_quit(self, widget, event):
- Gtk.main_quit()
-
- def main(self):
- Gtk.main()
-
-gv = gvoz()
-gv.main()
diff --git a/macros/context/contrib/context-handlecsv/context-presvoz-master-5196bdec981cf48b83896ec7b7009fda20d9106f/tex/context/third/presvoz/mtx-context-third-presvoz.tex b/macros/context/contrib/context-handlecsv/context-presvoz-master-5196bdec981cf48b83896ec7b7009fda20d9106f/tex/context/third/presvoz/mtx-context-third-presvoz.tex
deleted file mode 100644
index 2e9fc84a53..0000000000
--- a/macros/context/contrib/context-handlecsv/context-presvoz-master-5196bdec981cf48b83896ec7b7009fda20d9106f/tex/context/third/presvoz/mtx-context-third-presvoz.tex
+++ /dev/null
@@ -1,798 +0,0 @@
-%D \module
-%D [ file=mtx-context-third-presvoz,
-%D version=2022.02.02,
-%D title=PresVoz,
-%D subtitle=Presentations with Voice,
-%D author=Pablo Rodríguez,
-%D date=\currentdate,
-%D copyright={Michal Vlásak \&\ Pablo Rodríguez}]
-%C
-%C This module is part of the \CONTEXT\ macro||package and is
-%C copyrighted by its authors.
-
-\starttext
-\startlmtxmode
-\def\Presentation{\getdocumentfilename{1}}
-
-\startluacode
-if file.extname(document.files[1]) == "" then
- document.main_file = file.addsuffix(document.files[1],"pdf")
-else
- document.main_file = document.files[1]
-end
-
-if file.pathpart(document.main_file) == "" then
- document.main_filename = file.nameonly(document.main_file)
-else
- document.main_filename = file.pathpart(document.main_file):gsub(io.fileseparator, "/") .. "/" .. file.nameonly(document.main_file)
-end
-
-document.original_times = document.main_filename .. "-times.txt"
-
-document.uncompressed_audio = document.main_filename .. "-audio.wav"
-
-document.audio_mp3 = document.main_filename .. "-audio.mp3"
-
-document.audio_opus = document.main_filename .. "-audio.opus" -- opus might work later
-
-document.compressed_audio = document.audio_mp3
-
---twolame is not an option: gives wrong sizes
-
-if io.exists(document.uncompressed_audio) and not(io.exists(document.audio_mp3)) and os.which('lame') then
- os.execute('lame -m m -b 32 "' .. document.uncompressed_audio .. '" "' .. document.audio_mp3 .. '"')
-elseif io.exists(document.uncompressed_audio) and not(io.exists(document.compressed_audio)) then
- if os.which('opusenc') then os.execute('opusenc --downmix-mono --bitrate 16 "' .. document.uncompressed_audio .. '" "' .. document.audio_opus .. '"') end
-end
-
-presvoz_name = document.main_filename .. "-presvoz.pdf"
-
-if not(io.exists(document.original_times)) or not(io.exists(document.compressed_audio)) then
- context.enablemode({"missing-files"})
-end
-\stopluacode
-
-\startmode[missing-files]
-\setupinteractionscreen[option=max]
-\setupbodyfont[pagella]
-\startTEXpage[offset=2em, align=center]
- \bf\color[darkred]{{\bi PresVoz} requires\\
- {\tt\cldcontext{document.original_times}} and {\tt\cldcontext{document.uncompressed_audio}}\\
- to do its magic with {\tt\cldcontext{document.main_file}}.}
-\stopTEXpage
-\stopmode
-
-\startnotmode[missing-files]
-\startluacode
-document.timeline_filename = document.main_filename .. "-times.js"
-
-document.slides_swf = document.main_filename .. ".swf"
-
-document.presentation_script = document.main_filename .. "-presentation.sc"
-
-document.presentation_swf = document.main_filename .. "-presentation.swf"
-
-document.presentation_filename = file.nameonly(document.main_file) .. "-presentation.swf"
-
-document.first_slide_swf = document.main_filename .. "-first.swf"
-
-document.loader_script = document.main_filename .. "-loader.sc"
-
-document.loader_swf = document.main_filename .. "-loader.swf"
-
-function document.transfer_metadata(name)
- local main_doc = lpdf.epdf.load(name)
- lpdf.addtocatalog("Lang", lpdf.unicode(main_doc.Catalog.Lang), lpdf.string(main_doc.Catalog.Lang))
- if main_doc.Catalog.Lang == "en" then
- document.separate_subtitle = ": "
- else
- document.separate_subtitle = ". "
- end
- if main_doc.Info.Subject ~= nil and main_doc.Info.Subject ~= "" then
- context.setupinteraction{ title = main_doc.Info.Title .. document.separate_subtitle .. main_doc.Info.Subject }
- else
- context.setupinteraction{ title = main_doc.Info.Title }
- end
- if main_doc.Catalog.Lang == "es" then
- document.presvoz_banner = "Hecho con «PresVoz»  🤞🐞"
- elseif main_doc.Catalog.Lang == "pt" then
- document.presvoz_banner = "Feito con «PresVoz»  🤞🐞"
- elseif main_doc.Catalog.Lang == "it" then
- document.presvoz_banner = "Fatto con «PresVoz»  🤞🐞"
- elseif main_doc.Catalog.Lang == "fr" then
- document.presvoz_banner = "Fait avec « PresVoz »  🤞🐞"
- elseif main_doc.Catalog.Lang == "de" then
- document.presvoz_banner = "Erezeugt mit »PresVoz«  🤞🐞"
- elseif main_doc.Catalog.Lang == "nl" then
- document.presvoz_banner = "Gedaan med „PresVoz”  🤞🐞"
- elseif main_doc.Catalog.Lang == "nl" then
- document.presvoz_banner = "Gedaan med „PresVoz”  🤞🐞"
- else
- document.presvoz_banner = "Done with “PresVoz”  🤞🐞"
- end
- context.setupinteraction{ subtitle = document.presvoz_banner .. " – https://www.presvoz.tk" }
- if main_doc.Info.Author ~= nil and main_doc.Info.Author ~= "" then
- context.setupinteraction{ author = main_doc.Info.Author }
- end
- if main_doc.Info.ModDate ~=nil and main_doc.Info.ModDate ~= "" then
- original_Doc_date = main_doc.Info.ModDate:sub(3,6) .. "-" ..
- main_doc.Info.ModDate:sub(7,8) .. "-" ..
- main_doc.Info.ModDate:sub(9,10) .. "T" ..
- main_doc.Info.ModDate:sub(11,12) .. ":" ..
- main_doc.Info.ModDate:sub(13,14) .. ":" ..
- main_doc.Info.ModDate:sub(15,22):gsub("'", ":")
- directives.enable('backend.date=' .. original_Doc_date .. "'")
- end
- lpdf.epdf.unload(name)
-end
-
-document.transfer_metadata(document.main_file)
-\stopluacode
-
-\startbuffer[flash-presentation]
- \startluacode
- local raw_times = io.open(document.original_times)
- local swf_times = io.open(document.presentation_script, "w")
-
- swf_times:write([[# Presentation script, generated by PresVoz
- #
- # Copyright (C) 2003 Leonard Lin
- # Copyright (C) 2007-2008 Sergio Costas
- # Copyright (C) 2009-2021 Pablo Rodríguez
- #
- # This program is free software; you can redistribute it and/or
- # modify it under the terms of the GNU General Public License
- # as published by the Free Software Foundation; either version 3
- # of the License, or (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- # General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program; if not, see <http://www.gnu.org/licenses>.
- #
- # Additional permission under GNU GPL version 3 section 7
- #
- # As a special exception, if you create a document which uses this
- # script, and compile this script or a modified version of it in the
- # document, this script does not by itself cause the resulting document
- # to be covered by the GNU General Public License. This exception does
- # not however invalidate any other reasons why the document might be
- # covered by the GNU General Public License.
-
- .flash filename="]] .. document.presentation_swf .. [[" version=8 fps=12
-
- .swf slides "]] .. document.slides_swf .. [["
- .sound audio "]] .. document.audio_mp3 .. [["
-
- .action:
- var times=new Array();
- var maxtimes;
- var position;
- var mode;
- var sound_position;
- var sound_length;
- var show_slide;
-
- var contextual = new ContextMenu();
- function ssurl(){
- getURL("https://www.presvoz.tk", "_blank");
- }
-
- switch (System.capabilities.language) {
- case "en" :
- ss_message = "Done with PresVoz  🤞🐞";
- break;
- case "es" :
- ss_message = "Hecho con PresVoz  🤞🐞";
- break;
- case "gl" :
- ss_message = "Feito con PresVoz  🤞🐞";
- break;
- case "pt" :
- ss_message = "Feito con PresVoz  🤞🐞";
- break;
- case "it" :
- ss_message = "Fatto con PresVoz  🤞🐞";
- break;
- case "fr" :
- ss_message = "Fait avec PresVoz  🤞🐞";
- break;
- case "de" :
- ss_message = "Erezeugt mit PresVoz  🤞🐞";
- break;
- case "nl" :
- ss_message = "Gedaan med PresVoz  🤞🐞";
- break;
- case "el" :
- ss_message = "Kατασκευασμένος με PresVoz  🤞🐞";
- break;
- default:
- ss_message = "Made with PresVoz  🤞🐞";
- break;
- }
-
- contextual.hideBuiltInItems();
- ss_url = new ContextMenuItem(ss_message, ssurl);
- contextual.customItems.push(ss_url);
- _root.menu = contextual;
-
- snd = new Sound(this);
- snd.attachSound("audio");
- sound_length=snd.duration;
- position = 0;
-
- show_slide = false;
- times[0] = 0;]] .. "\n")
-
- line_number = 0
- while true do
- line = raw_times:read()
- if line == nil then break end
- if line:match("%D") == nil then
- line_number = line_number + 1
- print ("times["..line_number.."] = " .. line .. ";")
- swf_times:write(" times["..line_number.."] = " .. line .. ";")
- swf_times:write("\n")
- end
- end
-
- swf_times:write("\n" .. [[
- maxtimes = times.length - 1;
-
- function pause_or_play() {
- if (mode==0) {
- snd.start(snd.position/1000.0,0);
- mode=1;
- } else if (mode==1) {
- snd.stop();
- mode=0;
- }
- }
-
- function previous_slide() {
- if (mode<2) {
- if (mode==0) { mode=1; }
- snd.stop();
- if (position>0) {
- sound_position=times[position-1];
- } else {
- sound_position=0;
- }
- snd.start(sound_position/1000.0,0);
- }
- }
-
- function next_slide() {
- if (mode<2) {
- if (mode==0) { mode=1; }
- snd.stop();
- sound_position = times[position+1];
- if (sound_position>sound_length) {
- sound_position=sound_length-500;
- }
- snd.start(sound_position/1000.0,0);
- }
- }
-
- function first_slide() {
- snd.stop();
- snd.start(0,0);
- slides.gotoAndStop(1);
- position=0;
- mode=1;
- show_slide=true;
- }
-
- function last_slide() {
- snd.stop();
- sound_position = times[maxtimes-1];
- slides.gotoAndStop(maxtimes);
- show_slide=false;
- snd.start(sound_position/1000.0,0);
- }
-
- function toogle_fullscreen() {
- if(Stage.displayState == "normal"){
- Stage.displayState="fullScreen";
- } else {
- Stage.displayState="normal";
- }
- }
-
- Mouse.onMouseDown = function() {
- if ((getTimer() - lastClick) < 400) {
- pause_or_play();
- } else {
- lastClick = getTimer();
- }
- };
-
-
- key_listen=new Object();
-
- key_listen.onKeyDown = function() {
- switch (Key.getCode()) {
- case 32:
- pause_or_play();
- break;
- case 37:
- previous_slide();
- break;
- case 38:
- first_slide();
- break;
- case 39:
- next_slide();
- break;
- case 40:
- last_slide();
- break;
- case 70:
- toogle_fullscreen();
- break;
- }
- };
-
- function check_time() {
- if (mode==1) {
- if ( sound_position + 50 > sound_length) {
- snd.stop();
- mode=2;
- if(Stage.displayState == "fullScreen"){
- Stage.displayState="normal";
- }
- } else {
- if ((snd.position>=times[position])&&(snd.position<times[position+1])) {
- if (show_slide) {
- slides.gotoAndStop(position+1);
- show_slide=false;
- }
- } else {
- if (position>maxtimes) {
- snd.stop();
- mode=2;
- } else {
- if (snd.position<times[position]) {
- position-=1;
- } else {
- position+=1;
- }
- show_slide=true;
- }
- }
- }
- }
- }
-
- setInterval(check_time, 10);
-
- mode=1;
- snd.start(0,0);
- Stage["displayState"] = "fullScreen";
- Mouse.addListener(Mouse);
- Key.addListener(key_listen);
-
- .end
-
- .frame 1
- .put slides
- .stop slides
-
- .end
- ]])
-
- raw_times:close()
- swf_times:close()
-
- os.execute('pdf2swf -f -T 8 -s filloverlap -s linksopennewwindow "' .. document.main_file .. '" -o "' .. document.slides_swf .. '"')
- os.execute('swfc "' .. document.presentation_script .. '"')
- if io.exists(document.presentation_swf) then os.remove(document.presentation_script) os.remove(document.slides_swf) end
- \stopluacode
-\stopbuffer
-
-\startbuffer[flash-loader]
- \startluacode
- local raw_times = io.open(document.original_times)
- local loader_times = io.open(document.loader_script, "w")
-
- fig = figures.getinfo(document.main_file)
- function dimension_bp(dimension)
- return math.floor(dimension*number.dimenfactors.bp)
- end
-
- loader_times:write([[# Preloader script, generated by PresVoz
- #
- # Copyright (C) 2009-2021 Pablo Rodríguez
- #
- # This program is free software; you can redistribute it and/or
- # modify it under the terms of the GNU General Public License
- # as published by the Free Software Foundation; either version 3
- # of the License, or (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- # General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program; if not, see <http://www.gnu.org/licenses>.
- #
- # Additional permission under GNU GPL version 3 section 7
- #
- # As a special exception, if you create a document which uses this
- # script, and compile this script or a modified version of this script
- # into the document, this script does not by itself cause the resulting
- # document to be covered by the GNU General Public License.
- # This exception does not however invalidate any other reasons why
- # the document might be covered by the GNU General Public License.
-
- .flash filename="]] .. document.loader_swf .. [[" version=8 fps=12"
- .font roman "]] .. resolvers.findfile("iRaccoonShowBold.otf") .. [[" glyphs=" %()KB0123456789/:,.CPDNuk[]resntiocanbld!"
- .edittext newloader font=roman color=#ffff00 size=30% width=350 height=30 border=none align="center" noselect variable=load_text
- .box placeholder width=]] .. dimension_bp(fig.used.width) .. [[ height=]] .. dimension_bp(fig.used.height) .. "\n" .. [[
- .box fsarea fill=#ffffff00 color=#ffffff00 width=]] .. dimension_bp(fig.used.width) .. [[ height=]] .. dimension_bp(fig.used.height) .. "\n" .. [[
- .outline fscreen_outline: M 62.78125 18.703125 L 43.367188 23.734375 L 38.390625 43.09375 L 42.109375 39.375 L 48.671875 45.9375 L 65.625 29.039062 L 59.0625 22.421875 L 62.78125 18.703125 z M 199.71875 18.703125 L 203.4375 22.421875 L 196.875 29.039062 L 213.773438 45.9375 L 220.390625 39.375 L 224.109375 43.09375 L 219.132812 23.734375 L 199.71875 18.703125 z M 83.125 45.9375 C 73.429688 45.9375 65.625 53.742188 65.625 63.4375 L 65.625 133.4375 C 65.625 143.132812 73.429688 150.9375 83.125 150.9375 L 179.375 150.9375 C 189.070312 150.9375 196.875 143.132812 196.875 133.4375 L 196.875 63.4375 C 196.875 53.742188 189.070312 45.9375 179.375 45.9375 L 83.125 45.9375 z M 48.726562 150.9375 L 42.109375 157.5 L 38.390625 153.78125 L 43.367188 173.140625 L 62.78125 178.171875 L 59.0625 174.453125 L 65.625 167.835938 L 48.726562 150.9375 z M 213.773438 150.9375 L 196.875 167.835938 L 203.4375 174.453125 L 199.71875 178.171875 L 219.132812 173.140625 L 224.109375 153.78125 L 220.390625 157.5 L 213.773438 150.9375 z .end
- .outline fulls_outline: M 17.5 0 L 245 0 C 254.695312 0 262.5 7.804688 262.5 17.5 L 262.5 179.375 C 262.5 189.070312 254.695312 196.875 245 196.875 L 17.5 196.875 C 7.804688 196.875 0 189.070312 0 179.375 L 0 17.5 C 0 7.804688 7.804688 0 17.5 0 z .end
- .filled fscreen outline=fscreen_outline fill=#969696ff color=#969696ff
- .filled fulls outline=fulls_outline fill=#64646496 color=#64646496
-
- .button fscr_button
- .show fscreen as=idle
- .show fscreen as=area
- .show fscreen as=hover
- .show fscreen as=pressed
- .end
-
- .button fs_area
- .show fsarea as=idle
- .show fsarea as=area
- .show fsarea as=hover
- .show fsarea as=pressed
- .on_release:
- fullscreen_button._visible = 0;
- fs_area._visible = 0;
- Stage["displayState"] = "fullScreen";
- _root.load_text = "[Click to start]";
- _root.dlprogress_mvclip._visible = true;
- the_presentation = "./]] .. document.presentation_filename .. [[";
- this.loadMovie(the_presentation, this.placeholder);
- .end
- .end
-
- .sprite fullscreen_button
- .put fscreen
- .put fulls
- .end
-
- .swf first_slide "]] .. document.first_slide_swf .. [["
- .frame 1
- .put first_slide
- .stop first_slide
- .put fullscreen_button
- .stop fullscreen_button
- .put fs_area
- .stop fs_area
-
- .action:
- slide_height=Stage.height;
- slide_width=Stage.width;
-
- var contextual = new ContextMenu();
- function ssurl(){ getURL("https://www.presvoz.tk", "_blank"); }
-
- switch (System.capabilities.language) {
- case "en" :
- ss_message = "Done with PresVoz  🤞🐞";
- break;
- case "es" :
- ss_message = "Hecho con PresVoz  🤞🐞";
- break;
- case "gl" :
- ss_message = "Feito con PresVoz  🤞🐞";
- break;
- case "pt" :
- ss_message = "Feito con PresVoz  🤞🐞";
- break;
- case "it" :
- ss_message = "Fatto con PresVoz  🤞🐞";
- break;
- case "fr" :
- ss_message = "Fait avec PresVoz  🤞🐞";
- break;
- case "de" :
- ss_message = "Erezeugt mit PresVoz  🤞🐞";
- break;
- case "nl" :
- ss_message = "Gedaan med PresVoz  🤞🐞";
- break;
- case "el" :
- ss_message = "Kατασκευασμένος με PresVoz  🤞🐞";
- break;
- default:
- ss_message = "Made with PresVoz  🤞🐞";
- break;
- }
-
- contextual.hideBuiltInItems();
- ss_url = new ContextMenuItem(ss_message, ssurl);
- contextual.customItems.push(ss_url);
- _root.menu = contextual;
-
- counter_percent=(slide_width/800)*100;
- newloader._xscale=counter_percent;
- newloader._yscale=counter_percent;
- newloader._x = (slide_width-(newloader._width))/2;
- newloader._y = (slide_height-newloader._height)/2;
-
- button_percent = (slide_width/600)*100;
- fullscreen_button._xscale = button_percent;
- fullscreen_button._yscale = button_percent;
- fullscreen_button._x = (slide_width-(fullscreen_button._width))/2;
- fullscreen_button._y = (slide_height-fullscreen_button._height)/2;
-
- _root.createEmptyMovieClip("dlprogress_mvclip", 0);
- dlprogress_mvclip.createEmptyMovieClip("bar", 1);
- dlprogress_mvclip.createEmptyMovieClip("stroke", 2);
-
- with (dlprogress_mvclip.stroke) {
- lineStyle(0, 0xFF0000, 30);
- moveTo(0, 0);
- lineTo(300, 0);
- lineTo(300, 40);
- lineTo(0, 40);
- lineTo(0, 0);
- }
- with (dlprogress_mvclip.bar) {
- beginFill(0xFF0000, 30);
- moveTo(0, 0);
- lineTo(300, 0);
- lineTo(300, 40);
- lineTo(0, 40);
- lineTo(0, 0);
- endFill();
- _xscale = 0;
- }
- dlprogress_mvclip._x = (slide_width-dlprogress_mvclip._width)/2;
- dlprogress_mvclip._y = (slide_height-dlprogress_mvclip._height)/2;
-
- dlprogress_mvclip._visible = false;
- fs_listen=new Object();
-
- fs_listen.onKeyDown = function() {
- if (Key.isDown(13)) {
- if(Stage.displayState == "normal"){
- Stage.displayState="fullScreen";
- } else {
- Stage.displayState="normal";
- }
- }
- };
-
- Key.addListener(fs_listen);
-
-
- .end
-
- .sprite images
- .put placeholder alpha=0%
- .action:
- the_presentation = "./]] .. document.presentation_filename .. [[";
- first_loading = new Object();
- first_loading.onMouseDown = function () {
- load_swf = new MovieClipLoader();
- load_swf.loadClip(the_presentation, placeholder);
- listen_loading = new Object();
- listen_loading.onLoadStart = function(target) {
- _root.dlprogress_mvclip.bar._xscale = 0;
- _starttime = gettimer();
- };
- listen_loading.onLoadError = function(){
- _root.load_text = "Presentation cannot be loaded!";
- };
- listen_loading.onLoadProgress = function(target, bytesLoaded, bytesTotal) {
- downldtime = (gettimer() - _starttime) / 1000;
- _root.load_text = (String (Math.round ((bytesLoaded * 100) / bytesTotal)) + "% (" + Math.round((bytesLoaded / 1024) / downldtime) + " KB/s)");
- _root.dlprogress_mvclip.bar._xscale = Math.round(bytesLoaded/bytesTotal*100);
- keeping_awake = setInterval(function(){}, 1000);
- };
- listen_loading.onLoadComplete = function(target) {
- clearInterval(keeping_awake);
- _root.load_text = "";
- _root.dlprogress_mvclip._visible = 0;
- _root.dlprogress_mvclip.bar._visible = 0;
- _root.first_slide._visible = 0;
- };
- load_swf.addListener(listen_loading);
- };
- Mouse.addListener(first_loading);
- .end
- .end
-
- .put newloader
- .stop newloader
- .end]])
-
- raw_times:close()
- loader_times:close()
-
- os.execute('pdf2swf -f -p 1 -T 8 -s filloverlap -s linksopennewwindow "' .. document.main_file .. '" -o "' .. document.first_slide_swf .. '"')
- os.execute('swfc "' .. document.loader_script .. '"')
- if io.exists(document.loader_swf) then os.remove(document.loader_script) os.remove(document.first_slide_swf) end
- \stopluacode
-\stopbuffer
-
-\def\TimeLine#1%
- {\cldcontext{ document.timeline_filename }}
-
-\def\SoundFile#1%
- {\cldcontext{ document.compressed_audio }}
-
-\startbuffer[generate-timeline]
- \startluacode
- local raw_times = io.open(document.original_times)
- local js_times = io.open(document.timeline_filename, "w")
-
- js_times:write("\\startJSpreamble times used now")
- js_times:write("\n")
- js_times:write("var times = [];")
- js_times:write("\n")
- js_times:write("var maxtimes = times[times.length - 1];")
- js_times:write("\n")
- js_times:write("times[0] = 0;")
- js_times:write("\n")
- line_number = 0
- while true do
- line = raw_times:read()
- if line == nil then break end
- if line:match("%D") == nil then
- line_number = line_number + 1
- print ("times["..line_number.."] = " .. line .. ";")
- js_times:write("times["..line_number.."] = " .. line .. ";")
- js_times:write("\n")
- end
- end
-
- js_times:write("\\stopJSpreamble")
-
- raw_times:close()
- js_times:close()
- \stopluacode
-\stopbuffer
-
-\startmode[*first]
-\getbuffer[generate-timeline]
-\doiftext
- {\ctxlua{if os.which('pdf2swf') and os.which('swfc') then context("a") end}}
- {\getbuffer[flash-presentation]
- \getbuffer[flash-loader]}
-\stopmode
-
-\getfiguredimensions[\Presentation]
-
-\setupexternalfigures[interaction=all]
-
-\setupinteraction
- [state=start,
- color=,
- contrastcolor=,
- style=,
- focus=standard]
-
-\useJSscripts[presvoz.mkxl]
-\startnotmode[*first]
- \useJSscripts[\TimeLine{\Presentation}]
-\stopnotmode
-
-\definefontfamily
- [mainface]
- [rm]
- [Latin Modern Sans]
-
-\definefontfamily
- [mainface]
- [ss]
- [Flechitas]
-
-\setupbodyfont
- [mainface, 25pt]
-
-\setupmakeup
- [page]
- [pagestate=start,
- style=\bfd,
- color=white,
- footerstate=start,
- align=center]
-
-\definecolor[transparent-gray]
- [r=.45, g=.45, b=.45]
-
-\defineviewerlayer[fullscreen][state=start]
-\defineviewerlayer[unfullscreen][state=stop]
-\defineviewerlayer[play][state=start]
-\defineviewerlayer[pause][state=stop]
-
-\definecolor[transparent][r=1, a=1, t=0]
-
-\startbuffer[fullscreen-button]
- \startoverlay
- {\viewerlayer[fullscreen]{C}}
- {\viewerlayer[unfullscreen]{I}}
- {\goto{\color[transparent]{C}}[JS(SwitchFS{})]}
- \stopoverlay
-\stopbuffer
-
-\startbuffer[play-pause-button]
- \startoverlay
- {\viewerlayer[play]{R}}
- {\viewerlayer[pause]{H}}
- {\goto{\color[transparent]{C}}[JS(PlayPauseSound{})]}
- \stopoverlay
-\stopbuffer
-
-\def\SlideNavigationButtons{%
- \goto{F}[JS(GoToFirstSlide{})]\,%
- \goto{B}[JS(GoToPreviousSlide{})]\,%
- \inlinebuffer[play-pause-button]\,%
- \goto{S}[JS(StopSound{})]\,%
- \goto{N}[JS(GoToNextSlide{})]\,%
- \goto{L}[JS(GoToLastSlide{})]\quad
- \null\inlinebuffer[fullscreen-button]%
- }
-
-\definelayer[player-buttons]
- [x=.5\dimexpr\figurewidth\relax,
- y=.9525\dimexpr\figureheight\relax,
- location=middle,
- state=repeat]
-
-\definelayer[placesound]
-
-\startbuffer[placesound]
- \definerenderingwindow[soundplace]
- [width=0pt, height=0pt, frame=on]
-
-\doiftextelse{\ctxlua{if document.compressed_audio == document.audio_opus then context("opus") end}}
- {\userendering[mainsound][audio/opus][\SoundFile{\Presentation}][embed=yes, list=no]}
- {\userendering[mainsound][audio/mp3][\SoundFile{\Presentation}][embed=yes, list=no]}
-
- \placerenderingwindow[soundplace][mainsound]
-\stopbuffer
-
-\setupbackgrounds
- [page]
- [background={foreground, placesound, player-buttons}]
-
-
-\setlayer[player-buttons]
- {\switchtobodyfont[sans, \cldcontext{tex.dimen.paperwidth/1000000}pt]\color[transparent-gray]{\SlideNavigationButtons}}
-
-\resetpagenumber
-
-\dorecurse{\noffigurepages}{\startTEXpage[pagestate=start]
-\ifnum\recurselevel=1 \setlayer[placesound]{\getbuffer[placesound]}\fi
-\externalfigure[\Presentation][page=\recurselevel]
-\stopTEXpage}
-\stopnotmode
-
-\startluacode
-luatex.wrapup(
- function()
- os.remove(presvoz_name)
- os.rename(tex.jobname .. ".pdf", presvoz_name)
- end
-)
-\stopluacode
-\stoptext
-\stoplmtxmode
-
-\startmkivmode
-\setupinteractionscreen[option=max]
-\startTEXpage[offset=2em, align=center]
- \ssbf\color[darkgreen]{\LMTX\ required,\\I’m afraid.}
-\stopTEXpage
-\stopmkivmode
-\stoptext
diff --git a/macros/context/contrib/context-handlecsv/context-presvoz-master-5196bdec981cf48b83896ec7b7009fda20d9106f/tex/context/third/presvoz/presvoz.mkxl b/macros/context/contrib/context-handlecsv/context-presvoz-master-5196bdec981cf48b83896ec7b7009fda20d9106f/tex/context/third/presvoz/presvoz.mkxl
deleted file mode 100644
index 8d8ecd3cde..0000000000
--- a/macros/context/contrib/context-handlecsv/context-presvoz-master-5196bdec981cf48b83896ec7b7009fda20d9106f/tex/context/third/presvoz/presvoz.mkxl
+++ /dev/null
@@ -1,183 +0,0 @@
-\startJSpreamble PresVoz used now
-var ocgs = this.getOCGs(0);
-this.pageNum = 0;
-
-var label = "mainsound" ;
-var rendition = this.media.getRendition(label) ;
-var screen = this.media.getAnnot({nPage: 0, cAnnotTitle: label}) ;
-var main_sound_player;
-
-function ToogleFSButton() {
- if (app.fs.isFullScreen) {
- ocgs[0].state = false;
- ocgs[3].state = true;
- } else {
- ocgs[0].state = true;
- ocgs[3].state = false;
- }
-}
-
-function TooglePlayPauseButton() {
- if (main_sound_player.isPlaying) {
- ocgs[1].state = true;
- ocgs[2].state = false;
- } else {
- ocgs[1].state = false;
- ocgs[2].state = true;
- }
-}
-
-function timer_resume() {
- check_time = app.setInterval("advance_slide()", 10);
-}
-
-function timer_pause() {
- app.clearInterval(check_time);
-}
-
-function jump() {
- if (!main_sound_player.isOpen) { main_sound_player.open(); }
-
- if ( typeof main_sound_player != "undefined" || ( typeof main_sound_player != "undefined" && main_sound_player.isOpen )) {
- if (this.pageNum < times.length) {
- if (!main_sound_player.isPlaying) {
- timer_resume();
- }
-
- var jump_time = times[this.pageNum] / 1000;
-
- main_sound_player.pause();
- main_sound_player.seek({time: jump_time});
- main_sound_player.play();
- }
- }
-}
-
-function advance_slide() {
- if (!main_sound_player.isOpen) { main_sound_player.open(); }
- if ( typeof main_sound_player.where() != "undefined") {
- var current_offset = 1000 * main_sound_player.where().time;
-
- if (current_offset >= times[this.pageNum + 1]) {
- this.pageNum += 1;
- } else if (current_offset <= times[this.pageNum - 1]) {
- this.pageNum -= 1;
- }
- }
-}
-
-function start_player() {
- main_sound_player = app.media.createPlayer({
- rendition: rendition,
- annot: screen,
- settings: {
- autoPlay: false,
- },
- events: {
- onDone: function() {
- timer_pause();
- app.fs.isFullScreen = false;
- ToogleFSButton();
- this.pageNum = this.numPages - 1;
- },
- afterDone: function() {
- main_sound_player.pause();
- TooglePlayPauseButton();
- main_sound_player.seek({time: maxtimes});
- this.pageNum = this.numPages - 1;
- },
- onEscape: function() {
- app.fs.isFullScreen = false;
- ToogleFSButton();
- },
- afterEscape: function() {
- main_sound_player.pause();
- TooglePlayPauseButton();
- },
- afterPause: function() {
- timer_pause();
- TooglePlayPauseButton();
- },
- onPlay: function() {
- app.fs.isFullScreen = true;
- ToogleFSButton();
- },
- afterPlay: function() {
- timer_resume();
- TooglePlayPauseButton();
- },
- afterReady: function() {
- main_sound_player.play();
- },
- },
- });
- main_sound_player.open();
-}
-
-function GoToFirstSlide(label) {
- this.pageNum = 0;
- if ( typeof main_sound_player != "undefined" || ( typeof main_sound_player != "undefined" && main_sound_player.isOpen )) {
- if ( main_sound_player.isPlaying ) { jump(); }
- }
-}
-
-function PlayPauseSound() {
- if ( typeof main_sound_player == "undefined" ) {
- start_player();
- } else if ( !main_sound_player.isPlaying ) {
- if (!main_sound_player.isOpen) { main_sound_player.open(); }
- if ( typeof main_sound_player.where() != "undefined" && main_sound_player.where().time == 0 )
- { this.pageNum = 0; }
- timer_resume();
- main_sound_player.play();
- } else if ( main_sound_player.isPlaying ) {
- timer_pause();
- main_sound_player.pause();
- }
-}
-
-function StopSound() {
- if ( typeof main_sound_player != "undefined" || ( typeof main_sound_player != "undefined" && main_sound_player.isOpen )) {
- main_sound_player.pause();
- main_sound_player.seek({time: 0});
- }
- this.pageNum = 0;
-}
-
-function GoToLastSlide(label) {
- this.pageNum = this.numPages - 1;
- if ( typeof main_sound_player != "undefined" || ( typeof main_sound_player != "undefined" && main_sound_player.isOpen )) {
- if ( main_sound_player.isPlaying ) { jump(); }
- }
-}
-
-function GoToNextSlide(label) {
- ++this.pageNum;
- if ( typeof main_sound_player != "undefined" || ( typeof main_sound_player != "undefined" && main_sound_player.isOpen )) {
- if ( main_sound_player.isPlaying ) { jump(); }
- }
-}
-
-function GoToPreviousSlide(label) {
- --this.pageNum;
- if ( typeof main_sound_player != "undefined" || ( typeof main_sound_player != "undefined" && main_sound_player.isOpen )) {
- if ( main_sound_player.isPlaying ) { jump(); }
- }
-}
-
-function SwitchFS() {
- if (app.fs.isFullScreen == false) {
- app.fs.isFullScreen = true;
- if (app.fs.isFullScreen) {
- ocgs[0].state = false;
- ocgs[3].state = true;
- }
- } else {
- app.fs.isFullScreen = false;
- if (!app.fs.isFullScreen) {
- ocgs[0].state = true;
- ocgs[3].state = false;
- }
- }
-}
-\stopJSpreamble
diff --git a/macros/context/contrib/context-handlecsv/doc/context/third/handlecsv/handlecsv.epub b/macros/context/contrib/context-handlecsv/doc/context/third/handlecsv/handlecsv.epub
new file mode 100644
index 0000000000..9c84f899b5
--- /dev/null
+++ b/macros/context/contrib/context-handlecsv/doc/context/third/handlecsv/handlecsv.epub
Binary files differ
diff --git a/macros/context/contrib/context-handlecsv/doc/context/third/handlecsv/handlecsv.pdf b/macros/context/contrib/context-handlecsv/doc/context/third/handlecsv/handlecsv.pdf
new file mode 100644
index 0000000000..91b5ef03ec
--- /dev/null
+++ b/macros/context/contrib/context-handlecsv/doc/context/third/handlecsv/handlecsv.pdf
Binary files differ
diff --git a/macros/context/contrib/context-handlecsv/tex/context/third/handlecsv/t-handlecsv-extra.lua b/macros/context/contrib/context-handlecsv/tex/context/third/handlecsv/t-handlecsv-extra.lua
new file mode 100644
index 0000000000..1efdcbb06d
--- /dev/null
+++ b/macros/context/contrib/context-handlecsv/tex/context/third/handlecsv/t-handlecsv-extra.lua
@@ -0,0 +1,151 @@
+-- %D \module
+-- %D [ file=t-handlecsv-extra.lua,
+-- %D version=2019.05.27,
+-- %D title=HandleCSV extra,
+-- %D subtitle=CSV file analysis - extended functions and macros,
+-- %D author=Jaroslav Hajtmar,
+-- %D date=2019-05-27,
+-- %D copyright=Jaroslav Hajtmar,
+-- %D license=GNU General Public License]
+--
+-- %C Copyright (C) 2019 Jaroslav Hajtmar
+-- %C
+-- %C This program is free software: you can redistribute it and/or modify
+-- %C it under the terms of the GNU General Public License as published by
+-- %C the Free Software Foundation, either version 3 of the License, or
+-- %C (at your option) any later version.
+-- %C
+-- %C This program is distributed in the hope that it will be useful,
+-- %C but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- %C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- %C GNU General Public License for more details.
+-- %C
+-- %C You should have received a copy of the GNU General Public License
+-- %C along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+thirddata = thirddata or { }
+
+thirddata = thirddata or { }
+
+thirddata.handlecsv = thirddata.handlecsv or { -- next global variables
+
+}
+
+
+-- Initialize global variables etc.
+
+
+-- Utility and documentation function and macros
+
+
+
+function thirddata.handlecsv.addleadingcharacters(character, tonumberortext, width)
+-- Add leading characters to number to align with the width
+ local strcharacter=tostring(character)
+ local strnumberortext=tostring(tonumberortext)
+ strnumberortext = string.rep(strcharacter, width-#strnumberortext)..strnumberortext
+ return strnumberortext -- It returns a strange result unless the leading character is just one.
+end
+
+function thirddata.handlecsv.addleadingzeros(tonumberortext, width)
+-- Add leading zeros to number to align with the width
+ return thirddata.handlecsv.addleadingcharacters(0, tonumberortext, width)
+end
+
+function thirddata.handlecsv.addzeros(tonumber)
+-- Add leading zeroes depending on the number of rows
+ local width=string.len(tostring(thirddata.handlecsv.numrows()))
+ return thirddata.handlecsv.addleadingzeros(tonumber, width)
+end
+
+
+
+-- function thirddata.handlecsv.cr_lines(s)
+-- return s:gsub('\r\n?', '\n'):gmatch('(.-)\n')
+-- end
+
+
+function thirddata.handlecsv.file2Array(filename)
+-- read CSV file into line array
+local linesarray={}
+ for line in io.lines (filename) do
+ linesarray[#linesarray+1]=line
+ end
+return linesarray
+end
+
+
+
+function thirddata.handlecsv.writefileinreverseorder(inpfilename,outfilename)
+-- write CSV file <inpfilename> into reverse order CSV file <outfilename>
+ local tLines = thirddata.handlecsv.file2Array(inpfilename)
+ local outfile = io.open(outfilename, "w")
+ local ifrom=#tLines
+ local ito=1
+ if thirddata.handlecsv.gCSVHeader then -- when CSV file is with header, then header line is first line
+ outfile:write(tLines[1])
+ outfile:write("\r\n")
+ ito=2
+ end
+ for i = ifrom, ito, -1 do -- write rest of lines in reverse order
+ outfile:write(tLines[i])
+ outfile:write("\r\n")
+ end
+outfile:flush()
+outfile:close()
+end
+
+
+
+function thirddata.handlecsv.deletefile(filename)
+-- remove file from disk
+ os.remove(filename)
+end
+
+
+function thirddata.handlecsv.varreverseorder(csvfilename)
+-- CSV file <csvfilename> is stored in variable array gTableRows['csvfilename'][row][column]
+-- this function rearrange gTableRows into reverse order
+local templine={}
+for i = 1, math.floor(thirddata.handlecsv.gNumRows[csvfilename]/2) do
+templine=thirddata.handlecsv.gTableRows[csvfilename][i]
+thirddata.handlecsv.gTableRows[csvfilename][i]=thirddata.handlecsv.gTableRows[csvfilename][thirddata.handlecsv.gNumRows[csvfilename]-i+1]
+thirddata.handlecsv.gTableRows[csvfilename][thirddata.handlecsv.gNumRows[csvfilename]-i+1]=templine
+end
+end
+
+
+
+
+
+-- ConTeXt source:
+local string2print=[[%
+
+\def\addleading#1#2#3{\ctxlua{context(thirddata.handlecsv.addleadingcharacters('#1','#2','#3'))}}
+\def\addzeros#1#2{\ctxlua{context(thirddata.handlecsv.addleadingzeros('#1','#2'))}}
+\def\zeroed#1{\ctxlua{context(thirddata.handlecsv.addzeros('#1'))}}
+% \def\zeroedlineno{\ctxlua{context(string.rep( "0",(tostring(thirddata.handlecsv.numrows())):len() - (tostring(thirddata.handlecsv.linepointer())):len()) .. thirddata.handlecsv.linepointer())}}% from Pablo
+\def\zeroedlineno{\zeroed{\lineno}}% from Pablo (and simplified by him)
+\def\writefileinreverseorderfromto#1#2{\ctxlua{thirddata.handlecsv.writefileinreverseorder('#1','#2')}}%
+\def\writecurrfileinreverseorderto#1{\ctxlua{thirddata.handlecsv.writefileinreverseorder(thirddata.handlecsv.gCurrentlyProcessedCSVFile,'#1')}}%
+\def\deletefile#1{\ctxlua{thirddata.handlecsv.deletefile('#1')}}%
+\def\reverseorderof#1{\ctxlua{thirddata.handlecsv.varreverseorder('#1')}}
+\def\reverseorder{\ctxlua{thirddata.handlecsv.varreverseorder(thirddata.handlecsv.gCurrentlyProcessedCSVFile)}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Complete listing macros and commands that can be used (to keep track of all defined macros):
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \addleading{}{}{}, \addzeros{}{}, \zeroed{}, \zeroedlineno (from Pablo)
+% \writefileinreverseorderfromto{<inpfilename>}{<outfilename>} % create file <outfilename> in reverse order of file <inpfilename>
+% \writecurrfileinreverseorderto{<outfilename>} % create file <outfilename> in reverse order
+% \deletefile{<filename>} % close and delete file <filename>
+% \reverseorderof{<csvfilename>} % reverse order of opened CSV file <csvfilename>
+% \reverseorder % reverse order of currently processed CSV file
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+]]
+
+-- write definitions into ConTeXt:
+thirddata.handlecsv.string2context(string2print)
+
diff --git a/macros/context/contrib/context-handlecsv/tex/context/third/handlecsv/t-handlecsv-tools.lua b/macros/context/contrib/context-handlecsv/tex/context/third/handlecsv/t-handlecsv-tools.lua
new file mode 100644
index 0000000000..87806a9a03
--- /dev/null
+++ b/macros/context/contrib/context-handlecsv/tex/context/third/handlecsv/t-handlecsv-tools.lua
@@ -0,0 +1,178 @@
+-- %D \module
+-- %D [ file=t-handlecsv-tools.lua,
+-- %D version=2015.07.08,
+-- %D title=HandleCSV tools,
+-- %D subtitle=CSV file analysis,
+-- %D author=Jaroslav Hajtmar,
+-- %D date=\currentdate,
+-- %D copyright=Jaroslav Hajtmar,
+-- %D license=GNU General Public License]
+--
+-- %C Copyright (C) 2015 Jaroslav Hajtmar
+-- %C
+-- %C This program is free software: you can redistribute it and/or modify
+-- %C it under the terms of the GNU General Public License as published by
+-- %C the Free Software Foundation, either version 3 of the License, or
+-- %C (at your option) any later version.
+-- %C
+-- %C This program is distributed in the hope that it will be useful,
+-- %C but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- %C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- %C GNU General Public License for more details.
+-- %C
+-- %C You should have received a copy of the GNU General Public License
+-- %C along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+-- use a feature that is part of the /texmf-dist/tex/context/base/util-prs.lua
+
+thirddata = thirddata or { }
+
+thirddata = thirddata or { }
+
+thirddata.handlecsv = thirddata.handlecsv or { -- next global variables
+
+}
+
+
+-- Initialize global variables etc.
+
+
+-- Utility and documentation function and macros
+
+function thirddata.handlecsv.csvreport(anyfilename) -- Listing report informations about opening a CSV file
+ local actualopenfile=thirddata.handlecsv.gCurrentlyProcessedCSVFile
+ thirddata.handlecsv.opencsvfile(anyfilename)
+ local coldelim = thirddata.handlecsv.gUserCSVSeparator or ""
+ local quot = thirddata.handlecsv.gUserCSVQuoter or ""
+ local currcoldelim = thirddata.handlecsv.gCSVSeparator or ""
+ local currquot = thirddata.handlecsv.gCSVQuoter or ""
+ infomakra=[[\crlf ]]
+ for i = 1, thirddata.handlecsv.gNumCols do -- for all fields in header
+ local makroname=[[{\bf\backslash ]]..thirddata.handlecsv.tmn(thirddata.handlecsv.gColumnNames[i])..[[}]]
+ headercolnames = [[{\bf\backslash c]]..thirddata.handlecsv.ar2colnum(i)..[[}=]]..makroname..[[, ]]
+ infomakra=infomakra..headercolnames -- list generating
+ end -- for i=1, #gCSV
+ -- Kvůli nastavení na zač.
+ infomakra=infomakra..'\\par' -- infomakra=infomakra..'\par' -- closing of opened group
+local string2print=[[\title{Current CSV file report}
+Input CSV file: {\bf ]]..'\\csvfilename'..[[} \crlf
+Existing header of CSV file (ie first no data line) : {\tt ]]..tostring(thirddata.handlecsv.gCSVHeader)..[[}\crlf
+Settings default CSV separator (see Lua variable {\tt gUserCSVSeparator}) : ]]..coldelim..[[\crlf
+Settings default CSV field "quoter" (see Lua variable {\tt gUserCSVQuoter}) : ]]..quot..[[\crlf
+Settings current CSV separator : ]]..currcoldelim..[[\crlf
+Settings current CSV field "quoter" : ]]..currquot..[[\crlf
+Current settings of delimiters and quoters: {\tt ]]..currquot..[[field1]]..currquot..currcoldelim..currquot..[[field2]]..currquot..currcoldelim..currquot..[[field3]]..currquot..currcoldelim..[[ } ... etc.\crlf
+Using hooks (default is off) : {\tt ]]..tostring(thirddata.handlecsv.gUseHooks)..[[}\crlf
+Number of columns in a table: {\bf]]..'\\numcols'..[[}\crlf
+Number of rows in the table: {\bf ]]..'\\numrows'..[[}\crlf
+Macros supplying columns data in each row of table: ]]..infomakra..[[
+\crlf
+Additional predefined macros: \crlf
+{\bf\backslash csvfilename} -- name of open CSV file ({\bf]]..'\\csvfilename'..[[})\crlf
+{\bf\backslash numcols} -- number of table columns ({\bf]]..'\\numcols'..[[})\crlf
+{\bf\backslash numrows} -- number of table lines ({\bf]]..'\\numrows'..[[})\crlf
+{\bf\backslash numline} -- number of the currently loaded row (for use in print reports) \crlf
+{\bf\backslash lineno} -- serial number of the actual loaded line of CSV table \crlf
+{\bf\backslash csvreport} -- prints the report on file open \crlf
+{\bf\backslash printline} -- lists the current CSV row table in a condensed form \crlf
+{\bf\backslash printall} -- CSV output table in a condensed form \crlf
+{\bf\backslash setfiletoscan}\{{\it filename}\} -- setting of name of CSV file\crlf
+{\bf\backslash opencsvfile}{\{\it filename}\} -- open CSV table\crlf
+{\bf\backslash setheader} -- set a header flag\crlf
+{\bf\backslash resetheader} -- unset a header flag\crlf
+{\bf\backslash nextrow} -- next row of CSV table (with test of EOF)\crlf
+{\bf\backslash setsep}{\{\it delimiter}\} -- set delimiter of columns\crlf
+{\bf\backslash resetsep} -- unset to default values\crlf
+{\bf\backslash setld}\{{\it delimiter}\} -- set left quoter\crlf
+{\bf\backslash resetld} -- unset left quoter to default values\crlf
+{\bf\backslash setrd}\{{\it delimiter}\} -- set right quoter\crlf
+{\bf\backslash resetrd} -- unset right quoter to default values\crlf
+{\bf\backslash blinehook} -- begin line hook macro (process before first column value of each row)\crlf
+{\bf\backslash elinehook} -- end line hook macro (process after last column value of each row)\crlf
+{\bf\backslash bfilehook} -- begin file hook macro (process before whole file processing)\crlf
+{\bf\backslash efilehook} -- end file hook macro (process after whole file processing)\crlf
+\vfill\break ]]
+thirddata.handlecsv.string2context(string2print)
+thirddata.handlecsv.opencsvfile(actualopenfile)
+end -- thirddata.handlecsv.csvreport()
+
+function thirddata.handlecsv.xprintline() -- lists the current CSV row table (needed to define macro \printline)
+ for i=1,thirddata.handlecsv.gNumCols do
+ context([[\csvcell]]..'['..i..','..thirddata.handlecsv.gCurrentLinePointer..']'..thirddata.handlecsv.gCSVSeparator..[[ ]])
+ end
+end
+
+
+function thirddata.handlecsv.xprintall() -- lists all the csv table (necessary to define macros \printall)
+-- http://www.pragma-ade.nl/general/manuals/hybrid.pdf
+ thirddata.handlecsv.opencsvfile()
+ local basespec = {
+ framecolor = "blue",
+ split="yes",
+ align= "middle",
+ style = "sans",
+ offset="2pt",
+ }
+ context.bTABLE(basespec)
+ for i=1, thirddata.handlecsv.gNumRows do
+ context.bTR()
+ for j=1,thirddata.handlecsv.gNumCols do
+ context.bTD()
+ context([[\csvcell]]..'['..j..','..i..']') -- Writing real values ...
+ -- context(thirddata.handlecsv.gTableRows[j][i]..' ') -- Writing real values ...
+ context.eTD()
+ end
+ context.eTR()
+ end -- of for
+context.eTABLE()
+end
+
+
+
+-- ConTeXt source:
+local string2print=[[%
+
+% CSV file report. Syntax: \csvreport or \csvreport{filename}.
+\def\csvreport{\dosingleempty\docsvreport}%
+\def\docsvreport[#1]{\dosinglegroupempty\dodocsvreport}%
+\def\dodocsvreport#1{\iffirstargument\ctxlua{thirddata.handlecsv.csvreport("#1")}\else\ctxlua{thirddata.handlecsv.csvreport()}\fi}%
+
+%\def\xprintline{\ctxlua{context(thirddata.handlecsv.printline())}}
+
+
+% Původní verze:
+% \def\xprintall{\ctxlua{context(thirddata.handlecsv.xprintall())}}
+
+\def\printline{\dorecurse{\numcols}{\csvcell[\recurselevel,\linepointer], }\crlf}
+
+
+\def\printall{%
+\setuppapersize[A3,landscape][A3,landscape]
+\catcode`\#=12 %CSV file contains # characters (i.e. TeX problematic character)
+\switchtobodyfont[10pt]
+\setupTABLE[background=color,backgroundcolor=yellow]
+\setupTABLE[row][first][background=color,backgroundcolor=lightgray]
+\bTABLE[offset=2pt, split=yes]
+ \dorecurse{\numexpr(\numrows+1)}
+ {\bTR
+ \dorecurse{\numcols}
+ {\bTD \csvcell[\currentTABLEcolumn,\currentTABLErow-1] \eTD}
+ \eTR}
+\eTABLE
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Complete listing macros and commands that can be used (to keep track of all defined macros):
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \csvreport, \csvreport{<filename>}
+% \printline
+% \printall
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+]]
+
+-- write definitions into ConTeXt:
+thirddata.handlecsv.string2context(string2print)
+
diff --git a/macros/context/contrib/context-handlecsv/tex/context/third/handlecsv/t-handlecsv.lua b/macros/context/contrib/context-handlecsv/tex/context/third/handlecsv/t-handlecsv.lua
new file mode 100644
index 0000000000..16ba045aa2
--- /dev/null
+++ b/macros/context/contrib/context-handlecsv/tex/context/third/handlecsv/t-handlecsv.lua
@@ -0,0 +1,1403 @@
+-- %D \module
+-- %D [ file=t-handlecsv.lua,
+-- %D version=2019.03.30,
+-- %D title=HandleCSV module,
+-- %D subtitle=CSV file handling,
+-- %D author=Jaroslav Hajtmar,
+-- %D date=\currentdate,
+-- %D copyright=Jaroslav Hajtmar,
+-- %D email=hajtmar@gyza.cz,
+-- %D license=GNU General Public License]
+--
+-- %C Copyright (C) 2019 Jaroslav Hajtmar
+-- %C
+-- %C This program is free software: you can redistribute it and/or modify
+-- %C it under the terms of the GNU General Public License as published by
+-- %C the Free Software Foundation, either version 3 of the License, or
+-- %C (at your option) any later version.
+-- %C
+-- %C This program is distributed in the hope that it will be useful,
+-- %C but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- %C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- %C GNU General Public License for more details.
+-- %C
+-- %C You should have received a copy of the GNU General Public License
+-- %C along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+-- use a feature that is part of the /texmf-dist/tex/context/base/util-prs.lua
+
+thirddata = thirddata or { }
+
+thirddata.handlecsv = { -- Global variables
+-- gCSVSeparator
+ gUserCSVSeparator=';', -- the most widely used field separator in CSV tables
+-- gCSVQuoter
+ gUserCSVQuoter='"', --
+-- gCSVHeader
+ gUserCSVHeader=false, -- CSV file is by default considered as a CSV file without the header (in header are treated as column names of macros
+ gUserUseHooks=false, -- In default setting is not use "hooks" when process CSV file
+ gUserColumnNumbering='XLS', -- Something other than the XLS or undefined variable value (eg commenting that line) to set the Roman numbering ...
+ gCurrentlyProcessedCSVFile=nil,
+ gMarkingEmptyLines=false,
+ gUserMarkingEmptyLines=false, -- if true, then module mark empty rows in CSV file else module accept empty lines as regular lines
+ gTableEmptyRows={}, -- array of indexes of empty lines of CSV table -> gTableEmptyRows['csvfilename'][1]= 3 etc
+ gTableNotEmptyRows={}, -- array of indexes of nonempty lines of CSV table -> gTableNotEmptyRows['csvfilename'][1]= 3 etc
+ gCSVHandleBuffer={}, -- temporary buffer
+-- NEW variables
+ gOpenFiles={}, -- array of all opened files
+ gNumLine={}, -- global variable - gNumLine['csvfilename.csv']=0
+ gNumRows={}, -- global variable - save number of rows of csv table: gNumRows['csvfilename']=0
+ gNumEmptyRows={}, -- global variable - save number of empty rows of csv table: gNumEmptyRows['csvfilename']=0
+ gNumNotEmptyRows={}, -- global variable - save number of empty rows of csv table: gNumNotEmptyRows['csvfilename']=0
+ gNumCols={}, -- global variable - save number of columns of csv table: gNumCols['csvfilename']=0
+ gCurrentLinePointer={}, -- ie. CSV line number ie. number of the currently processed row: gCurrentLinePointer['csvfilename']=0
+ gColumnNames={}, -- array with column names (readings from header of CSV file): gColumnNames['csvfilename']
+ gColNames={}, -- associative array with column names for indexing use f.e. gColNames['csvfilename']['Firstname']=1, etc...
+ gTableRows={}, -- array of contents of cells of CSV table -> gTableRows['csvfilename'][row][column]
+ gTableRowsIndex={}, -- array of flags of lines of CSV table -> gTableEmptyRowsIndex['csvfilename'][i]= true or false
+ gSavedLinePointerNo=1, -- global variable to keep the line number
+}
+
+local setmacro = interfaces.setmacro or ""
+
+-- Initialize global variables etc.
+
+-- Default value is saved in glob. variable gUseHooks (default is FALSE)
+if thirddata.handlecsv.gUseHooks == nil then thirddata.handlecsv.gUseHooks = thirddata.handlecsv.gUserUseHooks end
+-- Default value is saved in glob. variable gUserCSVHeader (default FALSE)
+if thirddata.handlecsv.gCSVHeader == nil then thirddata.handlecsv.gCSVHeader = thirddata.handlecsv.gUserCSVHeader end
+-- Default value is saved in glob. variable gCSVSeparator (default COMMA)
+if thirddata.handlecsv.gCSVSeparator == nil then thirddata.handlecsv.gCSVSeparator = thirddata.handlecsv.gUserCSVSeparator end
+-- Default value is saved in glob. variable gCSVSeparator (default ")
+if thirddata.handlecsv.gCSVQuoter == nil then thirddata.handlecsv.gCSVQuoter = thirddata.handlecsv.gUserCSVQuoter end
+-- Default value is saved in glob. variable gMarkingEmptyLines (default is FALSE)
+if thirddata.handlecsv.gMarkingEmptyLines==nil then thirddata.handlecsv.gMarkingEmptyLines = thirddata.handlecsv.gUserMarkingEmptyLines end
+
+
+-- Tools block: Contain auxiliary functions and tools
+
+
+function thirddata.handlecsv.texmacroisdefined(macroname) -- check whether macroname macro is defined in ConTeXt
+-- function is used to test whether the user has defined the macro \macroname. If not, it needs to define any default value
+ return token.get_cmdname(token.create(macroname)) ~= "undefined_cs"
+end
+
+function thirddata.handlecsv.ParseCSVLine(line,sep)
+-- tool function ParseCSVLine is defined for compatibility. Parsing string (or line).
+ local mycsvsplitter = utilities.parsers.rfc4180splitter{
+ separator = sep,
+ quote = '"',
+ strict=true, -- add 15.2.2016
+ }
+ local list = mycsvsplitter(line) inspect(list)
+ return list[1]
+end
+
+
+function thirddata.handlecsv.tmn(s) -- TeX Macro Name. Name of TeX macro should not contain forbidden characters
+ if string.len(s) == 0 then s='nil' end -- When the parameter 's' does not contain any character that is not the separator character, it is necessary to create macro name
+ maxmacrolength=50 -- if the first string in line longer "than is healthy, so about 50 characters is sufficient
+ -- ATTENTION! In the case that 1st CSV table row header that is a different column for content, which coincides with the first 'maxmacrolength' characters, the names of macros in different columns are the same (ie, the macro will give the correct result for the column)
+ diachar= {"á","ä","č","ď","é","ě","í","ň","ó","ř","š","ť","ú","ů","ý","ž","Á","Ä","Č","Ď","É","Ě","Í","Ň","Ó","Ř","Š","Ť","Ú","Ů","Ý","Ž"}
+ asciichar={"a","a","c","d","e","e","i","n","o","r","s","t","u","u","y","z","A","A","C","D","E","E","I","N","O","R","S","T","U","U","Y","Z"}
+ for i=1, 32 do
+ s=string.gsub(s, diachar[i], asciichar[i]) -- change diakritics chars
+ end
+ --s=string.gsub(s, "%d", "n") -- replace the numbers in name
+ -- For 0-9 to replace the letter O or Roman numerals
+ s=string.gsub(s, "0", "O") -- replace the numbers in name
+ s=string.gsub(s, "1", "I") -- replace the numbers in name
+ s=string.gsub(s, "2", "II") --
+ s=string.gsub(s, "3", "III") --
+ s=string.gsub(s, "4", "IV") --
+ s=string.gsub(s, "5", "V") --
+ s=string.gsub(s, "6", "VI") --
+ s=string.gsub(s, "7", "VII") --
+ s=string.gsub(s, "8", "VIII") --
+ s=string.gsub(s, "9", "IX") --
+ s=string.gsub(s, "%A", "x") -- Finally still removes all nealfabetic characters that were left there
+ if string.len(s) > maxmacrolength+1 then s=string.sub(s, 1, maxmacrolength) end -- to limit the maximum length of a macro
+return s
+end
+
+
+function thirddata.handlecsv.xls2ar(colname) -- convert Excel column name (like A, B, ... AA, AB, ...) into serial number of column (A->1, B->2, ...)
+ -- No for more than 702 columns (ie last column parametr for this function is ZZ)
+ -- for example Excel 2003 can handle only up to the column IV!
+ local colnumber=0
+ local colname=colname:upper()
+ for i=1, string.len(colname) do
+ local onechar = string.sub(colname,i,i)
+ colnumber=26*colnumber + (string.byte(onechar) - string.byte('A') + 1)
+ end
+ return colnumber
+end
+
+
+
+function thirddata.handlecsv.ar2xls(arnum) -- convert number to Excel name column
+ -- For more than 703 columns (ie column A to ZZ) should be a function to modify
+ -- Excel 2003 can handle only up to the column IV!
+ local part=math.floor(arnum/26)
+ local remainder = math.mod(arnum,26)
+ part = part - (math.mod(arnum,26)==0 and 1 or 0)
+ remainder = remainder + (math.mod(arnum,26)==0 and 26 or 0)
+ local ctl =''
+ if arnum < 703 then
+ if part > 0 then
+ ctl=string.char(64+part)
+ end
+ ctl = ctl .. string.char(64+remainder)
+ else
+ ctl = 'overZZ'
+ end
+ return ctl
+end
+
+
+function thirddata.handlecsv.ar2colnum(arnum) -- According to the settings glob. variable returns the column designation of TeX macros
+ -- generated TeX macros referring to values in columns are numbered a`la EXCEL ie cA, cB, ..., cAA, etc
+ -- or a`la roman number ie. cI, cII, cIII, cIV, ..., cXVIII, etc
+ -- if it is "romannumbers" setting, then columns wil numbered by Romna else ala Excel
+ if string.lower(thirddata.handlecsv.gUserColumnNumbering) == 'xls' then
+ return thirddata.handlecsv.ar2xls(arnum) -- a la EXCEL
+ else
+ return string.upper(converters.romannumerals(arnum)) -- a la big ROMAN - convert Arabic numbers to big Roman. Used for "numbering" column in the TeX macros
+ end
+end
+
+function thirddata.handlecsv.substitutecontentofcellof(csvfile,column,row,whattoreplace,substitution)
+-- Substitute text in cell content of specified CSV file with other text
+ local csvfile=thirddata.handlecsv.handlecsvfile(csvfile)
+ local column=thirddata.handlecsv.gColNames[csvfile][column]
+ local whattoreplace=tostring(whattoreplace)
+ local substitution=tostring(substitution)
+ return thirddata.handlecsv.getcellcontentof(csvfile,column,row):gsub(whattoreplace,substitution)
+end
+
+function thirddata.handlecsv.substitutecontentofcell(column,row,whattoreplace,substitution)
+-- Substitute text in cell content of current CSV file with other text
+ local csvfile=thirddata.handlecsv.getcurrentcsvfilename()
+ local column=thirddata.handlecsv.gColNames[csvfile][column]
+ return thirddata.handlecsv.substitutecontentofcellof(csvfile,column,row,whattoreplace,substitution)
+end
+
+function thirddata.handlecsv.substitutecontentofcellofcurrentrow(column,whattoreplace,substitution)
+-- Substitute text in cell content of current row of current CSV file with other text
+ local row=thirddata.handlecsv.linepointer()
+ return thirddata.handlecsv.substitutecontentofcell(column,row,whattoreplace,substitution)
+end
+
+function thirddata.handlecsv.processinputvalue(inputparameter,replacingnumber)
+-- when inputparameter is not correct, then return replacingnumber
+local returnparameter=inputparameter
+ if type(inputparameter)~= 'number' then
+ returnparameter=replacingnumber
+ end --
+return returnparameter
+end
+
+
+-- Main functions and macros:
+
+function thirddata.handlecsv.hookson()
+ thirddata.handlecsv.gUseHooks=true
+end
+
+function thirddata.handlecsv.hooksoff()
+ thirddata.handlecsv.gUseHooks=false
+end
+
+function thirddata.handlecsv.setfiletoscan(filetoscan)
+ local inpcsvfile=thirddata.handlecsv.handlecsvfile(filetoscan)
+ thirddata.handlecsv.gCurrentlyProcessedCSVFile=inpcsvfile
+end
+
+
+function thirddata.handlecsv.setheader()
+ thirddata.handlecsv.gCSVHeader=true
+ context([[\global\issetheadertrue%]])
+ context([[\global\notsetheaderfalse%]])
+end
+
+
+function thirddata.handlecsv.unsetheader()
+ thirddata.handlecsv.gCSVHeader=false
+ context([[\global\issetheaderfalse%]])
+ context([[\global\notsetheadertrue%]])
+end
+
+function thirddata.handlecsv.setsep(sep)
+ thirddata.handlecsv.gCSVSeparator=sep
+end
+
+function thirddata.handlecsv.unsetsep()
+ thirddata.handlecsv.gCSVSeparator=thirddata.handlecsv.gUserCSVSeparator
+end
+
+function thirddata.handlecsv.indexofnotemptyline(sernumline)
+local csvfilename=thirddata.handlecsv.getcurrentcsvfilename()
+ return thirddata.handlecsv.gTableNotEmptyRows[csvfilename][sernumline]
+end
+
+function thirddata.handlecsv.indexofemptyline(sernumline)
+local csvfilename=thirddata.handlecsv.getcurrentcsvfilename()
+ return thirddata.handlecsv.gTableEmptyRows[csvfilename][sernumline]
+end
+
+function thirddata.handlecsv.notmarkemptylines()
+local csvfilename=thirddata.handlecsv.getcurrentcsvfilename()
+ thirddata.handlecsv.gMarkingEmptyLines=false
+ for row=1,thirddata.handlecsv.gNumRows[csvfilename] do
+ thirddata.handlecsv.gTableNotEmptyRows[csvfilename][row]=row
+ end
+ thirddata.handlecsv.gTableEmptyRows[csvfilename]={}
+ thirddata.handlecsv.gNumEmptyRows[csvfilename]=0
+ thirddata.handlecsv.gNumNotEmptyRows[csvfilename]=thirddata.handlecsv.gNumRows[csvfilename]
+ context([[\global\emptylinefalse%]])
+ context([[\global\notemptylinetrue%]])
+ context([[\global\emptylinesmarkingfalse%]])
+ context([[\global\emptylinesnotmarkingtrue%]])
+end
+
+function thirddata.handlecsv.markemptylines()
+local csvfilename=thirddata.handlecsv.getcurrentcsvfilename()
+ thirddata.handlecsv.gTableEmptyRows[csvfilename]={}
+ thirddata.handlecsv.gTableNotEmptyRows[csvfilename]={}
+ thirddata.handlecsv.gMarkingEmptyLines=true
+ local counteremptylines=0
+ local counternotemptylines=0
+ for row=1,thirddata.handlecsv.gNumRows[csvfilename] do
+ if thirddata.handlecsv.testemptyrow(row) then
+ counteremptylines=counteremptylines+1
+ thirddata.handlecsv.gTableEmptyRows[csvfilename][counteremptylines]=row
+ else
+ counternotemptylines=counternotemptylines+1
+ thirddata.handlecsv.gTableNotEmptyRows[csvfilename][counternotemptylines]=row
+ end
+ end -- for
+ thirddata.handlecsv.gNumEmptyRows[csvfilename]=counteremptylines
+ thirddata.handlecsv.gNumNotEmptyRows[csvfilename]=counternotemptylines
+ context([[\global\emptylinesmarkingtrue%]])
+ context([[\global\emptylinesnotmarkingfalse%]])
+end
+
+
+function thirddata.handlecsv.resetmarkemptylines()
+-- do following lines only when file contain completely empty rows and is requiring testing empty lines
+local csvfilename=thirddata.handlecsv.getcurrentcsvfilename()
+ thirddata.handlecsv.gMarkingEmptyLines = thirddata.handlecsv.gUserMarkingEmptyLines
+ if thirddata.handlecsv.gMarkingEmptyLines then
+ thirddata.handlecsv.markemptylines()
+ else thirddata.handlecsv.notmarkemptylines()
+ end -- if thirddata.handlecsv.gMarkingEmptyLines
+end
+
+
+function thirddata.handlecsv.testemptyrow(lineindex)
+local csvfilename=thirddata.handlecsv.getcurrentcsvfilename()
+local linecontent=""
+local isemptyline=false
+ for column=1,thirddata.handlecsv.gNumCols[csvfilename] do
+ linecontent=linecontent..thirddata.handlecsv.gTableRows[csvfilename][lineindex][column]
+ end
+ if linecontent=="" or linecontent==nil then
+ isemptyline=true
+-- thirddata.handlecsv.gNumEmptyRows[csvfilename]=thirddata.handlecsv.gNumEmptyRows[csvfilename]+1
+ end
+ thirddata.handlecsv.gTableRowsIndex[csvfilename][lineindex]=isemptyline
+ return isemptyline
+end
+
+
+function thirddata.handlecsv.emptylineevaluation(lineindex)
+ if thirddata.handlecsv.gTableRowsIndex[thirddata.handlecsv.getcurrentcsvfilename()][lineindex] then
+ context([[\global\emptylinetrue%]])
+ context([[\global\notemptylinefalse%]])
+ else
+ context([[\global\emptylinefalse%]])
+ context([[\global\notemptylinetrue%]])
+ end
+ return thirddata.handlecsv.gTableRowsIndex[thirddata.handlecsv.getcurrentcsvfilename()][lineindex]
+end
+
+
+function thirddata.handlecsv.removeemptylines()
+-- This function remove empty rows only from field of variables thirddata.handlecsv.gTableRows!
+-- The field is only re-indexed and function does not affect onto the physical input CSV file!
+-- When the physical CSV file is reopened by using \open macro, the global field variable
+-- thirddata.handlecsv.gTableRows[csvfile] is reset into original state!
+ thirddata.handlecsv.markemptylines()
+ local csvfilename=thirddata.handlecsv.getcurrentcsvfilename()
+
+ for i=1,thirddata.handlecsv.gNumNotEmptyRows[csvfilename] do
+ local indexofnotemptyrow=thirddata.handlecsv.gTableNotEmptyRows[csvfilename][i]
+ -- i<--indexofnotemptyrow
+ thirddata.handlecsv.gTableRows[csvfilename][i]=thirddata.handlecsv.gTableRows[csvfilename][indexofnotemptyrow]
+ end
+
+ for i=thirddata.handlecsv.gNumNotEmptyRows[csvfilename]+1,thirddata.handlecsv.gNumRows[csvfilename] do
+ thirddata.handlecsv.gTableRows[csvfilename][i]=nil
+ end
+
+ thirddata.handlecsv.gNumRows[csvfilename]=thirddata.handlecsv.gNumNotEmptyRows[csvfilename]
+ thirddata.handlecsv.markemptylines()
+ thirddata.handlecsv.gTableEmptyRows[csvfilename]={}
+ thirddata.handlecsv.gTableNotEmptyRows[csvfilename]={}
+end
+
+
+function thirddata.handlecsv.hooksevaluation()
+ for i=1,#thirddata.handlecsv.gColumnNames[thirddata.handlecsv.getcurrentcsvfilename()] do
+ if not thirddata.handlecsv.texmacroisdefined('bch'..thirddata.handlecsv.gColumnNames[thirddata.handlecsv.getcurrentcsvfilename()][i]) then
+ context.setgvalue('bch'..thirddata.handlecsv.gColumnNames[thirddata.handlecsv.getcurrentcsvfilename()][i],'\\relax')
+ end
+ if not thirddata.handlecsv.texmacroisdefined('ech'..thirddata.handlecsv.gColumnNames[thirddata.handlecsv.getcurrentcsvfilename()][i]) then
+ context.setgvalue('ech'..thirddata.handlecsv.gColumnNames[thirddata.handlecsv.getcurrentcsvfilename()][i],'\\relax')
+ end
+ end
+end
+
+
+function thirddata.handlecsv.setgetcurrentcsvfile(filename)
+-- In the absence of the file name to use the global variable
+ thirddata.handlecsv.gCurrentlyProcessedCSVFile = (filename ~= nil) and filename or thirddata.handlecsv.gCurrentlyProcessedCSVFile
+ thirddata.handlecsv.gCurrentlyProcessedCSVFile = (thirddata.handlecsv.gCurrentlyProcessedCSVFile == nil) and filename or thirddata.handlecsv.gCurrentlyProcessedCSVFile
+ local filename = filename ~= nil and filename or thirddata.handlecsv.gCurrentlyProcessedCSVFile
+-- thirddata.handlecsv.gCurrentlyProcessedCSVFile = tostring(filename)
+ return tostring(filename)
+end
+
+function thirddata.handlecsv.handlecsvfile(filename)
+-- not used yet
+local filename = tostring(filename)
+ filename = string.gsub(filename, '"', '')
+ filename = string.gsub(filename, "'", "")
+if not (thirddata.handlecsv.isopenfile(filename)) then
+ filename = (filename ~= nil) and filename or thirddata.handlecsv.gCurrentlyProcessedCSVFile
+ filename = (thirddata.handlecsv.gCurrentlyProcessedCSVFile == nil) and filename or thirddata.handlecsv.gCurrentlyProcessedCSVFile
+ filename = filename ~= nil and filename or thirddata.handlecsv.gCurrentlyProcessedCSVFile
+ filename = filename ~= '' and filename or thirddata.handlecsv.gCurrentlyProcessedCSVFile
+end
+ return filename
+end
+
+function thirddata.handlecsv.getcurrentcsvfilename()
+-- return current (actual) CSV file
+ return tostring(thirddata.handlecsv.gCurrentlyProcessedCSVFile)
+end
+
+
+function thirddata.handlecsv.isopenfile(csvfilename)
+-- testing of opening CSV files
+ local retval=(thirddata.handlecsv.gOpenFiles[csvfilename] ~= nil)
+ return retval
+end
+
+function thirddata.handlecsv.closecsvfile(csvfilename)
+-- manual closing of CSV files
+ thirddata.handlecsv.gOpenFiles[csvfilename] = nil
+end
+
+
+function thirddata.handlecsv.getnumberofopencsvfiles()
+-- get the number of open files
+local count = 0
+for k, v in pairs(thirddata.handlecsv.gOpenFiles) do
+ count = count + 1
+end
+ return count
+end
+
+
+
+function thirddata.handlecsv.setpointersofopeningcsvfile(inpcsvfile)
+ thirddata.handlecsv.gCurrentLinePointer[inpcsvfile]=1
+ thirddata.handlecsv.gNumLine[inpcsvfile]=1 -- set numline counter of file inpcsvfile
+ thirddata.handlecsv.resetlinepointerof(inpcsvfile) -- set pointer to begin table (first row)
+ thirddata.handlecsv.setnumlineof(inpcsvfile,1)
+ context([[\global\EOFfalse%]])
+ context([[\global\notEOFtrue%]])
+ thirddata.handlecsv.resetmarkemptylines()
+end
+
+function thirddata.handlecsv.opencsvfile(filetoscan)
+-- Open CSV tabule, inicialize variables
+ -- open the table and load it into the global variable thirddata.handlecsv.gTableRows[filetoscan]
+ -- if the option thirddata.handlecsv.gCSVHeader==true is enabled, then into glob variable thirddata.handlecsv.gColumnNames[filetoscan]
+ -- sets the column names from the title, if not then sets XLS notation, ie. cA, cB, cC, ...
+ -- into global variables thirddata.handlecsv.gNumRows[filetoscan] and thirddata.handlecsv.gNumCols[filetoscan] it saves the number of rows and columns of the table
+ -- if the file header and the header line does not count the number of rows in the table
+ -- Additionally, they can defined ConTeXt macros \csvfilename, \numrows a \numcols
+
+ local inpcsvfile=thirddata.handlecsv.setgetcurrentcsvfile(filetoscan) -- set filetoscan as current processed csv file
+
+ if thirddata.handlecsv.isopenfile(inpcsvfile) then -- if file is open, then set needed pointers at first line of file only
+ thirddata.handlecsv.setpointersofopeningcsvfile(inpcsvfile)
+ else -- if CSV file is not open, then open it and set all needed variables
+
+ local inpcsvfile=thirddata.handlecsv.setgetcurrentcsvfile(inpcsvfile)
+ thirddata.handlecsv.gOpenFiles[inpcsvfile]=inpcsvfile -- memory opening file
+ thirddata.handlecsv.gColNames[inpcsvfile]={}
+ thirddata.handlecsv.gColumnNames[inpcsvfile]={}
+ thirddata.handlecsv.gTableRowsIndex[inpcsvfile]={}
+ thirddata.handlecsv.gTableRows[inpcsvfile]={}
+ thirddata.handlecsv.gTableEmptyRows[inpcsvfile]={}
+ thirddata.handlecsv.gTableNotEmptyRows[inpcsvfile]={}
+
+
+ local currentlyprocessedcsvfile = io.loaddata(inpcsvfile)
+ local mycsvsplitter = utilities.parsers.rfc4180splitter{
+ separator = thirddata.handlecsv.gCSVSeparator,
+ quote = thirddata.handlecsv.gCSVQuoter,
+ strict = true,
+ }
+ if thirddata.handlecsv.gCSVHeader then
+ thirddata.handlecsv.gTableRows[inpcsvfile], thirddata.handlecsv.gColumnNames[inpcsvfile] = mycsvsplitter(currentlyprocessedcsvfile,true)
+ inspect(thirddata.handlecsv.gTableRows[inpcsvfile])
+ inspect(thirddata.handlecsv.gColumnNames[inpcsvfile])
+ else -- if thirddata.handlecsv.gCSVHeader
+ thirddata.handlecsv.gTableRows[inpcsvfile], thirddata.handlecsv.gColumnNames[inpcsvfile] = mycsvsplitter(currentlyprocessedcsvfile)
+ inspect(thirddata.handlecsv.gTableRows[inpcsvfile])
+ thirddata.handlecsv.gColumnNames[inpcsvfile]={}
+ -- ad now set column names for withoutheader situation:
+ for i=1,#thirddata.handlecsv.gTableRows[inpcsvfile][1] do
+ -- OK, but not used: thirddata.handlecsv.gColumnNames[inpcsvfile][i]=thirddata.handlecsv.tmn(thirddata.handlecsv.gTableRows[inpcsvfile][1][i])
+ thirddata.handlecsv.gColumnNames[inpcsvfile][i]=tostring(thirddata.handlecsv.ar2xls(i)) -- set XLS notation (fill array with XLS names of columns like 'cA', 'cB', etc.)
+ end -- for
+ end -- if thirddata.handlecsv.gCSVHeader
+ for i=1,#thirddata.handlecsv.gTableRows[inpcsvfile][1] do
+ thirddata.handlecsv.gColNames[inpcsvfile][tostring(thirddata.handlecsv.tmn(thirddata.handlecsv.gColumnNames[inpcsvfile][i]))] = i -- for indexing use (register names of macros ie 'Firstname' etc...)
+ thirddata.handlecsv.gColNames[inpcsvfile][tostring(thirddata.handlecsv.gColumnNames[inpcsvfile][i])] = i -- for indexing use (register names of macros ie 'Firstname' etc...)
+ thirddata.handlecsv.gColNames[inpcsvfile][tostring(thirddata.handlecsv.ar2xls(i))] = i -- for indexcolname macro (register names of macros ie 'A', 'B', etc...)
+ thirddata.handlecsv.gColNames[inpcsvfile][tostring('c'..thirddata.handlecsv.ar2xls(i))] = i -- for indexcolname macro (register names of macros ie 'cA', 'cB', etc...)
+ thirddata.handlecsv.gColNames[inpcsvfile][tostring(i)] = i -- for indexcolname macro (register names of macros ie 'cA', 'cB', etc...)
+ thirddata.handlecsv.gColNames[inpcsvfile][i] = i -- for indexcolname macro (register names of macros ie 'cA', 'cB', etc...)
+ end -- for
+ local j=#thirddata.handlecsv.gTableRows[inpcsvfile][1]
+ for i=1,#thirddata.handlecsv.gTableRows[inpcsvfile][1] do
+ j=j+1
+ thirddata.handlecsv.gColumnNames[inpcsvfile][j]=tostring('c'..thirddata.handlecsv.ar2xls(i)) -- set XLS notation (fill array with XLS names of columns like 'cA', 'cB', etc.)
+ end -- for
+ if thirddata.handlecsv.gCSVHeader then
+ for i=1,#thirddata.handlecsv.gTableRows[inpcsvfile][1] do
+ j=j+1
+ thirddata.handlecsv.gColumnNames[inpcsvfile][j]=tostring(thirddata.handlecsv.ar2xls(i)) -- set XLS notation (fill array with XLS names of columns like 'cA', 'cB', etc.)
+ end -- for
+ for i=1,#thirddata.handlecsv.gTableRows[inpcsvfile][1] do
+ j=j+1
+ thirddata.handlecsv.gColumnNames[inpcsvfile][j]=tostring(thirddata.handlecsv.tmn(thirddata.handlecsv.gColumnNames[inpcsvfile][i])) -- maybe TeX incorect names of columns
+ end -- for
+ end -- if thirddata.handlecsv.gCSVHeader then
+
+ thirddata.handlecsv.gNumRows[inpcsvfile]=#thirddata.handlecsv.gTableRows[inpcsvfile] -- Getting number of rows
+ thirddata.handlecsv.gNumCols[inpcsvfile]=#thirddata.handlecsv.gTableRows[inpcsvfile][1] -- Getting number of columns
+ thirddata.handlecsv.gNumEmptyRows[inpcsvfile]=0
+ thirddata.handlecsv.gNumNotEmptyRows[inpcsvfile]=#thirddata.handlecsv.gTableRows[inpcsvfile]
+ thirddata.handlecsv.setpointersofopeningcsvfile(inpcsvfile) -- set pointers
+
+ if thirddata.handlecsv.gUseHooks then thirddata.handlecsv.hooksevaluation() end
+
+ end -- if thirddata.handlecsv.isopenfile(inpcsvfile) then
+return
+end -- of thirddata.handlecsv.opencsvfile(file)
+
+
+function thirddata.handlecsv.readlineof(inpcsvfile,numberofline) --
+-- Main function. Read data from specific line of specific file, parse them etc.
+ local inpcsvfile=thirddata.handlecsv.handlecsvfile(inpcsvfile)
+ local numberofline=numberofline
+ local returnpar=false
+ if type(numberofline)~= 'number' then
+ if numberofline==nil then
+ numberofline=thirddata.handlecsv.gCurrentLinePointer[inpcsvfile]
+ returnpar=true
+ else numberofline = 0
+ end -- if numberofline==nil
+ end -- if type(numberofline)
+ if (numberofline > 0 and numberofline <=thirddata.handlecsv.gNumRows[inpcsvfile]) then
+ thirddata.handlecsv.addtonumlineof(inpcsvfile,1)
+ thirddata.handlecsv.gCurrentLinePointer[inpcsvfile]=numberofline
+ returnpar=true
+ thirddata.handlecsv.assigncontentsof(inpcsvfile,thirddata.handlecsv.gTableRows[inpcsvfile][numberofline])
+ context([[\global\EOFfalse\global\notEOFtrue%]])
+ else
+ thirddata.handlecsv.assigncontentsof(inpcsvfile,'nil_line')
+ if numberofline > thirddata.handlecsv.gNumRows[inpcsvfile] then
+ context([[\global\EOFtrue\global\notEOFfalse%]])
+ end
+ end -- if (numberofline > 0
+--řešit thirddata.handlecsv.emptylineevaluation(numberofline)
+ return returnpar -- return true if numberofline is regular line, else return false
+end -- function thirddata.handlecsv.readlineof(inpcsvfile,numberofline) --
+
+
+function thirddata.handlecsv.readline(numberofline) --
+-- Main function. Read data from specific line of specific file, parse them etc.
+ local csvfile=thirddata.handlecsv.getcurrentcsvfilename()
+ if type(numberofline) == 'number' then
+ thirddata.handlecsv.readlineof(csvfile,numberofline) --
+ else
+ thirddata.handlecsv.readlineof(csvfile,thirddata.handlecsv.gCurrentLinePointer[csvfile]) --
+ end
+end
+
+
+function thirddata.handlecsv.createxlscommandof(xlsname,csvfile)
+local inpcsvfile=thirddata.handlecsv.handlecsvfile(csvfile)
+local cxlsname=tostring('col'..xlsname)
+local docxlsname=tostring('docol'..xlsname)
+local xlsname=tostring(''..xlsname)
+
+-- context([[\def\definice]]..xlsname..[[#1{\ctxlua{context(thirddata.handlecsv.getcellcontentof(']]..inpcsvfile..[[',']]..xlsname..[[','#1'))}}]])
+
+ interfaces.definecommand (docxlsname, {
+ arguments = { { "option", "string" } },
+ macro = function (opt_1)
+ if #opt_1>0 then
+ context(thirddata.handlecsv.getcellcontentof(inpcsvfile,xlsname,tonumber(opt_1)))
+ else
+ context(thirddata.handlecsv.getcellcontentof(inpcsvfile,xlsname,thirddata.handlecsv.gCurrentLinePointer[inpcsvfile]))
+ end
+ end
+ })
+ interfaces.definecommand(cxlsname, {
+ macro = function ()
+ context.dosingleempty()
+ context[docxlsname]()
+ end
+ })
+-- interfaces.definecommand ("column"..xlsname, {
+-- arguments = { { "option"} },
+-- macro = function (opt_1)
+-- if opt_1~="" then
+-- context(thirddata.handlecsv.getcellcontentof(inpcsvfile,xlsname,tonumber(opt_1)))
+-- else
+-- context(thirddata.handlecsv.getcellcontentof(inpcsvfile,xlsname,thirddata.handlecsv.gCurrentLinePointer[inpcsvfile]))
+-- end
+-- end
+-- })
+end
+
+
+function thirddata.handlecsv.createxlscommand(xlsname)
+local inpcsvfile=thirddata.handlecsv.getcurrentcsvfilename()
+thirddata.handlecsv.createxlscommandof(xlsname,inpcsvfile)
+end
+
+
+function thirddata.handlecsv.assigncontentsof(inpcsvfile,line) -- put data into columns macros
+-- after read of line this function put content of columns into specific TeX macros...
+--if tex.modes['XXL'] then context("XXL mode") else context("not XXL mode") end
+ local inpcsvfile=thirddata.handlecsv.handlecsvfile(inpcsvfile)
+ local cutoffinpcsvfile=thirddata.handlecsv.ParseCSVLine(inpcsvfile,".")[1] -- cut filename extension
+ for i=1,thirddata.handlecsv.gNumCols[inpcsvfile] do
+ content='nil' -- 1.10.2015
+ if line ~= 'nil_line' then content = line[i] end
+ local puremacroname=thirddata.handlecsv.gColumnNames[inpcsvfile][i]
+-- local macroname=cutoffinpcsvfile..thirddata.handlecsv.gColumnNames[inpcsvfile][i]
+ local macroname=thirddata.handlecsv.gColumnNames[inpcsvfile][i]
+-- context("macroname: "..macroname.."\\crlf")
+ local purexlsname=thirddata.handlecsv.ar2colnum(i)
+-- context("purexlsname: "..purexlsname.."\\crlf")
+ local xlsname='c'..purexlsname
+-- context("xlsname: "..xlsname.."\\crlf")
+ local xlsfilename=thirddata.handlecsv.tmn(cutoffinpcsvfile)..'c'..purexlsname
+-- context("xlsfilename: "..xlsfilename.."\\crlf")
+ local hookxlsname='h'..xlsname
+ local macroname=thirddata.handlecsv.tmn(macroname)
+ local puremacroname=thirddata.handlecsv.tmn(puremacroname)
+-- context("macroname: "..macroname.."\\crlf")
+ local hookmacroname='h'..macroname
+-- if content == ' ' then tex.print('space') end
+-- if content == '' then tex.print('empty') content=[[\empty]] end
+ context.setgvalue(xlsname, content) -- defining automatic TeX macros \cA, \cB, atd. resp. \cI, \cII, ... containing the contents of the line. Macros with names of the headers are updated automatically
+ context.setgvalue(xlsfilename, content) -- defining automatic TeX macros \filenamecA, \filenamecB, atd. resp. \cI, \cII, ... containing the contents of the line. Macros with names of the headers are updated automatically
+ -- was context.setgvalue(macroname,'\\'..xlsname) -- ie for example \let\Name\cA
+-- context.setgvalue(macroname,content) -- defining automatic TeX macros \Name, \Date, etc. (names gets from header), containing the contents of the line. Macros with names of the headers are updated automatically
+ context.setgvalue(puremacroname,content) -- defining automatic TeX macros \Name, \Date, etc. (names gets from header), containing the contents of the line. Macros with names of the headers are updated automatically
+ -- experimental version in next two lines:
+ -- this define variants of macros \colA, \colA[8], ... and \colFirstname, \colFirstname[11] etc.
+ thirddata.handlecsv.createxlscommandof(''..purexlsname,inpcsvfile) -- create macros \colA, \colB, etc. and their variants \colA[row], ...
+--if tex.modes['XXX'] then
+--context("XXX-"..macroname.."-XXX")
+--end
+ context.setgvalue('col'..macroname,'\\col'..purexlsname) -- and create fullname macros \colFirstname, \colFirstname[5], etc...
+-- context.setgvalue(''..macroname,'\\col'..purexlsname) -- and create fullname macros \colFirstname, \colFirstname[5], etc...
+-- context.setgvalue(''..macroname,'\\col'..purexlsname) -- and create fullname macros \colFirstname, \colFirstname[5], etc...
+ --
+ interfaces.definecommand ("column"..purexlsname, {
+ arguments = { { "string"} },
+ macro = function (opt_1)
+ if opt_1~="" then
+ context(thirddata.handlecsv.getcellcontentof(inpcsvfile,xlsname,tonumber(opt_1)))
+ else
+ context(thirddata.handlecsv.getcellcontentof(inpcsvfile,xlsname,thirddata.handlecsv.gCurrentLinePointer[inpcsvfile]))
+ end
+ end
+ })
+ --
+ -- and now create hooks macros:
+ if thirddata.handlecsv.gUseHooks then
+ context.setgvalue(hookxlsname,'\\bch\\bch'..xlsname..'\\'..xlsname..'\\ech'..xlsname..'\\ech') -- defining automatic TeX macros \hcA, \hcB, atd. resp. \hcI, \hcII, ... containing 'hooked' contents of the line. Macros with names of the headers are updated automatically)
+ context.setgvalue(hookmacroname,'\\bch\\bch'..macroname..'\\'..xlsname..'\\ech'..macroname..'\\ech ') -- defining automatic TeX macros \hName, \hDate, etc. (names gets from header), containing 'hooked' contents of the line. Macros with names of the headers are updated automatically)
+ end
+ end -- for i=1,
+end -- function thirddata.handlecsv.assigncontentsof(inpcsvfile,line) -- put data into columns macros
+
+
+function thirddata.handlecsv.assigncontents(line) -- put data into columns macros
+thirddata.handlecsv.assigncontentsof(thirddata.handlecsv.getcurrentcsvfilename(),line)
+end
+
+
+function thirddata.handlecsv.getcellcontentof(csvfile,column,row)
+-- Read data from specific cell of specific the csv table
+ -- local returnparametr='nil' -- 1.10.2015
+ local csvfile=thirddata.handlecsv.handlecsvfile(csvfile)
+ local returnparametr='' -- 9.1.2016
+ local column=column
+ local row=row
+ if type(column)=='string' then
+ local testcolumn=thirddata.handlecsv.gColNames[csvfile][column]
+ if testcolumn==nil then
+ column=thirddata.handlecsv.xls2ar(column)
+ else
+ column=testcolumn
+ end
+ else
+ testcolumn=tonumber(column)
+ if testcolumn==nil then
+ column=0
+ else
+ column=testcolumn
+ end
+ end
+ if column<=0 then column=1 end
+ if column>thirddata.handlecsv.gNumCols[csvfile] then column=thirddata.handlecsv.gNumCols[csvfile] end
+ if type(row)=='string' then
+ local testrow=tonumber(row)
+ if testrow==nil then
+ row=0
+ else
+ row=testrow
+ end
+ end
+ if type(column)=='number' and type(row)=='number' then
+ if row>0 and row <=thirddata.handlecsv.gNumRows[csvfile] and column>=0 and column<=thirddata.handlecsv.gNumCols[csvfile] then
+ returnparametr=thirddata.handlecsv.gTableRows[csvfile][row][column]
+ elseif row==0 then
+ returnparametr=thirddata.handlecsv.gColumnNames[csvfile][column]
+ end
+ end
+ return returnparametr
+end
+
+
+function thirddata.handlecsv.getcellcontent(column,row)
+-- Read data from specific cell of current open csv table
+ local csvfile=thirddata.handlecsv.getcurrentcsvfilename()
+ local returnparametr=thirddata.handlecsv.getcellcontentof(csvfile,column,row)
+ return returnparametr
+end
+
+
+function thirddata.handlecsv.nextlineof(csvfile)
+-- Move line pointer to next line.
+ local csvfile=thirddata.handlecsv.handlecsvfile(csvfile)
+ if thirddata.handlecsv.gCurrentLinePointer[csvfile] > thirddata.handlecsv.gNumRows[csvfile] then
+ thirddata.handlecsv.gCurrentLinePointer[csvfile]=thirddata.handlecsv.gNumRows[csvfile]
+ context([[\global\EOFtrue%]])
+ context([[\global\notEOFfalse%]])
+ else
+ thirddata.handlecsv.gCurrentLinePointer[csvfile]=thirddata.handlecsv.gCurrentLinePointer[csvfile]+1
+ context([[\global\EOFfalse%]])
+ context([[\global\notEOFtrue%]])
+ end
+end
+
+
+function thirddata.handlecsv.nextline()
+-- Move line pointer to next line.
+ local csvfile=thirddata.handlecsv.getcurrentcsvfilename()
+ thirddata.handlecsv.nextlineof(csvfile)
+end
+
+
+function thirddata.handlecsv.previouslineof(csvfile)
+-- Move line pointer to previous line.
+ local csvfile=thirddata.handlecsv.handlecsvfile(csvfile)
+ if thirddata.handlecsv.gCurrentLinePointer[csvfile] < 2 then
+ thirddata.handlecsv.gCurrentLinePointer[csvfile] = 1
+ else
+ thirddata.handlecsv.gCurrentLinePointer[csvfile]=thirddata.handlecsv.gCurrentLinePointer[csvfile] - 1
+ end
+ context([[\global\EOFfalse%]])
+ context([[\global\notEOFtrue%]])
+end
+
+
+function thirddata.handlecsv.previousline()
+-- Move line pointer to previous line.
+ local csvfile=thirddata.handlecsv.getcurrentcsvfilename()
+ thirddata.handlecsv.previouslineof(csvfile)
+end
+
+
+function thirddata.handlecsv.setlinepointerof(csvfile,numberofline)
+ local csvfile=thirddata.handlecsv.handlecsvfile(csvfile)
+ local numberofline = thirddata.handlecsv.processinputvalue(numberofline,thirddata.handlecsv.gCurrentLinePointer[csvfile])
+ if numberofline < 1 then numberofline = 1 end
+ if numberofline > thirddata.handlecsv.gNumRows[csvfile] then
+ numberofline=thirddata.handlecsv.gNumRows[csvfile]
+ end
+ thirddata.handlecsv.gCurrentLinePointer[csvfile]=numberofline
+ thirddata.handlecsv.readlineof(csvfile,numberofline)
+end
+
+
+function thirddata.handlecsv.setlinepointer(numberofline)
+ local csvfile=thirddata.handlecsv.getcurrentcsvfilename()
+ thirddata.handlecsv.setlinepointerof(csvfile,numberofline)
+end
+
+
+function thirddata.handlecsv.savelinepointer()
+ local csvfile=thirddata.handlecsv.getcurrentcsvfilename()
+ thirddata.handlecsv.gSavedLinePointerNo = thirddata.handlecsv.gCurrentLinePointer[csvfile]
+end
+
+
+function thirddata.handlecsv.setsavedlinepointer()
+ thirddata.handlecsv.setlinepointer(thirddata.handlecsv.gSavedLinePointerNo)
+end
+
+
+function thirddata.handlecsv.resetlinepointerof(csvfile)
+-- Take pointer to first row of table
+ local csvfile=thirddata.handlecsv.handlecsvfile(csvfile)
+ thirddata.handlecsv.setlinepointerof(csvfile,1)
+end
+
+
+function thirddata.handlecsv.resetlinepointer()
+-- Take pointer to first row of table
+ local csvfile=thirddata.handlecsv.getcurrentcsvfilename()
+ thirddata.handlecsv.setlinepointerof(csvfile,1)
+end
+
+
+function thirddata.handlecsv.linepointerof(csvfile)
+ local csvfile=thirddata.handlecsv.handlecsvfile(csvfile)
+ return thirddata.handlecsv.gCurrentLinePointer[csvfile]
+end
+
+
+function thirddata.handlecsv.linepointer()
+ local csvfile=thirddata.handlecsv.getcurrentcsvfilename()
+ -- return thirddata.handlecsv.gCurrentLinePointer[csvfile] -- cause problem with decimal point for higher versions of Lua
+ -- return math.tointeger(thirddata.handlecsv.gCurrentLinePointer[csvfile]) -- cause incompatibility for lower version of Lua
+ return math.floor(tonumber(thirddata.handlecsv.gCurrentLinePointer[csvfile])) -- compatible with lower and higher versions of Lua
+end
+
+
+function thirddata.handlecsv.getcurrentlinepointer() -- for compatibility
+ return thirddata.handlecsv.linepointer()
+end
+
+
+function thirddata.handlecsv.getlinepointer() -- for compatibility
+ return thirddata.handlecsv.linepointer()
+end
+
+
+function thirddata.handlecsv.setnumlineof(csvfile,numline)
+ local csvfile=thirddata.handlecsv.handlecsvfile(csvfile)
+thirddata.handlecsv.gNumLine[csvfile]=numline
+end
+
+
+function thirddata.handlecsv.setnumline(numline)
+ local csvfile=thirddata.handlecsv.getcurrentcsvfilename()
+thirddata.handlecsv.setnumlineof(csvfile,numline)
+end
+
+
+function thirddata.handlecsv.resetnumlineof(csvfile)
+local csvfile=thirddata.handlecsv.handlecsvfile(csvfile)
+ thirddata.handlecsv.setnumlineof(csvfile,0)
+end
+
+function thirddata.handlecsv.resetnumline()
+local csvfile=thirddata.handlecsv.getcurrentcsvfilename()
+ thirddata.handlecsv.resetnumlineof(csvfile)
+end
+
+function thirddata.handlecsv.addtonumlineof(inpcsvfile,numline)
+ local inpcsvfile=thirddata.handlecsv.handlecsvfile(inpcsvfile)
+ thirddata.handlecsv.gNumLine[inpcsvfile]=thirddata.handlecsv.gNumLine[inpcsvfile]+numline
+end
+
+
+function thirddata.handlecsv.addtonumline(numline)
+ local inpcsvfile=thirddata.handlecsv.getcurrentcsvfilename()
+ thirddata.handlecsv.addtonumlineof(inpcsvfile,numline)
+end
+
+function thirddata.handlecsv.numlineof(csvfile)
+local csvfile=thirddata.handlecsv.handlecsvfile(csvfile)
+ return thirddata.handlecsv.gNumLine[csvfile]
+end
+
+function thirddata.handlecsv.numline()
+local csvfile=thirddata.handlecsv.getcurrentcsvfilename()
+ return thirddata.handlecsv.gNumLine[csvfile]
+end
+
+
+function thirddata.handlecsv.nextnumlineof(csvfile)
+-- Move numline pointer to next number.
+local csvfile=thirddata.handlecsv.handlecsvfile(csvfile)
+ thirddata.handlecsv.gNumLine[csvfile]=thirddata.handlecsv.gNumLine[csvfile]+1
+end
+
+
+function thirddata.handlecsv.nextnumline()
+-- Move numline pointer to next number.
+local csvfile=thirddata.handlecsv.getcurrentcsvfilename()
+ thirddata.handlecsv.gNumLine[csvfile]=thirddata.handlecsv.gNumLine[csvfile]+1
+end
+
+
+function thirddata.handlecsv.numrowsof(csvfile)
+local csvfile=thirddata.handlecsv.handlecsvfile(csvfile)
+-- context(thirddata.handlecsv.gNumRows[csvfile])
+ return thirddata.handlecsv.gNumRows[csvfile]
+end
+
+function thirddata.handlecsv.numrows()
+local csvfile=thirddata.handlecsv.getcurrentcsvfilename()
+-- context(thirddata.handlecsv.gNumRows[csvfile])
+ return thirddata.handlecsv.gNumRows[csvfile]
+end
+
+
+function thirddata.handlecsv.numemptyrows()
+ return thirddata.handlecsv.gNumEmptyRows[thirddata.handlecsv.getcurrentcsvfilename()]
+end
+
+
+function thirddata.handlecsv.numnotemptyrows()
+return thirddata.handlecsv.gNumRows[thirddata.handlecsv.getcurrentcsvfilename()]-thirddata.handlecsv.gNumEmptyRows[thirddata.handlecsv.getcurrentcsvfilename()]
+end
+
+
+function thirddata.handlecsv.numcolsof(csvfile)
+local csvfile=thirddata.handlecsv.handlecsvfile(csvfile)
+ context(thirddata.handlecsv.gNumCols[csvfile])
+end
+
+function thirddata.handlecsv.numcols()
+local csvfile=thirddata.handlecsv.getcurrentcsvfilename()
+ context(thirddata.handlecsv.gNumCols[csvfile])
+-- thirddata.handlecsv.numcolsof(csvfile)
+end
+
+
+function thirddata.handlecsv.resethooks()
+-- initialize ConTeXt hooks
+ context([[%
+ \letvalue{blinehook}=\relax%
+ \letvalue{elinehook}=\relax%
+ \letvalue{bfilehook}=\relax%
+ \letvalue{efilehook}=\relax%
+ \letvalue{bch}=\relax%
+ \letvalue{ech}=\relax%
+ ]])
+end
+
+
+function thirddata.handlecsv.string2context(str2ctx)
+-- for safety writen
+ local s=str2ctx
+ s=string.gsub(s, "%%(.-)\n", "\n") -- remove TeX comments from string. From % character to the end of line
+ -- s=string.gsub(s, '\n', "")
+ context(s)
+ -- texsprint(s) -- for debugging ...
+end
+
+
+function thirddata.handlecsv.doloopfromto(from, to, action)
+ context[[\opencsvfile]]
+ context[[\edef\tempnumline{\numline}]] -- 23.6.2017
+ context[[\resetnumline]] -- uncommented 23.6.2017
+ if thirddata.handlecsv.gUseHooks then context[[\bfilehook]] end
+ context[[\removeunwantedspaces]]
+ local csvfile=thirddata.handlecsv.getcurrentcsvfilename()
+ local gnumrows=thirddata.handlecsv.gNumRows[csvfile]+0
+ local from=from+0
+ local to=to+0
+ local step=1
+ local docycle=true
+ if (from>gnumrows and to>gnumrows) then docycle=false end
+ if docycle then
+ if from>to then
+ step=-1
+ if from>gnumrows then from=gnumrows end
+ if to<0 then to=0 end
+ else -- if from<=to
+ if to>gnumrows then to=gnumrows end
+ if from<0 then from=1 end
+ end
+ for i=from, to, step do
+ if thirddata.handlecsv.gUseHooks then context[[\blinehook]] end
+ context([[\readline{]]..i..[[}]]) --
+ context(action)
+ if thirddata.handlecsv.gUseHooks then context[[\elinehook]] end
+ end
+ end -- docycle
+-- context[[\removeunwantedspaces]]
+if thirddata.handlecsv.gUseHooks then context[[\efilehook]] end
+context[[\setnumline{\tempnumline}]] -- 23.6.2017
+end -- function thirddata.handlecsv.doloopfromto
+
+
+function thirddata.handlecsv.doloopfornext(numberofrows, action)
+ if thirddata.handlecsv.gUseHooks then context[[\bfilehook]] end
+ context[[\removeunwantedspaces]]
+ local csvfile=thirddata.handlecsv.getcurrentcsvfilename()
+ local gnumrows=thirddata.handlecsv.gNumRows[csvfile]+0
+ local from=thirddata.handlecsv.gCurrentLinePointer[csvfile]+0
+ local to=thirddata.handlecsv.gCurrentLinePointer[csvfile]+numberofrows
+ local step=1
+ local docycle=true
+ if from>to then
+ step=-1
+ if from>gnumrows then from=gnumrows end
+ if to<0 then to=0 end
+ else -- if from<=to
+ if to>gnumrows then to=gnumrows end
+ if from<0 then from=1 end
+ end
+ for i=from, to-step, step do
+ if thirddata.handlecsv.gUseHooks then context[[\blinehook]] end
+ context([[\readline{]]..i..[[}]]) -- context(thirddata.handlecsv.readline(i))
+ context(action)
+ if thirddata.handlecsv.gUseHooks then context[[\elinehook]] end
+ end
+ thirddata.handlecsv.addtonumline(-1)
+context[[\removeunwantedspaces]]
+if thirddata.handlecsv.gUseHooks then context[[\efilehook]] end
+context[[\nextrow]]
+end -- function thirddata.handlecsv.doloopfornext
+
+
+
+-- ConTeXt source:
+local string2print=[[%
+% library newifs for testing during processing CSV table
+\newif\ifissetheader%
+\newif\ifnotsetheader%
+\newif\ifEOF%
+\newif\ifnotEOF%
+\newif\ifemptyline%
+\newif\ifnotemptyline%
+\newif\ifemptylinesmarking% setting by macros \markemptylines and \notmarkemptylines
+\newif\ifemptylinesnotmarking% setting by \markemptylines and \notmarkemptylines
+
+
+% Macros defining above in source text:
+\let\lineaction\empty% set user define macro into default value
+\def\resethooks{\ctxlua{context(thirddata.handlecsv.resethooks())}}
+\resethooks % -- DO IT NOW !!!
+\def\hookson{\ctxlua{thirddata.handlecsv.hookson()}}
+\let\usehooks\hookson % -- synonym only
+\def\hooksoff{\ctxlua{thirddata.handlecsv.hooksoff()}}
+\def\setheader{\ctxlua{thirddata.handlecsv.setheader()}}
+\def\unsetheader{\ctxlua{thirddata.handlecsv.unsetheader()}}
+\let\resetheader\unsetheader % -- for compatibility
+\def\setsep#1{\ctxlua{thirddata.handlecsv.setsep('#1')}}
+\def\unsetsep{\ctxlua{thirddata.handlecsv.unsetsep()}}
+\let\resetsep\unsetsep % -- for compatibility
+\def\setfiletoscan#1{\ctxlua{thirddata.handlecsv.setfiletoscan('#1');thirddata.handlecsv.opencsvfile()}}
+\def\setcurrentcsvfile[#1]{\ctxlua{thirddata.handlecsv.setgetcurrentcsvfile('#1')}}
+
+
+\def\numrows{\ctxlua{context(thirddata.handlecsv.numrows())}}
+\def\numrowsof[#1]{\ctxlua{context(thirddata.handlecsv.numrowsof('#1'))}}
+\def\numcols{\ctxlua{context(thirddata.handlecsv.gNumCols[thirddata.handlecsv.gCurrentlyProcessedCSVFile])}}
+\def\numcolsof[#1]{\ctxlua{context(thirddata.handlecsv.gNumCols['#1'])}}
+\def\currentcsvfile{\ctxlua{context(thirddata.handlecsv.getcurrentcsvfilename())}}
+\let\csvfilename\currentcsvfile % for compatibility using
+
+
+\def\numemptyrows{\ctxlua{context(thirddata.handlecsv.numemptyrows())}}
+\def\numnotemptyrows{\ctxlua{context(thirddata.handlecsv.numnotemptyrows())}}
+
+
+% usefull tool macros :
+
+% Pass the contents of the macro into parameter
+\def\thenumexpr#1{\the\numexpr(#1+0)}
+% Add content (#2) into content of macro #1
+\long\def\addto#1#2{\expandafter\def\expandafter#1\expandafter{#1#2}}
+% Expanded version of previous macro
+\long\def\eaddto#1#2{\edef#1{#1#2}}
+
+
+
+% Get content of specific cell of CSV table. Calling: \csvcell[column number,row number] OR \csvcell['ColumnName',row number]
+\def\getcsvcell[#1,#2]{\ctxlua{context(thirddata.handlecsv.getcellcontent(#1,#2))}}%
+%%%%%\def\getcsvcell[#1,#2]{\if!#2!\ctxlua{context(thirddata.handlecsv.getcellcontent(#1,thirddata.handlecsv.gCurrentLinePointer[thirddata.handlecsv.getcurrentcsvfilename()]))}\else\ctxlua{context(thirddata.handlecsv.getcellcontent(#1,#2))}\fi}%
+
+% Get content of specific cell of CSV table. Calling: \csvcell[column number,row number] OR \csvcell['ColumnName',row number]
+\def\getcsvcellof[#1][#2,#3]{\ctxlua{context(thirddata.handlecsv.getcellcontentof("#1",#2,#3))}}%
+
+
+% Get content of specific cell of CSV table. Calling: \csvcell[column number,row number or row number getting from macro] OR \csvcell['ColumnName',row number or row number getting from macro]
+\def\csvcell[#1,#2]{\getcsvcell[#1,\the\numexpr(#2+0)]}%
+%\def\csvcell\getcsvcell
+
+
+% Get content of specific cell of current line of CSV table. Calling: \currentcell{column number} OR \currentcell{'ColumnName'}
+\def\currentcsvcell#1{\getcsvcell[#1,\thenumexpr{\linepointer}]}%
+\let\currcell\currentcsvcell
+
+% Get content of specific cell of next line of CSV table. Calling: \nextcell{column number} OR \nextcell{'ColumnName'}
+\def\nextcsvcell#1{\ifnum\linepointer<\numrows{\getcsvcell[#1,\thenumexpr{\linepointer+1}]}\fi}%
+\let\nextcell\nextcsvcell
+
+% Get content of specific cell of previous line of CSV table. Calling: \previouscell{column number} OR \previouscell{'ColumnName'}
+\def\previouscsvcell#1{\ifnum\linepointer>1{\getcsvcell[#1,\thenumexpr{\linepointer-1}]}\fi}%
+\let\prevcell\previouscsvcell
+
+
+% Get column name of n-th column of CSV table. When is set header, then get headername else get XLSname
+\def\colnameof[#1][#2]{\ctxlua{context(thirddata.handlecsv.gColumnNames['#1'][#2])}}%
+\def\colname[#1]{\ctxlua{context(thirddata.handlecsv.gColumnNames[thirddata.handlecsv.getcurrentcsvfilename()][#1])}}%
+
+% Get index (ie serrial number) of strings columns names (own name or XLS name)
+\def\indexcolnameof[#1][#2]{\ctxlua{context(thirddata.handlecsv.gColNames['#1'][#2])}}%
+\def\indexcolname[#1]{\ctxlua{context(thirddata.handlecsv.gColNames[thirddata.handlecsv.getcurrentcsvfilename()][#1])}}%
+
+% Get (alternative) XLS column name (of n-th column)
+\def\xlscolname[#1]{\ctxlua{context(thirddata.handlecsv.ar2colnum(#1))}}%
+
+% Get (alternative) XLS column name (of n-th column)
+\def\cxlscolname[#1]{\ctxlua{context('c'..thirddata.handlecsv.ar2colnum(#1))}}%
+
+% Get column TeX name of n-th column of CSV table. When is set header, then get headername else get XLSname
+\def\texcolname[#1]{\ctxlua{context(thirddata.handlecsv.tmn(thirddata.handlecsv.gColumnNames[thirddata.handlecsv.getcurrentcsvfilename()][#1]))}}%
+
+
+% Get content of n-th column of current row
+\def\columncontent[#1]{%
+\getcsvcell[#1,\ctxlua{context(thirddata.handlecsv.linepointer())}] %
+%\getcsvcell[#1,\linepointer]%
+%\getcsvcell[#1,\ctxlua{context(thirddata.handlecsv.linepointer())}]%
+%\ctxlua{context(tostring(thirddata.handlecsv.getcellcontent(#1,8)))}
+}%
+
+% Substitution of text #2 in cell content by text #3. Substitution is done in the current column of column #1 (number, XLS name or cX name)
+\def\replacecontentin#1#2#3{\ctxlua{context(thirddata.handlecsv.substitutecontentofcellofcurrentrow('#1','#2','#3'))}}%
+
+% Get number from XLS column name (ie n-th column)
+\def\numberxlscolname[#1]{\ctxlua{context(thirddata.handlecsv.xls2ar(#1))}}%
+%%%\def\columncontent[#1]{\ctxlua{context(thirddata.handlecsv.getcellcontent(#1,thirddata.handlecsv.linepointer()))}}
+%%%\def\columncontent[#1]{\ctxlua{context(thirddata.handlecsv.getcellcontent(thirddata.handlecsv.gColNames[#1],thirddata.handlecsv.linepointer()))}}
+\def\columncontentof[#1][#2]{\ctxlua{context(thirddata.handlecsv.getcellcontentof('#1',thirddata.handlecsv.gColNames['#1'][#2],thirddata.handlecsv.linepointerof('#1')))}}
+\def\columncontent[#1]{\ctxlua{context(thirddata.handlecsv.getcellcontent(thirddata.handlecsv.gColNames[thirddata.handlecsv.getcurrentcsvfilename()][#1],thirddata.handlecsv.linepointerof(thirddata.handlecsv.getcurrentcsvfilename())))}}
+\def\resetlinepointer{\ctxlua{context(thirddata.handlecsv.resetlinepointer())}}
+\def\resetlinepointerof[#1]{\ctxlua{context(thirddata.handlecsv.resetlinepointerof('#1'))}}
+\let\resetlineno\resetlinepointer
+\let\resetsernumline\resetlinepointer
+\def\setnumline#1{\ctxlua{thirddata.handlecsv.setnumline(#1)}}
+\def\resetnumline{\ctxlua{context(thirddata.handlecsv.resetnumline())}}
+\resetnumline % DO IT NOW
+\def\linepointer{\ctxlua{context(thirddata.handlecsv.linepointer())}}
+\def\linepointerof[#1]{\ctxlua{context(thirddata.handlecsv.linepointerof('#1'))}}
+\let\lineno\linepointer
+\let\sernumline\linepointer
+\def\numline{\ctxlua{context(thirddata.handlecsv.numline())}}
+\def\addtonumline#1{\ctxlua{thirddata.handlecsv.addtonumline(#1)}}
+%\def\setlinepointer#1{\ctxlua{thirddata.handlecsv.setlinepointer(#1);thirddata.handlecsv.readline(#1)}}
+\def\setlinepointerof[#1]#2{\ctxlua{thirddata.handlecsv.setlinepointerof('#1',#2)}}
+\def\setlinepointer#1{\ctxlua{thirddata.handlecsv.setlinepointer(#1)}}
+\def\savelinepointer{\ctxlua{thirddata.handlecsv.savelinepointer()}}
+\let\savelineno\savelinepointer % synonym
+\def\setsavedlinepointer{\ctxlua{thirddata.handlecsv.setsavedlinepointer()}}
+\let\setsavedlineno\setsavedlinepointer % synonym
+\def\indexofnotemptyline#1{\ctxlua{context(thirddata.handlecsv.indexofnotemptyline(#1))}}
+\def\indexofemptyline#1{\ctxlua{context(thirddata.handlecsv.indexofemptyline(#1))}}
+\def\notmarkemptylines{\ctxlua{thirddata.handlecsv.notmarkemptylines()}}
+\def\markemptylines{\ctxlua{thirddata.handlecsv.markemptylines()}}
+\def\resetmarkemptylines{\ctxlua{thirddata.handlecsv.resetmarkemptylines()}}%
+\def\removeemptylines{\ctxlua{thirddata.handlecsv.removeemptylines()}}%
+\def\nextlineof[#1]{\ctxlua{thirddata.handlecsv.nextlineof('#1')}} % -- macro for skip to next line. \nextlineof no read data from current line unlike \nextrow macro.
+\def\nextline{\ctxlua{thirddata.handlecsv.nextline()}} % -- macro for skip to next line. \nextline no read data from current line unlike \nextrow macro.
+\def\prevlineof[#1]{\ctxlua{thirddata.handlecsv.previouslineof('#1')}} % -- macro for skip to previous line. \prevlineof no read data from current line unlike \prevrowof macro.
+\def\prevline{\ctxlua{thirddata.handlecsv.previousline()}} % -- macro for skip to previous line. \prevline no read data from current line unlike \prevrow macro.
+\def\nextnumline{\ctxlua{thirddata.handlecsv.nextnumline()}} % -- macro for add numline counter.
+%\def\nextrow{\readline\nextline} % -- For compatibility
+\def\nextrow{\nextline\readline} % -- For compatibility (changed 2015-09-22)
+\def\nextrowof[#1]{\nextlineof[#1]\readlineof[#1]{\ctxlua{context(thirddata.handlecsv.linepointerof('#1'))}}} % -- For compatibility (changed 2015-09-22)
+%\def\nextrowof[#1]{\nextlineof[#1]\readlineof[#1]{\ctxlua{context(thirddata.handlecsv.gCurrentLinePointer['#1'])}}} % -- For compatibility (changed 2015-09-22)
+\def\prevrow{\prevline\readline}
+\def\prevrowof[#1]{\prevlineof[#1]\readlineof[#1]{\ctxlua{context(thirddata.handlecsv.linepointerof('#1'))}}}
+\def\exitlooptest{\ifEOF\exitloop\else\nextrow\fi}
+
+
+
+
+% MAIN CONTEXT MACRO DEFINITIONS
+
+% Open CSV file. Syntax: \opencsvfile or \opencsvfile{filename}.
+\def\opencsvfile{%
+ \dosingleempty\doopencsvfile%
+}%
+
+\def\doopencsvfile[#1]{%
+ \dosinglegroupempty\dodoopencsvfile%
+}%
+
+\def\dodoopencsvfile#1{%
+ \iffirstargument%
+ \ctxlua{thirddata.handlecsv.opencsvfile("#1")}%
+ \doifnot{\env{MainLinePointer}}{}{\setlinepointer{\env{MainLinePointer}}}% added by Pablo
+ \else%
+ \ctxlua{thirddata.handlecsv.opencsvfile()}%
+ \fi%
+}%
+
+
+% manual closing of CSV file
+\def\closecsvfile#1{\ctxlua{thirddata.handlecsv.closecsvfile("#1")}}
+
+% Read data from n-th line of CSV table. Calling without parameter read current line (pointered by global variable)
+\def\readline{\dosingleempty\doreadline}%
+
+\def\doreadline[#1]{\dosinglegroupempty\dodoreadline}%
+
+% They must remain in such a compact form, otherwise it returns unwanted gaps !!!!
+\def\dodoreadline#1{\iffirstargument\ctxlua{thirddata.handlecsv.readline(#1)}\else\ctxlua{thirddata.handlecsv.readline(thirddata.handlecsv.gCurrentLinePointer[thirddata.handlecsv.gCurrentlyProcessedCSVFile])}\fi}%
+
+
+\def\readlineof[#1]#2{\ctxlua{thirddata.handlecsv.readlineof('#1',#2)}}
+
+%\def\readline{\ctxlua{thirddata.handlecsv.readline(thirddata.handlecsv.gCurrentLinePointer[thirddata.handlecsv.gCurrentlyProcessedCSVFile])}}%
+
+
+\def\readandprocessparameters#1#2#3#4{%
+ \edef\firstparam{#1}%
+ \edef\secondparam{#2}%
+ \edef\thirdparam{#3}%
+ \def\fourthparam{#4}%
+ \edef\paroperator{#2}%
+ % operator '==' is for strings comparing converted to 'eq' operator; a blank space before the percent sign is strictly required!!!
+ \ctxlua{if '#2'=="==" and not(type(tonumber('#1'))=='number' and type(tonumber('#3'))=='number') then context('\\def\\paroperator{eq}') end}%
+ % operator '~=' is for strings comparing converted to 'neq' operator; a blank space before the percent sign is strictly required !!!
+ \ctxlua{if '#2'=="~=" and not(type(tonumber('#1'))=='number' and type(tonumber('#3'))=='number') then context('\\def\\paroperator{neq}') end}%
+}%
+
+% MACROS FOR CYCLES PROCESSING. DO ACTIONS IN CYCLES
+
+
+% In this function to remove unwanted gaps
+% 1. \doloopfromto{from}{to}{action}
+% do action "action" from line "from" to line "to" of open CSV file
+\def\doloopfromto#1#2#3{\ctxlua{thirddata.handlecsv.doloopfromto([==[\thenumexpr{#1}]==],[==[\thenumexpr{#2}]==],[==[\detokenize{#3}]==])}}%
+%\def\doloopfromto#1#2#3{\ctxlua{thirddata.handlecsv.doloopfromto([==[\thenumexpr{#1}]==],[==[\thenumexpr{#2}]==],[==[\expanded{#3}]==])}}%
+
+\def\Doloopfromto#1#2#3{% deprecated - old version - no longer recommended
+ {\opencsvfile}%
+ {\resetnumline}%
+ \bfilehook%
+ \removeunwantedspaces%
+ \ifnum#1<#2\dostepwiserecurse{#1}{#2}{1}{\blinehook{\readline{\recurselevel}}#3\elinehook}%
+ \else\dostepwiserecurse{#1}{#2}{-1}{\blinehook{\readline{\recurselevel}}#3\elinehook}%
+ \fi%
+ \removeunwantedspaces%
+ \efilehook%
+}%
+
+% 2. \doloopforall % implicit do \lineaction for all lines of open CSV table
+% \doloopforall{\action} % do \action macro for all lines of open CSV table
+\def\doloopforall{\dosinglegroupempty\doloopforAll}%
+
+\def\doloopforAll#1{%
+ \doifsomethingelse{#1}{%1 args.
+ \doloopfromto{1}{\numrows}{#1}%
+ }{%
+ \doloopfromto{1}{\numrows}{\lineaction}%
+ }%
+}%
+
+% 3. \doloopaction % implicit use \lineaction macro
+% \doloopaction{\action} % use \action macro for all lines of open CSV file
+% \doloopaction{\action}{4} % use \action macro for first 4 lines
+% \doloopaction{\action}{2}{5} % use \action macro for lines from 2 to 5
+\def\doloopaction{\dotriplegroupempty\doloopAction}
+
+\def\doloopAction#1#2#3{%
+\opencsvfile%
+% \resetnumline % commented 22.6.2017
+\doifsomethingelse{#3}{%3 args.
+ \doloopfromto{#2}{#3}{#1}% if 3 arguments then do #1 macro from #2 line to #3 line
+ }{%
+ \doifsomethingelse{#2}{%2 args.
+ \doloopfromto{1}{#2}{#1}% if 2 arguments then do #1 macro for first #2 lines
+ }%
+ {\doifsomethingelse{#1}{% 1 arg.
+ \doloopfromto{1}{\numrows}{#1}%
+ }{% if without arguments then do \lineaction macro for all lines
+ \doloopfromto{1}{\numrows}{\lineaction}%
+ }%
+ }%
+ }%
+}%
+
+
+% 4. \doloopif{value1}{[compare_operator]}{value2}{macro_for_doing} % [compareoperators] <, >, ==(eq), ~=(neq), >=, <=, in, ~in, until, while
+% actions for rows of open CSV file which are responded of condition
+\def\doloopif#1#2#3#4{%
+ \edef\tempnumline{\numline}% 23.6.2017
+ \readandprocessparameters{#1}{#2}{#3}{#4}%
+ \removeunwantedspaces% 25.3.2019
+ % \resetnumline % 22.6.2017
+ \bfilehook%
+ % and now process actual operator
+ \processaction[\paroperator][%
+ <=>{% {number1}{<}{number2} ... Less
+ \doloopfromto{1}{\numrows}{\ctxlua{if #1<#3 then context('\\blinehook\\fourthparam\\elinehook') else thirddata.handlecsv.addtonumline(-1) end}}%
+ },% end < ... Less
+ >=>{% {number1}{>}{number2} ... Greater
+ \doloopfromto{1}{\numrows}{\ctxlua{if #1>#3 then context('\\blinehook\\fourthparam\\elinehook') else thirddata.handlecsv.addtonumline(-1) end}}%
+ },% end > ... Greater
+ ===>{% {number1}{==}{number2} ... Equal
+ \doloopfromto{1}{\numrows}{\ctxlua{if #1==#3 then context('\\blinehook\\fourthparam\\elinehook') else thirddata.handlecsv.addtonumline(-1) end}}%
+ },% end == ... Equal
+ ~==>{% {number1}{~=}{number2} ... Not Equal
+ \doloopfromto{1}{\numrows}{\ctxlua{if #1~=#3 then context('\\blinehook\\fourthparam\\elinehook') else thirddata.handlecsv.addtonumline(-1) end}}%
+ },% end ~= ... Not Equal
+ >==>{% {number1}{>=}{number2} ... GreaterOrEqual
+ \doloopfromto{1}{\numrows}{\ctxlua{if #1>=#3 then context('\\blinehook\\fourthparam\\elinehook') else thirddata.handlecsv.addtonumline(-1) end}}%
+ },% end >= ... GreaterOrEqual
+ <==>{% {number1}{<=}{number2} ... LessOrEqual
+ \doloopfromto{1}{\numrows}{\ctxlua{if #1<=#3 then context('\\blinehook\\fourthparam\\elinehook') else thirddata.handlecsv.addtonumline(-1) end}}%
+ },% end <= ... LessOrEqual
+ eq=>{% command {string1}{==}{string2} is converted to command command {string1}{eq}{string2} ... string1 is equal string2
+ \doloopfromto{1}{\numrows}{\doifelse{#1}{#3}{\blinehook\fourthparam\elinehook}{\addtonumline{-1}}}% 23.06.2017
+ %%%%%\doloopfromto{1}{\numrows}{\ctxlua{if '#1'=='#3' then context('\\blinehook\\fourthparam\\elinehook') else thirddata.handlecsv.addtonumline(-1) end}}%
+ },% end eq
+ neq=>{% command {string1}{~=}{string2} is converted to command command {string1}{neq}{string2} ... string1 is not equal string2
+ \doloopfromto{1}{\numrows}{\doifelse{#1}{#3}{\ctxlua{thirddata.handlecsv.addtonumline(-1)}}{\blinehook\fourthparam\elinehook}}% 23.06.2017
+ %%%%%\doloopfromto{1}{\numrows}{\ctxlua{if '#1'~='#3' then context('\\blinehook\\fourthparam\\elinehook') else thirddata.handlecsv.addtonumline(-1) end}}%
+ },% end neq
+ in=>{% {substring}{in}{string} ... substring is contained inside string
+ \doloopfromto{1}{\numrows}{\doifinstringelse{#1}{#3}{\blinehook\fourthparam\elinehook}{\addtonumline{-1}}}% \doifincsnameelse
+ },% end in
+ ~in=>{% {substring}{~in}{string} ... substring is not contained inside string
+ \doloopfromto{1}{\numrows}{\doifinstringelse{#1}{#3}{\addtonumline{-1}}{\blinehook\fourthparam\elinehook}}% \doifincsnameelse
+ },% end notin
+ repeatuntil=>{% {substring}{until}{string} ... % Repeats the action until the condition is met. If it is not never met, will list all record
+ \doloop{\ctxlua{if '#1'=='#3' then context('\\exitloop') else context('\\ifEOF\\exitloop\\else\\blinehook\\fourthparam\\elinehook\\nextrow\\fi') end}}%
+ },% end until % the comma , is very important here!!!
+ whiledo=>{% {substring}{untilneq}{string} ... % Repeat action when the condition is met. When the condition is not met for the first line, the action will NOT BE performed!
+ \doloop{\ctxlua{if '#1'~='#3' then context('\\exitloop') else context('\\removeunwantedspaces\\blinehook\\fourthparam\\elinehook\\ifEOF\\exitloop\\else\\nextrow\\fi') end}}%
+ },% end untilneq % the comma , is very important here!!!
+ ]% end of \processaction%
+ \efilehook%
+ \setnumline{\tempnumline}%
+ \removeunwantedspaces% 30.3.2019
+} % end of \doloopif
+
+
+% specific variations of previous macro \doloopif
+\letvalue{doloopifnum}=\doloopif %\doloopifnum{value1}{[compare_operator]}{value2}{macro_for_doing}% [compareoperators] ==, ~=, >, <, >=, <= % FOR COMPATIBILITY ONLY
+\def\doloopuntil#1#2#3{\doloopif{#1}{repeatuntil}{#2}{#3}}% \doloopuntil{\Trida}{3.A}{\tableaction}% REPEAT-UNTIL loop: Repeats the action until the condition is met.
+\letvalue{repeatuntil}=\doloopuntil%
+\def\doloopwhile#1#2#3{\doloopif{#1}{whiledo}{#2}{#3}}% \doloopwhile{\Trida}{3.A}{\tableaction}% Repeat action when the condition is met.
+\letvalue{whiledo}=\doloopwhile%
+
+% 5. \filelineaction % implicit do \lineaction for all lines of current open CSV table
+% \filelineaction{filename.csv} % do \lineaction macro for all lines of specific CSV table (filename.csv)
+\def\filelineaction{\dotriplegroupempty\dofilelineaction}%
+
+\def\dofilelineaction#1#2#3{%
+ \doifelsenothing{#1}%
+ {\opencsvfile\doloopaction%0 parameter - open actual CSV file and do action
+ }%
+ {\doifelsenothing{#2}%
+ {\opencsvfile{#1}\doloopaction%1 parameter - parameter = filename
+ }%
+ {\doifelsenothing{#3}%
+ {\opencsvfile{#1}\doloopaction{\lineaction}{#2}%2 parameters, 1st parameter = filename, 2nd parameter = num of lines
+ }%
+ {\opencsvfile{#1}\doloopaction{\lineaction}{#2}{#3}%3 parameters, 1st parameter = filename, 2nd parameter = from line, 3rd parameter = to line
+ }}}%
+}%
+
+% 6. \doloopfornext{<numberofrows>}{<action>}
+% do action <action> for next <number> of rows from current line of open CSV file
+\def\doloopfornext#1#2{\ctxlua{thirddata.handlecsv.doloopfornext([==[\thenumexpr{#1}]==],[==[\detokenize{#2}]==])}}%
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Complete listing macros and commands that can be used (to keep track of all defined macros):
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \ifissetheader, \ifnotsetheader
+% \ifEOF, \ifnotEOF
+% \ifemptyline, \ifnotemptyline
+% \ifemptylinesmarking, \ifemptylinesnotmarking (they can be set by macros \markemptylines, \notmarkemptylines and \resetmarkemptylines)
+% \hookson, \hooksoff
+% \resethooks
+% user defined hooks macros: \bfilehook, \efilehook, \blinehook, \elinehook,
+% \setheader, \unsetheader, (\resetheader - compatibility synonym)
+% \setsep{<columnseparator>}, \unsetsep, (\resetsep - compatibility synonym)
+% \setfiletoscan{<filetoprocess>}
+% \numrows, \numemptyrows, \numnotemptyrows
+% \numcols
+% \csvfilename
+% \thenumexp{<expression>}
+% \addto\anymacro{<addingnonexpandedcontent>}, \eaddto\anymacro{<addingexpandedcontent>}
+% \getcsvcell[<columnnumber or columnname>,<rownumber>], \csvcell[<columnnumber or columnname>,<rownumber>]
+% \currentcell{<columnnumber or columnname}, \nextcell{<columnnumber or columnname}, \previouscell{<columnnumber or columnname}
+% and their synonyms \currcell{}, \nextcell{}, \prevcell{}
+% \colname[numberofcolumn], \xlscolname[<numberofcolumn>], \cxlscolname[<numberofcolumn>], \texcolname[<numberofcolumn>]
+% \indexcolname[<'columnname' or 'xlsname'>]
+% \columncontent[<numberofcolumn> or <'columnname'> or <'xlsname'>]
+% \numberxlscolname[<'xlsname'>]
+% \linepointer, (\lineno, \sernumline are synonyms), \resetlinepointer, \resetlinepointerof[<csvfile>], (\resetlineno, \resetsernumline are synonyms), \setlinepointer{<numberofline>}
+% \savelineno=\savelinepointer, \setsavedlineno=\setsavedlinepointer
+% \numline, \setnumline{<numberofline>}, \resetnumline
+% \addtonumline{<number>}
+% \indexofnotemptyline{}, \indexofemptyline{}
+% \markemptylines, \notmarkemptylines, \resetmarkemptylines, \removeemptylines
+% \nextlineof[csvfile], \prevlineof[csvfile], \nextline, \prevline
+% \nextnumline
+% \nextrowof[csvfile], \prevrowof[csvfile], \nextrow, \prevrow
+% \exitlooptest
+% \opencsvfile, \opencsvfile{<filename>}, \closecsvfile{<filename>}
+% \readline, \readline{<numberofline>}
+% \readandprocessparameters#1#2#3#4 -- for internal use only
+% \replacecontentin{<colname/colnumber>}{<substitutefrom>}{<substituteto>}
+%
+% Module predefined cycles for processing of lines CSV table:
+% \doloopfromto{<fromnumblerline>}{<tonumblerline}{<\actionmacro>}
+% \doloopforall, \doloopforall{<\actionmacro>}
+% \doloopaction, \doloopaction{<\actionmacro>}, \doloopaction{<\actionmacro>}{<tonumblerline>}, \doloopaction{<\actionmacro>}{<fromnumblerline>}{<tonumblerline>}
+% \doloopif{<value1>}{<compare_operator>}{value2}{<\actionmacro>}, (\doloopifnum{<value1>}{<compare_operator>}{value2}{<\actionmacro>} is synonym)
+% \doloopuntil{<value1>}{<value2>}{<\actionmacro>} = \repeatuntil{<value1>}{<value2>}{<\actionmacro>}
+% \doloopwhile{<value1>}{<value2>}{<\actionmacro>} = \doloopwhiledo{<value1>}{<value2>}{<\actionmacro>}
+% \filelineaction, \filelineaction{<filename>}
+% \doloopfornext{<+/-numberofrows>}{<\actionmacro>} % use \setlinepointer, \resetlinepointer (and then set it up \setnumline) to set line pointer. Opening of CSV file automatically reset line pointer.
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+]]
+
+-- write definitions into ConTeXt:
+thirddata.handlecsv.string2context(string2print)
+
diff --git a/macros/context/contrib/context-handlecsv/tex/context/third/handlecsv/t-handlecsv.tex b/macros/context/contrib/context-handlecsv/tex/context/third/handlecsv/t-handlecsv.tex
new file mode 100644
index 0000000000..b7f2a97db3
--- /dev/null
+++ b/macros/context/contrib/context-handlecsv/tex/context/third/handlecsv/t-handlecsv.tex
@@ -0,0 +1,29 @@
+%D \module
+%D [ file=t-handlecsv.tex,
+%D version=2018.04.07,
+%D title=HandleCSV module,
+%D subtitle=CSV file handling,
+%D author=Jaroslav Hajtmar,
+%D date=\currentdate,
+%D copyright=Jaroslav Hajtmar,
+%D email=hajtmar@gyza.cz,
+%D license=GNU General Public License]
+%
+%C Copyright (C) 2018 Jaroslav Hajtmar
+%C
+%C This program is free software: you can redistribute it and/or modify
+%C it under the terms of the GNU General Public License as published by
+%C the Free Software Foundation, either version 3 of the License, or
+%C (at your option) any later version.
+%C
+%C This program is distributed in the hope that it will be useful,
+%C but WITHOUT ANY WARRANTY; without even the implied warranty of
+%C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+%C GNU General Public License for more details.
+%C
+%C You should have received a copy of the GNU General Public License
+%C along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+\usemodule[handlecsv.lua]
+\usemodule[handlecsv-extra.lua]
+\usemodule[handlecsv-tools.lua]
diff --git a/macros/latex/contrib/highlightx/README.md b/macros/latex/contrib/highlightx/README.md
index 6b7890a62e..22ee36999e 100644
--- a/macros/latex/contrib/highlightx/README.md
+++ b/macros/latex/contrib/highlightx/README.md
@@ -4,5 +4,4 @@ highlightx est un package pour surligner des paragraphes ou des formules.
-------------------------------------------------------------------------
Author : Cédric Pierquet
email : cpierquet@outlook.fr
-Licence : Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt
-Source : https://tex.stackexchange.com/questions/5959/cool-text-highlighting-in-latex \ No newline at end of file
+Licence : Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt \ No newline at end of file
diff --git a/macros/latex/contrib/highlightx/doc/highlightx-doc.pdf b/macros/latex/contrib/highlightx/doc/highlightx-doc.pdf
index 41e5bd8427..674abe53dd 100644
--- a/macros/latex/contrib/highlightx/doc/highlightx-doc.pdf
+++ b/macros/latex/contrib/highlightx/doc/highlightx-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/highlightx/doc/highlightx-doc.tex b/macros/latex/contrib/highlightx/doc/highlightx-doc.tex
index bcf972b0c8..bb1dbf1fbe 100644
--- a/macros/latex/contrib/highlightx/doc/highlightx-doc.tex
+++ b/macros/latex/contrib/highlightx/doc/highlightx-doc.tex
@@ -33,8 +33,8 @@
\hypersetup{pdfborder=0 0 0}
\usepackage[margin=1.5cm]{geometry}
\setlength{\parindent}{0pt}
-\def\TPversion{0.1.0}
-\def\TPdate{31 août 2023}
+\def\TPversion{0.1.1}
+\def\TPdate{1\up*{er} septembre 2023}
\usepackage{tcolorbox}
\tcbuselibrary{skins,hooks}
\sethlcolor{lightgray!25}
@@ -56,11 +56,11 @@
\begin{tabular}{c}
{\Huge \texttt{highlightx}}\\
\\
- {\LARGE Commandes pour surligner formules ou paragraphes,} \\
+ {\LARGE Commandes pour surligner de formules (avec un} \\
\\
- {\LARGE avec un effet main levée, à l'aide des packages} \\
+ {\LARGE effet main levée), ou des paragraphes, à l'aide} \\
\\
- {\LARGE \MontreCode{soul} ou \MontreCode{tikz}.} \\
+ {\LARGE des packages \MontreCode{soul} et/ou \MontreCode{tikz}.} \\
\\
{\LARGE $\rhd$ Commandes [fr] ou [en] $\lhd$} \\
\\
@@ -105,9 +105,9 @@ Et en mode hors ligne :
Et on peut même mettre en forme un paragraphe (dans une \MontreCode{tcbox}), généré aléatoirement grâce au site \url{https://ipsum.one/} par exemple : \og \genhighlightpar{Enfin, comme le dernier coup de dix heures retentissait encore, il étendit la main et prit celle de Mme Rênal, qui la retira aussitôt. Julien, sans trop savoir ce qu’il faisait, la saisit de nouveau. Quoique bien ému lui-même, il fut frappé de la froideur glaciale de la main qu’il prenait ; il la serrait avec une force convulsive ; on fit un dernier effort pour la lui ôter, mais enfin cette main lui resta.} \fg
\end{tcolorbox}
-\vspace*{5mm}
-
-Et dans un paragraphe classique, on peut mettre des effets, comme par exemple avec le texte suivant, généré aléatoirement grâce au site \url{https://ipsum.one/} par exemple : \og \SurlignerTexte[orange!25,draw=teal]{Une scie à eau se compose d’un hangar au bord d’un ruisseau. Le toit est soutenu par une charpente qui porte sur quatre gros piliers en bois. À huit ou dix pieds d’élévation, au milieu du hangar, on voit une scie qui monte et descend, tandis qu’un mécanisme fort simple pousse contre cette scie une pièce de bois. C’est une roue mise en mouvement par le ruisseau qui fait aller ce double mécanisme ; celui de la scie qui monte et descend, et celui qui pousse doucement la pièce de bois vers la scie, qui la débite en planches.} \fg
+%\vspace*{5mm}
+%
+%Et dans un paragraphe classique, on peut mettre des effets, comme par exemple avec le texte suivant, généré aléatoirement grâce au site \url{https://ipsum.one/} par exemple : \og \SurlignerTexte[orange!25,draw=teal]{Une scie à eau se compose d’un hangar au bord d’un ruisseau. Le toit est soutenu par une charpente qui porte sur quatre gros piliers en bois. À huit ou dix pieds d’élévation, au milieu du hangar, on voit une scie qui monte et descend, tandis qu’un mécanisme fort simple pousse contre cette scie une pièce de bois. C’est une roue mise en mouvement par le ruisseau qui fait aller ce double mécanisme ; celui de la scie qui monte et descend, et celui qui pousse doucement la pièce de bois vers la scie, qui la débite en planches.} \fg
\vfill~
@@ -148,23 +148,25 @@ Et maintenant avec \texttt{fcolorbox} : \colorbox{lightgray!25}{$\int_0^4 x^2\,\
\subsection{Possibilités et limitations}
-L'idée du package \MontreCode{highlightx} est de proposer des commandes, simples et basiques, pour \textit{surligner} :
+L'idée du package \MontreCode{highlightx} est de proposer des commandes basiques, pour \textit{surligner} :
\begin{itemize}
\item du texte simple ou multi-lignes (paragraphes) ;
- \item des formules en mode math en ligne ou hors-ligne (grâce à \TikZ) ;
- \item avec un effet de bordure à \textit{main levée} (sauf pour un paragraphe dans une \MontreCode{tcbox}).
+ \item des formules en mode math en ligne ou hors-ligne (grâce à \TikZ) avec un effet de bordure à \textit{main levée}.
+ %\item avec un effet de bordure à \textit{main levée} (sauf pour un paragraphe dans une \MontreCode{tcbox}).
\end{itemize}
-{\small\faBomb}~Pour le moment le surlignement avec effet en mode paragraphe n'est pas compatible avec des environnements (comme \MontreCode{tcolorbox}), donc dans ce cas il n'y aura pas d'effet possible.
-
-\medskip
-
-{\small\faAngellist}~Le code permettant de surligner un paragraphe avec effet vient d'une solution proposée par l'internaute \MontreCode{gusbrs}, dans un fil de discussion du site \MontreCode{tex.stackexchange} :
+{\small\faBomb}~En ce qui concerne les paragraphes, le package \MontreCode{soul} est performant dans le cas où la police courante est en \MontreCode{\textbackslash normalsize}, dans le cas contraire, il se peut que le rendu ne soit pas optimal. Il se peut également que le surlignage ne donne pas un résultat optimal avec certains caractères, comme par exemple \MontreCode{;}.
-\smallskip
-
-\hfill\url{https://tex.stackexchange.com/questions/5959/cool-text-highlighting-in-latex}\hfill~
+%{\small\faBomb}~Pour le moment le surlignement avec effet en mode paragraphe n'est pas compatible avec des environnements (comme \MontreCode{tcolorbox}), donc dans ce cas il n'y aura pas d'effet possible.
+%
+%\medskip
+%
+%{\small\faAngellist}~Le code permettant de surligner un paragraphe avec effet vient d'une solution proposée par l'internaute \MontreCode{gusbrs}, dans un fil de discussion du site \MontreCode{tex.stackexchange}, et sous licence CC BY-SA :
+%
+%\smallskip
+%
+%\hfill\url{https://tex.stackexchange.com/questions/5959/cool-text-highlighting-in-latex}\hfill~
\subsection{Chargement}
@@ -173,9 +175,11 @@ Le package se charge dans le préambule, via \MontreCode{\textbackslash usepacka
Les seuls packages chargés sont :
\begin{itemize}
- \item \MontreCode{soul}, \MontreCode{atbegshi}, \MontreCode{etoolbox} ;
- \item \MontreCode{tikz} avec les librairies \MontreCode{tikzmark,calc,decorations.pathmorphing} ;
- \item \MontreCode{xstring} et \MontreCode{simplekv}.
+ \item \MontreCode{soul}, \MontreCode{xstring} et \MontreCode{simplekv}.
+ \item \MontreCode{tikz} avec les librairies \MontreCode{tikzmark,calc,decorations.pathmorphing}.
+ %\item \MontreCode{soul}, \MontreCode{atbegshi}, \MontreCode{etoolbox} ;
+ %\item \MontreCode{tikz} avec les librairies \MontreCode{tikzmark,calc,decorations.pathmorphing} ;
+ %\item \MontreCode{xstring} et \MontreCode{simplekv}.
\end{itemize}
\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
@@ -184,9 +188,9 @@ Les seuls packages chargés sont :
{\small\faAngleDoubleRight}~\MontreCode{highlightx} est compatible avec les compilations usuelles en \textsf{latex}, \textsf{pdflatex}, \textsf{lualatex} ou \textsf{xelatex}.
-\medskip
-
-{\small\faBomb}~Des erreurs peuvent apparaître lors de la compilation, dans ce cas une nouvelle compilation sera nécessaire afin de placer correctement les effets de surlignage !
+%\medskip
+%
+%{\small\faBomb}~Des erreurs peuvent apparaître lors de la compilation, dans ce cas une nouvelle compilation sera nécessaire afin de placer correctement les effets de surlignage !
\subsection{Commandes disponibles}
@@ -196,34 +200,35 @@ Les commandes proposées par le package \MontreCode{highlightx} sont :
%Commande pour surligner une formule (mode math)
\SurlignerFormule
-%Commande pour surligner du texte
-\SurlignerTexte
-
%Commande pour surligner du texte de manière basique, sans effet
\genhighlightpar
\end{codehigh}
-\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
-Par exemple $\SurlignerFormule{f(x)=\displaystyle\frac{1}{1+x}}$.\\
-Ou bien :
-\[ \SurlignerFormule{A=\begin{pmatrix}1&2\\3&4\end{pmatrix}}. \]
-
-Et : \og \SurlignerTexte{Une scie à eau se compose d’un
-hangar au bord d’un ruisseau. Le toit est soutenu par une charpente qui porte sur quatre
-gros piliers en bois. À huit ou dix pieds d’élévation, au milieu du hangar, on voit une
-scie qui monte et descend, tandis qu’un mécanisme fort simple pousse contre cette scie
-une pièce de bois.} \fg.
-\end{codehigh}
+\begin{demohigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
+Par exemple une formule en ligne comme $\SurlignerFormule{f(x)=\displaystyle\frac{1}{1+x}}$.\\
-Par exemple $\SurlignerFormule{f(x)=\displaystyle\frac{1}{1+x}}$.\\
-Ou bien :
+Ou bien encore une formule en mode hors-ligne comme :
+%
\[ \SurlignerFormule{A=\begin{pmatrix}1&2\\3&4\end{pmatrix}}. \]
+\end{demohigh}
-Et : \og \SurlignerTexte{Une scie à eau se compose d’un
+\begin{demohigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
+Et : \og \genhighlightpar{Une scie à eau se compose d’un
hangar au bord d’un ruisseau. Le toit est soutenu par une charpente qui porte sur quatre
gros piliers en bois. À huit ou dix pieds d’élévation, au milieu du hangar, on voit une
scie qui monte et descend, tandis qu’un mécanisme fort simple pousse contre cette scie
une pièce de bois.} \fg.
+\end{demohigh}
+
+%Par exemple $\SurlignerFormule{f(x)=\displaystyle\frac{1}{1+x}}$.\\
+%Ou bien :
+%\[ \SurlignerFormule{A=\begin{pmatrix}1&2\\3&4\end{pmatrix}}. \]
+%
+%Et : \og \SurlignerTexte{Une scie à eau se compose d’un
+%hangar au bord d’un ruisseau. Le toit est soutenu par une charpente qui porte sur quatre
+%gros piliers en bois. À huit ou dix pieds d’élévation, au milieu du hangar, on voit une
+%scie qui monte et descend, tandis qu’un mécanisme fort simple pousse contre cette scie
+%une pièce de bois.} \fg.
\pagebreak
@@ -297,58 +302,60 @@ $\SurlignerFormule{f(x)=\displaystyle\frac{1}{1+x}}$
\tikzstyle{encadreformule}=[decorate,decoration={random steps,amplitude=0.5pt,segment length=1em}]
-\subsection{Surligner du texte, y compris multilignes}
-
-La commande dédiée à la mise en évidence d'une formule mathématique est \MontreCode{\textbackslash SurlignerTexte} :
-
-\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
-%Commande pour surligner du texte
-\SurlignerTexte[options tikz]{texte}
-\end{codehigh}
-
-Concernant cette commande, pour laquelle le fonctionnement (interne) est très différent du mode \textit{math} :
-
-\begin{itemize}
- \item les options tikz permettent de spécifier la couleur de fond et l'éventuelle couleur de bordure, grâce à \MontreCode{[couleurfond,draw=couleurbord]}.
-\end{itemize}
-
-\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
-%Paragraphes venant du site https://ipsum.one/
-
-Un premier paragraphe : \og \SurlignerTexte{Quand Julien aperçut les ruines pittoresques
-de l’ancienne église de Vergy, il remarqua que depuis l’avant-veille il n’avait pas pensé
-une seule fois à Mme de Rênal. L’autre jour en partant, cette femme m’a rappelé la distance
-infinie qui nous sépare, elle m’a traité comme le fils d’un ouvrier. Sans doute elle a voulu
-me marquer son repentir de m’avoir laissé sa main la veille... Elle est pourtant bien jolie,
-cette main ! quel charme ! quelle noblesse dans les regards de cette femme !} \fg.
-
-Un deuxième paragraphe : \og \SurlignerTexte[teal!35,draw=red]{Ce ne fut que dans la nuit
-du samedi au dimanche, après trois jours de pourparlers, que l’orgueil de l’abbé Maslon plia
-devant la peur du maire qui se changeait en courage. Il fallut écrire une lettre mielleuse à
-l’abbé Chélan, pour le prier d’assister à la cérémonie de la relique de Bray-le-Haut, si
-toutefois son grand âge et ses infirmités le lui permettaient. M. Chélan demanda et obtint
-une lettre d’invitation pour Julien qui devait l’accompagner en qualité de sous-diacre.} \fg.
-\end{codehigh}
-
-Un premier paragraphe : \og \SurlignerTexte{Quand Julien aperçut les ruines pittoresques
-de l’ancienne église de Vergy, il remarqua que depuis l’avant-veille il n’avait pas pensé
-une seule fois à Mme de Rênal. L’autre jour en partant, cette femme m’a rappelé la distance
-infinie qui nous sépare, elle m’a traité comme le fils d’un ouvrier. Sans doute elle a voulu
-me marquer son repentir de m’avoir laissé sa main la veille... Elle est pourtant bien jolie,
-cette main ! quel charme ! quelle noblesse dans les regards de cette femme !} \fg.
-
-\medskip
+%\subsection{Surligner du texte, y compris multilignes}
+%
+%La commande dédiée à la mise en évidence d'une formule mathématique est \MontreCode{\textbackslash SurlignerTexte} :
+%
+%\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
+%%Commande pour surligner du texte
+%\SurlignerTexte[options tikz]{texte}
+%\end{codehigh}
+%
+%Concernant cette commande, pour laquelle le fonctionnement (interne) est très différent du mode \textit{math} :
+%
+%\begin{itemize}
+% \item les options tikz permettent de spécifier la couleur de fond et l'éventuelle couleur de bordure, grâce à \MontreCode{[couleurfond,draw=couleurbord]}.
+%\end{itemize}
+%
+%\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
+%%Paragraphes venant du site https://ipsum.one/
+%
+%Un premier paragraphe : \og \SurlignerTexte{Quand Julien aperçut les ruines pittoresques
+%de l’ancienne église de Vergy, il remarqua que depuis l’avant-veille il n’avait pas pensé
+%une seule fois à Mme de Rênal. L’autre jour en partant, cette femme m’a rappelé la distance
+%infinie qui nous sépare, elle m’a traité comme le fils d’un ouvrier. Sans doute elle a voulu
+%me marquer son repentir de m’avoir laissé sa main la veille... Elle est pourtant bien jolie,
+%cette main ! quel charme ! quelle noblesse dans les regards de cette femme !} \fg.
+%
+%Un deuxième paragraphe : \og \SurlignerTexte[teal!35,draw=red]{Ce ne fut que dans la nuit
+%du samedi au dimanche, après trois jours de pourparlers, que l’orgueil de l’abbé Maslon plia
+%devant la peur du maire qui se changeait en courage. Il fallut écrire une lettre mielleuse à
+%l’abbé Chélan, pour le prier d’assister à la cérémonie de la relique de Bray-le-Haut, si
+%toutefois son grand âge et ses infirmités le lui permettaient. M. Chélan demanda et obtint
+%une lettre d’invitation pour Julien qui devait l’accompagner en qualité de sous-diacre.} \fg.
+%\end{codehigh}
+%
+%Un premier paragraphe : \og \SurlignerTexte{Quand Julien aperçut les ruines pittoresques
+%de l’ancienne église de Vergy, il remarqua que depuis l’avant-veille il n’avait pas pensé
+%une seule fois à Mme de Rênal. L’autre jour en partant, cette femme m’a rappelé la distance
+%infinie qui nous sépare, elle m’a traité comme le fils d’un ouvrier. Sans doute elle a voulu
+%me marquer son repentir de m’avoir laissé sa main la veille... Elle est pourtant bien jolie,
+%cette main ! quel charme ! quelle noblesse dans les regards de cette femme !} \fg.
+%
+%\medskip
+%
+%Un deuxième paragraphe : \og \SurlignerTexte[teal!35,draw=red]{Ce ne fut que dans la nuit
+%du samedi au dimanche, après trois jours de pourparlers, que l’orgueil de l’abbé Maslon plia
+%devant la peur du maire qui se changeait en courage. Il fallut écrire une lettre mielleuse à
+%l’abbé Chélan, pour le prier d’assister à la cérémonie de la relique de Bray-le-Haut, si
+%toutefois son grand âge et ses infirmités le lui permettaient. M. Chélan demanda et obtint
+%une lettre d’invitation pour Julien qui devait l’accompagner en qualité de sous-diacre.} \fg.
-Un deuxième paragraphe : \og \SurlignerTexte[teal!35,draw=red]{Ce ne fut que dans la nuit
-du samedi au dimanche, après trois jours de pourparlers, que l’orgueil de l’abbé Maslon plia
-devant la peur du maire qui se changeait en courage. Il fallut écrire une lettre mielleuse à
-l’abbé Chélan, pour le prier d’assister à la cérémonie de la relique de Bray-le-Haut, si
-toutefois son grand âge et ses infirmités le lui permettaient. M. Chélan demanda et obtint
-une lettre d’invitation pour Julien qui devait l’accompagner en qualité de sous-diacre.} \fg.
+\pagebreak
-\subsection{Surlignement \og classique \fg, au cas où\ldots}
+\subsection{Surlignement \og classique \fg, d'un texte ou d'un paragraphe}
-Au cas où le surlignement multilignes précédent ne fonctionne pas (dans un environnement spécifique par exemple\ldots), il est possible d'utiliser une commande \textit{générique}, qui utilise uniquement le package \MontreCode{soul} (donc pas d'effet !), qui est \MontreCode{\textbackslash genhighlightpar}.
+Pour du surlignement multilignes, il est possible d'utiliser une commande \textit{générique}, qui utilise uniquement le package \MontreCode{soul} (donc pas d'effet !), qui est \MontreCode{\textbackslash genhighlightpar} (qui est basée \textit{basiquement} sur la commande \MontreCode{\textbackslash hl} du package \MontreCode{soul}).
\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
%Commande générique pour surligner du texte
@@ -358,12 +365,12 @@ Au cas où le surlignement multilignes précédent ne fonctionne pas (dans un en
Concernant cette commande, le premier argument (optionnel) est la couleur de fond, et le second argument (obligatoire) est le texte à mettre en évidence.
\begin{demohigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
-Un paragraphe : \og \genhighlightpar[orange!35]{Pour arriver à la considération publique
-à Verrières, l’essentiel est de ne pas adopter, tout en bâtissant beaucoup de murs, quelque
-plan apporté d’Italie par ces maçons, qui au printemps traversent les gorges du Jura pour
-gagner Paris. Une telle innovation vaudrait à l’imprudent bâtisseur une éternelle réputation
-de mauvaise tête, et il serait à jamais perdu auprès des gens sages et modérés qui distribuent
-la considération en Franche-Comté.} \fg.
+Un \genhighlightpar{paragraphe} : \og \genhighlightpar[orange!35]{Pour arriver à la
+considération publique à Verrières, l’essentiel est de ne pas adopter, tout en bâtissant
+beaucoup de murs, quelque plan apporté d’Italie par ces maçons, qui au printemps
+traversent les gorges du Jura pour gagner Paris. Une telle innovation vaudrait à
+l’imprudent bâtisseur une éternelle réputation de mauvaise tête, et il serait à jamais
+perdu auprès des gens sages et modérés qui distribuent la considération en Franche-Comté.} \fg.
\end{demohigh}
\pagebreak
@@ -378,9 +385,6 @@ There's also english versions of the commands :
%Hightlight formula (math mode)
\HighlightFormula
-%Highlight text
-\HighlightText
-
%Basic highlight text, without effect
\genhighlightpar
\end{codehigh}
@@ -432,50 +436,50 @@ $\HighlightFormula{f(x)=\displaystyle\frac{1}{1+x}}$
\tikzstyle{borderformula}=[decorate,decoration={random steps,amplitude=0.5pt,segment length=1em}]
-\subsection{Highlight text}
-
-\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
-%Highlight text, with effect
-\HighlightText[tikz options]{text}
-\end{codehigh}
-
-\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
-%Paragraphs from https://ipsum.one/
-
-A first one : \HighlightText{In order to modify it, he has only to press his hand lightly
-on a small wheel, measuring hardly a foot in diameter, and placed within his reach. Immediately
-the valves open, the steam from the boilers rushes along the conducting tubes into the two
-cylinders of the small engine, the pistons move rapidly, and the rudder instantly obeys.
-If this plan succeeds, a man will be able to direct the gigantic body of the 'Great Eastern'
-with one finge}.
-
-A second one : \HighlightText[teal!35,draw=red]{On Wednesday night the weather was very bad,
-my balance was strangely variable, and I was obliged to lean with my knees and elbows against
-the sideboard, to prevent myself from falling. Portmanteaus and bags came in and out of my cabin;
-an unusual hubbub reigned in the adjoining saloon, in which two or three hundred packages were
-making expeditions from one end to the other, knocking the tables and chairs with loud crashes;
-doors slammed, the boards creaked, the partitions made that groaning noise peculiar to pine wood;
-bottles and glasses jingled together in their racks, and a cataract of plates and dishes rolled
-about on the pantry floors}.
-\end{codehigh}
-
-A first one : \HighlightText{In order to modify it, he has only to press his hand lightly
-on a small wheel, measuring hardly a foot in diameter, and placed within his reach. Immediately
-the valves open, the steam from the boilers rushes along the conducting tubes into the two
-cylinders of the small engine, the pistons move rapidly, and the rudder instantly obeys.
-If this plan succeeds, a man will be able to direct the gigantic body of the 'Great Eastern'
-with one finge}.
-
-\medskip
-
-A second one : \HighlightText[teal!35,draw=red]{On Wednesday night the weather was very bad,
-my balance was strangely variable, and I was obliged to lean with my knees and elbows against
-the sideboard, to prevent myself from falling. Portmanteaus and bags came in and out of my cabin ;
-an unusual hubbub reigned in the adjoining saloon, in which two or three hundred packages were
-making expeditions from one end to the other, knocking the tables and chairs with loud crashes ;
-doors slammed, the boards creaked, the partitions made that groaning noise peculiar to pine wood ;
-bottles and glasses jingled together in their racks, and a cataract of plates and dishes rolled
-about on the pantry floors}.
+%\subsection{Highlight text}
+%
+%\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
+%%Highlight text, with effect
+%\HighlightText[tikz options]{text}
+%\end{codehigh}
+%
+%\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
+%%Paragraphs from https://ipsum.one/
+%
+%A first one : \HighlightText{In order to modify it, he has only to press his hand lightly
+%on a small wheel, measuring hardly a foot in diameter, and placed within his reach. Immediately
+%the valves open, the steam from the boilers rushes along the conducting tubes into the two
+%cylinders of the small engine, the pistons move rapidly, and the rudder instantly obeys.
+%If this plan succeeds, a man will be able to direct the gigantic body of the 'Great Eastern'
+%with one finge}.
+%
+%A second one : \HighlightText[teal!35,draw=red]{On Wednesday night the weather was very bad,
+%my balance was strangely variable, and I was obliged to lean with my knees and elbows against
+%the sideboard, to prevent myself from falling. Portmanteaus and bags came in and out of my cabin;
+%an unusual hubbub reigned in the adjoining saloon, in which two or three hundred packages were
+%making expeditions from one end to the other, knocking the tables and chairs with loud crashes;
+%doors slammed, the boards creaked, the partitions made that groaning noise peculiar to pine wood;
+%bottles and glasses jingled together in their racks, and a cataract of plates and dishes rolled
+%about on the pantry floors}.
+%\end{codehigh}
+%
+%A first one : \HighlightText{In order to modify it, he has only to press his hand lightly
+%on a small wheel, measuring hardly a foot in diameter, and placed within his reach. Immediately
+%the valves open, the steam from the boilers rushes along the conducting tubes into the two
+%cylinders of the small engine, the pistons move rapidly, and the rudder instantly obeys.
+%If this plan succeeds, a man will be able to direct the gigantic body of the 'Great Eastern'
+%with one finge}.
+%
+%\medskip
+%
+%A second one : \HighlightText[teal!35,draw=red]{On Wednesday night the weather was very bad,
+%my balance was strangely variable, and I was obliged to lean with my knees and elbows against
+%the sideboard, to prevent myself from falling. Portmanteaus and bags came in and out of my cabin ;
+%an unusual hubbub reigned in the adjoining saloon, in which two or three hundred packages were
+%making expeditions from one end to the other, knocking the tables and chairs with loud crashes ;
+%doors slammed, the boards creaked, the partitions made that groaning noise peculiar to pine wood ;
+%bottles and glasses jingled together in their racks, and a cataract of plates and dishes rolled
+%about on the pantry floors}.
\subsection{Generic highlight, without effect}
diff --git a/macros/latex/contrib/highlightx/tex/highlightx.sty b/macros/latex/contrib/highlightx/tex/highlightx.sty
index fb7a8babf2..1fbcb64591 100644
--- a/macros/latex/contrib/highlightx/tex/highlightx.sty
+++ b/macros/latex/contrib/highlightx/tex/highlightx.sty
@@ -1,17 +1,15 @@
% Author : C. Pierquet
% licence : Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txtf
-% source : https://tex.stackexchange.com/questions/5959/cool-text-highlighting-in-latex
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{highlightx}[2023/08/31 0.1.0 Macros pour surligner du texte, meme en mode paragraphe]
+\ProvidesPackage{highlightx}[2023/09/01 0.1.1 Macros pour surligner du texte, meme en mode paragraphe]
%====HISTORIQUE
+% v 0.1.1 Suppression code paragraphe avec effet
% v 0.1.0 Version initiale [fr] et [en]
%====BASE
\RequirePackage{soul}
-\RequirePackage{atbegshi}
-\RequirePackage{etoolbox}
\RequirePackage{tikz}
\RequirePackage{xstring}
\RequirePackage{simplekv}
@@ -92,237 +90,9 @@
\end{tikzpicture}%
}
-%====COMMANDES POUR PARAGRAPHES SIMPLES (tcbox par exemple)
+%====COMMANDES POUR PARAGRAPHES SIMPLES (sans effet, pour du tcbox par exemple)
\NewDocumentCommand\genhighlightpar{ O{hlcolback} m }{%
{\sethlcolor{#1}\hl{#2}}%
}
-%====COMPTEURS ET VARIABLES
-\newlength{\txtdec@depth}
-\setlength{\txtdec@depth}{.5ex}
-\newlength{\txtdec@height}
-\setlength{\txtdec@height}{\f@size pt} % sensible default
-\newcounter{txtdec@hyphmark}
-\newcounter{txtdec@decormark}
-\setcounter{txtdec@decormark}{1}
-\newcounter{txtdec@hyphdraw}
-\setcounter{txtdec@hyphdraw}{1}
-\newcounter{txtdec@decordraw}
-\setcounter{txtdec@decordraw}{1}
-\newcounter{txtdec@thenextpage}
-\newtoggle{txtdec@unfinisheddecor}
-\newtoggle{txtdec@stayonpage}
-\newtoggle{txtdec@stayondecor}
-\newtoggle{txtdec@stayonline}
-
-%====COMMANDES AUXILIAIRES
-% from https://tex.stackexchange.com/a/33765/105447
-\newcommand{\gettikzxy}[3]{%
- \tikz@scan@one@point\pgfutil@firstofone#1\relax
- \edef#2{\the\pgf@x}%
- \edef#3{\the\pgf@y}%
-}
-
-% the drawing macros
-\tikzset{%
- defaultdecor/.style={%
- fill=hlcolback,
- decoration = {random steps, amplitude=0.5pt, segment length=1em},
- outer sep = -15pt,
- inner sep = 0pt,
- decorate}%
-}
-
-\newcommand{\txtdec@draw@all}{%
- \tikzset{thisdecor/.style/.expanded=\csuse{decor@tikz@style@\thetxtdec@decordraw}}%
- \path[defaultdecor, thisdecor]
- ($(\Xbegin,\Ybegin)+(0,-\txtdec@depth)$) rectangle
- ($(\Xend,\Yend)+(0,\txtdec@height-\txtdec@depth)$) ;
-}
-
-\newcommand{\txtdec@draw@begin}{%
- \tikzset{thisdecor/.style/.expanded=\csuse{decor@tikz@style@\thetxtdec@decordraw}}%
- \path[defaultdecor, thisdecor]
- ($(\Xbegin,\Ybegin)+(0,-\txtdec@depth)$) rectangle
- ($(\Xlineend,\Ylineend)+(0,\txtdec@height-\txtdec@depth)$) ;
-}
-
-\newcommand{\txtdec@draw@middle}{%
- \tikzset{thisdecor/.style/.expanded=\csuse{decor@tikz@style@\thetxtdec@decordraw}}%
- \path[defaultdecor, thisdecor]
- ($(\Xlinebegin,\Ylinebegin)+(0,-\txtdec@depth)$) rectangle
- ($(\Xlineend,\Ylineend)+(0,\txtdec@height-\txtdec@depth)$) ;
-}
-
-\newcommand{\txtdec@draw@end}{%
- \tikzset{thisdecor/.style/.expanded=\csuse{decor@tikz@style@\thetxtdec@decordraw}}%
- \path[defaultdecor, thisdecor]
- ($(\Xlinebegin,\Ylinebegin)+(0,-\txtdec@depth)$) rectangle
- ($(\Xend,\Yend)+(0,\txtdec@height-\txtdec@depth)$) ;
-}
-
-% using soul to set tikzmarks
-\def\SOUL@tdleaders{%
- \stepcounter{txtdec@hyphmark}%
- \tikzmark{p\thepage.d\arabic{txtdec@decormark}.\arabic{txtdec@hyphmark}}%
- \leaders\hrule\@depth\z@\@height\z@\relax
-}
-\def\SOUL@tdunderline#1{{%
- \setbox\z@\hbox{#1}%
- \dimen@=\wd\z@
- \dimen@i=\SOUL@uloverlap
- \advance\dimen@2\dimen@i
- \rlap{%
- \null
- \kern-\dimen@i
- \SOUL@ulcolor{\SOUL@tdleaders\hskip\dimen@}%
- \hskip\dimen@
- }%
- \unhcopy\z@
-}}
-\def\SOUL@tdpreamble{%
- \spaceskip\SOUL@spaceskip
- \setcounter{txtdec@hyphmark}{0}%
- \tikzmark{p\thepage.d\arabic{txtdec@decormark}.begin}%
-}
-\def\SOUL@tdeverysyllable{%
- \SOUL@tdunderline{%
- \the\SOUL@syllable
- \SOUL@setkern\SOUL@charkern
- }%
- \stepcounter{txtdec@hyphmark}%
- \tikzmark{p\thepage.d\arabic{txtdec@decormark}.\arabic{txtdec@hyphmark}}%
-}
-\def\SOUL@tdeveryhyphen{%
- \discretionary{%
- \unkern
- \SOUL@tdunderline{%
- \SOUL@setkern\SOUL@hyphkern
- \SOUL@sethyphenchar
- }%
- \stepcounter{txtdec@hyphmark}%
- \tikzmark{p\thepage.d\arabic{txtdec@decormark}.\arabic{txtdec@hyphmark}}%
- }{}{}%
-}
-\def\SOUL@tdeveryexhyphen#1{%
- \SOUL@setkern\SOUL@hyphkern
- \SOUL@tdunderline{#1}%
- \stepcounter{txtdec@hyphmark}%
- \tikzmark{p\thepage.d\arabic{txtdec@decormark}.\arabic{txtdec@hyphmark}}%
- \discretionary{}{}{%
- \SOUL@setkern\SOUL@charkern
- }%
-}
-\def\SOUL@tdpostamble{%
- % create an extra mark, vertically displaced, to create an exit condition for the last line
- \stepcounter{txtdec@hyphmark}%
- \raisebox{-5pt}{\tikzmark{p\thepage.d\arabic{txtdec@decormark}.\arabic{txtdec@hyphmark}}}%
- \tikzmark{p\thepage.d\arabic{txtdec@decormark}.end}%
- \stepcounter{txtdec@decormark}%
-}
-\def\SOUL@tdsetup{%
- \SOUL@setup
- \let\SOUL@preamble\SOUL@tdpreamble
- \let\SOUL@everysyllable\SOUL@tdeverysyllable
- \let\SOUL@everyhyphen\SOUL@tdeveryhyphen
- \let\SOUL@everyexhyphen\SOUL@tdeveryexhyphen
- \let\SOUL@postamble\SOUL@tdpostamble
-}
-
-%====COMMANDES PRINCIPALES
-\DeclareRobustCommand*\SurlignerTexte[1][]{%
- \csxdef{decor@tikz@style@\thetxtdec@decormark}{#1}%
- \csxdef{decor@fsize@\thetxtdec@decormark}{\f@size pt}%
- \SOUL@tdsetup\SOUL@%
-}
-
-\DeclareRobustCommand*\HighlightText[1][]{%
- \csxdef{decor@tikz@style@\thetxtdec@decormark}{#1}%
- \csxdef{decor@fsize@\thetxtdec@decormark}{\f@size pt}%
- \SOUL@tdsetup\SOUL@%
-}
-
-\AtBeginShipout{%
- \AtBeginShipoutUpperLeft{%
- % getting the number of the next page
- \setcounter{txtdec@thenextpage}{\thepage}%
- \stepcounter{txtdec@thenextpage}%
- % if the current decoration occurs on this page, stay on it
- \iftikzmark{p\thepage.d\arabic{txtdec@decordraw}.\arabic{txtdec@hyphdraw}}{%
- \toggletrue{txtdec@stayonpage}}{}%
- \whileboolexpr{togl {txtdec@stayonpage}}{%
- \begin{tikzpicture}[remember picture, overlay]
- \setlength{\txtdec@height}{\csuse{decor@fsize@\thetxtdec@decordraw}}%
- \iftikzmark{p\thepage.d\arabic{txtdec@decordraw}.begin}{%
- % if current decor begins in current page, get coordinates
- \gettikzxy{(pic cs:p\thepage.d\arabic{txtdec@decordraw}.begin)}{\Xbegin}{\Ybegin}}{%
- % if current decor begins in previous page, set to top left of the page
- \gettikzxy{(current page.north west)}{\Xbegin}{\Ybegin}}%
- \iftikzmark{p\thepage.d\arabic{txtdec@decordraw}.end}{%
- % if current decor ends in current page, get coordinates
- \gettikzxy{(pic cs:p\thepage.d\arabic{txtdec@decordraw}.end)}{\Xend}{\Yend}}{%
- % if current decor ends in future page, set to bottom right of the page
- \gettikzxy{(current page.south east)}{\Xend}{\Yend}}%
- \ifdim\Ybegin=\Yend % the simplest case, a single line
- \txtdec@draw@all
- \stepcounter{txtdec@decordraw}%
- \else % current textdecor has a line break
- \toggletrue{txtdec@stayondecor}%
- \whileboolexpr{togl {txtdec@stayondecor}}{%
- \gettikzxy{(pic cs:p\thepage.d\arabic{txtdec@decordraw}.\arabic{txtdec@hyphdraw})}{\Xlinebegin}{\Ylinebegin}%
- \edef\Xcurrent{\Xlinebegin}%
- \edef\Ycurrent{\Ylinebegin}%
- \edef\Xnext{\Xcurrent}%
- \edef\Ynext{\Ycurrent}%
- \toggletrue{txtdec@stayonline}%
- \whileboolexpr{togl {txtdec@stayonline}}{%
- \ifdim\Ycurrent=\Ynext
- \stepcounter{txtdec@hyphdraw}%
- % if the following tikzmark exists, we are at a page break
- \iftikzmark{p\arabic{txtdec@thenextpage}.d\arabic{txtdec@decordraw}.\arabic{txtdec@hyphdraw}}{%
- \edef\Xcurrent{\Xnext}%
- \edef\Ycurrent{\Ynext}%
- \gettikzxy{(current page.south east)}{\Xnext}{\Ynext}
- \togglefalse{txtdec@stayondecor}%
- }{% else, we remain on the same page
- \iftikzmark{p\thepage.d\arabic{txtdec@decordraw}.\arabic{txtdec@hyphdraw}}{%
- \edef\Xcurrent{\Xnext}%
- \edef\Ycurrent{\Ynext}%
- \gettikzxy{(pic cs:p\thepage.d\arabic{txtdec@decordraw}.\arabic{txtdec@hyphdraw})}{\Xnext}{\Ynext}}{}%
- }%
- \else
- \edef\Xlineend{\Xcurrent}%
- \edef\Ylineend{\Ycurrent}%
- % if we are on the first line of the current decoration
- \ifdim\Ylinebegin=\Ybegin
- \txtdec@draw@begin
- \else
- % if we are on the last line of the current decoration
- \ifdim\Ycurrent=\Yend
- \txtdec@draw@end
- \stepcounter{txtdec@decordraw}%
- \setcounter{txtdec@hyphdraw}{1}%
- \togglefalse{txtdec@stayondecor}%
- % if we are in a middle line of the decoration
- \else
- \txtdec@draw@middle
- \fi
- \fi
- \togglefalse{txtdec@stayonline}%
- \fi
- }%
- }%
- \fi
- \end{tikzpicture}%
- % if the beginning of the next decor does not exist in this page, leave this page
- \iftikzmark{p\thepage.d\arabic{txtdec@decordraw}.begin}{}{%
- \togglefalse{txtdec@stayonpage}}%
- % if the continuation of the current decor exists in the next page, leave this page
- \iftikzmark{p\arabic{txtdec@thenextpage}.d\arabic{txtdec@decordraw}.\arabic{txtdec@hyphdraw}}{%
- \togglefalse{txtdec@stayonpage}}{}%
- }%
- }%
-}
-
-
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/iwonamath/Makefile b/macros/latex/contrib/iwonamath/Makefile
new file mode 100644
index 0000000000..5b8322bf33
--- /dev/null
+++ b/macros/latex/contrib/iwonamath/Makefile
@@ -0,0 +1,87 @@
+PACKAGE=iwonamath
+
+SAMPLES = sample.tex
+
+PDF = $(PACKAGE).pdf ${SAMPLES:%.tex=%.pdf}
+
+FD = \
+ omliwonamath.fd \
+ omliwonamathc.fd \
+ omliwonamathl.fd \
+ omliwonamathlc.fd \
+ omsiwonamath.fd \
+ omsiwonamathc.fd \
+ omsiwonamathcmsy.fd \
+ omsiwonamathl.fd \
+ omsiwonamathlc.fd \
+ omxiwonamath.fd \
+ omxiwonamathc.fd \
+ omxiwonamathl.fd \
+ omxiwonamathlc.fd \
+ ot1iwonamath.fd \
+ ot1iwonamathc.fd \
+ ot1iwonamathcm.fd \
+ ot1iwonamathl.fd \
+ ot1iwonamathlc.fd \
+ ot1iwonamathlcm.fd \
+ ot1iwonamathlm.fd \
+ ot1iwonamathm.fd
+
+all: ${PDF} $(PACKAGE).sty $(FD)
+
+
+%.pdf: %.dtx $(PACKAGE).sty
+ pdflatex $<
+ - bibtex $*
+ pdflatex $<
+ - makeindex -s gind.ist -o $*.ind $*.idx
+ - makeindex -s gglo.ist -o $*.gls $*.glo
+ pdflatex $<
+ while ( grep -q '^LaTeX Warning: Label(s) may have changed' $*.log) \
+ do pdflatex $<; done
+
+
+%.sty: %.ins %.dtx
+ pdflatex $<
+
+%.pdf: %.tex $(PACKAGE).sty $(FD)
+ pdflatex $<
+ - bibtex $*
+ pdflatex $<
+ while ( grep -q '^LaTeX Warning: Label(s) may have changed' $*.log) \
+ do pdflatex $<; done
+
+%.fd: $(PACKAGE).ins $(PACKAGE).dtx
+ pdflatex $<
+ ./makeiwonamathfd.sh
+
+
+
+
+clean:
+ $(RM) *_FAMILY_* *.log *.aux \
+ *.cfg *.glo *.idx *.toc \
+ *.ilg *.ind *.out *.lof \
+ *.lot *.bbl *.blg *.gls \
+ *.dvi *.ps *.thm *.tgz *.zip *.rpi \
+ *.hd sample-blx.bib
+
+
+distclean: clean
+ $(RM) $(PDF) $(PACKAGE).sty $(FD)
+
+#
+# Archive for the distribution. Includes typeset documentation
+#
+archive: all clean
+ COPYFILE_DISABLE=1 \
+ tar -C .. -czvf ../$(PACKAGE).tgz --exclude '*~' \
+ --exclude '*.tgz' --exclude '*.zip' --exclude .git $(PACKAGE)
+ mv ../$(PACKAGE).tgz .
+
+zip: all clean
+ make $(PACKAGE).sty
+ $(RM) $(PACKAGE).log
+ cd ..;\
+ zip -r $(PACKAGE).zip $(PACKAGE) -x "*.ins" -x "*.gitignore"
+
diff --git a/macros/latex/contrib/iwonamath/README b/macros/latex/contrib/iwonamath/README
new file mode 100644
index 0000000000..72fe9e3508
--- /dev/null
+++ b/macros/latex/contrib/iwonamath/README
@@ -0,0 +1,5 @@
+This package provides an interface to Iwona math fonts by Janusz
+Marian Nowacki. It allows to use Iwona as math complement for sans
+serif fonts without native math. The package allows font scaling, the
+choice of light and condensed versions and the creation of multiple
+math versions. \ No newline at end of file
diff --git a/macros/latex/contrib/iwonamath/iwonamath.bib b/macros/latex/contrib/iwonamath/iwonamath.bib
new file mode 100644
index 0000000000..a40402b8b3
--- /dev/null
+++ b/macros/latex/contrib/iwonamath/iwonamath.bib
@@ -0,0 +1,29 @@
+@manual{iwona,
+title = {The iwona package},
+subtitle = {A two-element sans-serif font},
+author = {Nowacki, Janusz Marian},
+url = {https://ctan.org/pkg/iwona},
+year = 2005,
+urldate = {2023-08-28},
+version = {0.995b},
+}
+
+@book{TLC3,
+ title = "The LaTeX Companion: Parts I \& II, 3rd Edition",
+ author = "Frank Mittelbach and Ulrike Fischer",
+ isbn = "978-01-3816-648-9",
+ library_name = "Calibre Library",
+ year = 2023,
+ month = "May",
+ publisher = "Addison-Wesley Professional",
+}
+@manual{lato,
+title = {The lato package},
+subtitle = {Lato font family and \LaTeX\ support},
+author = {Dziedzic, Łukasz and El Morabity, Mohamed},
+url = {http://www.latofonts.com/},
+urldate = {2023-08-31},
+year = 2019,
+version = {3.3},
+}
+
diff --git a/macros/latex/contrib/iwonamath/iwonamath.dtx b/macros/latex/contrib/iwonamath/iwonamath.dtx
new file mode 100644
index 0000000000..020c8d6ad0
--- /dev/null
+++ b/macros/latex/contrib/iwonamath/iwonamath.dtx
@@ -0,0 +1,451 @@
+% \iffalse meta-comment
+%
+% File: iwonamath.dtx
+% Copyright 2023 by Boris Veytsman
+%
+% It may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License (LPPL), either version 1.3c of this
+% license or (at your option) any later version. The latest version
+% of this license is in the file
+%
+% https://www.latex-project.org/lppl.txt
+%
+%<*driver>
+\documentclass{l3doc}
+\usepackage{iwonamath}
+\usepackage{natbib, booktabs}
+\usepackage[tableposition=top]{caption}
+\begin{document}
+ \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \GetFileInfo{iwonamath.sty}
+% \title{\pkg{iwonamath}---a scaled version of Iwona math fonts}
+% \date{\fileversion, \filedate}
+% \author{Boris
+% Veytsman\thanks{\href{mailto:borisv@lk.net}{borisv@lk.net},
+% \href{mailto:boris@varphi.com}{boris@varphi.com}}}
+% \maketitle
+% \begin{abstract}
+% \LaTeX\ support for scaled Iwona math fonts for mixing with sans
+% serif text fonts.
+% \end{abstract}
+% \begin{documentation}
+%
+%\section{User manual}
+%\label{sec:ug}
+%
+%
+% Iwona is a sans serif typeface by Janusz Marian Nowacki. It has a
+% very good math support~\citep{iwona}. Package \pkg{iwona} integrates
+% text and math fonts. However, the math fonts may provide
+% interesting companions for other text fonts. To enable the
+% combination, this package separates math fonts and provides tools
+% for the package writers to mix and match them with text.
+%
+% \begin{variable}{
+% options/light,
+% options/condensed,
+% options/scale,
+% options/Scale,
+% options/delimitershack,
+% options/standardversion}
+% The package has the following options:
+% \begin{description}
+% \item[light] whether the math fonts use the light version of Iwona,
+% either |true| or |false| (default)
+% \item[condensed] whether the math fonts use the condensed version of
+% Iwona, either |true| or |false| (default).
+% \item[scale] the scale of the fonts, a number (by default 1). The
+% title cased |Scale| is the synonym for this key.
+% \item[delimitershack] whether to use the hack to get \cs{lVert} and
+% \cs{rVert} delimiters, absent in the original font (see
+% \citep[\S~12.5.5]{TLC3}), either |true| (default) or |false|.
+% \item[standardversions] whether to define standard versions |normal|
+% and |bold|, either |true| (default) or |false|. If |false|, then
+% the package does not define any math fonts, and it is up to the user
+% to deploy \cmd{\DefineIwonaMathVersion} do define them.
+% \end{description}
+% \end{variable}
+%
+%
+% \begin{function}{\DefineIwonaMathVersion}
+% \begin{syntax}
+% \cs{DefineIwonaMathVersion}\Arg{key/value pairs}
+% \end{syntax}
+% The main function of the package,
+% \cmd{\DefineIwonaMathVersion} defines a new
+% math version based on Iwona fonts.
+% \end{function}
+% The keys are the following (the defaults, where applicable,
+% correspond to the package options):
+% \begin{variable}{main/name,
+% main/light,
+% main/condensed,
+% main/bold}
+% \begin{description}
+% \item[name] the name of the version. By default, either |normal|
+% or |bold| depending on the |bold| key described below.
+% \item[light] whether the math fonts use the light version of
+% Iwona, either |true| or |false|
+% \item[condensed] whether the math fonts use the condensed version of
+% Iwona, either |true| or |false|.
+% \item[bold] whether we define a bold version, either |true| or
+% |false| (default)
+% \end{description}
+% \end{variable}
+%
+% For the boolean keys the setting |=true| can be omitted, so
+% |\DefineIwonaMathVersion{light=true}| and
+% |\DefineIwonaMathVersion{light}| are equivalent
+%
+% Note that in the current implementation the parameters |scale| and
+% |delimitershack| are the same for all versions defined.
+%
+% For example, the following invocation defines four math versions,
+% |normal|, |bold|, |condensed| and |boldcondensed|, based on Iwona
+% light, scaled 1.2:
+% \begin{verbatim}
+% \usepackage[scale=1.2, light]{iwonamath}
+% \DefineIwonaMathVersion{name=condensed,
+% condensed=true}
+% \DefineIwonaMathVersion{name=boldcondensed,
+% bold=true, condensed=true}
+% \end{verbatim}
+%
+%
+% \end{documentation}
+%
+% \begin{implementation}
+%
+% \section{Implementation}
+% \label{sec:impl}
+%
+%
+%
+%\subsection{Setting up}
+%\label{sec:settingup}
+%
+%
+%
+% First, we declare who we are:
+% \begin{macrocode}
+%<@@=iwonamath>
+%<package>\ProvidesExplPackage {iwonamath}
+%<fd>\ProvidesExplFile
+%<ot1m>{ot1_FAMILY_m.fd}
+%<ot1>{ot1_FAMILY_.fd}
+%<oml>{oml_FAMILY_.fd}
+%<oms>{oms_FAMILY_.fd}
+%<omx>{omx_FAMILY_.fd}
+%<cmsy>{omsiwonamathcmsy.fd}
+%<package|fd>{2023-08-31} {1.0}
+%<package|fd>{Scaled Iwona math fonts}
+%<*package>
+% \end{macrocode}
+%
+%
+%
+%
+%\subsection{Options}
+%\label{sec:optionSetting}
+%
+%
+%
+% \begin{variable}{\l_@@_scale_tl,
+% \l_@@_mainlight_bool,
+% \l_@@_maincondensed_bool,
+% \l_@@_delimitershack_bool,
+% \l_@@_standardversions_bool,
+% options/light,
+% options/condensed,
+% options/scale,
+% options/Scale,
+% options/delimitershack,
+% options/standardversion}
+% \begin{macrocode}
+\keys_define:nn { iwonamath/options }
+{
+ scale .tl_set:N = \l_@@_scale_tl,
+ Scale .tl_set:N = \l_@@_scale_tl,
+ light .bool_set:N = \l_@@_mainlight_bool,
+ light .default:n = true,
+ condensed .bool_set:N = \l_@@_maincondensed_bool,
+ condensed .default:n = true,
+ delimitershack .bool_set:N = \l_@@_delimitershack_bool,
+ delimitershack .default:n = true,
+ standardversions .bool_set:N = \l_@@_standardversions_bool,
+ standardversions .default:n = true,
+}
+
+\keys_set:nn {iwonamath/options }
+{
+ scale = 1,
+ light = false,
+ condensed = false,
+ delimitershack = true,
+ standardversions = true,
+}
+% \end{macrocode}
+%
+% \end{variable}
+%
+%
+% Options processing
+% \begin{macrocode}
+\IfFormatAtLeastTF { 2022-06-01 }
+ { \ProcessKeyOptions [ iwonamath/options ] }
+ {
+ \RequirePackage { l3keys2e }
+ \ProcessKeysOptions { iwonamath/options }
+ }
+% \end{macrocode}%
+%
+% \begin{variable}{\l_@@_versionname_tl,
+% \l_@@_light_bool,
+% \l_@@_condensed_bool,
+% \l_@@_bold_bool,
+% main/name,
+% main/light,
+% main/condensed,
+% main/bold}
+% Now the options for the main command
+% \begin{macrocode}
+\keys_define:nn { iwonamath/main }
+{
+ name .tl_set:N = \l_@@_versionname_tl,
+ light .bool_set:N = \l_@@_light_bool,
+ light .default:n = true,
+ condensed .bool_set:N = \l_@@_condensed_bool,
+ condensed .default:n = true,
+ bold .bool_set:N = \l_@@_bold_bool,
+ bold .default:n = true,
+}
+% \end{macrocode}
+%
+% \end{variable}
+%
+%
+%\subsection{Delimiters hack}
+%\label{sec:delimiters}
+%
+% We add delimiters from |cmsy|, as discussed in
+% \citep[\S~12.5.5]{TLC3}). We predefine the symbols for the standard
+% versions just in case.
+% \begin{macrocode}
+\bool_if:NTF \l_@@_delimitershack_bool
+{
+ \DeclareSymbolFont{symbols2}{OMS}{iwonamathcmsy}{m}{n}
+ \SetSymbolFont{symbols2} {bold}{OMS}{cmsy}{b}{n}
+ \DeclareMathDelimiter{\lVert}{\mathopen} {symbols2}{"6B}{largesymbols}{"0D}
+ \DeclareMathDelimiter{\rVert}{\mathclose}{symbols2}{"6B}{largesymbols}{"0D}
+}
+{}
+% \end{macrocode}
+%
+%
+%\subsection{The main function}
+%\label{sec:main}
+%
+%
+% \begin{macro}{\DefineIwonaMathVersion}
+% \begin{macrocode}
+\DeclareDocumentCommand \DefineIwonaMathVersion { m }
+{
+ \tl_clear:N \l_@@_versionname_tl
+ \bool_set_eq:NN \l_@@_light_bool \l_@@_mainlight_bool
+ \bool_set_eq:NN \l_@@_condensed_bool \l_@@_maincondensed_bool
+ \bool_set_false:N \l_@@_bold_bool
+ \keys_set:nn { iwonamath/main }
+ {
+ #1
+ }
+
+ \tl_if_empty:NTF \l_@@_versionname_tl
+ {
+ \bool_if:NTF \l_@@_bold_bool
+ {
+ \tl_set:Nn \l_@@_versionname_tl {bold}
+ }
+ {
+ \tl_set:Nn \l_@@_versionname_tl {normal}
+ }
+ }
+ {}
+
+ \tl_set:Nn \l_tmpa_tl {iwonamath}
+
+
+ \bool_if:NTF \l_@@_light_bool
+ {
+ \tl_set:Ne \l_tmpa_tl {\l_tmpa_tl l}
+ }
+ {}
+
+ \bool_if:NTF \l_@@_condensed_bool
+ {
+ \tl_set:Ne \l_tmpa_tl {\l_tmpa_tl c}
+ }
+ {}
+
+ \DeclareMathVersion{\l_@@_versionname_tl}
+ \bool_if:NTF \l_@@_bold_bool
+ {
+ \SetSymbolFont{operators}{\l_@@_versionname_tl}{OT1}{\l_tmpa_tl m} {b}{n}
+ \SetSymbolFont{letters} {\l_@@_versionname_tl}{OML}{\l_tmpa_tl} {b}{it}
+ \SetSymbolFont{symbols} {\l_@@_versionname_tl}{OMS}{\l_tmpa_tl}{b}{n}
+ \SetSymbolFont{largesymbols}{\l_@@_versionname_tl}{OMX}{\l_tmpa_tl}{b}{n}
+ \SetMathAlphabet\mathsf{\l_@@_versionname_tl}{OT1}{\l_tmpa_tl}{bx}{n}
+ \SetMathAlphabet\mathit{\l_@@_versionname_tl}{OT1}{\l_tmpa_tl}{bx}{it}
+ \SetSymbolFont{symbols2} {\l_@@_versionname_tl}{OMS}{iwonamathcmsy}{b}{n}
+ }
+ {
+ \SetSymbolFont{operators}{\l_@@_versionname_tl}{OT1}{\l_tmpa_tl m}{m}{n}
+ \SetSymbolFont{letters}{\l_@@_versionname_tl}{OML}{\l_tmpa_tl} {m}{it}
+ \SetSymbolFont{symbols}{\l_@@_versionname_tl}{OMS}{\l_tmpa_tl}{m}{n}
+ \SetSymbolFont{largesymbols}{\l_@@_versionname_tl}{OMX}{\l_tmpa_tl}{m}{n}
+ \SetMathAlphabet{\mathbf}{\l_@@_versionname_tl}{OT1}{\l_tmpa_tl}{bx}{n}
+ \SetMathAlphabet{\mathsf}{\l_@@_versionname_tl}{OT1}{\l_tmpa_tl}{m}{n}
+ \SetMathAlphabet{\mathit}{\l_@@_versionname_tl}{OT1}{\l_tmpa_tl}{m}{it}
+ \SetMathAlphabet{\mathtt}{\l_@@_versionname_tl}{OT1}{\l_tmpa_tl}{m}{n}
+ \SetSymbolFont{symbols2} {\l_@@_versionname_tl}{OMS}{iwonamathcmsy}{m}{n}
+ }
+
+ \bool_if:NTF \l_@@_delimitershack_bool
+ {
+
+ }
+ {}
+
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%\subsection{Default versions}
+%\label{sec:defaults}
+%
+% If standard versions are requested, we define them
+% \begin{macrocode}
+\bool_if:NTF \l_@@_standardversions_bool
+{
+ \DefineIwonaMathVersion{}
+ \DefineIwonaMathVersion{bold}
+}
+{}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+%\subsection{Font definition files}
+%\label{sec:fd}
+%
+%
+%
+% Now, the fd files. Sometimes they are defined in special |fdd|
+% files; here we use the main |dtx| for this.
+%
+% First, we check if the size is defined. If not,
+% we define it.
+% \begin{macrocode}
+%<*fd>
+\tl_if_exist:NTF \l_@@_scale_tl
+{}
+{
+ \tl_new:N \l_@@_scale_tl
+ \tl_set:Nn \l_@@_scale_tl {1}
+}
+%</fd>
+% \end{macrocode}
+%
+% Our version of |cmsy| just scales the font. Note that right now the
+% scaling is exactly the same as for other iwona math
+% characters---maybe we need to fine tune this.
+% \begin{macrocode}
+%<*cmsy>
+\DeclareFontFamily{OMS}{iwonamathcmsy}{\skewchar\font48 }
+\DeclareFontShape{OMS}{iwonamathcmsy}{m}{n}{%
+ <-> [\l_@@_scale_tl] cmsy10%
+ }{}
+\DeclareFontShape{OMS}{iwonamathcmsy}{b}{n}{%
+ <-> [\l_@@_scale_tl] cmbsy10%
+ }{}
+%</cmsy>
+% \end{macrocode}
+%
+% \begin{table}
+% \centering
+% \caption{Naming scheme for iwona fonts}
+% \label{tab:naming}
+% \begin{tabular}{lllll}
+% \toprule
+% Weight/Shape & \multicolumn{4}{c}{Base}\\
+% \cmidrule{2-5}\\
+% & Regular & Condensed & Light & Light Condensed \\
+% \midrule
+% m/n & iwonar & iwonacr & iwonal & iwonacl \\
+% m/it & iwonari & iwonacri & iwonali & iwonacli \\
+% b/n & iwonab & iwonacb & iwonam & iwonacm \\
+% b/it & iwonabi & iwonacb & iwonami & iwonacmi \\
+% \bottomrule
+% \end{tabular}
+% \end{table}
+%
+% Now, we need many files in the different weights and
+% condensed/regular status. It would be too tedious to write all
+% them. So we create a template with the special marks and a bash
+% script to generate all |fd| files. Of course, \TeX\ with enough
+% trickery can be used instead of bash, but why bother: we employ
+% Makefiles anyways\ldots
+%
+% The naming scheme for Iwona fonts is shown in
+% Table~\ref{tab:naming}. From this table we see we need three marks:
+% |_FAMILY_| for the base family, |_MEDIUM_| for medium font and
+% |_BOLD_| for bold font.
+%
+% We have two |OT1| files: one for default letters, one for |\math...|
+% commands.
+% \begin{macrocode}
+%<*ot1m>
+\DeclareFontFamily{OT1}{_FAMILY_m}{}
+\DeclareFontShape{OT1}{_FAMILY_m}{m}{n}{<-> [\l_@@_scale_tl] rm-_MEDIUM_}{}
+\DeclareFontShape{OT1}{_FAMILY_m}{b}{n}{<-> [\l_@@_scale_tl] rm-_BOLD_}{}
+%</ot1m>
+%<*ot1>
+\DeclareFontFamily{OT1}{_FAMILY_}{}
+\DeclareFontShape{OT1}{_FAMILY_}{m}{n}{<-> [\l_@@_scale_tl] rm-_MEDIUM_}{}
+\DeclareFontShape{OT1}{_FAMILY_}{m}{it}{<-> [\l_@@_scale_tl] rm-_MEDIUM_i}{}
+\DeclareFontShape{OT1}{_FAMILY_}{b}{n}{<-> [\l_@@_scale_tl] rm-_BOLD_}{}
+\DeclareFontShape{OT1}{_FAMILY_}{bx}{n}{<-> [\l_@@_scale_tl] rm-_BOLD_}{}
+%</ot1>
+%<*oml>
+\DeclareFontFamily{OML}{_FAMILY_}{}
+\DeclareFontShape{OML}{_FAMILY_}{m}{it}{<-> [\l_@@_scale_tl] mi-_MEDIUM_i}{}
+\DeclareFontShape{OML}{_FAMILY_}{b}{it}{<-> [\l_@@_scale_tl] mi-_BOLD_i}{}
+\DeclareFontShape{OML}{_FAMILY_}{bx}{it}{<-> [\l_@@_scale_tl] mi-_BOLD_i}{}
+%</oml>
+%<*oms>
+\DeclareFontFamily{OMS}{_FAMILY_}{}
+\DeclareFontShape{OMS}{_FAMILY_}{m}{n}{<-> [\l_@@_scale_tl] sy-_MEDIUM_z}{}
+\DeclareFontShape{OMS}{_FAMILY_}{b}{n}{<-> [\l_@@_scale_tl] sy-_BOLD_z}{}
+\DeclareFontShape{OMS}{_FAMILY_}{bx}{n}{<-> [\l_@@_scale_tl] sy-_BOLD_z}{}
+%</oms>
+%<*omx>
+\DeclareFontFamily{OMX}{_FAMILY_}{}
+\DeclareFontShape{OMX}{_FAMILY_}{m}{n}{<-> [\l_@@_scale_tl] ex-_MEDIUM_}{}
+\DeclareFontShape{OMX}{_FAMILY_}{b}{n}{<-> [\l_@@_scale_tl] ex-_BOLD_}{}
+\DeclareFontShape{OMX}{_FAMILY_}{bx}{n}{<-> [\l_@@_scale_tl] ex-_BOLD_}{}
+%</omx>
+% \end{macrocode}
+%
+% \end{implementation}
+%
+% \bibliography{iwonamath}
+% \bibliographystyle{plainnat}
+%
+% \PrintIndex \ No newline at end of file
diff --git a/macros/latex/contrib/iwonamath/iwonamath.ins b/macros/latex/contrib/iwonamath/iwonamath.ins
new file mode 100644
index 0000000000..fe0249d16a
--- /dev/null
+++ b/macros/latex/contrib/iwonamath/iwonamath.ins
@@ -0,0 +1,13 @@
+\input l3docstrip.tex
+\askforoverwritefalse
+\generate
+{%
+ \file{iwonamath.sty}{\from{iwonamath.dtx}{package}}%
+ \file{ot1_FAMILY_m.fd}{\from{iwonamath.dtx}{fd,ot1m}}%
+ \file{ot1_FAMILY_.fd}{\from{iwonamath.dtx}{fd,ot1}}%
+ \file{oml_FAMILY_.fd}{\from{iwonamath.dtx}{fd,oml}}%
+ \file{oms_FAMILY_.fd}{\from{iwonamath.dtx}{fd,oms}}%
+ \file{omx_FAMILY_.fd}{\from{iwonamath.dtx}{fd,omx}}%
+ \file{omsiwonamathcmsy.fd}{\from{iwonamath.dtx}{fd,cmsy}}%
+}
+\endbatchfile
diff --git a/macros/latex/contrib/iwonamath/iwonamath.pdf b/macros/latex/contrib/iwonamath/iwonamath.pdf
new file mode 100644
index 0000000000..fc0b5e6e2c
--- /dev/null
+++ b/macros/latex/contrib/iwonamath/iwonamath.pdf
Binary files differ
diff --git a/macros/latex/contrib/iwonamath/makeiwonamathfd.sh b/macros/latex/contrib/iwonamath/makeiwonamathfd.sh
new file mode 100755
index 0000000000..3e8634f030
--- /dev/null
+++ b/macros/latex/contrib/iwonamath/makeiwonamathfd.sh
@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+# A simple script to create Iwona Math fds from template.
+# Public domain
+family=( iwonamath iwonamathc iwonamathl iwonamathlc )
+medium=( iwonar iwonacr iwonal iwonacl )
+bold=( iwonab iwonacb iwonam iwonacm )
+tmpl=( oml_FAMILY_.fd oms_FAMILY_.fd omx_FAMILY_.fd ot1_FAMILY_.fd ot1_FAMILY_m.fd )
+for i in 0 1 2 3; do
+ for template in ${tmpl[@]}; do
+ file=$(echo $template | sed "s/_FAMILY_/${family[$i]}/")
+ cat $template | \
+ sed "s/_FAMILY_/${family[$i]}/" | sed "s/_MEDIUM_/${medium[$i]}/" | \
+ sed "s/_BOLD_/${bold[$i]}/" > $file
+ done
+done
diff --git a/macros/latex/contrib/iwonamath/omliwonamath.fd b/macros/latex/contrib/iwonamath/omliwonamath.fd
new file mode 100644
index 0000000000..eca19657e2
--- /dev/null
+++ b/macros/latex/contrib/iwonamath/omliwonamath.fd
@@ -0,0 +1,39 @@
+%%
+%% This is file `omliwonamath.fd',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% iwonamath.dtx (with options: `fd,oml')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from omliwonamath.fd.
+%%
+%% For distribution of the original source see the terms
+%% for copying and modification in the file iwonamath.dtx.
+%%
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+\ProvidesExplFile
+{omliwonamath.fd}
+{2023-08-31} {1.0}
+{Scaled Iwona math fonts}
+\tl_if_exist:NTF \l__iwonamath_scale_tl
+{}
+{
+ \tl_new:N \l__iwonamath_scale_tl
+ \tl_set:Nn \l__iwonamath_scale_tl {1}
+}
+\DeclareFontFamily{OML}{iwonamath}{}
+\DeclareFontShape{OML}{iwonamath}{m}{it}{<-> [\l__iwonamath_scale_tl] mi-iwonari}{}
+\DeclareFontShape{OML}{iwonamath}{b}{it}{<-> [\l__iwonamath_scale_tl] mi-iwonabi}{}
+\DeclareFontShape{OML}{iwonamath}{bx}{it}{<-> [\l__iwonamath_scale_tl] mi-iwonabi}{}
+\endinput
+%%
+%% End of file `omliwonamath.fd'.
diff --git a/macros/latex/contrib/iwonamath/omliwonamathc.fd b/macros/latex/contrib/iwonamath/omliwonamathc.fd
new file mode 100644
index 0000000000..452341075f
--- /dev/null
+++ b/macros/latex/contrib/iwonamath/omliwonamathc.fd
@@ -0,0 +1,39 @@
+%%
+%% This is file `omliwonamathc.fd',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% iwonamath.dtx (with options: `fd,oml')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from omliwonamathc.fd.
+%%
+%% For distribution of the original source see the terms
+%% for copying and modification in the file iwonamath.dtx.
+%%
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+\ProvidesExplFile
+{omliwonamathc.fd}
+{2023-08-31} {1.0}
+{Scaled Iwona math fonts}
+\tl_if_exist:NTF \l__iwonamath_scale_tl
+{}
+{
+ \tl_new:N \l__iwonamath_scale_tl
+ \tl_set:Nn \l__iwonamath_scale_tl {1}
+}
+\DeclareFontFamily{OML}{iwonamathc}{}
+\DeclareFontShape{OML}{iwonamathc}{m}{it}{<-> [\l__iwonamath_scale_tl] mi-iwonacri}{}
+\DeclareFontShape{OML}{iwonamathc}{b}{it}{<-> [\l__iwonamath_scale_tl] mi-iwonacbi}{}
+\DeclareFontShape{OML}{iwonamathc}{bx}{it}{<-> [\l__iwonamath_scale_tl] mi-iwonacbi}{}
+\endinput
+%%
+%% End of file `omliwonamathc.fd'.
diff --git a/macros/latex/contrib/iwonamath/omliwonamathl.fd b/macros/latex/contrib/iwonamath/omliwonamathl.fd
new file mode 100644
index 0000000000..a0dba2a829
--- /dev/null
+++ b/macros/latex/contrib/iwonamath/omliwonamathl.fd
@@ -0,0 +1,39 @@
+%%
+%% This is file `omliwonamathl.fd',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% iwonamath.dtx (with options: `fd,oml')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from omliwonamathl.fd.
+%%
+%% For distribution of the original source see the terms
+%% for copying and modification in the file iwonamath.dtx.
+%%
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+\ProvidesExplFile
+{omliwonamathl.fd}
+{2023-08-31} {1.0}
+{Scaled Iwona math fonts}
+\tl_if_exist:NTF \l__iwonamath_scale_tl
+{}
+{
+ \tl_new:N \l__iwonamath_scale_tl
+ \tl_set:Nn \l__iwonamath_scale_tl {1}
+}
+\DeclareFontFamily{OML}{iwonamathl}{}
+\DeclareFontShape{OML}{iwonamathl}{m}{it}{<-> [\l__iwonamath_scale_tl] mi-iwonali}{}
+\DeclareFontShape{OML}{iwonamathl}{b}{it}{<-> [\l__iwonamath_scale_tl] mi-iwonami}{}
+\DeclareFontShape{OML}{iwonamathl}{bx}{it}{<-> [\l__iwonamath_scale_tl] mi-iwonami}{}
+\endinput
+%%
+%% End of file `omliwonamathl.fd'.
diff --git a/macros/latex/contrib/iwonamath/omliwonamathlc.fd b/macros/latex/contrib/iwonamath/omliwonamathlc.fd
new file mode 100644
index 0000000000..90d147d1ee
--- /dev/null
+++ b/macros/latex/contrib/iwonamath/omliwonamathlc.fd
@@ -0,0 +1,39 @@
+%%
+%% This is file `omliwonamathlc.fd',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% iwonamath.dtx (with options: `fd,oml')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from omliwonamathlc.fd.
+%%
+%% For distribution of the original source see the terms
+%% for copying and modification in the file iwonamath.dtx.
+%%
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+\ProvidesExplFile
+{omliwonamathlc.fd}
+{2023-08-31} {1.0}
+{Scaled Iwona math fonts}
+\tl_if_exist:NTF \l__iwonamath_scale_tl
+{}
+{
+ \tl_new:N \l__iwonamath_scale_tl
+ \tl_set:Nn \l__iwonamath_scale_tl {1}
+}
+\DeclareFontFamily{OML}{iwonamathlc}{}
+\DeclareFontShape{OML}{iwonamathlc}{m}{it}{<-> [\l__iwonamath_scale_tl] mi-iwonacli}{}
+\DeclareFontShape{OML}{iwonamathlc}{b}{it}{<-> [\l__iwonamath_scale_tl] mi-iwonacmi}{}
+\DeclareFontShape{OML}{iwonamathlc}{bx}{it}{<-> [\l__iwonamath_scale_tl] mi-iwonacmi}{}
+\endinput
+%%
+%% End of file `omliwonamathlc.fd'.
diff --git a/macros/latex/contrib/iwonamath/omsiwonamath.fd b/macros/latex/contrib/iwonamath/omsiwonamath.fd
new file mode 100644
index 0000000000..958053cd49
--- /dev/null
+++ b/macros/latex/contrib/iwonamath/omsiwonamath.fd
@@ -0,0 +1,39 @@
+%%
+%% This is file `omsiwonamath.fd',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% iwonamath.dtx (with options: `fd,oms')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from omsiwonamath.fd.
+%%
+%% For distribution of the original source see the terms
+%% for copying and modification in the file iwonamath.dtx.
+%%
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+\ProvidesExplFile
+{omsiwonamath.fd}
+{2023-08-31} {1.0}
+{Scaled Iwona math fonts}
+\tl_if_exist:NTF \l__iwonamath_scale_tl
+{}
+{
+ \tl_new:N \l__iwonamath_scale_tl
+ \tl_set:Nn \l__iwonamath_scale_tl {1}
+}
+\DeclareFontFamily{OMS}{iwonamath}{}
+\DeclareFontShape{OMS}{iwonamath}{m}{n}{<-> [\l__iwonamath_scale_tl] sy-iwonarz}{}
+\DeclareFontShape{OMS}{iwonamath}{b}{n}{<-> [\l__iwonamath_scale_tl] sy-iwonabz}{}
+\DeclareFontShape{OMS}{iwonamath}{bx}{n}{<-> [\l__iwonamath_scale_tl] sy-iwonabz}{}
+\endinput
+%%
+%% End of file `omsiwonamath.fd'.
diff --git a/macros/latex/contrib/iwonamath/omsiwonamathc.fd b/macros/latex/contrib/iwonamath/omsiwonamathc.fd
new file mode 100644
index 0000000000..02b892ffc5
--- /dev/null
+++ b/macros/latex/contrib/iwonamath/omsiwonamathc.fd
@@ -0,0 +1,39 @@
+%%
+%% This is file `omsiwonamathc.fd',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% iwonamath.dtx (with options: `fd,oms')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from omsiwonamathc.fd.
+%%
+%% For distribution of the original source see the terms
+%% for copying and modification in the file iwonamath.dtx.
+%%
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+\ProvidesExplFile
+{omsiwonamathc.fd}
+{2023-08-31} {1.0}
+{Scaled Iwona math fonts}
+\tl_if_exist:NTF \l__iwonamath_scale_tl
+{}
+{
+ \tl_new:N \l__iwonamath_scale_tl
+ \tl_set:Nn \l__iwonamath_scale_tl {1}
+}
+\DeclareFontFamily{OMS}{iwonamathc}{}
+\DeclareFontShape{OMS}{iwonamathc}{m}{n}{<-> [\l__iwonamath_scale_tl] sy-iwonacrz}{}
+\DeclareFontShape{OMS}{iwonamathc}{b}{n}{<-> [\l__iwonamath_scale_tl] sy-iwonacbz}{}
+\DeclareFontShape{OMS}{iwonamathc}{bx}{n}{<-> [\l__iwonamath_scale_tl] sy-iwonacbz}{}
+\endinput
+%%
+%% End of file `omsiwonamathc.fd'.
diff --git a/macros/latex/contrib/iwonamath/omsiwonamathl.fd b/macros/latex/contrib/iwonamath/omsiwonamathl.fd
new file mode 100644
index 0000000000..d291ba7eb0
--- /dev/null
+++ b/macros/latex/contrib/iwonamath/omsiwonamathl.fd
@@ -0,0 +1,39 @@
+%%
+%% This is file `omsiwonamathl.fd',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% iwonamath.dtx (with options: `fd,oms')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from omsiwonamathl.fd.
+%%
+%% For distribution of the original source see the terms
+%% for copying and modification in the file iwonamath.dtx.
+%%
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+\ProvidesExplFile
+{omsiwonamathl.fd}
+{2023-08-31} {1.0}
+{Scaled Iwona math fonts}
+\tl_if_exist:NTF \l__iwonamath_scale_tl
+{}
+{
+ \tl_new:N \l__iwonamath_scale_tl
+ \tl_set:Nn \l__iwonamath_scale_tl {1}
+}
+\DeclareFontFamily{OMS}{iwonamathl}{}
+\DeclareFontShape{OMS}{iwonamathl}{m}{n}{<-> [\l__iwonamath_scale_tl] sy-iwonalz}{}
+\DeclareFontShape{OMS}{iwonamathl}{b}{n}{<-> [\l__iwonamath_scale_tl] sy-iwonamz}{}
+\DeclareFontShape{OMS}{iwonamathl}{bx}{n}{<-> [\l__iwonamath_scale_tl] sy-iwonamz}{}
+\endinput
+%%
+%% End of file `omsiwonamathl.fd'.
diff --git a/macros/latex/contrib/iwonamath/omsiwonamathlc.fd b/macros/latex/contrib/iwonamath/omsiwonamathlc.fd
new file mode 100644
index 0000000000..55a040e93e
--- /dev/null
+++ b/macros/latex/contrib/iwonamath/omsiwonamathlc.fd
@@ -0,0 +1,39 @@
+%%
+%% This is file `omsiwonamathlc.fd',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% iwonamath.dtx (with options: `fd,oms')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from omsiwonamathlc.fd.
+%%
+%% For distribution of the original source see the terms
+%% for copying and modification in the file iwonamath.dtx.
+%%
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+\ProvidesExplFile
+{omsiwonamathlc.fd}
+{2023-08-31} {1.0}
+{Scaled Iwona math fonts}
+\tl_if_exist:NTF \l__iwonamath_scale_tl
+{}
+{
+ \tl_new:N \l__iwonamath_scale_tl
+ \tl_set:Nn \l__iwonamath_scale_tl {1}
+}
+\DeclareFontFamily{OMS}{iwonamathlc}{}
+\DeclareFontShape{OMS}{iwonamathlc}{m}{n}{<-> [\l__iwonamath_scale_tl] sy-iwonaclz}{}
+\DeclareFontShape{OMS}{iwonamathlc}{b}{n}{<-> [\l__iwonamath_scale_tl] sy-iwonacmz}{}
+\DeclareFontShape{OMS}{iwonamathlc}{bx}{n}{<-> [\l__iwonamath_scale_tl] sy-iwonacmz}{}
+\endinput
+%%
+%% End of file `omsiwonamathlc.fd'.
diff --git a/macros/latex/contrib/iwonamath/omxiwonamath.fd b/macros/latex/contrib/iwonamath/omxiwonamath.fd
new file mode 100644
index 0000000000..662121a6be
--- /dev/null
+++ b/macros/latex/contrib/iwonamath/omxiwonamath.fd
@@ -0,0 +1,39 @@
+%%
+%% This is file `omxiwonamath.fd',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% iwonamath.dtx (with options: `fd,omx')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from omxiwonamath.fd.
+%%
+%% For distribution of the original source see the terms
+%% for copying and modification in the file iwonamath.dtx.
+%%
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+\ProvidesExplFile
+{omxiwonamath.fd}
+{2023-08-31} {1.0}
+{Scaled Iwona math fonts}
+\tl_if_exist:NTF \l__iwonamath_scale_tl
+{}
+{
+ \tl_new:N \l__iwonamath_scale_tl
+ \tl_set:Nn \l__iwonamath_scale_tl {1}
+}
+\DeclareFontFamily{OMX}{iwonamath}{}
+\DeclareFontShape{OMX}{iwonamath}{m}{n}{<-> [\l__iwonamath_scale_tl] ex-iwonar}{}
+\DeclareFontShape{OMX}{iwonamath}{b}{n}{<-> [\l__iwonamath_scale_tl] ex-iwonab}{}
+\DeclareFontShape{OMX}{iwonamath}{bx}{n}{<-> [\l__iwonamath_scale_tl] ex-iwonab}{}
+\endinput
+%%
+%% End of file `omxiwonamath.fd'.
diff --git a/macros/latex/contrib/iwonamath/omxiwonamathc.fd b/macros/latex/contrib/iwonamath/omxiwonamathc.fd
new file mode 100644
index 0000000000..fce676f1e8
--- /dev/null
+++ b/macros/latex/contrib/iwonamath/omxiwonamathc.fd
@@ -0,0 +1,39 @@
+%%
+%% This is file `omxiwonamathc.fd',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% iwonamath.dtx (with options: `fd,omx')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from omxiwonamathc.fd.
+%%
+%% For distribution of the original source see the terms
+%% for copying and modification in the file iwonamath.dtx.
+%%
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+\ProvidesExplFile
+{omxiwonamathc.fd}
+{2023-08-31} {1.0}
+{Scaled Iwona math fonts}
+\tl_if_exist:NTF \l__iwonamath_scale_tl
+{}
+{
+ \tl_new:N \l__iwonamath_scale_tl
+ \tl_set:Nn \l__iwonamath_scale_tl {1}
+}
+\DeclareFontFamily{OMX}{iwonamathc}{}
+\DeclareFontShape{OMX}{iwonamathc}{m}{n}{<-> [\l__iwonamath_scale_tl] ex-iwonacr}{}
+\DeclareFontShape{OMX}{iwonamathc}{b}{n}{<-> [\l__iwonamath_scale_tl] ex-iwonacb}{}
+\DeclareFontShape{OMX}{iwonamathc}{bx}{n}{<-> [\l__iwonamath_scale_tl] ex-iwonacb}{}
+\endinput
+%%
+%% End of file `omxiwonamathc.fd'.
diff --git a/macros/latex/contrib/iwonamath/omxiwonamathl.fd b/macros/latex/contrib/iwonamath/omxiwonamathl.fd
new file mode 100644
index 0000000000..895f359e35
--- /dev/null
+++ b/macros/latex/contrib/iwonamath/omxiwonamathl.fd
@@ -0,0 +1,39 @@
+%%
+%% This is file `omxiwonamathl.fd',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% iwonamath.dtx (with options: `fd,omx')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from omxiwonamathl.fd.
+%%
+%% For distribution of the original source see the terms
+%% for copying and modification in the file iwonamath.dtx.
+%%
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+\ProvidesExplFile
+{omxiwonamathl.fd}
+{2023-08-31} {1.0}
+{Scaled Iwona math fonts}
+\tl_if_exist:NTF \l__iwonamath_scale_tl
+{}
+{
+ \tl_new:N \l__iwonamath_scale_tl
+ \tl_set:Nn \l__iwonamath_scale_tl {1}
+}
+\DeclareFontFamily{OMX}{iwonamathl}{}
+\DeclareFontShape{OMX}{iwonamathl}{m}{n}{<-> [\l__iwonamath_scale_tl] ex-iwonal}{}
+\DeclareFontShape{OMX}{iwonamathl}{b}{n}{<-> [\l__iwonamath_scale_tl] ex-iwonam}{}
+\DeclareFontShape{OMX}{iwonamathl}{bx}{n}{<-> [\l__iwonamath_scale_tl] ex-iwonam}{}
+\endinput
+%%
+%% End of file `omxiwonamathl.fd'.
diff --git a/macros/latex/contrib/iwonamath/omxiwonamathlc.fd b/macros/latex/contrib/iwonamath/omxiwonamathlc.fd
new file mode 100644
index 0000000000..85f60415e3
--- /dev/null
+++ b/macros/latex/contrib/iwonamath/omxiwonamathlc.fd
@@ -0,0 +1,39 @@
+%%
+%% This is file `omxiwonamathlc.fd',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% iwonamath.dtx (with options: `fd,omx')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from omxiwonamathlc.fd.
+%%
+%% For distribution of the original source see the terms
+%% for copying and modification in the file iwonamath.dtx.
+%%
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+\ProvidesExplFile
+{omxiwonamathlc.fd}
+{2023-08-31} {1.0}
+{Scaled Iwona math fonts}
+\tl_if_exist:NTF \l__iwonamath_scale_tl
+{}
+{
+ \tl_new:N \l__iwonamath_scale_tl
+ \tl_set:Nn \l__iwonamath_scale_tl {1}
+}
+\DeclareFontFamily{OMX}{iwonamathlc}{}
+\DeclareFontShape{OMX}{iwonamathlc}{m}{n}{<-> [\l__iwonamath_scale_tl] ex-iwonacl}{}
+\DeclareFontShape{OMX}{iwonamathlc}{b}{n}{<-> [\l__iwonamath_scale_tl] ex-iwonacm}{}
+\DeclareFontShape{OMX}{iwonamathlc}{bx}{n}{<-> [\l__iwonamath_scale_tl] ex-iwonacm}{}
+\endinput
+%%
+%% End of file `omxiwonamathlc.fd'.
diff --git a/macros/latex/contrib/iwonamath/ot1iwonamath.fd b/macros/latex/contrib/iwonamath/ot1iwonamath.fd
new file mode 100644
index 0000000000..20be53c3af
--- /dev/null
+++ b/macros/latex/contrib/iwonamath/ot1iwonamath.fd
@@ -0,0 +1,40 @@
+%%
+%% This is file `ot1iwonamath.fd',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% iwonamath.dtx (with options: `fd,ot1')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from ot1iwonamath.fd.
+%%
+%% For distribution of the original source see the terms
+%% for copying and modification in the file iwonamath.dtx.
+%%
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+\ProvidesExplFile
+{ot1iwonamath.fd}
+{2023-08-31} {1.0}
+{Scaled Iwona math fonts}
+\tl_if_exist:NTF \l__iwonamath_scale_tl
+{}
+{
+ \tl_new:N \l__iwonamath_scale_tl
+ \tl_set:Nn \l__iwonamath_scale_tl {1}
+}
+\DeclareFontFamily{OT1}{iwonamath}{}
+\DeclareFontShape{OT1}{iwonamath}{m}{n}{<-> [\l__iwonamath_scale_tl] rm-iwonar}{}
+\DeclareFontShape{OT1}{iwonamath}{m}{it}{<-> [\l__iwonamath_scale_tl] rm-iwonari}{}
+\DeclareFontShape{OT1}{iwonamath}{b}{n}{<-> [\l__iwonamath_scale_tl] rm-iwonab}{}
+\DeclareFontShape{OT1}{iwonamath}{bx}{n}{<-> [\l__iwonamath_scale_tl] rm-iwonab}{}
+\endinput
+%%
+%% End of file `ot1iwonamath.fd'.
diff --git a/macros/latex/contrib/iwonamath/ot1iwonamathc.fd b/macros/latex/contrib/iwonamath/ot1iwonamathc.fd
new file mode 100644
index 0000000000..a0b92a2b37
--- /dev/null
+++ b/macros/latex/contrib/iwonamath/ot1iwonamathc.fd
@@ -0,0 +1,40 @@
+%%
+%% This is file `ot1iwonamathc.fd',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% iwonamath.dtx (with options: `fd,ot1')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from ot1iwonamathc.fd.
+%%
+%% For distribution of the original source see the terms
+%% for copying and modification in the file iwonamath.dtx.
+%%
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+\ProvidesExplFile
+{ot1iwonamathc.fd}
+{2023-08-31} {1.0}
+{Scaled Iwona math fonts}
+\tl_if_exist:NTF \l__iwonamath_scale_tl
+{}
+{
+ \tl_new:N \l__iwonamath_scale_tl
+ \tl_set:Nn \l__iwonamath_scale_tl {1}
+}
+\DeclareFontFamily{OT1}{iwonamathc}{}
+\DeclareFontShape{OT1}{iwonamathc}{m}{n}{<-> [\l__iwonamath_scale_tl] rm-iwonacr}{}
+\DeclareFontShape{OT1}{iwonamathc}{m}{it}{<-> [\l__iwonamath_scale_tl] rm-iwonacri}{}
+\DeclareFontShape{OT1}{iwonamathc}{b}{n}{<-> [\l__iwonamath_scale_tl] rm-iwonacb}{}
+\DeclareFontShape{OT1}{iwonamathc}{bx}{n}{<-> [\l__iwonamath_scale_tl] rm-iwonacb}{}
+\endinput
+%%
+%% End of file `ot1iwonamathc.fd'.
diff --git a/macros/latex/contrib/iwonamath/ot1iwonamathcm.fd b/macros/latex/contrib/iwonamath/ot1iwonamathcm.fd
new file mode 100644
index 0000000000..a5e69e07ad
--- /dev/null
+++ b/macros/latex/contrib/iwonamath/ot1iwonamathcm.fd
@@ -0,0 +1,38 @@
+%%
+%% This is file `ot1iwonamathcm.fd',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% iwonamath.dtx (with options: `fd,ot1m')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from ot1iwonamathcm.fd.
+%%
+%% For distribution of the original source see the terms
+%% for copying and modification in the file iwonamath.dtx.
+%%
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+\ProvidesExplFile
+{ot1iwonamathcm.fd}
+{2023-08-31} {1.0}
+{Scaled Iwona math fonts}
+\tl_if_exist:NTF \l__iwonamath_scale_tl
+{}
+{
+ \tl_new:N \l__iwonamath_scale_tl
+ \tl_set:Nn \l__iwonamath_scale_tl {1}
+}
+\DeclareFontFamily{OT1}{iwonamathcm}{}
+\DeclareFontShape{OT1}{iwonamathcm}{m}{n}{<-> [\l__iwonamath_scale_tl] rm-iwonacr}{}
+\DeclareFontShape{OT1}{iwonamathcm}{b}{n}{<-> [\l__iwonamath_scale_tl] rm-iwonacb}{}
+\endinput
+%%
+%% End of file `ot1iwonamathcm.fd'.
diff --git a/macros/latex/contrib/iwonamath/ot1iwonamathl.fd b/macros/latex/contrib/iwonamath/ot1iwonamathl.fd
new file mode 100644
index 0000000000..82060b21d1
--- /dev/null
+++ b/macros/latex/contrib/iwonamath/ot1iwonamathl.fd
@@ -0,0 +1,40 @@
+%%
+%% This is file `ot1iwonamathl.fd',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% iwonamath.dtx (with options: `fd,ot1')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from ot1iwonamathl.fd.
+%%
+%% For distribution of the original source see the terms
+%% for copying and modification in the file iwonamath.dtx.
+%%
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+\ProvidesExplFile
+{ot1iwonamathl.fd}
+{2023-08-31} {1.0}
+{Scaled Iwona math fonts}
+\tl_if_exist:NTF \l__iwonamath_scale_tl
+{}
+{
+ \tl_new:N \l__iwonamath_scale_tl
+ \tl_set:Nn \l__iwonamath_scale_tl {1}
+}
+\DeclareFontFamily{OT1}{iwonamathl}{}
+\DeclareFontShape{OT1}{iwonamathl}{m}{n}{<-> [\l__iwonamath_scale_tl] rm-iwonal}{}
+\DeclareFontShape{OT1}{iwonamathl}{m}{it}{<-> [\l__iwonamath_scale_tl] rm-iwonali}{}
+\DeclareFontShape{OT1}{iwonamathl}{b}{n}{<-> [\l__iwonamath_scale_tl] rm-iwonam}{}
+\DeclareFontShape{OT1}{iwonamathl}{bx}{n}{<-> [\l__iwonamath_scale_tl] rm-iwonam}{}
+\endinput
+%%
+%% End of file `ot1iwonamathl.fd'.
diff --git a/macros/latex/contrib/iwonamath/ot1iwonamathlc.fd b/macros/latex/contrib/iwonamath/ot1iwonamathlc.fd
new file mode 100644
index 0000000000..c5b2f0024b
--- /dev/null
+++ b/macros/latex/contrib/iwonamath/ot1iwonamathlc.fd
@@ -0,0 +1,40 @@
+%%
+%% This is file `ot1iwonamathlc.fd',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% iwonamath.dtx (with options: `fd,ot1')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from ot1iwonamathlc.fd.
+%%
+%% For distribution of the original source see the terms
+%% for copying and modification in the file iwonamath.dtx.
+%%
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+\ProvidesExplFile
+{ot1iwonamathlc.fd}
+{2023-08-31} {1.0}
+{Scaled Iwona math fonts}
+\tl_if_exist:NTF \l__iwonamath_scale_tl
+{}
+{
+ \tl_new:N \l__iwonamath_scale_tl
+ \tl_set:Nn \l__iwonamath_scale_tl {1}
+}
+\DeclareFontFamily{OT1}{iwonamathlc}{}
+\DeclareFontShape{OT1}{iwonamathlc}{m}{n}{<-> [\l__iwonamath_scale_tl] rm-iwonacl}{}
+\DeclareFontShape{OT1}{iwonamathlc}{m}{it}{<-> [\l__iwonamath_scale_tl] rm-iwonacli}{}
+\DeclareFontShape{OT1}{iwonamathlc}{b}{n}{<-> [\l__iwonamath_scale_tl] rm-iwonacm}{}
+\DeclareFontShape{OT1}{iwonamathlc}{bx}{n}{<-> [\l__iwonamath_scale_tl] rm-iwonacm}{}
+\endinput
+%%
+%% End of file `ot1iwonamathlc.fd'.
diff --git a/macros/latex/contrib/iwonamath/ot1iwonamathlcm.fd b/macros/latex/contrib/iwonamath/ot1iwonamathlcm.fd
new file mode 100644
index 0000000000..130c63822e
--- /dev/null
+++ b/macros/latex/contrib/iwonamath/ot1iwonamathlcm.fd
@@ -0,0 +1,38 @@
+%%
+%% This is file `ot1iwonamathlcm.fd',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% iwonamath.dtx (with options: `fd,ot1m')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from ot1iwonamathlcm.fd.
+%%
+%% For distribution of the original source see the terms
+%% for copying and modification in the file iwonamath.dtx.
+%%
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+\ProvidesExplFile
+{ot1iwonamathlcm.fd}
+{2023-08-31} {1.0}
+{Scaled Iwona math fonts}
+\tl_if_exist:NTF \l__iwonamath_scale_tl
+{}
+{
+ \tl_new:N \l__iwonamath_scale_tl
+ \tl_set:Nn \l__iwonamath_scale_tl {1}
+}
+\DeclareFontFamily{OT1}{iwonamathlcm}{}
+\DeclareFontShape{OT1}{iwonamathlcm}{m}{n}{<-> [\l__iwonamath_scale_tl] rm-iwonacl}{}
+\DeclareFontShape{OT1}{iwonamathlcm}{b}{n}{<-> [\l__iwonamath_scale_tl] rm-iwonacm}{}
+\endinput
+%%
+%% End of file `ot1iwonamathlcm.fd'.
diff --git a/macros/latex/contrib/iwonamath/ot1iwonamathlm.fd b/macros/latex/contrib/iwonamath/ot1iwonamathlm.fd
new file mode 100644
index 0000000000..ab72419cd8
--- /dev/null
+++ b/macros/latex/contrib/iwonamath/ot1iwonamathlm.fd
@@ -0,0 +1,38 @@
+%%
+%% This is file `ot1iwonamathlm.fd',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% iwonamath.dtx (with options: `fd,ot1m')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from ot1iwonamathlm.fd.
+%%
+%% For distribution of the original source see the terms
+%% for copying and modification in the file iwonamath.dtx.
+%%
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+\ProvidesExplFile
+{ot1iwonamathlm.fd}
+{2023-08-31} {1.0}
+{Scaled Iwona math fonts}
+\tl_if_exist:NTF \l__iwonamath_scale_tl
+{}
+{
+ \tl_new:N \l__iwonamath_scale_tl
+ \tl_set:Nn \l__iwonamath_scale_tl {1}
+}
+\DeclareFontFamily{OT1}{iwonamathlm}{}
+\DeclareFontShape{OT1}{iwonamathlm}{m}{n}{<-> [\l__iwonamath_scale_tl] rm-iwonal}{}
+\DeclareFontShape{OT1}{iwonamathlm}{b}{n}{<-> [\l__iwonamath_scale_tl] rm-iwonam}{}
+\endinput
+%%
+%% End of file `ot1iwonamathlm.fd'.
diff --git a/macros/latex/contrib/iwonamath/ot1iwonamathm.fd b/macros/latex/contrib/iwonamath/ot1iwonamathm.fd
new file mode 100644
index 0000000000..7a103a029b
--- /dev/null
+++ b/macros/latex/contrib/iwonamath/ot1iwonamathm.fd
@@ -0,0 +1,38 @@
+%%
+%% This is file `ot1iwonamathm.fd',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% iwonamath.dtx (with options: `fd,ot1m')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from ot1iwonamathm.fd.
+%%
+%% For distribution of the original source see the terms
+%% for copying and modification in the file iwonamath.dtx.
+%%
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+\ProvidesExplFile
+{ot1iwonamathm.fd}
+{2023-08-31} {1.0}
+{Scaled Iwona math fonts}
+\tl_if_exist:NTF \l__iwonamath_scale_tl
+{}
+{
+ \tl_new:N \l__iwonamath_scale_tl
+ \tl_set:Nn \l__iwonamath_scale_tl {1}
+}
+\DeclareFontFamily{OT1}{iwonamathm}{}
+\DeclareFontShape{OT1}{iwonamathm}{m}{n}{<-> [\l__iwonamath_scale_tl] rm-iwonar}{}
+\DeclareFontShape{OT1}{iwonamathm}{b}{n}{<-> [\l__iwonamath_scale_tl] rm-iwonab}{}
+\endinput
+%%
+%% End of file `ot1iwonamathm.fd'.
diff --git a/macros/latex/contrib/iwonamath/sample.pdf b/macros/latex/contrib/iwonamath/sample.pdf
new file mode 100644
index 0000000000..c64d5e078d
--- /dev/null
+++ b/macros/latex/contrib/iwonamath/sample.pdf
Binary files differ
diff --git a/macros/latex/contrib/iwonamath/sample.tex b/macros/latex/contrib/iwonamath/sample.tex
new file mode 100644
index 0000000000..d6c88f3d22
--- /dev/null
+++ b/macros/latex/contrib/iwonamath/sample.tex
@@ -0,0 +1,79 @@
+\documentclass{article}
+\usepackage[default]{lato}
+\usepackage{natbib}
+\usepackage {amsmath,amssymb,bm}
+\usepackage[scale=1.15]{iwonamath}
+\DefineIwonaMathVersion{name=iwonacondensed, condensed}
+\DefineIwonaMathVersion{name=iwonalight, light}
+\DefineIwonaMathVersion{name=iwonalightcondensed, light, condensed}
+\newcommand\ibinom[2]{\genfrac\lbrace\rbrace{0pt}{}{#1}{#2}}
+\long\def\sample{%
+ First some large operators both in text:
+\smash{$ \iiint\limits_{\mathcal{Q}} f(x,y,z)\,dx\,dy\,dz $}
+and
+$\prod_{\gamma\in\Gamma_{\widetilde{C}}} \partial(\widetilde{X}_\gamma)$;
+and also on display:
+
+\begin{equation}
+\begin{split}
+\iiiint\limits_{\mathbf{Q}} f(w,x,y,z)\,dw\,dx\,dy\,dz &\leq
+\oint_{\bm{\partial Q}} f' \left( \max \left\lbrace
+\frac{\lVert w \rVert}{\lvert w^2 + x^2 \rvert} ;
+\frac{\lVert z \rVert}{\lvert y^2 + z^2 \rvert} ;
+\frac{\lVert w \oplus z \rVert}{\lVert x \oplus y \rVert}
+\right\rbrace\right)
+\\
+&\precapprox \biguplus_{\mathbb{Q} \Subset \bar{\mathbf{Q}}}
+ \left[ f^{\ast} \left(
+ \frac{\left\lmoustache\mathbb{Q}(t)\right\rmoustache}
+ {\sqrt {1 - t^2}}
+ \right)\right]_{t=\alpha}^{t=\vartheta}
+ - ( \Delta + \nu - v )^3
+\end{split}
+\end{equation}
+
+For $x$ in the open interval $ \left] -1, 1 \right[ $
+the infinite sum in Equation~\eqref{eq:binom1} is convergent;
+however, this does not hold
+throughout the closed interval $ \left[ -1, 1 \right] $.
+\begin{align}
+ (1 - x)^{-k} &=
+ 1 + \sum_{j=1}^{\infty} (-1)^j \ibinom{k}{j} x^j
+ \text{\quad for $k \in \mathbb{N}$; $k \neq 0$.}
+ \label{eq:binom1}
+\end{align}}
+
+
+\begin{document}
+
+In this sample we use Lato font~\citep{lato} as the body font. For the math we
+use the same input as in The \LaTeX\ Companion~\citep[\S~12.5]{TLC3}).
+
+
+In all examples we use Iwona scaled 1.15
+
+\section*{Iwona regular}
+
+\sample
+
+\section*{Iwona condensed}
+
+\mathversion{iwonacondensed}
+\sample
+
+\section*{Iwona light}
+
+\mathversion{iwonalight}
+\sample
+
+\section*{Iwona light condensed}
+
+\mathversion{iwonalightcondensed}
+\sample
+
+
+
+\bibliography{iwonamath}
+\bibliographystyle{plainnat}
+
+\end{document}
diff --git a/macros/latex/contrib/jwjournal/jwjournal.cls b/macros/latex/contrib/jwjournal/jwjournal.cls
index c178db4e59..9b1e23804f 100644
--- a/macros/latex/contrib/jwjournal/jwjournal.cls
+++ b/macros/latex/contrib/jwjournal/jwjournal.cls
@@ -12,7 +12,7 @@
\NeedsTeXFormat{LaTeX2e}[2022-06-01]
\ProvidesExplClass
{jwjournal}
- {2023/08/31} {}
+ {2023/09/01} {}
{JW's journal class}
\keys_define:nn { jwjournal }
@@ -105,6 +105,9 @@
\RequirePackage { enumitem }
\setlist [ description ] { font = \normalfont\sffamily, leftmargin = 3em, topsep = 0pt, labelsep = 1em }
+\dim_new:N \l_jwjournal_labelsep_dim
+\dim_set:Nn \l_jwjournal_labelsep_dim { \labelsep }
+\setlist [ 2 ] { labelsep = \l_jwjournal_labelsep_dim, labelwidth = !}
\RenewDocumentCommand \descriptionlabel { m }
{
\makebox[\maxof{\width}{2em}][l]{
@@ -115,10 +118,10 @@
left = .1em, right = .1em, top = .05em, bottom = .05em] { #1 }
}
}
-\NewDocumentCommand \JWJournalItem { m }
+\NewDocumentCommand \JWJournalItem { m m }
{
\begin{description}
- \item #1
+ \item[#1] #2
\end{description}
}
@@ -341,20 +344,20 @@
\regex_replace_all:nnN
{ \*\*\* (.*?) \*\*\* }
- { \c{textbf}\{ \c{emph}\{ \1 \} \} }
+ { \c{textbf} { \c{emph} {\1} } }
\l_jwjournal_tmp_tl
\regex_replace_all:nnN
{ \*\* (.*?) \*\* }
- { \c{textbf}\{ \1 \} }
+ { \c{textbf} {\1} }
\l_jwjournal_tmp_tl
\regex_replace_all:nnN
{ \* (.*?) \* }
- { \c{emph}\{ \1 \} }
+ { \c{emph} {\1} }
\l_jwjournal_tmp_tl
\regex_replace_once:nnN
{ >>> \ *? (.*) }
- { \c{JWJournalNote}\{\1\} }
+ { \c{JWJournalNote} {\1} }
\l_jwjournal_tmp_tl
\regex_replace_all:nnN
{ \ *? >>> \ *? }
@@ -412,12 +415,12 @@
\l_jwjournal_tmp_tl
\regex_replace_once:nnN
- { ❄️ \ *? (\[.*\] .*) }
- { \c{JWJournalItem} {\1} }
+ { ❄️ \ *? \[(.*)\] (.*) }
+ { \c{JWJournalItem} {\1} {\2} }
\l_jwjournal_tmp_tl
\regex_replace_once:nnN
{ ❄️ \ *? 【(.*)】(.*) }
- { \c{JWJournalItem} { \[\1\] \2 } }
+ { \c{JWJournalItem} {\1} {\2} }
\l_jwjournal_tmp_tl
\regex_replace_once:nnN { ❄️ } { } \l_jwjournal_tmp_tl
diff --git a/macros/latex/contrib/siunitx/CHANGELOG.md b/macros/latex/contrib/siunitx/CHANGELOG.md
index 5f4eb8bb13..5d7e746833 100644
--- a/macros/latex/contrib/siunitx/CHANGELOG.md
+++ b/macros/latex/contrib/siunitx/CHANGELOG.md
@@ -7,6 +7,13 @@ Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to
## [Unreleased]
+## [v3.3.6] - 2023-09-01
+
+### Fixed
+- Corrected handling of font commands inside `\ensuremath` in text
+ mode (see issue
+ [\#694](https://github.com/josephwright/siunitx/issues/694))
+
## [v3.3.5] - 2023-08-30
### Fixed
@@ -2012,7 +2019,8 @@ Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to
### Added
- First public testing release (as `si`)
-[Unreleased]: https://github.com/josephwright/siunitx/compare/v3.3.5...HEAD
+[Unreleased]: https://github.com/josephwright/siunitx/compare/v3.3.6...HEAD
+[v3.3.6]: https://github.com/josephwright/siunitx/compare/v3.3.5...v3.3.6
[v3.3.5]: https://github.com/josephwright/siunitx/compare/v3.3.4...v3.3.5
[v3.3.4]: https://github.com/josephwright/siunitx/compare/v3.3.3...v3.3.4
[v3.3.3]: https://github.com/josephwright/siunitx/compare/v3.3.2...v3.3.3
diff --git a/macros/latex/contrib/siunitx/siunitx-code.pdf b/macros/latex/contrib/siunitx/siunitx-code.pdf
index 493c8aeced..e6f9a48580 100644
--- a/macros/latex/contrib/siunitx/siunitx-code.pdf
+++ b/macros/latex/contrib/siunitx/siunitx-code.pdf
Binary files differ
diff --git a/macros/latex/contrib/siunitx/siunitx-print.dtx b/macros/latex/contrib/siunitx/siunitx-print.dtx
index f802bd7353..79d2d53840 100644
--- a/macros/latex/contrib/siunitx/siunitx-print.dtx
+++ b/macros/latex/contrib/siunitx/siunitx-print.dtx
@@ -891,15 +891,15 @@
\tl_set:Nn \l_@@_tmp_tl {#1}
\tl_if_empty:NF \l_@@_tmp_tl
{
- \@@_text_replace_font:N \l_@@_tmp_tl
- \tl_if_empty:NF \l_siunitx_unit_font_tl
- {
- \exp_after:wN
- \cs_set_eq:NN \l_siunitx_unit_font_tl \scan_stop:
- }
- \cs_set:Npn \mathord ##1
- { \@@_text_replace_first:N ##1 }
- \group_begin:
+ \group_begin:
+ \@@_text_replace_font:N \l_@@_tmp_tl
+ \cs_set:Npn \mathord ##1
+ { \@@_text_replace_first:N ##1 }
+ \tl_if_empty:NF \l_siunitx_unit_font_tl
+ {
+ \exp_after:wN
+ \cs_set_eq:NN \l_siunitx_unit_font_tl \scan_stop:
+ }
\tl_map_inline:nn
{ \mp \approx \sim \ge \le \geq \leq \gg \ll \angle }
{
@@ -909,7 +909,10 @@
\cs_set:Npn \sqrt ##1
{
\exp_not:N \ensuremath
- { \exp_not:N \sqrt { \exp_not:N \text {##1} } }
+ {
+ \exp_not:N \sqrt
+ { \exp_not:N \text { \@@_text_replace:n {##1} } }
+ }
}
\protected@edef \l_@@_tmp_tl
{ \exp_after:wN \@@_text_replace_first:N \l_@@_tmp_tl }
diff --git a/macros/latex/contrib/siunitx/siunitx.dtx b/macros/latex/contrib/siunitx/siunitx.dtx
index f2ec215fa5..dee6c48699 100644
--- a/macros/latex/contrib/siunitx/siunitx.dtx
+++ b/macros/latex/contrib/siunitx/siunitx.dtx
@@ -121,7 +121,7 @@
%
% Identify the package and give the over all version information.
% \begin{macrocode}
-\ProvidesExplPackage {siunitx} {2023-08-30} {3.3.5}
+\ProvidesExplPackage {siunitx} {2023-09-01} {3.3.6}
{A comprehensive (SI) units package}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/siunitx/siunitx.pdf b/macros/latex/contrib/siunitx/siunitx.pdf
index 000d5790d6..84048f928d 100644
--- a/macros/latex/contrib/siunitx/siunitx.pdf
+++ b/macros/latex/contrib/siunitx/siunitx.pdf
Binary files differ
diff --git a/macros/latex/contrib/udes-genie-these/acronymes.tex b/macros/latex/contrib/udes-genie-these/Exemple/acronymes.tex
index 84eb09844d..84eb09844d 100644
--- a/macros/latex/contrib/udes-genie-these/acronymes.tex
+++ b/macros/latex/contrib/udes-genie-these/Exemple/acronymes.tex
diff --git a/macros/latex/contrib/udes-genie-these/document.tex b/macros/latex/contrib/udes-genie-these/Exemple/document.tex
index 66245c37d8..485226c152 100644
--- a/macros/latex/contrib/udes-genie-these/document.tex
+++ b/macros/latex/contrib/udes-genie-these/Exemple/document.tex
@@ -18,7 +18,9 @@
fichier-symboles = {symboles},
fichier-acronymes = {acronymes},
fichiers-references = {references},
+ %auto-bib,
%style-references = plain,
+ %legendes-min,
}
\TitreFrancais{CECI EST LE TITRE FRANÇAIS\\DU DOCUMENT}
@@ -36,7 +38,7 @@
\Evaluateur{Prénom5}{NOM5}
% Le contenu du document doit respecter le protocole de rédaction.
-% Le contenu fourni ici n'est qu'un exemple afin d'illustre l'utilisation de la classe.
+% Le contenu fourni ici n'est qu'un exemple afin d'illustrer l'utilisation de la classe.
\begin{document}
diff --git a/macros/latex/contrib/udes-genie-these/lexique.tex b/macros/latex/contrib/udes-genie-these/Exemple/lexique.tex
index 33f0ad57b7..33f0ad57b7 100644
--- a/macros/latex/contrib/udes-genie-these/lexique.tex
+++ b/macros/latex/contrib/udes-genie-these/Exemple/lexique.tex
diff --git a/macros/latex/contrib/udes-genie-these/merci.tex b/macros/latex/contrib/udes-genie-these/Exemple/merci.tex
index 1ca4d21385..1ca4d21385 100644
--- a/macros/latex/contrib/udes-genie-these/merci.tex
+++ b/macros/latex/contrib/udes-genie-these/Exemple/merci.tex
diff --git a/macros/latex/contrib/udes-genie-these/references.bib b/macros/latex/contrib/udes-genie-these/Exemple/references.bib
index 70583f06ac..70583f06ac 100644
--- a/macros/latex/contrib/udes-genie-these/references.bib
+++ b/macros/latex/contrib/udes-genie-these/Exemple/references.bib
diff --git a/macros/latex/contrib/udes-genie-these/resume-anglais.tex b/macros/latex/contrib/udes-genie-these/Exemple/resume-anglais.tex
index 8a9c6d6202..8a9c6d6202 100644
--- a/macros/latex/contrib/udes-genie-these/resume-anglais.tex
+++ b/macros/latex/contrib/udes-genie-these/Exemple/resume-anglais.tex
diff --git a/macros/latex/contrib/udes-genie-these/resume-francais.tex b/macros/latex/contrib/udes-genie-these/Exemple/resume-francais.tex
index 344f5cd372..344f5cd372 100644
--- a/macros/latex/contrib/udes-genie-these/resume-francais.tex
+++ b/macros/latex/contrib/udes-genie-these/Exemple/resume-francais.tex
diff --git a/macros/latex/contrib/udes-genie-these/symboles.tex b/macros/latex/contrib/udes-genie-these/Exemple/symboles.tex
index 923a1c85ef..923a1c85ef 100644
--- a/macros/latex/contrib/udes-genie-these/symboles.tex
+++ b/macros/latex/contrib/udes-genie-these/Exemple/symboles.tex
diff --git a/macros/latex/contrib/udes-genie-these/README.md b/macros/latex/contrib/udes-genie-these/README.md
index 82bbd5cff7..7682a7db62 100644
--- a/macros/latex/contrib/udes-genie-these/README.md
+++ b/macros/latex/contrib/udes-genie-these/README.md
@@ -5,7 +5,7 @@ The udes-genie-these class can be used for Ph.D. thesis, master's thesis and pro
The class file documentation is in French, the language of the typical user at the Université de Sherbrooke. An example of use is also distributed with the documentation.
-Copyright (C) 2017-2022 Charles-Antoine Brunet
+Copyright (C) 2017-2023 Charles-Antoine Brunet
## Class file (udes-genie-these.cls)
The class file (udes-genie-these.cls) is generated with the installation file (udes-genie-these.ins) with the following command:
diff --git a/macros/latex/contrib/udes-genie-these/udes-genie-these.dtx b/macros/latex/contrib/udes-genie-these/udes-genie-these.dtx
index 25fa39a50e..cdd6bdfe6e 100644
--- a/macros/latex/contrib/udes-genie-these/udes-genie-these.dtx
+++ b/macros/latex/contrib/udes-genie-these/udes-genie-these.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%% udes-genie-these.dtx
-%% Copyright 2022 Charles-Antoine Brunet
+%% Copyright 2023 Charles-Antoine Brunet
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
@@ -26,9 +26,9 @@
%<these|protocole>%%--- IDENTIFICATION ------------------------------------------------------
%<these|protocole>%%-----------------------------------------------------------------------------
%<these|protocole>
-%<these>\ProvidesExplClass{udes-genie-these}{2022/11/17}{3.0.1}
+%<these>\ProvidesExplClass{udes-genie-these}{2023/09/01}{3.1.0}
%<these> {Université de Sherbrooke, Faculté de génie: classe de document pour thèses, mémoires, DPR et essais}
-%<protocole>\ProvidesExplClass{udes-genie-protocole}{2022/11/17}{3.0.1}
+%<protocole>\ProvidesExplClass{udes-genie-protocole}{2023/09/01}{3.1.0}
%<protocole> {Université de Sherbrooke, Faculté de génie: classe de document pour le protocole de rédaction}
%<these|protocole>
%<*driver>
@@ -132,10 +132,11 @@
% \changes{v2.0.2}{2022-09-15}{Maintenance (LaTeX2e 2020-02-02 à 2022-06-01). Distribution sur CTAN. Adaptations à la documentation.}
% \changes{v3.0}{2022-09-19}{Support pour \pkg{biblatex}. Ajustements à la documentation.}
% \changes{v3.0.1}{2022-11-17}{Ajustements à la documentation et à l'exemple. Changements internes pour les formats LaTeX antérieurs à 2022-06-01.}
+% \changes{v3.1.0}{2023-09-01}{Ajout des champs auto-bib et legendes-min. Ajustements à la documentation. Correction de bugs. Format 2022-06-01 ou plus récent requis. Maintenance interne.}
%
% \GetFileInfo{udes-genie-these.dtx}
%
-% \title{CLASSE DE DOCUMENT \latex POUR LA RÉDACTION AUX ÉTUDES SUPÉRIEURES À LA FACULTÉ DE GÉNIE DE L'UNIVERSITÉ DE SHERBROOKE\\{\large \laclassetitre, version 3.0.1}}
+% \title{CLASSE DE DOCUMENT \latex POUR LA RÉDACTION AUX ÉTUDES SUPÉRIEURES À LA FACULTÉ DE GÉNIE DE L'UNIVERSITÉ DE SHERBROOKE\\{\large \laclassetitre, version 3.1.0}}
% \author{Charles-Antoine Brunet}
% \date{\today}
% \maketitle
@@ -158,7 +159,7 @@
% Le style de références est maintenant spécifié par le nouveau champ de configuration |style-references| et non plus dans le préambule avec la macro |\bibliographystyle|. Il faut donc retirer une macro du style |\bibliographystyle{AAA}| et la remplacer par un champ de configuration du genre |style-references = AAA|. C'est tout!
%
%\section{Installation et vérification}\label{sec:inst}
-% La classe \laclasse utilise des fonctionnalités récentes de \latex. Il faut donc vous assurer d'avoir une version à jour de votre distribution \latex (\texlive ou \miktex). Si vous utilisez \overleaf, il faut vous assurer que votre projet compile avec la version la plus récente de \texlive.
+% La classe \laclasse utilise des fonctionnalités récentes de \latex. Il faut donc vous assurer d'avoir une version à jour de votre distribution \latex (\texlive ou \miktex). Si vous utilisez \overleaf, il faut vous assurer que votre projet compile avec la version la plus récente de \texlive offerte.
%
% Selon votre distribution \latex, choisissez l'option qui vous convient.
% la classe
@@ -176,11 +177,11 @@
% \textbf{Court terme:}\\ Si vous pensez utiliser \laclasse à court terme, alors procédez comme avec \overleaf, comme ce qui suit.
%
% \subsection*{\overleaf}
-% Pour utiliser \laclasse, vous pouvez récupérer une archive sur l'intranet de la Faculté de génie qui contient tout ce qu'il faut pour compiler un document. L'archive contient aussi la documentation et un exemple d'utilisation. Il suffit d'extraire les fichiers de l'archive dans un répertoire et de compiler avec votre variante favorite de \latex. Cette méthode fonctionne pour \overleaf et aussi toutes les autres distributions \latex.
+% Cette méthode fonctionne pour \overleaf et aussi toutes les autres distributions \latex. Pour utiliser \laclasse, vous pouvez récupérer une archive sur l'intranet de la Faculté de génie qui contient tout ce qu'il faut pour compiler un document. Consultez le fichier |README| distribué pour la suite.
%
% Cette manière de fonctionner fait en sorte que vous êtes responsables de faire les mises à jour, car elles ne se feront pas automatiquement. Cela veut aussi dire qu'au cours du temps, si vous n'êtes pas vigilants, vous pourriez avoir plusieurs projets qui utilisent \laclasse, mais qui utilisent des versions différentes.
%
-% Dans \overleaf, la classe \laclasse ne fait pas partie des \packages préinstallés et il n'est pas possible non plus de l'installer de manière standard, comme avec les autres distributions \latex (\miktex et \texlive). Il reste deux options: avoir une copie de \laclasse présente dans chaque projet ou utiliser le mécanisme de partage de fichiers entre vos différents projets afin d'éviter d'en avoir plusieurs copies.
+% Dans \overleaf, pour l'instant, la classe \laclasse ne fait pas partie des \packages préinstallés et il n'est pas possible non plus de l'installer de manière standard, comme avec les autres distributions \latex (\miktex et \texlive). Selon les informations sur le site web d'\overleaf au moment de l'écriture de ces lignes, leur distribution \texlive est mise à jour une fois par année lorsque la nouvelle version de \texlive est disponible. Avec un peu de chance, \laclasse fera partie d'\overleaf lors de leur prochaine mise à jour. Même dans ce cas, cela veut dire que la classe \laclasse serait mise à jour qu'une seule fois par année.
%
% \subsection*{Vérification}
% Afin de vérifier que l'installation s'est bien passée, il vous est suggéré de compiler l'exemple distribué avec \laclasse. C'est le meilleur moyen de savoir si vous avez tout ce qu'il faut.
@@ -227,9 +228,11 @@
%%-----------------------------------------------------------------------------
%%--- DECLARATION DES VARIABLES -------------------------------------------
%%-----------------------------------------------------------------------------
+\bool_new:N \g_@@_autobib_bool
+\bool_new:N \g_@@_legendes_min_bool
\bool_new:N \g_@@_lignes_bool
-\bool_new:N \g_@@_listeDesFigures_bool
-\bool_new:N \g_@@_listeDesTableaux_bool
+\bool_new:N \g_@@_liste_figures_bool
+\bool_new:N \g_@@_liste_tableaux_bool
\clist_new:N \g_@@_dedicace_cl
\clist_new:N \g_@@_fichiers_references_cl
@@ -297,7 +300,7 @@
%%--- DECLARATION DES CONSTANTES ------------------------------------------
%%-----------------------------------------------------------------------------
\int_const:Nn \c_@@_max_pages_dprdoctorat_int {40}
-\int_const:Nn \c_@@_max_pages_dprmaitrise_int {30}
+\int_const:Nn \c_@@_max_pages_dprmaitrise_int {25}
\int_const:Nn \c_@@_max_pages_essai_int {70}
\int_const:Nn \c_@@_max_pages_memoire_int {120}
%<protocole>\int_const:Nn \c_@@_max_pages_protocole_int {10000}
@@ -344,6 +347,61 @@
\clist_gput_right:Nx \g_@@_specialite_cl
{\c_@@_type_memoire_tl, \c_@@_type_these_tl}
+%%-----------------------------------------------------------------------------
+%%--- MESSAGES D'ERREURS --------------------------------------------------
+%%-----------------------------------------------------------------------------
+\msg_new:nnnn {udesgeniethese}{erreur_format}{Un~LaTeX~plus~récent~est~nécessaire.~Veuillez~mettre~à~jour~votre~distribution~LaTeX.}{Le~format~2022-06-01~ou~un~plus~récent~est~nécessaire.}
+
+\msg_new:nnnn {udesgeniethese}{biblatex_en_trop}{Avec~l'option~bibtex,~il~ne~faut~pas~charger~le~package~biblatex.}{Consultez~la~documentation~de~la~classe.}
+
+\msg_new:nnnn {udesgeniethese}{biblatex_manquant}{L'option~biblatex~requiert~de~charger~le~package~biblatex~dans~le~preambule.}{Consultez~la~documentation~de~la~classe.}
+
+\msg_new:nnnn {udesgeniethese}{auteur_nom_vide}{Le~nom~de~l'auteur~du~document~n'est~pas~specifie.~Specifiez-le~avec~la~macro~\Auteur~dans~le~preambule.}{Consultez~la~documentation~de~la~classe.}
+
+\msg_new:nnnn {udesgeniethese}{auteur_prenom_vide}{Le~prenom~de~l'auteur~du~document~n'est~pas~specifie.~Specifiez-le~avec~la~macro~\Auteur~dans~le~preambule.}{Consultez~la~documentation~de~la~classe.}
+
+\msg_new:nnnn {udesgeniethese}{config_fichier_vide}{Le~fichier~pour~#1~n'est~pas~specifie.~Specifiez-le~avec~la~cle~'#2'~dans~la~configuration~du~document.}{Consultez~la~documentation~de~la~classe.}
+
+\msg_new:nnnn {udesgeniethese}{config_fichiers_vides}{Les~fichiers~pour~#1~ne~sont~pas~specifies.~Specifiez-les~avec~la~cle~'#2'~dans~la~configuration~du~document.}{Consultez~la~documentation~de~la~classe.}
+
+\msg_new:nnnn {udesgeniethese}{config_langue_vide}{La~langue~principale~du~document~n'est~pas~specifiee.~Specifiez-la~avec~la~cle~'langue'~dans~la~configuration~du~document.}{Consultez~la~documentation~de~la~classe.}
+
+\msg_new:nnnn {udesgeniethese}{config_programme_vide}{Le~programme~du~document~n'est~pas~specifie.~Specifiez-le~avec~la~cle~'programme'~dans~la~configuration~du~document.}{Consultez~la~documentation~de~la~classe.}
+
+\msg_new:nnnn {udesgeniethese}{config_type_vide}{Le~type~du~document~n'est~pas~specifie.~Specifiez-le~avec~la~cle~'type'~dans~la~configuration~du~document.}{Consultez~la~documentation~de~la~classe.}
+
+\msg_new:nnnn {udesgeniethese}{date_annee_vide}{L'annee~de~la~date~du~document~n'est~pas~specifiee.~Specifiez-la~avec~la~macro~\Date~dans~le~preambule.}{Consultez~la~documentation~de~la~classe.}
+
+\msg_new:nnnn {udesgeniethese}{date_mois_vide}{Le~mois~de~la~date~du~document~n'est~pas~specifie.~Specifiez-le~avec~la~macro~\Date~dans~le~preambule.}{Consultez~la~documentation~de~la~classe.}
+
+\msg_new:nnnn {udesgeniethese}{dprdoctorat_max_pages}{La~DPR~de~doctorat~semble~longue.~Le~protocole~exige~un~maximum~de~40~pages.}{Consultez~le~protocole~de~redaction.}
+
+\msg_new:nnnn {udesgeniethese}{dprmaitrise_max_pages}{La~DPR~de~maitrise~semble~longue.~Le~protocole~exige~un~maximum~de~25~pages.}{Consultez~le~protocole~de~redaction.}
+
+\msg_new:nnnn {udesgeniethese}{essai_max_pages}{L'essai~semble~long.~Le~protocole~exige~un~maximum~de~70~pages.}{Consultez~le~protocole~de~redaction.}
+
+\msg_new:nnnn {udesgeniethese}{memoire_max_pages}{Le~memoire~semble~long.~Le~protocole~exige~un~maximum~de~120~pages.}{Consultez~le~protocole~de~redaction.}
+
+\msg_new:nnnn {udesgeniethese}{mots_cles_anglais_vide}{Les~mots-cles~anglais~ne~sont~pas~specifies.~Specifiez-les~avec~la~macro~\MotsClesAnglais~dans~le~preambule.}{Consultez~la~documentation~de~la~classe.}
+
+\msg_new:nnnn {udesgeniethese}{mots_cles_francais_vide}{Les~mots-cles~francais~ne~sont~pas~specifies.~Specifiez-les~avec~la~macro~\MotsClesFrancais~dans~le~preambule.}{Consultez~la~documentation~de~la~classe.}
+
+\msg_new:nnnn {udesgeniethese}{remerciements_longs}{Les~remerciements~doivent~etre~d'une~page~maximum.}{Consultez~la~documentation~de~la~classe.}
+
+\msg_new:nnnn {udesgeniethese}{resume_anglais_long}{Le~resume~anglais~doit~etre~d'une~page~maximum,~incluant~les~mots-cles.}{Consultez~la~documentation~de~la~classe.}
+
+\msg_new:nnnn {udesgeniethese}{titre_resume_mots_cles_anglais}{Le~titre,~le~resume~et~les~mots-cles~anglais~doivent~etre~donnes.~On~ne~peut~donner~l'un~sans~les~autres.}{Consultez~la~documentation.}
+
+\msg_new:nnnn {udesgeniethese}{resume_francais_long}{Le~resume~francais~doit~etre~d'une~page~maximum,~incluant~les~mots-cles.}{Consultez~la~documentation~de~la~classe.}
+
+\msg_new:nnnn {udesgeniethese}{these_max_pages}{La~these~semble~longue.~Le~protocole~exige~un~maximum~de~250~pages}{Consultez~le~protocole~de~redaction.}
+
+\msg_new:nnnn {udesgeniethese}{titre_anglais_vide}{Le~titre~anglais~du~document~n'est~pas~specifie.~Specifiez-le~avec~la~macro~\TitreAnglais~dans~le~preambule.}{Consultez~la~documentation~de~la~classe.}
+
+\msg_new:nnnn {udesgeniethese}{titre_francais_vide}{Le~titre~francais~du~document~n'est~pas~specifie.~Specifiez-le~avec~la~macro~\TitreFrancais~dans~le~preambule.}{Consultez~la~documentation~de~la~classe.}
+
+\msg_new:nnnn {udesgeniethese}{aerospatial}{Le~type~du~document~doit~etre~essai~si~le~programme~est~aerospatial.~Specifiez-le~~bon~type~dans~la~configuration~du~document.}{Consultez~la~documentation~de~la~classe.}
+
%\end{implementation}
%
% \subsection{Options} \label{class-options}
@@ -365,40 +423,41 @@
%
% Si le choix est |bibtex|, le style bibliographique est spécifié avec le champ de configuration |style-references| et les fichiers de références utilisés par |bibtex| sont ceux spécifiés avec le champ |references| (voir la section~\ref{sec:config}). La liste des références est générée automatiquement par \laclasse avec la macro |\bibliography|.
%
-% Si le choix est de |biblatex|, la personne qui rédige le document est responsable de charger le \package |biblatex| avec la macro |\usepackage| dans le préambule, car trop de cas de figures peuvent survenir afin d'assurer un chargement correct. La liste des références est gérérée automatiquement par \laclasse avec la macro |\printbibliography| et les fichiers de références sont spécifiés avec le champs de configuration |references| (voir la section~\ref{sec:config}). Les fichiers de références sont fournis automatiquement par \laclasse avec la macro |\addbibresource|. Le champ de configuration |references-style| est ignoré, car le style est géré par la personne qui rédige avec avec l'aide de |biblatex|.
+% Si le choix est de |biblatex|, la personne qui rédige le document est responsable de charger le \package |biblatex| avec la macro |\usepackage| dans le préambule, car trop de cas de figures peuvent survenir afin d'assurer un chargement correct. La liste des références est gérérée automatiquement par \laclasse avec la macro |\printbibliography| et les fichiers de références sont spécifiés avec le champs de configuration |references| (voir la section~\ref{sec:config}). Les fichiers de références sont fournis automatiquement par \laclasse avec la macro |\addbibresource|. Le champ de configuration |style-references| est ignoré, car le style est géré par la personne qui rédige avec avec l'aide de |biblatex|.
%
%\end{variable}
%\begin{implementation}
%%-----------------------------------------------------------------------------
%%--- OPTIONS DE CLASSE ---------------------------------------------------
%%-----------------------------------------------------------------------------
-\keys_define:nn { udes-genie-these }
+\IfFormatAtLeastTF {2022-06-01}
+ {}{\msg_fatal:nn{udesgeniethese}{erreur_format}}
+
+\DeclareKeys
{
biblatex .code:n = {\tl_gset_eq:NN \g_@@_references_engin_tl \c_@@_references_biblatex_tl},
+ biblatex .usage:n = load,
bibtex .code:n = {\tl_gset_eq:NN \g_@@_references_engin_tl \c_@@_references_bibtex_tl},
+ bibtex .usage:n = load,
livre .code:n = {
\PassOptionsToClass{twoside,openright}{book}
\PassOptionsToPackage{twoside=true}{geometry}
\tl_gset_eq:NN \g_@@_format_tl \c_@@_format_livre_tl
},
+ livre .usage:n = load,
simple .code:n = {
\PassOptionsToClass{oneside,openany}{book}
\PassOptionsToPackage{twoside=false}{geometry}
\tl_gset_eq:NN \g_@@_format_tl \c_@@_format_simple_tl
},
+ simple .usage:n = load,
unknown .code:n = {\PassOptionsToClass{\CurrentOption}{book}},
}
-\keys_set:nn { udes-genie-these } {livre}
+\SetKeys{livre}
+
+\ProcessKeyOptions
-\IfFormatAtLeastTF {2022-06-01}
-{
- \ProcessKeyOptions[udes-genie-these]
-}
-{
- \RequirePackage {l3keys2e}
- \ProcessKeysOptions{udes-genie-these}
-}
%%-----------------------------------------------------------------------------
%%--- DEPENDANCES DE CLASSE -----------------------------------------------
@@ -414,27 +473,14 @@
%\end{implementation}
%
% \subsection{Configuration du document}\label{sec:config}
-% Le \protocole a des exigences au niveau de l'ordonnancement de certaines parties ou de certains éléments de présentation. Certaines de ces exigences sont gérées automatiquement en utilisant la macro de configuration du document, la macro |\ConfigurationDocument|. Cette macro est utilisée dans le préambule du document. Un exemple de configuration avec la description de chacun des champs suit. Vous devez évidemment adapter le contenu des champs de la configuration du document pour refléter vos besoins et les noms de vos fichiers. Il est à remarquer que chaque ligne qui spécifie un champ se termine par une virgule.
+% Le \protocole a des exigences au niveau de l'ordonnancement de certaines parties ou de certains éléments de présentation. Certaines de ces exigences sont gérées automatiquement en utilisant la macro de configuration du document, la macro |\ConfigurationDocument|. Cette macro est utilisée dans le préambule du document. L’exemple distribué avec \laclasse montre un exemple de configuration. Vous devez évidemment adapter le contenu des champs de la configuration du document pour refléter vos besoins et les noms de vos fichiers. Il est à remarquer que chaque ligne qui spécifie un champ se termine par une virgule.
%
%\begin{function}{\ConfigurationDocument}
%\begin{syntax}
%\begin{verbatim}
% \ConfigurationDocument
% {
-% langue = francais,
-% type = memoire,
-% programme = electrique,
-% lignes,
-% liste-figures,
-% liste-tableaux,
-% fichier-resume-francais = {resumef},
-% fichier-resume-anglais = {resumea},
-% fichier-remerciements = {merci},
-% fichier-lexique = {lexique},
-% fichier-symboles = {symboles},
-% fichier-acronymes = {acronymes},
-% fichiers-references = {journaux,conferences},
-% style-references = plain,
+% ...
% }
%\end{verbatim}
%\end{syntax}
@@ -508,6 +554,20 @@
% Ce champ spécifie le style bibliographique à utiliser pour la construction de la liste des références, tel que requis par \bibtex ou un autres engins bibliographiques équivalents. Comme ce champ spécifie le style à utiliser, il n'est pas nécessaire de mettre la macro |\bibliographystyle| dans le préambule, car la classe \laclasse automatise cette étape. Ce champ est ignoré, si l'option de classe |biblatex| a été spécifié (voir la section~\ref{class-options}). Consultez le protocole au sujet des styles bibliographiques. D'autres détails au sujet des références bibliographiques sont donnés dans la section~\ref{sec:refbib}.
%\end{variable}
%
+%\begin{variable}[added=2023-08-29]{auto-bib}
+%\begin{syntax}
+% |auto-bib =| \meta{valeur}
+%\end{syntax}
+% Ce champ est utilitaire et il est ignoré, sauf si l'option |biblatex| de classe a été spécifié (voir section~\ref{class-options}). Les choix pour \meta{valeur} sont |true| et |false|. Si ce champ est |true|, l'extension |bib| est ajoutée automatiquement à tous les fichiers spécifiés avec le champ |fichiers-references|. Ceci peut être pratique pour uniformiser les noms dans la liste des fichiers que \bibtex ou |biblatex| soit utilisé. Si la valeur de ce champ est |false|, rien n'est fait. Si ce champ est omis, la valeur par défaut est |false|. Il est possible aussi de spécifier uniquement |auto-bib| pour spécifier |true|.
+%\end{variable}
+%
+%
+%\begin{variable}[added=2023-08-30]{legendes-min}
+%\begin{syntax}
+% |legendes-min =| \meta{valeur}
+%\end{syntax}
+% Ce champ permet de spécifier si les mots \textit{figure} et \textit{tableau} des légendes sont écrits en style \textit{minuscule} ou non. Si ce champ est |true|, alors seule la première lettre du mot est en majuscule et ils sont écrits comme suit: Figure et Tableau. Si ce champ est |false|, alors le style est \textit{petites majuscules} et ils sont écrits comme suit: \textsc{Figure} et \textsc{Tableau}. La valeur par défaut de ce champ est |false|.
+%\end{variable}
%\begin{implementation}
\DeclareDocumentCommand \ConfigurationDocument { m }
{ \keys_set:nn { udes-genie-these } { #1 } }
@@ -524,9 +584,9 @@
programme .choices:nn = {electrique,mecanique,aerospatial,chimique,civil}
{\tl_gset_eq:NN \g_@@_programme_tl \l_keys_choice_tl},
programme .value_required:n = true,
- liste-figures .bool_gset:N = \g_@@_listeDesFigures_bool,
+ liste-figures .bool_gset:N = \g_@@_liste_figures_bool,
liste-figures .default:n = true,
- liste-tableaux .bool_gset:N = \g_@@_listeDesTableaux_bool,
+ liste-tableaux .bool_gset:N = \g_@@_liste_tableaux_bool,
liste-tableaux .default:n = true,
lignes .bool_gset:N = \g_@@_lignes_bool,
lignes .default:n = true,
@@ -546,6 +606,10 @@
fichiers-references .value_required:n = true,
style-references .tl_gset:N = \g_@@_style_references_tl,
style-references .value_required:n = true,
+ auto-bib .bool_gset:N = \g_@@_autobib_bool,
+ auto-bib .default:n = true,
+ legendes-min .bool_gset:N = \g_@@_legendes_min_bool,
+ legendes-min .default:n = true,
}
%\end{implementation}
@@ -732,7 +796,7 @@
foot=1.25cm,head=0.9cm,headsep=0.35cm,bindingoffset=0.5cm}
\captionsetup[table]{labelsep=quad,textformat=simple,font=normal,margin=5ex,position=top,skip=0.5ex}
\captionsetup[figure]{labelsep=quad,textformat=simple,font=normal,margin=5ex,position=bottom,skip=1ex}
-\frenchbsetup{ItemLabels=\textendash}
+\frenchsetup{ItemLabels=\textendash}
%%-----------------------------------------------------------------------------
%%--- REDEFINITION MACROS STANDARDS ------------------------------------
@@ -765,123 +829,6 @@
\secdef\@@_chapter\@@_schapter
}
-\addto\captionsfrench
-{
- \tl_gset:Nn \contentsname {TABLE~DES~MATIÈRES}
- \tl_gset:Nn \listfigurename {LISTE~DES~FIGURES}
- \tl_gset:Nn \listtablename {LISTE~DES~TABLEAUX}
- \tl_gset:Nn \chaptername {CHAPITRE}
- \tl_gset:Nn \bibname {LISTE~DES~RÉFÉRENCES}
- \tl_gset:Nn \appendixname {ANNEXE}
- \tl_gset:Nn \partname {PARTIE}
- \tl_gset:Nn \figurename {Figure}
- \tl_gset:Nn \tablename {Tableau}
- \tl_gset:Nn \glossaryname {LEXIQUE}
- \tl_gset:Nn \indexname {INDEX}
- \tl_gset:Nn \abstractname {RÉSUMÉ}
- \tl_gset:Nn \refname {LISTE~DES~RÉFÉRENCES}
- \tl_gset:Nn \prefacename {PRÉFACE}
- \tl_gset:Nn \CaptionSeparator {~~}
- \tl_gset:Nn \g_@@_listsymbolsname_tl {LISTE~DES~SYMBOLES}
- \tl_gset:Nn \g_@@_listacronymsname_tl {LISTE~DES~ACRONYMES}
- \tl_gset:Nn \g_@@_acknowledgementsname_tl {REMERCIEMENTS}
- \tl_gset:Nn \g_@@_udesname_tl {UNIVERSITÉ~DE~SHERBROOKE}
- \tl_gset:Nn \g_@@_facultyname_tl {Faculté~de~génie}
- \tl_gset:Nn \g_@@_specialityname_tl {Spécialité~:~}
- \tl_gset:Nn \g_@@_juryname_tl {MEMBRES~DU~JURY}
- \tl_gset:Nn \g_@@_adressname_tl {Sherbrooke~(Québec)~Canada}
- \tl_gset:Nn \g_@@_motsclesname_tl {Mots-clés~:}
- \tl_gset:Nn \g_@@_jury_codirname_tl {Codirecteur}
- \tl_gset:Nn \g_@@_jury_codirnamef_tl {Codirectrice}
- \tl_gset:Nn \g_@@_jury_dirname_tl {Directeur}
- \tl_gset:Nn \g_@@_jury_dirnamef_tl {Directrice}
- \tl_gset:Nn \g_@@_jury_evalname_tl {Évaluateur}
- \tl_gset:Nn \g_@@_jury_evalnamef_tl {Évaluatrice}
-}
-
-\addto\captionsenglish
-{
- \tl_gset:Nn \contentsname {TABLE~OF~CONTENTS}
- \tl_gset:Nn \listfigurename {LIST~OF~FIGURES}
- \tl_gset:Nn \listtablename {LIST~OF~TABLES}
- \tl_gset:Nn \chaptername {CHAPTER}
- \tl_gset:Nn \bibname {LIST~OF~REFERENCES}
- \tl_gset:Nn \appendixname {APPENDIX}
- \tl_gset:Nn \partname {PART}
- \tl_gset:Nn \figurename {Figure}
- \tl_gset:Nn \tablename {Table}
- \tl_gset:Nn \glossaryname {GLOSSARY}
- \tl_gset:Nn \indexname {INDEX}
- \tl_gset:Nn \abstractname {ABSTRACT}~
- \tl_gset:Nn \refname {REFERENCES}
- \tl_gset:Nn \prefacename {PREFACE}
- \tl_gset:Nn \CaptionSeparator {~~}
- \tl_gset:Nn \g_@@_listsymbolsname_tl {LIST~OF~SYMBOLS}
- \tl_gset:Nn \g_@@_listacronymsname_tl {LIST~OF~ACRONYMS}
- \tl_gset:Nn \g_@@_acknowledgementsname_tl {ACKNOWLEDGEMENTS}
- \tl_gset:Nn \g_@@_udesname_tl {UNIVERSITÉ~DE~SHERBROOKE}
- \tl_gset:Nn \g_@@_facultyname_tl {Faculté~de~génie}
- \tl_gset:Nn \g_@@_specialityname_tl {Specialité:~}
- \tl_gset:Nn \g_@@_juryname_tl {JURY~MEMBERS}
- \tl_gset:Nn \g_@@_adressname_tl {Sherbrooke~(Québec)~Canada}
- \tl_gset:Nn \g_@@_motsclesname_tl {Keywords:}
- \tl_gset:Nn \g_@@_jury_codirname_tl {Co-supervisor}
- \tl_gset:Nn \g_@@_jury_codirnamef_tl {Co-supervisor}
- \tl_gset:Nn \g_@@_jury_dirname_tl {Supervisor}
- \tl_gset:Nn \g_@@_jury_dirnamef_tl {Supervisor} %Directress
- \tl_gset:Nn \g_@@_jury_evalname_tl {Examiner} %Internal et external
- \tl_gset:Nn \g_@@_jury_evalnamef_tl {Examiner} %Internal et external
-}
-
-%%-----------------------------------------------------------------------------
-%%--- MESSAGES D'ERREURS --------------------------------------------------
-%%-----------------------------------------------------------------------------
-\msg_new:nnnn {udesgeniethese}{auteur_nom_vide}{Le~nom~de~l'auteur~du~document~n'est~pas~specifie.~Specifiez-le~avec~la~macro~\Auteur~dans~le~preambule.}{Consultez~la~documentation~de~la~classe.}
-
-\msg_new:nnnn {udesgeniethese}{auteur_prenom_vide}{Le~prenom~de~l'auteur~du~document~n'est~pas~specifie.~Specifiez-le~avec~la~macro~\Auteur~dans~le~preambule.}{Consultez~la~documentation~de~la~classe.}
-
-\msg_new:nnnn {udesgeniethese}{config_fichier_vide}{Le~fichier~pour~#1~n'est~pas~specifie.~Specifiez-le~avec~la~cle~'#2'~dans~la~configuration~du~document.}{Consultez~la~documentation~de~la~classe.}
-
-\msg_new:nnnn {udesgeniethese}{config_fichiers_vides}{Les~fichiers~pour~#1~ne~sont~pas~specifies.~Specifiez-les~avec~la~cle~'#2'~dans~la~configuration~du~document.}{Consultez~la~documentation~de~la~classe.}
-
-\msg_new:nnnn {udesgeniethese}{config_langue_vide}{La~langue~principale~du~document~n'est~pas~specifiee.~Specifiez-la~avec~la~cle~'langue'~dans~la~configuration~du~document.}{Consultez~la~documentation~de~la~classe.}
-
-\msg_new:nnnn {udesgeniethese}{config_programme_vide}{Le~programme~du~document~n'est~pas~specifie.~Specifiez-le~avec~la~cle~'programme'~dans~la~configuration~du~document.}{Consultez~la~documentation~de~la~classe.}
-
-\msg_new:nnnn {udesgeniethese}{config_type_vide}{Le~type~du~document~n'est~pas~specifie.~Specifiez-le~avec~la~cle~'type'~dans~la~configuration~du~document.}{Consultez~la~documentation~de~la~classe.}
-
-\msg_new:nnnn {udesgeniethese}{date_annee_vide}{L'annee~de~la~date~du~document~n'est~pas~specifiee.~Specifiez-la~avec~la~macro~\Date~dans~le~preambule.}{Consultez~la~documentation~de~la~classe.}
-
-\msg_new:nnnn {udesgeniethese}{date_mois_vide}{Le~mois~de~la~date~du~document~n'est~pas~specifie.~Specifiez-le~avec~la~macro~\Date~dans~le~preambule.}{Consultez~la~documentation~de~la~classe.}
-
-\msg_new:nnnn {udesgeniethese}{dprdoctorat_max_pages}{La~DPR~de~doctorat~semble~longue.~Le~protocole~suggere~de~25~a~40~pages.}{Consultez~le~protocole~de~redaction.}
-
-\msg_new:nnnn {udesgeniethese}{dprmaitrise_max_pages}{La~DPR~de~maitrise~semble~longue.~Le~protocole~suggere~de~20~a~30~pages.}{Consultez~le~protocole~de~redaction.}
-
-\msg_new:nnnn {udesgeniethese}{essai_max_pages}{L'essai~semble~long.~Le~protocole~exige~un~maximum~de~70~pages.}{Consultez~le~protocole~de~redaction.}
-
-\msg_new:nnnn {udesgeniethese}{memoire_max_pages}{Le~memoire~semble~long.~Le~protocole~exige~un~maximum~de~120~pages.}{Consultez~le~protocole~de~redaction.}
-
-\msg_new:nnnn {udesgeniethese}{mots_cles_anglais_vide}{Les~mots-cles~anglais~ne~sont~pas~specifies.~Specifiez-les~avec~la~macro~\MotsClesAnglais~dans~le~preambule.}{Consultez~la~documentation~de~la~classe.}
-
-\msg_new:nnnn {udesgeniethese}{mots_cles_francais_vide}{Les~mots-cles~francais~ne~sont~pas~specifies.~Specifiez-les~avec~la~macro~\MotsClesFrancais~dans~le~preambule.}{Consultez~la~documentation~de~la~classe.}
-
-\msg_new:nnnn {udesgeniethese}{remerciements_longs}{Les~remerciements~doivent~etre~d'une~page~maximum.}{Consultez~la~documentation~de~la~classe.}
-
-\msg_new:nnnn {udesgeniethese}{resume_anglais_long}{Le~resume~anglais~doit~etre~d'une~page~maximum,~incluant~les~mots-cles.}{Consultez~la~documentation~de~la~classe.}
-
-\msg_new:nnnn {udesgeniethese}{titre_resume_mots_cles_anglais}{Le~titre,~le~resume~et~les~mots-cles~anglais~doivent~etre~donnes.~On~ne~peut~donner~l'un~sans~les~autres.}{Consultez~la~documentation.}
-
-\msg_new:nnnn {udesgeniethese}{resume_francais_long}{Le~resume~francais~doit~etre~d'une~page~maximum,~incluant~les~mots-cles.}{Consultez~la~documentation~de~la~classe.}
-
-\msg_new:nnnn {udesgeniethese}{these_max_pages}{La~these~semble~longue.~Le~protocole~exige~un~maximum~de~250~pages}{Consultez~le~protocole~de~redaction.}
-
-\msg_new:nnnn {udesgeniethese}{titre_anglais_vide}{Le~titre~anglais~du~document~n'est~pas~specifie.~Specifiez-le~avec~la~macro~\TitreAnglais~dans~le~preambule.}{Consultez~la~documentation~de~la~classe.}
-
-\msg_new:nnnn {udesgeniethese}{titre_francais_vide}{Le~titre~francais~du~document~n'est~pas~specifie.~Specifiez-le~avec~la~macro~\TitreFrancais~dans~le~preambule.}{Consultez~la~documentation~de~la~classe.}
-
-\msg_new:nnnn {udesgeniethese}{aerospatial}{Le~type~du~document~doit~etre~essai~si~le~programme~est~aerospatial.~Specifiez-le~~bon~type~dans~la~configuration~du~document.}{Consultez~la~documentation~de~la~classe.}
-
%%-----------------------------------------------------------------------------
%%--- MACROS INTERNES --------------------------------------------------
%%-----------------------------------------------------------------------------
@@ -914,19 +861,19 @@
\newcommand*{\@@_makechapterhead}[1]
{
- {
- \parindent \z@ \normalfont % \raggedright
- \ifnum \c@secnumdepth >\m@ne
- \if@mainmatter
- \LARGE\sffamily\bfseries \chaptername\space \thechapter
- \par\nobreak
- \vskip 0\p@
- \fi
- \fi
- \interlinepenalty\@M
- \LARGE\sffamily\bfseries #1 \par\nobreak
- \vskip 30\p@
- }
+ \group_begin:
+ \parindent \z@ \normalfont % \raggedright
+ \ifnum \c@secnumdepth >\m@ne
+ \if@mainmatter
+ \LARGE\sffamily\bfseries \chaptername\space \thechapter
+ \par\nobreak
+ \vskip 0\p@
+ \fi
+ \fi
+ \interlinepenalty\@M
+ \LARGE\sffamily\bfseries #1 \par\nobreak
+ \vskip 30\p@
+ \group_end:
}
\newcommand*{\@@_schapter}[1]
@@ -941,12 +888,85 @@
\newcommand*{\@@_makeschapterhead}[1]
{
+ \group_begin:
+ \parindent \z@ \normalfont %\raggedright
+ \vskip 0\p@
+ \interlinepenalty\@M
+ \LARGE\sffamily\bfseries #1 \par\nobreak
+ \vskip 30\p@
+ \group_end:
+}
+
+\cs_new:Npn \@@_caption_fmt #1 { #1 }
+
+\cs_new:Npn \@@_setup_captions
+{
+ \addto\captionsfrench
{
- \parindent \z@ \normalfont %\raggedright
- \vskip 0\p@
- \interlinepenalty\@M
- \LARGE\sffamily\bfseries #1 \par\nobreak
- \vskip 30\p@
+ \tl_gset:Nn \contentsname {TABLE~DES~MATIÈRES}
+ \tl_gset:Nn \listfigurename {LISTE~DES~FIGURES}
+ \tl_gset:Nn \listtablename {LISTE~DES~TABLEAUX}
+ \tl_gset:Nn \chaptername {CHAPITRE}
+ \tl_gset:Nn \bibname {LISTE~DES~RÉFÉRENCES}
+ \tl_gset:Nn \appendixname {ANNEXE}
+ \tl_gset:Nn \partname {PARTIE}
+ \tl_gset:Nn \figurename {Figure}
+ \tl_gset:Nn \tablename {Tableau}
+ \tl_gset:Nn \glossaryname {LEXIQUE}
+ \tl_gset:Nn \indexname {INDEX}
+ \tl_gset:Nn \abstractname {RÉSUMÉ}
+ \tl_gset:Nn \refname {LISTE~DES~RÉFÉRENCES}
+ \tl_gset:Nn \prefacename {PRÉFACE}
+ \tl_gset:Nn \CaptionSeparator {~~}
+ \tl_gset:Nn \g_@@_listsymbolsname_tl {LISTE~DES~SYMBOLES}
+ \tl_gset:Nn \g_@@_listacronymsname_tl {LISTE~DES~ACRONYMES}
+ \tl_gset:Nn \g_@@_acknowledgementsname_tl {REMERCIEMENTS}
+ \tl_gset:Nn \g_@@_udesname_tl {UNIVERSITÉ~DE~SHERBROOKE}
+ \tl_gset:Nn \g_@@_facultyname_tl {Faculté~de~génie}
+ \tl_gset:Nn \g_@@_specialityname_tl {Spécialité~:~}
+ \tl_gset:Nn \g_@@_juryname_tl {MEMBRES~DU~JURY}
+ \tl_gset:Nn \g_@@_adressname_tl {Sherbrooke~(Québec)~Canada}
+ \tl_gset:Nn \g_@@_motsclesname_tl {Mots-clés~:}
+ \tl_gset:Nn \g_@@_jury_codirname_tl {Codirecteur}
+ \tl_gset:Nn \g_@@_jury_codirnamef_tl {Codirectrice}
+ \tl_gset:Nn \g_@@_jury_dirname_tl {Directeur}
+ \tl_gset:Nn \g_@@_jury_dirnamef_tl {Directrice}
+ \tl_gset:Nn \g_@@_jury_evalname_tl {Évaluateur}
+ \tl_gset:Nn \g_@@_jury_evalnamef_tl {Évaluatrice}
+ }
+
+ \addto\captionsenglish
+ {
+ \tl_gset:Nn \contentsname {TABLE~OF~CONTENTS}
+ \tl_gset:Nn \listfigurename {LIST~OF~FIGURES}
+ \tl_gset:Nn \listtablename {LIST~OF~TABLES}
+ \tl_gset:Nn \chaptername {CHAPTER}
+ \tl_gset:Nn \bibname {LIST~OF~REFERENCES}
+ \tl_gset:Nn \appendixname {APPENDIX}
+ \tl_gset:Nn \partname {PART}
+ \tl_gset:Nn \figurename {\_@@_caption_fmt{Figure}}
+ \tl_gset:Nn \tablename {\_@@_caption_fmt{Table}}
+ \tl_gset:Nn \glossaryname {GLOSSARY}
+ \tl_gset:Nn \indexname {INDEX}
+ \tl_gset:Nn \abstractname {ABSTRACT}~
+ \tl_gset:Nn \refname {LIST~OF~REFERENCES}
+ \tl_gset:Nn \prefacename {PREFACE}
+ \tl_gset:Nn \CaptionSeparator {~~}
+ \tl_gset:Nn \g_@@_listsymbolsname_tl {LIST~OF~SYMBOLS}
+ \tl_gset:Nn \g_@@_listacronymsname_tl {LIST~OF~ACRONYMS}
+ \tl_gset:Nn \g_@@_acknowledgementsname_tl {ACKNOWLEDGEMENTS}
+ \tl_gset:Nn \g_@@_udesname_tl {UNIVERSITÉ~DE~SHERBROOKE}
+ \tl_gset:Nn \g_@@_facultyname_tl {Faculté~de~génie}
+ \tl_gset:Nn \g_@@_specialityname_tl {Specialité:~}
+ \tl_gset:Nn \g_@@_juryname_tl {JURY~MEMBERS}
+ \tl_gset:Nn \g_@@_adressname_tl {Sherbrooke~(Québec)~Canada}
+ \tl_gset:Nn \g_@@_motsclesname_tl {Keywords:}
+ \tl_gset:Nn \g_@@_jury_codirname_tl {Co-supervisor}
+ \tl_gset:Nn \g_@@_jury_codirnamef_tl {Co-supervisor}
+ \tl_gset:Nn \g_@@_jury_dirname_tl {Supervisor}
+ \tl_gset:Nn \g_@@_jury_dirnamef_tl {Supervisor} %Directress
+ \tl_gset:Nn \g_@@_jury_evalname_tl {Examiner} %Internal et external
+ \tl_gset:Nn \g_@@_jury_evalnamef_tl {Examiner} %Internal et external
}
}
@@ -1024,47 +1044,47 @@
\tl_if_empty:NT \g_@@_date_mois_tl
{ \msg_error:nn {udesgeniethese}{date_mois_vide} }
- \tl_case:Nn \g_@@_langue_tl
+ \token_case_meaning:Nn \g_@@_langue_tl
{
\c_@@_langue_francais_tl
{
\tl_if_empty:NT \g_@@_titre_francais_tl
- { \msg_error:nn {udesgeniethese}{titre_francais_vide} }
+ { \msg_error:nn {udesgeniethese}{titre_francais_vide} }
%<*these>
- \tl_if_empty:NT \g_@@_mots_cles_francais_tl
+ \tl_if_empty:NT \g_@@_mots_cles_francais_tl
{ \msg_error:nn {udesgeniethese}{mots_cles_francais_vide} }
- \tl_if_empty:NT \g_@@_fichier_resume_francais_tl
+ \tl_if_empty:NT \g_@@_fichier_resume_francais_tl
{ \msg_error:nnnn {udesgeniethese}{config_fichier_vide}{le~resume~francais}{fichierResumeFrancais} }
- \int_zero:N \l_tmpa_int
- \tl_if_empty:NF \g_@@_titre_anglais_tl
+ \int_zero:N \l_tmpa_int
+ \tl_if_empty:NF \g_@@_titre_anglais_tl
{ \int_incr:N \l_tmpa_int }
- \tl_if_empty:NF \g_@@_fichier_resume_anglais_tl
+ \tl_if_empty:NF \g_@@_fichier_resume_anglais_tl
{ \int_incr:N \l_tmpa_int }
- \tl_if_empty:NF \g_@@_mots_cles_anglais_tl
+ \tl_if_empty:NF \g_@@_mots_cles_anglais_tl
{ \int_incr:N \l_tmpa_int }
- \int_case:nnF { \l_tmpa_int }
- { {0}{}{3}{} }
- {
- \msg_error:nn {udesgeniethese}{titre_resume_mots_cles_anglais}
- \tl_gclear:N \g_@@_fichier_resume_anglais_tl % resume pas genere
- }
+ \int_case:nnF { \l_tmpa_int }
+ { {0}{}{3}{} }
+ {
+ \msg_error:nn {udesgeniethese}{titre_resume_mots_cles_anglais}
+ \tl_gclear:N \g_@@_fichier_resume_anglais_tl % resume pas genere
+ }
}
\c_@@_langue_english_tl
{
- \tl_if_empty:NT \g_@@_titre_francais_tl
- { \msg_error:nn {udesgeniethese}{titre_francais_vide} }
- \tl_if_empty:NT \g_@@_mots_cles_francais_tl
- { \msg_error:nn {udesgeniethese}{mots_cles_francais_vide} }
- \tl_if_empty:NT \g_@@_fichier_resume_francais_tl
- { \msg_error:nnnn {udesgeniethese}{config_fichier_vide}{le~resume~francais}{fichierResumeFrancais} }
- \tl_if_empty:NT \g_@@_titre_anglais_tl
- { \msg_error:nn {udesgeniethese}{titre_anglais_vide} }
- \tl_if_empty:NT \g_@@_mots_cles_anglais_tl
- { \msg_error:nn {udesgeniethese}{mots_cles_anglais_vide} }
- \tl_if_empty:NT \g_@@_fichier_resume_anglais_tl
- { \msg_error:nnnn {udesgeniethese}{config_fichier_vide}{le~resume~anglais}{fichierResumeAnglais} }
+ \tl_if_empty:NT \g_@@_titre_francais_tl
+ { \msg_error:nn {udesgeniethese}{titre_francais_vide} }
+ \tl_if_empty:NT \g_@@_mots_cles_francais_tl
+ { \msg_error:nn {udesgeniethese}{mots_cles_francais_vide} }
+ \tl_if_empty:NT \g_@@_fichier_resume_francais_tl
+ { \msg_error:nnnn {udesgeniethese}{config_fichier_vide}{le~resume~francais}{fichierResumeFrancais} }
+ \tl_if_empty:NT \g_@@_titre_anglais_tl
+ { \msg_error:nn {udesgeniethese}{titre_anglais_vide} }
+ \tl_if_empty:NT \g_@@_mots_cles_anglais_tl
+ { \msg_error:nn {udesgeniethese}{mots_cles_anglais_vide} }
+ \tl_if_empty:NT \g_@@_fichier_resume_anglais_tl
+ { \msg_error:nnnn {udesgeniethese}{config_fichier_vide}{le~resume~anglais}{fichierResumeAnglais} }
%</these>
}
}
@@ -1111,7 +1131,6 @@
\@@_setup_mecanique
\tl_gset:Nn \g_@@_essai_tl
{GMC~809~Projet~en~génie~aérospatial}
-
\tl_if_eq:NNF \g_@@_type_tl \c_@@_type_essai_tl
{\msg_error:nn {udesgeniethese}{aerospatial}}
}
@@ -1154,7 +1173,7 @@
\cs_new:Npn \@@_setup
{
- \tl_case:Nn \g_@@_langue_tl
+ \token_case_meaning:Nn \g_@@_langue_tl
{
\c_@@_langue_francais_tl {
\selectlanguage{french}
@@ -1174,7 +1193,7 @@
\renewcommand{\footrulewidth}{0pt}
}
- \tl_case:Nn \g_@@_format_tl
+ \token_case_meaning:Nn \g_@@_format_tl
{
\c_@@_format_livre_tl
{
@@ -1191,134 +1210,134 @@
\cfoot{\thepage}
}
}
-
%<these>
%<these> \use:c {_@@_setup_ \g_@@_programme_tl}
}
\cs_new:Npn \@@_generer_page_titre
{
- {
- \begin{titlepage}
- \renewcommand*{\thepage}{T1}
- \vspace*{-0.5 in}
- \begin{center}
- \begin{tabular}{c}
- \Large \g_@@_udesname_tl \\
-%<protocole> \Large\g_@@_facultyname_tl
-%<these> \Large\g_@@_facultyname_tl\\
-%<these> \Large\g_@@_departement_tl\\[0.5ex]
- \end{tabular}
- \vfill
- \tl_case:Nn \g_@@_langue_tl
- {
- \c_@@_langue_francais_tl {
- {\huge\g_@@_titre_francais_tl\par}
- }
- \c_@@_langue_english_tl {
- \begin{otherlanguage}{french}
- {\huge\g_@@_titre_francais_tl}
- \end{otherlanguage}\par
- {\Large\g_@@_titre_anglais_tl\par}
- }
+ \group_begin:
+ \begin{titlepage}
+ \renewcommand*{\thepage}{T1}
+ \vspace*{-0.5 in}
+ \begin{center}
+ \begin{tabular}{c}
+ \Large \g_@@_udesname_tl \\
+%<protocole> \Large\g_@@_facultyname_tl
+%<these> \Large\g_@@_facultyname_tl\\
+%<these> \Large\g_@@_departement_tl\\[0.5ex]
+ \end{tabular}
+ \vfill
+ \token_case_meaning:Nn \g_@@_langue_tl
+ {
+ \c_@@_langue_francais_tl {
+ {\huge\g_@@_titre_francais_tl\par}
}
- \vfill
-%<these> \begin{tabular}{c}
-%<these> \Large \use:c {g_@@_ \g_@@_type_tl _tl}
-%<these> \clist_if_in:NVT \g_@@_specialite_cl \g_@@_type_tl
-%<these> {
-%<these> \\[0.5ex]\Large\g_@@_specialityname_tl\g_@@_specialite_tl
-%<these> }
-%<these> \end{tabular}
-%<these> \vfill
- \begin{tabular}{c}
- {\Large\g_@@_auteur_prenom_tl\ \g_@@_auteur_nom_tl}
- \end{tabular}
- \vfill
- {\Large \g_@@_adressname_tl \par \vspace{2ex}\g_@@_date_mois_tl\ \g_@@_date_annee_tl}
- \end{center}
- \end{titlepage}
- \clearpage
-%<protocole> \thispagestyle{empty}
-%<protocole> \renewcommand*{\thepage}{T2}
-%<protocole> \null\vfill
-%<protocole> \c_@@_protocole_notice_tl\par
-%<protocole> \textcopyright\g_@@_date_annee_tl\ \c_@@_protocole_droits_tl
-%<protocole> \cleardoublepage
-%<these> \clearpage
-%<these> \if@openright\null\thispagestyle{empty}\renewcommand*{\thepage}{T2}\cleardoublepage\fi
- }
+ \c_@@_langue_english_tl {
+ \begin{otherlanguage}{french}
+ {\huge\g_@@_titre_francais_tl}
+ \end{otherlanguage}\par
+ {\Large\g_@@_titre_anglais_tl\par}
+ }
+ }
+ \vfill
+%<these> \begin{tabular}{c}
+%<these> \Large \use:c {g_@@_ \g_@@_type_tl _tl}
+%<these> \clist_if_in:NVT \g_@@_specialite_cl \g_@@_type_tl
+%<these> {
+%<these> \\[0.5ex]\Large\g_@@_specialityname_tl\g_@@_specialite_tl
+%<these> }
+%<these> \end{tabular}
+%<these> \vfill
+ \begin{tabular}{c}
+ {\Large\g_@@_auteur_prenom_tl\ \g_@@_auteur_nom_tl}
+ \end{tabular}
+ \vfill
+ {\Large \g_@@_adressname_tl \par \vspace{2ex}\g_@@_date_mois_tl\ \g_@@_date_annee_tl}
+ \end{center}
+ \end{titlepage}
+%<protocole> \thispagestyle{empty}
+%<protocole> \renewcommand*{\thepage}{T2}
+%<protocole> \null\vfill
+%<protocole> \c_@@_protocole_notice_tl\par
+%<protocole> \textcopyright\g_@@_date_annee_tl\ \c_@@_protocole_droits_tl
+%<protocole> \cleardoublepage
+%<these> \clearpage
+%<these> \if@openright\null\thispagestyle{empty}\renewcommand*{\thepage}{T2}\cleardoublepage\fi
+ \group_end:
}
\cs_new:Npn \@@_generer_jury
{
- {
- {\centering\chapter*{\g_@@_juryname_tl}}
+ \group_begin:
+ {\centering\chapter*{\g_@@_juryname_tl}}
+
+ \begin{center}
+ \vspace{4ex}
+ \begin{tabular}{p{3in}}
+ \hfill\large\g_@@_jury_directeur_tl\hfill\null \\ \hline
+ \centering\small
+ \token_case_meaning:Nn \g_@@_jury_directeur_mf_tl
+ {
+ \c_@@_male_tl {\g_@@_jury_dirname_tl}
+ \c_@@_female_tl {\g_@@_jury_dirnamef_tl}
+ }
+ \end{tabular}\par
- \begin{center}
- \vspace{4ex}
+ \tl_if_empty:NF \g_@@_jury_codirecteurs_cl
+ { \vspace{6ex} }
+
+ \clist_map_inline:Nn \g_@@_jury_codirecteurs_cl
+ {
\begin{tabular}{p{3in}}
- \hfill\large\g_@@_jury_directeur_tl\hfill\null \\ \hline
+ \hfill\large ##1 \hfill\null \\ \hline
+ \seq_gpop_left:NN \g_@@_jury_codirecteurs_mf_seq \l_tmpa_tl
\centering\small
- \tl_case:Nn \g_@@_jury_directeur_mf_tl
+ \token_case_meaning:Nn \l_tmpa_tl
{
- \c_@@_male_tl {\g_@@_jury_dirname_tl}
- \c_@@_female_tl {\g_@@_jury_dirnamef_tl}
+ \c_@@_male_tl {\g_@@_jury_codirname_tl}
+ \c_@@_female_tl {\g_@@_jury_codirnamef_tl}
}
\end{tabular}\par
+ }
- \tl_if_empty:NF \g_@@_jury_codirecteurs_cl
- { \vspace{6ex} }
-
- \clist_map_inline:Nn \g_@@_jury_codirecteurs_cl
- {
- \begin{tabular}{p{3in}}
- \hfill\large ##1 \hfill\null \\ \hline
- \seq_gpop_left:NN \g_@@_jury_codirecteurs_mf_seq \l_tmpa_tl
- \centering\small
- \tl_case:Nn \l_tmpa_tl
- {
- \c_@@_male_tl {\g_@@_jury_codirname_tl}
- \c_@@_female_tl {\g_@@_jury_codirnamef_tl}
- }
- \end{tabular}\par
- }
-
- \tl_if_empty:NF \g_@@_jury_evaluateurs_cl
- { \vspace{6ex} }
+ \tl_if_empty:NF \g_@@_jury_evaluateurs_cl
+ { \vspace{6ex} }
- \clist_map_inline:Nn \g_@@_jury_evaluateurs_cl
- {
- \begin{tabular}{p{3in}}
- \hfill\large ##1 \hfill\null \\ \hline
- \seq_gpop_left:NN \g_@@_jury_evaluateurs_mf_seq \l_tmpa_tl
- \centering\small
- \tl_case:Nn \l_tmpa_tl
- {
- \c_@@_male_tl {\g_@@_jury_evalname_tl}
- \c_@@_female_tl {\g_@@_jury_evalnamef_tl}
- }
- \end{tabular}\par
- }
- \end{center}
+ \clist_map_inline:Nn \g_@@_jury_evaluateurs_cl
+ {
+ \begin{tabular}{p{3in}}
+ \hfill\large ##1 \hfill\null \\ \hline
+ \seq_gpop_left:NN \g_@@_jury_evaluateurs_mf_seq \l_tmpa_tl
+ \centering\small
+ \token_case_meaning:Nn \l_tmpa_tl
+ {
+ \c_@@_male_tl {\g_@@_jury_evalname_tl}
+ \c_@@_female_tl {\g_@@_jury_evalnamef_tl}
+ }
+ \end{tabular}\par
+ }
+ \end{center}
- \thispagestyle{empty}\clearpage
- \if@openright\null\thispagestyle{empty}\cleardoublepage\fi
- }
+ \thispagestyle{empty}\clearpage
+ \if@openright\null\thispagestyle{empty}\cleardoublepage\fi
+ \group_end:
}
\cs_new:Npn \@@_generer_dedicace
{
\tl_if_empty:NF \g_@@_dedicace_tl
{
- {\null\vfill\flushright
- \begin{minipage}{0.5\linewidth}
- \setlength{\parskip}{1.5ex}\setlength{\parindent}{0em}
- \g_@@_dedicace_tl
- \end{minipage}
- \vfill\vfill
- \thispagestyle{empty}\clearpage
- \if@openright\null\thispagestyle{empty}\cleardoublepage\fi}
+ \group_begin:
+ \null\vfill\flushright
+ \begin{minipage}{0.5\linewidth}
+ \setlength{\parskip}{1.5ex}\setlength{\parindent}{0em}
+ \g_@@_dedicace_tl
+ \end{minipage}
+ \vfill\vfill
+ \thispagestyle{empty}\clearpage
+ \if@openright\null\thispagestyle{empty}\cleardoublepage\fi
+ \group_end:
}
}
@@ -1383,7 +1402,7 @@
{ \@@_generer_jury }
\@@_generer_resume_francais
- \tl_case:Nn \g_@@_langue_tl
+ \token_case_meaning:Nn \g_@@_langue_tl
{
\c_@@_langue_francais_tl {
\tl_if_blank:VF \g_@@_fichier_resume_anglais_tl
@@ -1404,13 +1423,13 @@
\tableofcontents
\if@openright\cleardoublepage\else\clearpage\fi
- \bool_if:NT \g_@@_listeDesFigures_bool
+ \bool_if:NT \g_@@_liste_figures_bool
{
\listoffigures
\if@openright\cleardoublepage\else\clearpage\fi
}
- \bool_if:NT \g_@@_listeDesTableaux_bool
+ \bool_if:NT \g_@@_liste_tableaux_bool
{
\listoftables
\if@openright\cleardoublepage\else\clearpage\fi
@@ -1448,7 +1467,7 @@
\refstepcounter{chapter}
\addcontentsline{toc}{chapter}{\bibname}
- \tl_case:Nn \g_@@_references_engin_tl
+ \token_case_meaning:Nn \g_@@_references_engin_tl
{
\c_@@_references_bibtex_tl
{ \bibliography{\g_@@_fichiers_references_cl} }
@@ -1462,21 +1481,38 @@
%%-----------------------------------------------------------------------------
%%--- GESTION AUTOMATISEE -------------------------------------------------
%%-----------------------------------------------------------------------------
-\AtEndPreamble
+\AddToHook{begindocument/before}
{
- \tl_case:Nn \g_@@_references_engin_tl
+ \bool_if:NTF \g_@@_legendes_min_bool
+ {\frenchsetup{SmallCapsFigTabCaptions=false}}
+ {\cs_gset:Npn \@@_caption_fmt #1 { \textsc{#1} }}
+
+ \token_case_meaning:Nn \g_@@_references_engin_tl
{
\c_@@_references_bibtex_tl
- { \bibliographystyle{\g_@@_style_references_tl} }
+ {
+ \IfPackageLoadedTF{biblatex}
+ {\msg_error:nn {udesgeniethese}{biblatex_en_trop}}{}
+ \bibliographystyle{\g_@@_style_references_tl}
+ }
\c_@@_references_biblatex_tl
{
+ \IfPackageLoadedTF{biblatex}
+ {}{\msg_error:nn {udesgeniethese}{biblatex_manquant}}
+
\clist_map_inline:Nn \g_@@_fichiers_references_cl
- {\addbibresource{#1}}
+ {
+ \bool_if:nTF \g_@@_autobib_bool
+ { \addbibresource{#1.bib} }
+ { \addbibresource{#1} }
+ }
}
}
+ \@@_setup_captions
}
-\AfterEndPreamble{
+\AddToHook{begindocument/end}
+{
\@@_validation
\@@_setup
\frontmatter
@@ -1487,7 +1523,8 @@
\onehalfspacing
}
-\AtEndDocument{
+\AddToHook{enddocument}
+{
% Si pas eu d'annexes avec \appendix
\int_compare:nNnT {\g_@@_pages_int} = {0}
{ \int_gset:Nn \g_@@_pages_int {\value{page}} }
@@ -1500,5 +1537,5 @@
\@@_generer_liste_references
}
%\end{implementation}
-% \Finale
+%\Finale
\endinput
diff --git a/macros/latex/contrib/udes-genie-these/udes-genie-these.ins b/macros/latex/contrib/udes-genie-these/udes-genie-these.ins
index 2975ed180c..473fd9e0d2 100644
--- a/macros/latex/contrib/udes-genie-these/udes-genie-these.ins
+++ b/macros/latex/contrib/udes-genie-these/udes-genie-these.ins
@@ -1,5 +1,5 @@
%% udes-genie-these.dtx
-%% Copyright 2022 Charles-Antoine Brunet
+%% Copyright 2023 Charles-Antoine Brunet
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3
@@ -10,7 +10,7 @@
%% version 2005/12/01 or later.
%%
%% This work has the LPPL maintenance status `maintained'.
-%%
+%%
%% The Current Maintainer of this work is Charles-Antoine Brunet.
%%
%% This work consists of the files udes-genie-these.dtx and udes-genie-these.ins
@@ -22,7 +22,7 @@
\preamble
-Copyright 2022 Charles-Antoine Brunet
+Copyright 2023 Charles-Antoine Brunet
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/udes-genie-these/udes-genie-these.pdf b/macros/latex/contrib/udes-genie-these/udes-genie-these.pdf
index e834a41846..12bdda374b 100644
--- a/macros/latex/contrib/udes-genie-these/udes-genie-these.pdf
+++ b/macros/latex/contrib/udes-genie-these/udes-genie-these.pdf
Binary files differ
diff --git a/macros/latex/contrib/wrapfig2/README.txt b/macros/latex/contrib/wrapfig2/README.txt
index 45260e1909..b8169719a7 100644
--- a/macros/latex/contrib/wrapfig2/README.txt
+++ b/macros/latex/contrib/wrapfig2/README.txt
@@ -1,39 +1,47 @@
%%%% README.txt file
-This README.txt for package wrapfig2[2023-02-23 v.6.1.1 ...]
+This README.txt for package wrapfig2[2023-09-01 v.6.2.0 ...]
This work is author maintained
-This work consists of wrapfig2.dtx, the main file, this README.txt
-and the derived files wrapfig2.pdf and wrapfig2.sty.
+This work consists of wrapfig2.dtx, the main file,
+this README.txt and the derived files wrapfig2.pdf
+and wrapfig2.sty.
-The package besides the source documented source file contains the
-image file stele-todi-small.jpg, a slightly cropped image downloaded from
-the internet site of the Gregorian Etruscan Museum in Rome. Apparently
-this image is free provided the source is duly acknowledged.
+The package besides the source documented source
+file contains the image file stele-todi-small.jpg,
+a slightly cropped image downloaded from the
+internet site of the Gregorian Etruscan Museum in
+Rome. Apparently this image is free provided the
+source is duly acknowledged.
Licence appended to the wrapfig2.sty file.
-The software contained herein is a fork of Donald Arseneau wrapfig
-package. It uses most of his code, but adds a new environment,
-wraptext, to the existing wrapfigure and wraptable ones.
-
-Supposedly this software is backwards compatible with Arseneau's
-original environments. Future experience may confirm this statement.
-
-The user commands are defined by means of the LaTeX3 functionalities.
-Therefore this package does not work with LaTeX2e kernels older than
-about 2018, although a warning is issued if the LaTeX format file is
-older than 1st January 2019. In any case this package loading is
-aborted in order to avoid conflicts, and in some other circumstances;
-the error messages describe why the process was aborted.
-
-Version 6 of this package accepts options in the form key = value.
-Options are available to fall back to version 5 and version 4.
-
-IMPORTANT NOTICE: An incompatibility with the amsmath package was
-discovered, but it vanishes if amsmath is loaded after wrapfig2.
-The source of this incompatibility was not discovered, therefore
-wrapfig2 produces an error message when it is loaded after amsmath.
+The software contained herein is a fork of Donald
+Arseneau wrapfig package. It uses most of his code,
+but adds a new environment, wraptext, to the
+existing wrapfigure and wraptable ones.
+
+Supposedly this software is backwards compatible
+with Arseneau's original environments. Future
+experience may confirm this statement.
+
+The user commands are defined by means of the
+LaTeX3 functionalities. Therefore this package does
+not work with LaTeX2e kernels older than about
+2018, although a warning is issued if the LaTeX
+format file is older than 1st January 2019.
+In any case this package loading is aborted in
+order to avoid conflicts, and in some other
+circumstances; the error messages describe why the
+process was aborted.
+
+Version 6 of this package accepts options in the
+form key = value. Options are available to fall
+back to version 5 and version 4.
+
+IMPORTANT NOTICE: An incompatibility with the
+amsmath package but with version 6.2.0 this
+incompatibility was corrected.
Claudio Beccari
diff --git a/macros/latex/contrib/wrapfig2/wrapfig2.dtx b/macros/latex/contrib/wrapfig2/wrapfig2.dtx
index f54c71c6c2..c7a30fa316 100644
--- a/macros/latex/contrib/wrapfig2/wrapfig2.dtx
+++ b/macros/latex/contrib/wrapfig2/wrapfig2.dtx
@@ -45,14 +45,14 @@ wrapfig2.sty and wrapfig2.pdf, plus this file README.txt.
%<+package>\ProvidesPackage{wrapfig2}%
%^^A<+readme>File README.txt for package wrapfig2
%<*package|readme>
- [2023-02-23 v.6.1.1 Wrap text around figures, tables, framed text blocks]
+ [2023-09-01 v.6.2.0 Wrap text around figures, tables, framed text blocks]
%</package|readme>
%<*driver>
%
\documentclass{ltxdoc}\errorcontextlines=100
\hfuzz 10pt
\usepackage[greek.ancient, english]{babel}
-\usepackage[utf8]{inputenc}
+\usepackage[utf8]{inputenc}% for vintage exec.s
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{mflogo}
@@ -644,62 +644,21 @@ X\ifdim\fontdimen1\font=0pt\kern-0.15em\fi
%^^A
%\end{description}
%
-% This version~6 has a more flexible way compared to version~5
-% to specify the details relative to the framed text, but they are
-% relevant only for the \cs{includeframedtext} command; the syntax
-% for the \Env{wraptext} environment opening command is identical.
-% As it was previously shown, the syntax of environment \Env{wraptext}
-% for version~6 and~5 is practically identical to the one used for the
-% other two environments; actually, as it can be seen below in
-% the code description of version~6 and~5, it has a fairly
-% longer definition; it is required by the necessity of avoiding
-% the \cs{caption} changes foreseen in package{wrapfig} when
-% \pack{float} is used to define another floating object, but in
-% effects the new definition of the \Env{wraptext} environment uses
-% the same \cs{wrapfloat} and \cs{endwrapfloat} commands.
-%
-% In all three cases the \meta{width} parameter is a \emph{braced optional
-% argument}; for the \Env{wraptext} environment its preset value is
-% half the column width, that in one column typesetting mode
-% coincides with the text width. The wrapped text is typeset
-% in justified mode within a \cs{parbox} argument; the
-% measure of this text box should not be too small (unless
-% the text is less than one line long) otherwise the inter
-% word spacing might be too large; at the same time the measure
-% of the mini paragraph cannot be too large, otherwise the indented
-% wrapping lines, generally justified, might get a bad word
-% spacing. As it was already explained, it is reccommended to avoid
-% specifying the optional \meta{widh} outside the range of 40\% to 60\%
-% the column width. Actually specifying \texttt{0.2\cs{textwidth}}
-% or \texttt{0.4\cs{columnwidth}} when typesetting in two column
-% mode produces approximately the same result, because
-% \cs{columnwidth} is a little less than half the \cs{textwidth}.
-% In any case versions~6 and~5 of \Env{wrapfig2} reset any specified
-% width outside the above range to the nearest range bound.
+% This version~6 has a more flexible way compared to version~5 to specify the details relative to the framed text, but they are relevant only for the \cs{includeframedtext} command; the syntax for the \Env{wraptext} environment opening command is identical. As it was previously shown, the syntax of environment \Env{wraptext} for version~6 and~5 is practically identical to the one used for both other environments; actually, as it can be seen below in the code description of version~6 and~5, it has a fairly longer definition; it is required by the necessity of avoiding the \cs{caption} changes foreseen in package{wrapfig} when \pack{float} is used to define another floating object, but in effects the new definition of the \Env{wraptext} environment uses the same \cs{wrapfloat} and \cs{endwrapfloat} commands.
+%
+% In all three cases the \meta{width} parameter is a \emph{braced optional argument}; for the \Env{wraptext} environment its preset value is half the column width, that in one column typesetting mode coincides with the text width. The wrapped text is typeset in justified mode within a \cs{parbox} argument; the measure of this text box should not be too small (unless the text is less than one line long) otherwise the inter word spacing might be too large; at the same time the measure of the mini paragraph cannot be too large, otherwise the indented wrapping lines, generally justified, might get a bad word spacing. As it was already explained, it is recommended to avoid specifying the optional \meta{widh} outside the range of 40\% to 60\% the column width. Actually specifying \texttt{0.2\cs{textwidth}} or \texttt{0.4\cs{columnwidth}} when typesetting in two column mode produces approximately the same result, because \cs{columnwidth} is a little less than half the \cs{textwidth}. In any case versions~6 and~5 of \Env{wrapfig2} reset any specified width outside the above range to the nearest range bound.
%
%^^A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \section{Remarks}
%^^A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% The syntax of the original environments \amb{wrapfigure} and
-% \amb{wraptable} has not been changed, except for a last optional
-% star. The fact that the last \emph{braced argument is optional} does not
-% change the backward compatibility with the original environments.
-%
-% Therefore the optional \meta{line number} argument maintains its
-% meaning, unless the optional star is specified; in such a case that
-% number assumes the meaning of a correction to the computed number
-% of the indented lines.
-%
-% The mandatory \meta{location} maintains its meaning and the legal
-% values are \texttt{l} (left), \texttt{r} (right), \texttt{L}
-% (floating left), \texttt{R} (floating right), \texttt{i}
-% (inner margin), \texttt{o} (outer margin), \texttt{I}
-% (floating inner margin), \texttt{O} (floating outer margin).
+% The syntax of the original environments \amb{wrapfigure} and \amb{wraptable} has not been changed, except for a last optional star. The fact that the last \emph{braced argument is optional} does not change the backward compatibility with the original environments.
+%
+% Therefore the optional \meta{line number} argument maintains its meaning, unless the optional star is specified; in such a case that number assumes the meaning of a correction to the computed number of the indented lines.
+%
+% The mandatory \meta{location} maintains its meaning and the legal values are \texttt{l} (left), \texttt{r} (right), \texttt{L} (floating left), \texttt{R} (floating right), \texttt{i} (inner margin), \texttt{o} (outer margin), \texttt{I} (floating inner margin), \texttt{O} (floating outer margin).
%
-% We tested all of them, but as a (possibly questionable) personal
-% choice we prefer to place the wrapped object at the left of the text,
-% without floating it and irrespective of the folio parity.
+% We tested all of them, but as a (possibly questionable) personal choice we prefer to place the wrapped object at the left of the text, without floating it and irrespective of the folio parity.
%
%\begin{wraptext}{l}{0.5\textwidth}%
%\includegraphics[width=\hsize]{stele-todi-small}
@@ -884,15 +843,18 @@ X\ifdim\fontdimen1\font=0pt\kern-0.15em\fi
% scenes uses a very heavy set of multifunctional macros that offer
% functionalities that are not required for this problem.
%
-% Warm thanks also to Juan Luis Varona Malumbres for his precious
-% feedback and his suggestions.
+% Warm thanks also to Juan Luis Varona
+% Malumbresfor his precious feedback and his
+% suggestions.
%
-% Herbert Voß spotted the necessity to follow a specific loading
-% order if the \pack{amsmath} needs to be used; he was so kind to
-% send me a bug notice together with a minimum working example.
-% Thanks a lot Herbert! The best I could do to manage this bug
-% consisted in adding an error message, if \pack{wrapfig2} during its
-% loading process found \pack{amsmath} already loaded.
+% Herbert Voß spotted the necessity to follow a
+% specific loading order if the \pack{amsmath}
+% needs to be used; he was so kind to send me a
+% bug notice together with a minimum working
+% example.
+% Thanks to Bruno Pagani whos pinpointed the exact
+% point that conflicts with \pack{wrapfig2} so
+% that I could fix this conflict.
%
%^^A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \CheckSum{1428}
@@ -938,13 +900,14 @@ X\ifdim\fontdimen1\font=0pt\kern-0.15em\fi
%
% \begin{macrocode}
\ifcsname c@WF@wrappedlines\endcsname
-\PackageError{wrapfig2}{ \MessageBreak
- ****************************************************\MessageBreak
+\PackageError{wrapfig2}{
+\MessageBreak
+**************************************************\MessageBreak
Package `wrapfig' has already been loaded perhaps \MessageBreak
by other packages, for example caption or subcaption.\MessageBreak
Such packages are incompatible with wrapfig2 \MessageBreak
Loading of`wrapfig2' is aborted \MessageBreak
- ****************************************************\MessageBreak
+**************************************************\MessageBreak
}{You might type X <return> and might get along without\MessageBreak
this package if you don't use the new environment \MessageBreak
`wraptext' and the new commands; otherwise you get \MessageBreak
@@ -954,31 +917,13 @@ X\ifdim\fontdimen1\font=0pt\kern-0.15em\fi
% \end{macrocode}
%
-% {\color{red}{\paragraph{Loading order} Some users needed to use
-% \pack{wrapfig2} in documents where they required also the
-% \pack{amsmath} package functionalities; they noticed that some
-% incompatibility showed up if package \pack{amsmath} was input
-% before \pack{wrapfig2}. Such incompatibility vanishes if
-% \pack{amsmath} is loaded \emph{after} \pack{wrapfig2}. This
-% package now issues an error message if it finds \pack{amsmath}
-% already loaded.}}
-% \begin{macrocode}
-\@ifpackageloaded{amsmath}{%
- \PackageError{wrapfig2}{ \MessageBreak
- +++++++++++++++++++++++++++++++++++++++++++\MessageBreak
- Package amsmath already loaded \MessageBreak
- If you need amsmath, load it after wrapfig2\MessageBreak
- Expect error messages \MessageBreak
- +++++++++++++++++++++++++++++++++++++++++++\MessageBreak
- \MessageBreak
- }{Abort the job}}{\relax}
-% \end{macrocode}
-%
-% We keep the original definition of the \cs{WF@warning} and the
-% original definition of the \opt{verbose} option; but we add the
-% new \opt{WFold} and \opt{WFfive} options in order to fall back
-% to the functionalities of the previous version~4 or~5, at least
-% for what concerns the \Env{wraptext} environment.
+% We keep the original definition of the
+% \cs{WF@warning} and the original definition of
+% the \opt{verbose} option; but we add the new
+% \opt{WFold} and \opt{WFfive} options in order to
+% fall back to the functionalities of the previous
+% version~4 or~5, at least for what concerns the
+% \Env{wraptext} environment.
%
%
% \begin{macrocode}
@@ -1040,6 +985,16 @@ X\ifdim\fontdimen1\font=0pt\kern-0.15em\fi
% redefines some \pack{color} internal commands; everything is
% explained in the \pack{xcolor} documentation.}
%
+% Here we have a little trick for avoiding
+% conflicts with \pack{amsmath} and its|\text|
+% command-
+% \begin{macrocode}
+\@ifpackageloaded{amsmath}{%
+\let\amsmathtext\text
+\AtEndPreamble{\let\text\amsmathtext}%
+}{\relax}
+% \end{macrocode}
+%
% In order to define the new floating object \texttt{text} we have
% to load the package \pack{float}, but only if versions~5 or~6
% are used; in other words only if the \cs{ifWFnew} switch
@@ -1210,13 +1165,11 @@ backgroundcolor, textcolor, fontstyle, radius, insertionwidth}
% Here is the code of some extra macros and of the \Env{wraptext}
% environment.
%
-% We start with two different \cs{includeframedtext}, one for
-% version~6, that accepts \texttt{key=velue} options, and
-% another one for version~5, that requires only a comma
-% separated list of dimensional values.
+% We start with two different \cs{includeframedtext}, one for version~6, that accepts \texttt{key=velue} options, and another one for version~5, that requires only a comma separated list of dimensional values.
% \begin{macrocode}
\ifbool{WFnew}{%
-\NewDocumentCommand\includeframedtext{O{\insertwidth} m O{} o}{\bgroup%
+\NewDocumentCommand\includeframedtext{%
+ O{\insertwidth} m O{} o}{\bgroup%
\ExecuteOptionsX<wraptext>{#3}% executes possible key=value options
\insertwidth=#1\WFscalewidth
\framedbox{#2}{\fboxrule}{\fboxsep}[\radius]\egroup}
@@ -1244,48 +1197,9 @@ backgroundcolor, textcolor, fontstyle, radius, insertionwidth}
%\cs{includeframedtext}\oarg{text width}\marg{text}\oarg{dimensions}\oarg{radius}
%\end{ttsintassi}
%
-% The optional \meta{text width} is the (possibly scaled) width computed
-% by the \Env{wraptext} environment; but if the authors use this command
-% outside the \Env{wraptext} environment, they should specify a width;
-% in any case the default value is half the current measure
-% \cs{linewidth}. The \meta{text} is the unformatted text to be wrapped;
-% it will be boxed and framed by the service macro \cs{framedbox}; the
-% \meta{dimensions} are passed on to \cs{framedbox} command; they are a
-% comma separated list of dimensions, namely the thickness of the frame
-% and the necessary frame distance from the formatted text. The
-% \meta{options} contains a comma separated list of zero to nine options
-% with the syntax \texttt{key=vale} that are going to be used by both
-% the \cs{includeframedtext} and \cs{framedbox}. The last optional
-% \meta{radius} is the curvature radius of the rounded frame corners;
-% the default value is going to be set to \cs{fboxsep}: in
-% version~5 \cs{framedbox} by default sets it equal to the frame
-% separation width, while with version~6 its value is received with
-% the option \texttt{radius=\meta{dimension}}; the default value is
-% certainly the best one, but the users can specify a different value,
-% of course not too different from the default one. See some examples
-% in figure~\ref{fig:framed text}.
-%
-% The definition of the \cs{framedbox} command appears to be
-% complicated; it is just an apparent complication due to the
-% fact that it uses the powerful \cs{Curve} command that draws an
-% arbitrary curved line or fills the area delimited by such
-% curved line; it suffices to specify the nodes and the tangents
-% to each node; the nodes are the points the line should pass
-% through, their tangents may be specified with arbitrary vector
-% components along the horizontal and vertical axes. For a
-% rectangle such vector components are just 0 or $\pm 1$. The
-% node coordinates of the rounded corners, on the opposite, must be
-% determined with accuracy; we used the \cs{fpeval} function of
-% package \pack{xfp}, that performs precise computations on operands
-% in fractional decimal numbers; if the operands are dimensions, the
-% operands are their fractional decimal values in printer points, the
-% results of such operations are pure fractional decimal numbers
-% without units; if the numerical result is to be interpreted again
-% as the measure of a dimensional entity, \texttt{pt} must be appended
-% to the assignments to a dimension register; within the \Env{picture}
-% environment, any coordinate is expressed in multiples of
-% \cs{unitlength}, therefore no unit of measure is necessary, once
-% \cs{unitlength} has been specified.
+% The optional \meta{text width} is the (possibly scaled) width computed by the \Env{wraptext} environment; but if the authors use this command outside the \Env{wraptext} environment, they should specify a width; in any case the default value is half the current measure \cs{linewidth}. The \meta{text} is the unformatted text to be wrapped; it will be boxed and framed by the service macro \cs{framedbox}; the \meta{dimensions} are passed on to \cs{framedbox} command; they are a comma separated list of dimensions, namely the thickness of the frame and the necessary frame distance from the formatted text. The \meta{options} contains a comma separated list of zero to nine options with the syntax \texttt{key=vale} that are going to be used by both the \cs{includeframedtext} and \cs{framedbox}. The last optional \meta{radius} is the curvature radius of the rounded frame corners; the default value is going to be set to \cs{fboxsep}: in version~5 \cs{framedbox} by default sets it equal to the frame separation width, while with version~6 its value is received with the option \texttt{radius=\meta{dimension}}; the default value is certainly the best one, but the users can specify a different value, of course not too different from the default one. See some examples in figure~\ref{fig:framed text}.
+%
+% The definition of the \cs{framedbox} command appears to be complicated; it is just an apparent complication due to the fact that it uses the powerful \cs{Curve} command that draws an arbitrary curved line or fills the area delimited by such curved line; it suffices to specify the nodes and the tangents to each node; the nodes are the points the line should pass through, their tangents may be specified with arbitrary vector components along the horizontal and vertical axes. For a rectangle such vector components are just 0 or $\pm 1$. The node coordinates of the rounded corners, on the opposite, must be determined with accuracy; we used the \cs{fpeval} function of package \pack{xfp}, that performs precise computations on operands in fractional decimal numbers; if the operands are dimensions, the operands are their fractional decimal values in printer points, the results of such operations are pure fractional decimal numbers without units; if the numerical result is to be interpreted again as the measure of a dimensional entity, \texttt{pt} must be appended to the assignments to a dimension register; within the \Env{picture} environment, any coordinate is expressed in multiples of \cs{unitlength}, therefore no unit of measure is necessary, once \cs{unitlength} has been specified.
%
% For a rectangle with curved corners of a given radius \cs{R}
% we have four quarter circles joined by straight lines; therefore
@@ -1307,10 +1221,10 @@ backgroundcolor, textcolor, fontstyle, radius, insertionwidth}
\NewDocumentCommand\framedbox{ m m m O{#3}}{\bgroup
\fboxrule=#2\fboxsep=#3\relax
\setbox0\hbox{\fboxrule=\z@\fboxsep=#3\relax
-\framebox{\parbox{% draw a framed box without the frame
+\framebox{\parbox{% draw a framed box without the frame
\fpeval{\insertwidth-2\fboxrule-2\fboxsep}\p@}{\textcolor{WFtext}{#1}}}}
-\unitlength=\fpeval{\wd0/100}\p@ % set the picture \unitlength
+\unitlength=\fpeval{\wd0/100}\p@ % set the picture \unitlength
% determine the picture coordinates and displacement of the axes origin
\edef\x{100}%
\edef\y{\fpeval{(\ht0 +\dp0)/\unitlength}}%
@@ -1464,15 +1378,15 @@ backgroundcolor, textcolor, fontstyle, radius, insertionwidth}
\def\textplacement{#2}%
\def\textcorrection{#1}%
\def\textoverhang{#3}%
- \IfBooleanTF{#5}{\PackageWarning{wrapfig2}{%
+ \IfBooleanT{#5}{\PackageWarning{wrapfig2}{%
*********************************************\MessageBreak
With wraptext the optional star is useless \MessageBreak
because the first optional argument always \MessageBreak
means the "lines number CORRECTION" \MessageBreak
- *********************************************\MessageBreak}}{}%%%<------------------
+ *********************************************\MessageBreak}}
\bgroup\edef\x{\egroup\noexpand\wrapfloat{text}%
[\textcorrection]{\textplacement}[\textoverhang]{\insertwidth}*}\x%
- \def\caption{\unskip
+ \def\caption{\unskip\unskip
\refstepcounter\@captype
\let\@tempf\@caption
\unless\ifcsname @float@c@\@captype\endcsname
diff --git a/macros/latex/contrib/wrapfig2/wrapfig2.pdf b/macros/latex/contrib/wrapfig2/wrapfig2.pdf
index 22c81080cf..823efb6847 100644
--- a/macros/latex/contrib/wrapfig2/wrapfig2.pdf
+++ b/macros/latex/contrib/wrapfig2/wrapfig2.pdf
Binary files differ
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
index c1abfe512d..be17b2db3e 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/2023
-depend revision/68131
+depend revision/68144
name 00texlive.image
category TLCore
-revision 68123
+revision 68144
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
@@ -2387,6 +2387,7 @@ runfiles size=13070
tlpkg/tlpsrc/itnumpar.tlpsrc
tlpkg/tlpsrc/iwhdp.tlpsrc
tlpkg/tlpsrc/iwona.tlpsrc
+ tlpkg/tlpsrc/iwonamath.tlpsrc
tlpkg/tlpsrc/jablantile.tlpsrc
tlpkg/tlpsrc/jacow.tlpsrc
tlpkg/tlpsrc/jadetex.tlpsrc
@@ -70705,7 +70706,7 @@ containerchecksum c73220abd1545907a1d8de37cb534d2c6bd2534f1b55f03c069f39f535c326
name collection-latexextra
category Collection
-revision 68123
+revision 68144
shortdesc LaTeX additional packages
relocated 1
longdesc A very large collection of add-on packages for LaTeX.
@@ -71428,6 +71429,7 @@ depend isorot
depend isotope
depend issuulinks
depend iwhdp
+depend iwonamath
depend jlabels
depend jmsdelim
depend jobname-suffix
@@ -72211,8 +72213,8 @@ depend zref-clever
depend zref-vario
depend zwgetfdate
depend zwpagelayout
-containersize 6932
-containerchecksum 9bfe5863413a8918d516497a4ed2f37846ace2994e68f93aadd4e16e8655ab4639bea30f0d669629c1b791c8cd3974b57f37b798bcbd352b4465e59b7db6f6a4
+containersize 6948
+containerchecksum 2d3517dca40e1882dbd1de5b0d1acb5ff1a572d1388b33b53a34fcf32e7c8b94f6f8b6ae95039ef965a904b65cbfd4c8dfe2f25ba3daa6e573e9838626b00821
name collection-latexrecommended
category Collection
@@ -144816,31 +144818,28 @@ catalogue-topics listing synt-hlt
name highlightx
category Package
-revision 68123
-shortdesc Highlight formulas or paragraphs, with handwriting effect
+revision 68138
+shortdesc Highlight formulas or paragraphs
relocated 1
longdesc This package provides commands (French or English) to highlight
-longdesc formulas or paragraphs (with handwriting effect if possible):
-longdesc coded using soul and TikZ; \SurlignerFormule and
-longdesc \SurlignerTexte in French; \HighlightFormula and \HighlightText
-longdesc in English; \genhighlightpar for a generic (without effect)
-longdesc paragraph highlighting.
-containersize 3388
-containerchecksum 35d35ef394fff7bdc746eaff774c1021cc8a8f1b60bea4b55ab81251aa66adb251af8ef6771b206de367a49712ee8e8aabe3c66dee6ff1455190cb9062705b2c
-doccontainersize 174996
-doccontainerchecksum 0e2c73f95639db63590edf8bf16a05c2661d8ef61e90deacd3789c0e37005ad45363ff3adb38bd5b27efb32ea7b8c2d9ebabaf99e42b90a21486ebb0454dd367
-docfiles size=51
+longdesc formulas (with handwriting effect if possible) or paragraphs:
+longdesc coded using soul and TikZ; \SurlignerFormule in French;
+longdesc \HighlightFormula in English; \genhighlightpar for a generic
+longdesc (without effect) paragraph highlighting.
+containersize 1604
+containerchecksum 44d4d1794efebdd0fb8264b1bcb5e61bf2d02d02a4acc15ca6fffc374c0e2e6f5bf30884c11ef4bb5daa3185278cca678fb8860733c4a5fecf44e2c3e227936f
+doccontainersize 127396
+doccontainerchecksum 097ea2b7f08bdf7bcabe44bf5c124a344edd5ed86f29d26075b4078540a3f3c3ede54e9316c3b43ac3c8482cb490e248b62e30fa1e770f80eb4423fe3ef8824a
+docfiles size=40
RELOC/doc/latex/highlightx/README.md details="Readme"
RELOC/doc/latex/highlightx/highlightx-doc.pdf details="Package documentation" language="fr"
RELOC/doc/latex/highlightx/highlightx-doc.tex
-runfiles size=3
+runfiles size=1
RELOC/tex/latex/highlightx/highlightx.sty
-catalogue-contact-repository https://github.com/cpierquet/highlightx
-catalogue-contact-support https://github.com/cpierquet/highlightx/issues
catalogue-ctan /macros/latex/contrib/highlightx
catalogue-license lppl1.3c
catalogue-topics decoration pgf-tikz
-catalogue-version 0.1.0
+catalogue-version 0.1.1
name hindawi-latex-template
category Package
@@ -145646,7 +145645,7 @@ catalogue-version 1.2a
name hobby
category Package
-revision 44474
+revision 68137
shortdesc An implementation of Hobby's algorithm for PGF/TikZ
relocated 1
longdesc This package defines a path generation function for PGF/TikZ
@@ -145654,31 +145653,32 @@ longdesc which implements Hobby's algorithm for a path built out of
longdesc Bezier curves which passes through a given set of points. The
longdesc path thus generated may by used as a TikZ 'to path'. The
longdesc implementation is in LaTeX3.
-containersize 9624
-containerchecksum 669c768dffa4e88d831d0a03a7e518fb2c101cd0af9ca1e15e6527ccbe78a13485145bedd4ef45cbaefcc94e4bead303acb89a0d0f50c6fc3a7ab312717febad
-doccontainersize 944236
-doccontainerchecksum 7c8a353078be8b94195558d1d7a319173b4480a616c8725b99357ed3a086565c238b944b9b3baa719b354dcff9476aa7c7ffb055565df546054e662370d5d808
-docfiles size=249
- RELOC/doc/latex/hobby/README
+containersize 9864
+containerchecksum 0caaaf772dc325e70594f909f1a58740224195aa7af7ef86571e7a97e1245cea5ad6a704415a3275719fadaf74ec55605e66af55dbbdff4c524f529e121035ad
+doccontainersize 969172
+doccontainerchecksum 3e418503ef48dd0be479f17171d8c6767c77da95d43a2f31a374cbb6ed47c5129e2baa64ca15128240856790ea92acd2b090364384c29954266d2b9ec6aed362
+docfiles size=263
+ RELOC/doc/latex/hobby/README details="Readme" language="en"
+ RELOC/doc/latex/hobby/README.txt
RELOC/doc/latex/hobby/hobby.pdf details="Package documentation"
+ RELOC/doc/latex/hobby/hobby.tex
RELOC/doc/latex/hobby/hobby_code.pdf details="Annotated code"
- RELOC/doc/latex/hobby/hobby_doc.tex
-srccontainersize 17768
-srccontainerchecksum 216ff34f42c28fd3e2303ff5032a299668881fbe51e8c8957547dd7953b2296e984a449cc09b79268b968ec8fcb8b774453a26e88156f5b7bbc6cb78a57de7e7
+srccontainersize 18200
+srccontainerchecksum 5978e0c2f5c30145a9a5562661004a50cbb5054ea98907c25690bfd1c55f13190d74283ef79e7995d6f63d2d1516919062fe746b989227a4e95fe091ff5c9acd
srcfiles size=29
- RELOC/source/latex/hobby/hobby.dtx
- RELOC/source/latex/hobby/hobby.ins
-runfiles size=19
+ RELOC/source/latex/hobby/hobby_code.dtx
+ RELOC/source/latex/hobby/hobby_code.ins
+runfiles size=20
+ RELOC/tex/latex/hobby/hobby-l3draw.sty
RELOC/tex/latex/hobby/hobby.code.tex
RELOC/tex/latex/hobby/pgflibraryhobby.code.tex
RELOC/tex/latex/hobby/pml3array.sty
RELOC/tex/latex/hobby/tikzlibraryhobby.code.tex
-catalogue-contact-home https://github.com/loopspace/hobby
catalogue-contact-repository https://github.com/loopspace/hobby
catalogue-ctan /graphics/pgf/contrib/hobby
-catalogue-license lppl1.3
-catalogue-topics graphics-curve graphics-supp graphics-in-tex expl3
-catalogue-version 1.8
+catalogue-license lppl1.3c
+catalogue-topics graphics-curve graphics-supp graphics-in-tex pgf-tikz expl3
+catalogue-version 1.12
name hobete
category Package
@@ -146040,7 +146040,7 @@ catalogue-version 1.1.2
name huawei
category Package
-revision 67863
+revision 68139
shortdesc Template for Huawei documents
relocated 1
longdesc This unofficial package provides a class for creating documents
@@ -146084,17 +146084,17 @@ depend transparent
depend trimspaces
depend wrapfig
depend xcolor
-containersize 260348
-containerchecksum 68f929bf3770c6f9659212a2a56ed427bd8b70dd97d989812908fd1fbf941c3d7bb37498dcf4ebdd597f93c5ba2ab783e5b146ce08eebc2f99f74e86088d8ec7
-doccontainersize 781064
-doccontainerchecksum 3dfcfef8f07927c835202913eb1390c61861437f18627d69a0ae4e9045800b309bcf18373ca4804d7d3fee28d8a6d81afc5efff20fe762e6e0dbc19c6759dd9f
+containersize 260368
+containerchecksum 67c3a22241e36f3506d863680b2ba8b715decf234d3849ac8c791124b242450e69fd8f351731c26d6a1a551b829b5eb96f59283e08877088cec98fcd9e7f9d91
+doccontainersize 782112
+doccontainerchecksum f7b7ee2cee4d4cdd10e4ddbdc187888353275b35a3b9c574a7162cfa0698dd10b984f9bb9c358705c24b2e34816d7a7d706d6c914f58bd25fb4bb908d468352b
docfiles size=201
RELOC/doc/latex/huawei/DEPENDS.txt
RELOC/doc/latex/huawei/LICENSE.txt
RELOC/doc/latex/huawei/README.md details="Readme"
RELOC/doc/latex/huawei/huawei.pdf details="Package documentation"
-srccontainersize 10588
-srccontainerchecksum 8b985b0893a19b210224d7fd02cd955f984b53b7f0bcc33476d3fb9d5441ad312ea0cf49c4a0eca767e76638cee7e2f24e6fb592f0de33a13ac47a597865d4b7
+srccontainersize 10596
+srccontainerchecksum 13e6affa0fef278eedf5c40de8c9e96983eb9023c749f1310d2d607121c56bd774de39f494d2debf956d25e0af04702bef516245972384f19f85398f28707f0e
srcfiles size=10
RELOC/source/latex/huawei/huawei.dtx
RELOC/source/latex/huawei/huawei.ins
@@ -146105,7 +146105,7 @@ catalogue-contact-home https://github.com/yegor256/huawei.cls
catalogue-ctan /macros/latex/contrib/huawei
catalogue-license mit
catalogue-topics class misc-paper
-catalogue-version 0.18.0
+catalogue-version 0.18.1
name huaz
category Package
@@ -157428,6 +157428,64 @@ catalogue-license gfl
catalogue-topics font font-type1 font-otf
catalogue-version 0.995b
+name iwonamath
+category Package
+revision 68144
+shortdesc LaTeX support for scaled Iwona math fonts
+relocated 1
+longdesc This package provides an interface to the Iwona math fonts by
+longdesc Janusz Marian Nowacki. It allows to use Iwona as math
+longdesc complement for sans serif fonts without native math. The
+longdesc package allows font scaling, the choice of light and condensed
+longdesc versions, and the creation of multiple math versions.
+containersize 2976
+containerchecksum e0b87b6815ffbec37a52e0ecd1d31daacd46c222abb71566ab3476cbc2ec28128f5977367715bf1eac439f978d750b6ce7e7bee589de7a1f18bf70ab8ce166ab
+doccontainersize 865668
+doccontainerchecksum 81fb0f9b7b738994a4af09a8dda8b580f4d59a92f790f8b285c2b1a252e672786296472847a6d4d8ce804a757248dec04e02894d1550cf0791863d25d22f35d5
+docfiles size=220
+ RELOC/doc/latex/iwonamath/README details="Readme"
+ RELOC/doc/latex/iwonamath/iwonamath.bib
+ RELOC/doc/latex/iwonamath/iwonamath.pdf details="Package documentation"
+ RELOC/doc/latex/iwonamath/sample.pdf details="Example of use"
+ RELOC/doc/latex/iwonamath/sample.tex
+srccontainersize 5056
+srccontainerchecksum b7aa315eb74b6fdbfdd75dc176ede1841406efb9bf5ba584fe090123f3e93b1f7db9719a321833d2486b0e5e7a0a214a4b91a8c1afb2443e126ebcf96bea5b70
+srcfiles size=7
+ RELOC/source/latex/iwonamath/Makefile
+ RELOC/source/latex/iwonamath/iwonamath.dtx
+ RELOC/source/latex/iwonamath/iwonamath.ins
+ RELOC/source/latex/iwonamath/makeiwonamathfd.sh
+runfiles size=23
+ RELOC/tex/latex/iwonamath/iwonamath.sty
+ RELOC/tex/latex/iwonamath/omliwonamath.fd
+ RELOC/tex/latex/iwonamath/omliwonamathc.fd
+ RELOC/tex/latex/iwonamath/omliwonamathl.fd
+ RELOC/tex/latex/iwonamath/omliwonamathlc.fd
+ RELOC/tex/latex/iwonamath/omsiwonamath.fd
+ RELOC/tex/latex/iwonamath/omsiwonamathc.fd
+ RELOC/tex/latex/iwonamath/omsiwonamathcmsy.fd
+ RELOC/tex/latex/iwonamath/omsiwonamathl.fd
+ RELOC/tex/latex/iwonamath/omsiwonamathlc.fd
+ RELOC/tex/latex/iwonamath/omxiwonamath.fd
+ RELOC/tex/latex/iwonamath/omxiwonamathc.fd
+ RELOC/tex/latex/iwonamath/omxiwonamathl.fd
+ RELOC/tex/latex/iwonamath/omxiwonamathlc.fd
+ RELOC/tex/latex/iwonamath/ot1iwonamath.fd
+ RELOC/tex/latex/iwonamath/ot1iwonamathc.fd
+ RELOC/tex/latex/iwonamath/ot1iwonamathcm.fd
+ RELOC/tex/latex/iwonamath/ot1iwonamathl.fd
+ RELOC/tex/latex/iwonamath/ot1iwonamathlc.fd
+ RELOC/tex/latex/iwonamath/ot1iwonamathlcm.fd
+ RELOC/tex/latex/iwonamath/ot1iwonamathlm.fd
+ RELOC/tex/latex/iwonamath/ot1iwonamathm.fd
+catalogue-contact-bugs https://github.com/borisveytsman/iwonamath/issues
+catalogue-contact-development https://github.com/borisveytsman/iwonamath/pulls
+catalogue-contact-repository https://github.com/borisveytsman/iwonamath
+catalogue-ctan /macros/latex/contrib/iwonamath
+catalogue-license lppl1.3c
+catalogue-topics font-supp-maths expl3
+catalogue-version 1.0
+
name jablantile
category Package
revision 16364
@@ -196178,11 +196236,11 @@ binfiles arch=x86_64-darwinlegacy size=1704
name luahbtex.x86_64-linux
category TLCore
-revision 66986
+revision 68135
shortdesc x86_64-linux files of luahbtex
-containersize 2204852
-containerchecksum 46d76d06ebe0c592085ca6b8ce0f61d9610596f40d6e4d56ecc9d1023456e8f0bfe1df281edc786c3246ecfc3eab47ff8ea5aa479b7f8fc1e93cd5de80f8f6cd
-binfiles arch=x86_64-linux size=2765
+containersize 2357464
+containerchecksum 68e5b53a6855a36772eb24318383f1b32278036fff694750141d6ee74438abd5515e71270aabe2a15629bb55549e4556ac7b4927251e0a6023f0b7121a5d2985
+binfiles arch=x86_64-linux size=1967
bin/x86_64-linux/luahbtex
name luahbtex.x86_64-linuxmusl
@@ -196514,11 +196572,11 @@ binfiles arch=x86_64-darwinlegacy size=3251
name luajittex.x86_64-linux
category TLCore
-revision 66986
+revision 68135
shortdesc x86_64-linux files of luajittex
-containersize 4032308
-containerchecksum 85e2fe6133595888b3973dab581a579dd2d747142571dd2c5ea47aeeb981df282a69aad4a845dfe9c2c26a031fe248bb1bb39ba818178b28d1d65f0c998fec33
-binfiles arch=x86_64-linux size=4929
+containersize 2816908
+containerchecksum 89730319ddb673e255f4ce1f809dade6267b17827b42d3324b0c3bb48407e553dbf441e3cef462003f8171a88a11917b5efaceaa01bca9b7c4bde9f4ebe041de
+binfiles arch=x86_64-linux size=3665
bin/x86_64-linux/luajithbtex
bin/x86_64-linux/luajittex
bin/x86_64-linux/texluajit
@@ -197042,7 +197100,7 @@ catalogue-version 0.8
name luaotfload
category Package
-revision 67995
+revision 68143
shortdesc OpenType 'loader' for Plain TeX and LaTeX
longdesc The package adopts the TrueType/OpenType Font loader code
longdesc provided in ConTeXt, and adapts it to use in Plain TeX and
@@ -197052,10 +197110,10 @@ depend lua-alt-getopt
depend lua-uni-algos
depend lualibs
depend luaotfload.ARCH
-containersize 621388
-containerchecksum 5f3996504886dd478c2d0670222b080321a339bf2a00af4f7b7d280168b900b451f80ffa973c4d1f8ad1b3e8f6e95c620019e307e3b9f0712b311d28c91f990e
-doccontainersize 637428
-doccontainerchecksum 73d41dffd65fab0664a88559c6381b6521f721d4cf46462d26a753012025f7164c75837e8483936152f0c6baa6fc55fe75b74b0cb3afca9497889dabe1ae02e8
+containersize 620612
+containerchecksum 7781db14c45e5e2d5cba50e91e9eb356260e4cf1e55f45b6f584164f1be0a4b31818be7fe3e08cb51e8ed43fde49c0a3ddcecb860848f8bf02096a60e45a58f6
+doccontainersize 637060
+doccontainerchecksum a929c941695de38ee029d60564346581153bf233db5ea873dbd8f84d1922df2621e7d9a5aad3ad6423392798c5007342f0a886249eb85d3c598b06bf8e271348
docfiles size=276
texmf-dist/doc/luatex/luaotfload/COPYING
texmf-dist/doc/luatex/luaotfload/NEWS
@@ -197081,7 +197139,7 @@ docfiles size=276
texmf-dist/doc/man/man5/luaotfload.conf.5
texmf-dist/doc/man/man5/luaotfload.conf.man5.pdf
srccontainersize 7292
-srccontainerchecksum 18df1fabea8f4ae270d299e7869883d55fdd084f1e56edf3db23ef18aa73f548d23a7cfa8e43a52485faa94406ece8e3327126b2ae80ccb65cf0ee2e9c3f4fbd
+srccontainerchecksum 62c77656a4ab2bb93e8403ebe197418914644d99384f74bd8b78c75c255537bfd947a32aafe3f92e576b0e2596eac3308e2d837b41604ad1725e145882916799
srcfiles size=6
texmf-dist/source/luatex/luaotfload/fontloader-reference-load-order.lua
texmf-dist/source/luatex/luaotfload/fontloader-reference-load-order.tex
@@ -197185,7 +197243,7 @@ catalogue-contact-support https://github.com/latex3/luaotfload/issues
catalogue-ctan /macros/luatex/generic/luaotfload
catalogue-license gpl2
catalogue-topics font-use luatex
-catalogue-version 3.24
+catalogue-version 3.26
name luaotfload.aarch64-linux
category Package
@@ -197793,11 +197851,11 @@ binfiles arch=x86_64-darwinlegacy size=1472
name luatex.x86_64-linux
category TLCore
-revision 66986
+revision 68135
shortdesc x86_64-linux files of luatex
-containersize 1618088
-containerchecksum dce44ad93c900be17dc5474be02fdf25ddd0c88cbf569de0c050aebaa1d7f6bfd468fe302fa21ec972e944095c50505186b1cc41e0a94582548201864998ba1b
-binfiles arch=x86_64-linux size=1965
+containersize 1813852
+containerchecksum dfb1f30677d8b35a8c1d1e56b66c57f334c845eaee259c53b490dcb42d1c7d48818d788f48e712d20ef0bfc3d2e3f0bf1e4e7b8916f74b61612f28f39ab16b56
+binfiles arch=x86_64-linux size=1615
bin/x86_64-linux/dviluatex
bin/x86_64-linux/luatex
bin/x86_64-linux/texlua
@@ -286300,7 +286358,7 @@ catalogue-version 1.36
name siunitx
category Package
-revision 68127
+revision 68140
shortdesc A comprehensive (SI) units package
relocated 1
longdesc Typesetting values with units requires care to ensure that the
@@ -286325,17 +286383,17 @@ longdesc The package relies on LaTeX 3 support from the l3kernel and
longdesc l3packages bundles.
depend l3kernel
depend l3packages
-containersize 67672
-containerchecksum 55683c6575f88674b13ee6ac83f664b7650ee368f2fb14cefa17b685b5165ace367a0fa5fa3a1f3ce8094e9d5a2348340d86c1beb0289b9334cbfb1e9cd84238
-doccontainersize 1288264
-doccontainerchecksum fb89787417192314e5ed82a88d91e1bb2fad3cfd6a396ea08b2055fcf933a1dbff794a23d928e4e296a423829fd6f9990a6bd827a081c18f6d3ed7b3ccb82218
+containersize 67680
+containerchecksum 473115c09d2f0bd4775d3ab2e7c077a47387fb7fdb44bd631cf16ea2887192c9ea068031af5113178a84d4fc482dae342e360c1ff5150731975e7d4c7931283c
+doccontainersize 1288356
+doccontainerchecksum 4c7b035731feabdd1efc36eb0dcdeafd4b4a4d7425c808d615e3e02bb8cbb307e17de8d3041db75f579d536b1430b940a99883926662ef44fb6de9d3d32aaabe
docfiles size=352
RELOC/doc/latex/siunitx/CHANGELOG.md
RELOC/doc/latex/siunitx/README.md details="Readme"
RELOC/doc/latex/siunitx/siunitx-code.pdf details="Code documentation"
RELOC/doc/latex/siunitx/siunitx.pdf details="User manual"
-srccontainersize 122916
-srccontainerchecksum c202c4001934d9dbe16b07d681c958674dcc8b2cc81743055a925127de98e87224806b1cfb79259f05143205df34a7f470114bc6ff08b268f625cb6a2784c7ab
+srccontainersize 122960
+srccontainerchecksum 888ca4930d207d4454d5b8ff7e21f014086a05ffea44ff433714452f40b4d18aa745523b2c19555e3719e996449806949be3160419b4fb523c6740b8fbed9d86
srcfiles size=190
RELOC/source/latex/siunitx/siunitx-abbreviation.dtx
RELOC/source/latex/siunitx/siunitx-angle.dtx
@@ -286367,7 +286425,7 @@ catalogue-contact-repository https://github.com/josephwright/siunitx
catalogue-ctan /macros/latex/contrib/siunitx
catalogue-license lppl1.3c
catalogue-topics units scientific-docs expl3
-catalogue-version 3.3.5
+catalogue-version 3.3.6
name skak
category Package
@@ -314806,7 +314864,7 @@ docfiles size=376
name texlive-scripts
category TLCore
-revision 68120
+revision 68133
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.
@@ -314815,9 +314873,9 @@ depend texlive.infra
execute addMap mathpple.map
postaction shortcut type=menu name="TeX Live command-line" cmd=TEXDIR/tlpkg/installer/tl-cmd.bat
containersize 114128
-containerchecksum d0c350eade438a166480ec56f17f42dbe67aea42dbd284f88ca9d98d7568e5542e0eb317bd36afc7af414ee5cf26361b23cb1938b3aab574fc39231816a9fd42
-doccontainersize 428932
-doccontainerchecksum 7f50a580b056ba1ebe18a1327cead2e6bceafcdd2811266403a5f780c2356c139a98443cd077a41361896dff77ad64b102ca90fd79966441f3be278ec760346f
+containerchecksum abedf1a53265f2e8e0e204576ec6956cd0e915b47e2a4b2224adbf7e50ad743a8a3fca934b7446a31d50fba0a56f626c82291ac88cd039ef8906db7995b7fd71
+doccontainersize 428916
+doccontainerchecksum b99076c9f2405f3af749b6a3c32cdc899bc57a5e512e98f3254811dad1d896407e6326c30f480d0d0757cbd05b78acfd3935239616bf0ecd0ce54c3ae7c20c9a
docfiles size=549
doc.html
texmf-dist/doc/man/man1/fmtutil-sys.1
@@ -335023,7 +335081,7 @@ catalogue-version 3.2
name udes-genie-these
category Package
-revision 65039
+revision 68141
shortdesc A thesis class file for the Faculte de genie at the Universite de Sherbrooke
relocated 1
longdesc The udes-genie-these class can be used for Ph.D. theses,
@@ -335035,11 +335093,11 @@ longdesc faculte's intranet. The class file documentation is in French,
longdesc the language of the typical user at the Universite de
longdesc Sherbrooke. An example of use is also distributed with the
longdesc documentation.
-containersize 7176
-containerchecksum bdf71b8e6bbb678e7cdb99a58ab76b9dd2dfebe21764dc19429c9ffd51101c0a633ee3b39099d4bc00f4658f8462844804df53cef01598f92360a1dbd00c6aa8
-doccontainersize 131424
-doccontainerchecksum b4f1ffe3a5be0bf1da45235d17c95fe60c1f48e9c80989f527ee987b5bd2edbfa825b676c281feade4bfccb1cfdd706fad438b2124fadf62856815273c330c4c
-docfiles size=42
+containersize 7508
+containerchecksum 01422998b27a84f3b892114fe468bd57ecfe37dfda68ff84f2cb95fc9ba589d74fa4874bb35419403269685c74607e647d98b1b443d8739c5b4c3335820f690b
+doccontainersize 140264
+doccontainerchecksum c962a955f1d618232196eab7c87b301dbf725f8ab08156ed98d4819ba3be5a6873b81dd7deae65c0a36eced5e42be6415b78b06c5fe945b4d4492e98487bb91b
+docfiles size=55
RELOC/doc/latex/udes-genie-these/Exemple/acronymes.tex
RELOC/doc/latex/udes-genie-these/Exemple/document.tex
RELOC/doc/latex/udes-genie-these/Exemple/lexique.tex
@@ -335050,9 +335108,9 @@ docfiles size=42
RELOC/doc/latex/udes-genie-these/Exemple/symboles.tex
RELOC/doc/latex/udes-genie-these/README.md details="Readme"
RELOC/doc/latex/udes-genie-these/udes-genie-these.pdf details="Package documentation" language="fr-ca"
-srccontainersize 15124
-srccontainerchecksum 04e7e7593831e2d93be682dd8e20f3245281f8fedf04ab2eb4a7771a5d2a4e277358deaa48981bba6478bc2dc6ed25ce14f9a627dbd9002ef4f43ef41bbba336
-srcfiles size=18
+srccontainersize 15696
+srccontainerchecksum 77a91a01bc6e61de8d08048cd4d04ba6e6f2b2c082e14ea4100728bec3229f096089069188a523d3d213c3bc00d27065fb5949b622869fe419226705e357d802
+srcfiles size=19
RELOC/source/latex/udes-genie-these/udes-genie-these.dtx
RELOC/source/latex/udes-genie-these/udes-genie-these.ins
runfiles size=11
@@ -335060,7 +335118,7 @@ runfiles size=11
catalogue-ctan /macros/latex/contrib/udes-genie-these
catalogue-license lppl1.3c
catalogue-topics class dissertation french
-catalogue-version 3.0.1
+catalogue-version 3.1.0
name udesoftec
category Package
@@ -351462,7 +351520,7 @@ catalogue-version 3.6
name wrapfig2
category Package
-revision 66115
+revision 68142
shortdesc Wrap text around figures
relocated 1
longdesc This package is a fork of Donald Arseneau's wrapfig package. It
@@ -351470,16 +351528,16 @@ longdesc is backwards compatible with the original environments.
longdesc Therefore this package does not work with LaTeX2e kernels older
longdesc than about 2018, although a warning is issued if the LaTeX
longdesc format file is dated with a date older than 1st January 2019.
-containersize 7136
-containerchecksum d1ff1ceee83cdbcbb0c59d4c4476fb03cd9cb8f76432991e035be66af38133efe658a356817ebc6072638fbb92028c04c3347d49759ca50973800936fc5471ce
-doccontainersize 693588
-doccontainerchecksum 88bbcd51274dcf4f2c9d50ff10cc02d91c5e70b35197ea6f8904c0694c6fa8e6b5dfb5b3acb6057ca7c4ddde5528381ee034f6e852b30634f374a88532f91a9a
+containersize 7092
+containerchecksum 041bd9b1f5d16d412a11580ab2187a9cf57cb61e562b0d1164b630884fd46c56b049eb015d0acdc3534441fa076e8d6530ffba039c814c2c1ab6e5f6cf33a527
+doccontainersize 693360
+doccontainerchecksum 2887d0be1786506d99182fb4c703da37dc0bdb90f8466c53a3b3ee26f14875adb1a2231c3762cad78a1372b805fbce5cd21475e572fd3241aa30ffbfd5ff314c
docfiles size=190
RELOC/doc/latex/wrapfig2/README.txt details="Readme"
RELOC/doc/latex/wrapfig2/stele-todi-small.jpg
RELOC/doc/latex/wrapfig2/wrapfig2.pdf details="Package documentation"
-srccontainersize 26944
-srccontainerchecksum 2e86526c7736959d1b8b1b8bdfe23c05408815be5f6752af478e0c0ca8bd4fdc9224c4a2ea4e30b44413574d94e4a92e0030e9376e1ee6832d42aa5e80aa7093
+srccontainersize 26748
+srccontainerchecksum 5ca215b42c787054557c418c448c18046e566d616860cad28b0d8d663e03073f5671381352030ae68c4e7acf5944b990728b6f91e22adab3400608d94ce18166
srcfiles size=24
RELOC/source/latex/wrapfig2/wrapfig2.dtx
runfiles size=6
@@ -351488,7 +351546,7 @@ catalogue-also cutwin
catalogue-ctan /macros/latex/contrib/wrapfig2
catalogue-license lppl1.3c
catalogue-topics text-flow expl3
-catalogue-version 6.1.1
+catalogue-version 6.2.0
name wrapstuff
category Package
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
index 533084c316..a9814773ed 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
@@ -1 +1 @@
-a6596f282f080fba431cb2643addcefc texlive.tlpdb
+501a4704e17dc1cd0b820249cef09a32 texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
index dc71de359d..e4ee609e71 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
@@ -1 +1 @@
-99a1f0fe9c284643e091929bfc0b8e4cf90ebf6bef6884fad130cbe957cc54112e4bb9d25b471008428cc08285ea8bf83e9ad06668f96db06ce9aa6a43fe81ba texlive.tlpdb
+b066b96825c977e62d6f4074e089d5f6e4f7128649298831df2b8e1010b19451b4e1a747c0bef03428f7e8bf81c17d04b2ade06c75607514ed80ba0ca145cab7 texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
index 4ce7c179a6..e7df356c95 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
@@ -1,11 +1,11 @@
-----BEGIN PGP SIGNATURE-----
-iQEzBAEBCgAdFiEE2PL4YFeoV+QqiBBqTOGHfhlDjHAFAmTxJkMACgkQTOGHfhlD
-jHD+kAf/c9jKR6Kpd8+Y1kaPn6xVEEBJxRYRcaKFa1ZVSDnTbDj4v0SN5ne6QX3m
-HM06DpBv0sCLTGZE2LZ/X3FVwrz2XW8yQciOwLDCNBCZ4lbgr+B/qxT/Y4uIEFfx
-lbLuaE/x4Icv1yoHDpDLls7l260v653RqGPhKVAYAa3iESVawK0096hcbZWn+UCZ
-iCXpFv8K5FhMSXDTPJg8L1RsW1gUYneDct2wGO7hlDcwFWUOdPywT81CWm6WgACH
-qRyyDwNVS9kpaVNIi4cWrmVilVmjqxL5h4mUqjKT4kPfybZUOsTcd2xnBH6cwknw
-n8UtAtKZf44W8xaCJf1zbNdYAslKaA==
-=iZTh
+iQEzBAEBCgAdFiEE2PL4YFeoV+QqiBBqTOGHfhlDjHAFAmTyd7AACgkQTOGHfhlD
+jHDVIAf/bXObXyumOJsdkf8hR6EFxBZRnYUL4bi8wHBiFc4dK3ycnXTrlwLfzXT9
+uV3Hs9WJgHsrbZQaartXuJgavx3lnYt+Gki50H1y9QMYzBzz3MVTRD16UZu4NH3V
+LUjGMTeOCP/DW2JwOsL2Zx4pi2YGJ9xWwhrN+AjAfQdvqsgef8gzYzjmUmq9HdEC
+XFdNmYEQvVRiRzy5Rerdd/XVfV69qg3e9AvRDd5sht4qFiaQFwuuHT/1f1HSg0yM
+UmslD43jZdtcjekppSTIq16PiqUWX3mibuvBwNUXR/5HPJFAJA/rAJ8FfNcxKbyg
+fDA1CB64kuS42IqxY5TgAn6VmpPzjw==
+=nioC
-----END PGP SIGNATURE-----
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
index 75c8af1f48..0fc3d2e784 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
Binary files differ
diff --git a/timestamp b/timestamp
index 3f1f1887c4..e50cc30d36 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:
-2023-09-01-02-02
+2023-09-02-02-02
diff --git a/usergrps/usergrps/lugs.html b/usergrps/usergrps/lugs.html
index 728c3f747a..5bbf5cf612 100644
--- a/usergrps/usergrps/lugs.html
+++ b/usergrps/usergrps/lugs.html
@@ -34,25 +34,22 @@
<p>
The TeX Users Group (contact info
-below) serves as the local user group (LUG) of TeX users in North America
+<a href="#us">below</a>) serves as the local user group (LUG) of TeX users in North America
and any other area or language not appearing in the following list. TUG is
always interested in fostering the formation of local TeX users groups;
please contact the TUG board (board at tug.org) for assistance, such as
forwarding information about others who might be interested, publicity,
arranging joint memberships and so on. See also:
<ul>
-<li>The TeX calendar (
-<a href="http://texcalendar.dante.de/month.php">month view</a>,
-<a href="http://texcalendar.dante.de/year.php">year view</a>
-) for user group activities.
-<li>The <a href="http://www.tug.org/calendar.html">TUG Calendar</a> for
+<li>The <a href="https://tug.org/calendar.html">TUG Calendar</a> for
general TeX and other typographic activities.
-<li>The list of <a href="http://www.tug.org/pubs.html">user group
+<li>The list of <a hrefs="http://tug.org/pubs.html">user group
publications and journals</a>.
<li>This same information in <a href="lugs.pdf">PDF</a> and in <a href=
"lugs.tex">LaTeX</a>.
</ul>This information comes from the <a href=
-"index.html">Electronic LUG Database</a>: you can
+"index.html">Electronic LUG Database</a>,
+hosted by <a href="https://ntg.nl/">NTG</a>: you can
correct or add information there.<br />
The following links bring you straight to the individual user group
correction forms:
@@ -85,10 +82,6 @@ correction forms:
<a href="uy.html">uy</a>
<a href="vn.html">vn</a>
<a href="za.html">za</a>
-<p>
-Below, a similar line of links just above
-every LUG header can be used to wander between the LUG info records
-in this document.
<hr>
<table>
<tr><th class="kop"><img src="images/bg.png" width="48" alt="flag"><th class="kop" id="bg">bg - Bulgaria
@@ -564,7 +557,7 @@ in this document.
<p id="copyright">&copy; NTG - last changed on
-2023-07-10 14:09:48 CEST
+2023-08-31 12:29:48 CEST
</div></body></html>