summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2024-04-25 03:01:05 +0000
committerNorbert Preining <norbert@preining.info>2024-04-25 03:01:05 +0000
commit8c332d190fc87f5943debba153cad209c0f8952e (patch)
tree2dfcbedcfb35c6225af07ec323b508f94f29d3d2
parenta1bae2c92d8b9b9cbd26c71b0feb7abd276e5993 (diff)
CTAN sync 202404250301
-rw-r--r--FILES.byname259
-rw-r--r--FILES.byname.gzbin2647220 -> 2647380 bytes
-rw-r--r--FILES.last07days296
-rw-r--r--biblio/ctan-bibdata/ctan.bib43
-rw-r--r--fonts/ibarra/README6
-rw-r--r--fonts/ibarra/doc/ibarra-samples.pdfbin175741 -> 173588 bytes
-rw-r--r--fonts/ibarra/latex/ibarra.sty10
-rw-r--r--fonts/junicode/README2
-rw-r--r--fonts/junicode/doc/junicode-samples.tex8
-rw-r--r--fonts/junicode/latex/junicode.sty18
-rw-r--r--fonts/libertine/README2
-rw-r--r--fonts/libertine/doc/libertine-samples.pdfbin859366 -> 859366 bytes
-rw-r--r--fonts/libertine/doc/libertine-samples.tex16
-rw-r--r--fonts/libertine/doc/libertine.pdfbin237747 -> 237884 bytes
-rw-r--r--fonts/libertine/doc/libertine.tex8
-rw-r--r--fonts/libertine/latex/libertine.sty48
-rw-r--r--fonts/libertine/latex/libertineRoman.sty22
-rw-r--r--macros/latex/contrib/easybook/easybook.dtx162
-rw-r--r--macros/latex/contrib/easybook/easybook.pdfbin639377 -> 639763 bytes
-rw-r--r--macros/latex/contrib/easybook/easybook.tex247
-rw-r--r--macros/latex/contrib/exercisesheets/README17
-rw-r--r--macros/latex/contrib/exercisesheets/examples/exercises/exshexample-ex1.tex9
-rw-r--r--macros/latex/contrib/exercisesheets/examples/exercises/exshexample-ex2.lua7
-rw-r--r--macros/latex/contrib/exercisesheets/examples/exshexample-embedded.tex116
-rw-r--r--macros/latex/contrib/exercisesheets/examples/exshexample.tex286
-rw-r--r--macros/latex/contrib/exercisesheets/exercisesheets-doc.pdfbin0 -> 128498 bytes
-rw-r--r--macros/latex/contrib/exercisesheets/exercisesheets-doc.tex1086
-rw-r--r--macros/latex/contrib/exercisesheets/exercisesheets.sty1961
-rw-r--r--macros/latex/contrib/fancyhdr/README8
-rw-r--r--macros/latex/contrib/fancyhdr/fancyhdr.dtx90
-rw-r--r--macros/latex/contrib/fancyhdr/fancyhdr.pdfbin870150 -> 875225 bytes
-rw-r--r--macros/latex/contrib/jsonparse/README.md6
-rw-r--r--macros/latex/contrib/jsonparse/jsonparse-doc.pdfbin394387 -> 410605 bytes
-rw-r--r--macros/latex/contrib/jsonparse/jsonparse-doc.tex44
-rw-r--r--macros/latex/contrib/jsonparse/jsonparse.sty297
-rw-r--r--macros/latex/contrib/siunitx/CHANGELOG.md9
-rw-r--r--macros/latex/contrib/siunitx/siunitx-code.pdfbin645465 -> 645251 bytes
-rw-r--r--macros/latex/contrib/siunitx/siunitx-symbol.dtx101
-rw-r--r--macros/latex/contrib/siunitx/siunitx-unit.dtx2
-rw-r--r--macros/latex/contrib/siunitx/siunitx.dtx2
-rw-r--r--macros/latex/contrib/siunitx/siunitx.pdfbin703731 -> 703738 bytes
-rw-r--r--macros/latex/contrib/spbmark/spbmark.pdfbin93842 -> 95175 bytes
-rw-r--r--macros/latex/contrib/spbmark/spbmark.sty8
-rw-r--r--macros/latex/contrib/spbmark/spbmark.tex4
-rw-r--r--macros/unicodetex/latex/bithesis/bithesis.dtx21
-rw-r--r--macros/unicodetex/latex/bithesis/bithesis.pdfbin743578 -> 750977 bytes
-rw-r--r--support/TeX4ht/source/ChangeLog19
-rw-r--r--support/TeX4ht/source/tex4ht-4ht.tex36
-rw-r--r--support/TeX4ht/source/tex4ht-html4.tex11
-rw-r--r--systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl5
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb240
-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.xzbin2565900 -> 2566372 bytes
-rw-r--r--timestamp2
56 files changed, 4582 insertions, 972 deletions
diff --git a/FILES.byname b/FILES.byname
index 05a439d79e..35af6e8b6e 100644
--- a/FILES.byname
+++ b/FILES.byname
@@ -2076,12 +2076,12 @@
2024/04/21 | 1837 | biblio/citation-style-language/README.md
2024/04/21 | 12878 | biblio/citation-style-language/vancouver.csl
2024/04/21 | 4553350 | biblio/citation-style-language.zip
-2024/04/23 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
+2024/04/24 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
2022/10/08 | 127 | biblio/ctan-bibdata/biblatex-ctan/ctan.cbx
-2024/04/23 | 2862730 | biblio/ctan-bibdata/ctan.bib
-2024/04/23 | 3708800 | biblio/ctan-bibdata/ctan.pdf
+2024/04/24 | 2862730 | biblio/ctan-bibdata/ctan.bib
+2024/04/24 | 3708800 | biblio/ctan-bibdata/ctan.pdf
2023/01/16 | 1489 | biblio/ctan-bibdata/README
-2024/04/23 | 4120564 | biblio/ctan-bibdata.zip
+2024/04/24 | 4120566 | 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
@@ -5443,7 +5443,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
-2024/04/23 | 83763 | FILES.last07days
+2024/04/24 | 83101 | 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
@@ -54319,7 +54319,7 @@
2021/01/09 | 1728 | fonts/hindmadurai/vf/HindMadurai-SemiBold-tlf-t1.vf
2021/01/09 | 508 | fonts/hindmadurai/vf/HindMadurai-SemiBold-tlf-ts1.vf
2021/01/09 | 1432824 | fonts/hindmadurai.zip
-2024/04/20 | 175741 | fonts/ibarra/doc/ibarra-samples.pdf
+2024/04/23 | 173588 | fonts/ibarra/doc/ibarra-samples.pdf
2024/04/20 | 781 | fonts/ibarra/doc/ibarra-samples.tex
2023/04/18 | 4226 | fonts/ibarra/doc/OFL.txt
2023/04/18 | 152024 | fonts/ibarra/doc/specimen.pdf
@@ -54339,7 +54339,7 @@
2023/04/18 | 2929 | fonts/ibarra/enc/ibrr_xx2mp7.enc
2023/04/18 | 2928 | fonts/ibarra/enc/ibrr_yt2suz.enc
2023/04/18 | 3185 | fonts/ibarra/enc/ibrr_yyhfj4.enc
-2024/04/20 | 2985 | fonts/ibarra/latex/ibarra.sty
+2024/04/23 | 2993 | fonts/ibarra/latex/ibarra.sty
2023/04/18 | 5271 | fonts/ibarra/latex/LY1IbarraRealNova-LF.fd
2023/04/18 | 5358 | fonts/ibarra/latex/LY1IbarraRealNova-OsF.fd
2023/04/18 | 3041 | fonts/ibarra/latex/LY1IbarraRealNova-Sup.fd
@@ -54352,7 +54352,7 @@
2023/04/18 | 2996 | fonts/ibarra/latex/TS1IbarraRealNova-LF.fd
2023/04/18 | 3041 | fonts/ibarra/latex/TS1IbarraRealNova-OsF.fd
2023/04/18 | 16269 | fonts/ibarra/map/ibarra.map
-2024/04/20 | 1883 | fonts/ibarra/README
+2024/04/23 | 1893 | fonts/ibarra/README
2023/04/18 | 2068 | fonts/ibarra/tfm/IbarraRealNova-BoldItalic-lf-ly1--base.tfm
2023/04/18 | 43316 | fonts/ibarra/tfm/IbarraRealNova-BoldItalic-lf-ly1.tfm
2023/04/18 | 12036 | fonts/ibarra/tfm/IbarraRealNova-BoldItalic-lf-ot1.tfm
@@ -54635,7 +54635,7 @@
2023/04/18 | 512 | fonts/ibarra/vf/IbarraRealNova-SemiBold-osf-ts1.vf
2023/04/18 | 1680 | fonts/ibarra/vf/IbarraRealNova-SemiBold-sup-ly1.vf
2023/04/18 | 1700 | fonts/ibarra/vf/IbarraRealNova-SemiBold-sup-t1.vf
-2024/04/20 | 1792383 | fonts/ibarra.zip
+2024/04/24 | 1790216 | fonts/ibarra.zip
1991/01/13 | 9309 | fonts/icelandic/MF/iaccent.mf
1991/01/13 | 23656 | fonts/icelandic/MF/iceland3.mf
1991/01/13 | 2366 | fonts/icelandic/MF/icomlig.mf
@@ -60499,7 +60499,7 @@
2024/01/09 | 6388 | fonts/junicode/doc/JunicodeManual.sty
2024/01/09 | 1384 | fonts/junicode/doc/JunicodeManual.tex
2024/04/20 | 2461029 | fonts/junicode/doc/junicode-samples.pdf
-2024/04/20 | 1629 | fonts/junicode/doc/junicode-samples.tex
+2024/04/24 | 1625 | fonts/junicode/doc/junicode-samples.tex
2024/01/09 | 4356 | fonts/junicode/doc/OFL.txt
2024/01/09 | 10844 | fonts/junicode/doc/OnTheWeb.tex
2024/01/09 | 18857 | fonts/junicode/doc/Record_Interpreter_notes.tex
@@ -60575,7 +60575,7 @@
2024/01/09 | 3503 | fonts/junicode/enc/jncd_z4lkq6.enc
2024/01/09 | 3502 | fonts/junicode/enc/jncd_zbxsaf.enc
2024/01/09 | 3023 | fonts/junicode/enc/jncd_zdphhk.enc
-2024/04/20 | 21324 | fonts/junicode/latex/junicode.sty
+2024/04/24 | 21340 | fonts/junicode/latex/junicode.sty
2024/01/09 | 11386 | fonts/junicode/latex/LGRJunicode-Inf.fd
2024/01/09 | 21423 | fonts/junicode/latex/LGRJunicode-LF.fd
2024/01/09 | 21822 | fonts/junicode/latex/LGRJunicode-OsF.fd
@@ -60643,7 +60643,7 @@
2024/01/09 | 958612 | fonts/junicode/opentype/Junicode-SmExp.otf
2024/01/09 | 1028120 | fonts/junicode/opentype/Junicode-SmExpSmBoldItalic.otf
2024/01/09 | 987772 | fonts/junicode/opentype/Junicode-SmExpSmBold.otf
-2024/04/20 | 4214 | fonts/junicode/README
+2024/04/24 | 4214 | fonts/junicode/README
2024/01/09 | 1760 | fonts/junicode/tfm/Junicode-Bold-inf-lgr.tfm
2024/01/09 | 1884 | fonts/junicode/tfm/Junicode-Bold-inf-ly1.tfm
2024/01/09 | 1424 | fonts/junicode/tfm/Junicode-Bold-inf-ot1.tfm
@@ -64239,7 +64239,7 @@
2024/01/09 | 2825400 | fonts/junicodevf/truetype/JunicodeVF-Italic.ttf
2024/01/09 | 2754408 | fonts/junicodevf/truetype/JunicodeVF-Roman.ttf
2024/01/09 | 5416995 | fonts/junicodevf.zip
-2024/04/20 | 131935737 | fonts/junicode.zip
+2024/04/24 | 131935734 | fonts/junicode.zip
1992/04/28 | 38 | fonts/karta/karta15.mf
1992/04/28 | 171444 | fonts/karta/karta.mf
2005/12/08 | 37196 | fonts/karta.zip
@@ -68903,10 +68903,10 @@
2017/06/10 | 66353 | fonts/libertine/doc/ChangeLog.txt
2017/06/10 | 1815 | fonts/libertine/doc/g2ntotex.c
2017/06/10 | 18619 | fonts/libertine/doc/GPL.txt
-2024/04/20 | 237747 | fonts/libertine/doc/libertine.pdf
-2024/04/20 | 859366 | fonts/libertine/doc/libertine-samples.pdf
-2024/04/20 | 5778 | fonts/libertine/doc/libertine-samples.tex
-2024/04/20 | 35679 | fonts/libertine/doc/libertine.tex
+2024/04/24 | 237884 | fonts/libertine/doc/libertine.pdf
+2024/04/24 | 859366 | fonts/libertine/doc/libertine-samples.pdf
+2024/04/24 | 5770 | fonts/libertine/doc/libertine-samples.tex
+2024/04/24 | 35799 | fonts/libertine/doc/libertine.tex
2017/06/10 | 1181 | fonts/libertine/doc/LICENCE.txt
2017/06/10 | 653 | fonts/libertine/doc/rename_enc
2017/06/10 | 234 | fonts/libertine/doc/ToDo.txt
@@ -69306,8 +69306,8 @@
2017/06/16 | 476109 | fonts/libertinegc.zip
2024/04/20 | 8616 | fonts/libertine/latex/biolinum.sty
2024/04/20 | 1960 | fonts/libertine/latex/libertineMono.sty
-2024/04/20 | 8714 | fonts/libertine/latex/libertineRoman.sty
-2024/04/20 | 19312 | fonts/libertine/latex/libertine.sty
+2024/04/24 | 8734 | fonts/libertine/latex/libertineRoman.sty
+2024/04/24 | 19358 | fonts/libertine/latex/libertine.sty
2017/06/10 | 54912 | fonts/libertine/latex/LinBiolinum_K.tex
2017/06/10 | 167996 | fonts/libertine/latex/LinBiolinum_R.tex
2017/06/10 | 24957 | fonts/libertine/latex/LinLibertine_I.tex
@@ -69444,7 +69444,7 @@
2017/06/10 | 528064 | fonts/libertine/opentype/LinLibertine_R.otf
2019/02/27 | 391468 | fonts/libertine/opentype/LinLibertine_RZI.otf
2017/06/10 | 300524 | fonts/libertine/opentype/LinLibertine_RZ.otf
-2024/04/20 | 3500 | fonts/libertine/README
+2024/04/24 | 3500 | fonts/libertine/README
2012/11/03 | 1840 | fonts/libertine/tfm/LinBiolinumOB-lf-ly1--base.tfm
2012/11/03 | 17552 | fonts/libertine/tfm/LinBiolinumOB-lf-ly1.tfm
2012/11/03 | 1260 | fonts/libertine/tfm/LinBiolinumOB-lf-ot1--base.tfm
@@ -71382,7 +71382,7 @@
2017/06/10 | 1772 | fonts/libertine/vf/LinLibertineTZ-tosf-sc-t1.vf
2017/06/10 | 1768 | fonts/libertine/vf/LinLibertineTZ-tosf-t1.vf
2017/06/10 | 624 | fonts/libertine/vf/LinLibertineTZ-tosf-ts1.vf
-2024/04/21 | 20580081 | fonts/libertine.zip
+2024/04/24 | 20580217 | fonts/libertine.zip
2020/05/06 | 82 | fonts/libertinus/Changes
2020/05/06 | 15920 | fonts/libertinus/doc/libertinus-doc.pdf
2019/11/25 | 851 | fonts/libertinus/doc/libertinus-doc.tex
@@ -206549,17 +206549,17 @@
2022/10/30 | 1721181 | install/fonts/gillius.tds.zip
2022/09/12 | 2337829 | install/fonts/gofonts.tds.zip
2012/09/06 | 467812 | install/fonts/hacm.tds.zip
-2024/04/20 | 1819805 | install/fonts/ibarra.tds.zip
+2024/04/23 | 1817638 | install/fonts/ibarra.tds.zip
2022/10/01 | 4152828 | install/fonts/imfellEnglish.tds.zip
2012/08/14 | 329590 | install/fonts/imprintmtshadow.tds.zip
2019/06/21 | 1058420 | install/fonts/inconsolata.tds.zip
2010/11/10 | 1022143 | install/fonts/jamtimes.tds.zip
2022/10/01 | 1716750 | install/fonts/josefin.tds.zip
-2024/04/20 | 132229103 | install/fonts/junicode.tds.zip
+2024/04/24 | 132229100 | install/fonts/junicode.tds.zip
2024/01/09 | 5419579 | install/fonts/junicodevf.tds.zip
2019/06/24 | 24451707 | install/fonts/lato.tds.zip
2017/06/16 | 484821 | install/fonts/libertinegc.tds.zip
-2024/04/20 | 20766679 | install/fonts/libertine.tds.zip
+2024/04/24 | 20766815 | install/fonts/libertine.tds.zip
2023/06/23 | 13360555 | install/fonts/libertinus-type1.tds.zip
2022/09/17 | 869940 | install/fonts/librebaskerville.tds.zip
2022/09/18 | 775746 | install/fonts/librebodoni.tds.zip
@@ -206938,7 +206938,7 @@
2012/09/24 | 130991 | install/macros/latex/contrib/scrjrnl.tds.zip
2021/11/10 | 657160 | install/macros/latex/contrib/sdaps.tds.zip
2019/12/10 | 544332 | install/macros/latex/contrib/selinput.tds.zip
-2024/04/23 | 1591059 | install/macros/latex/contrib/siunitx.tds.zip
+2024/04/24 | 1590764 | install/macros/latex/contrib/siunitx.tds.zip
2024/04/05 | 986383 | install/macros/latex/contrib/sjtutex.tds.zip
2019/10/15 | 315856 | install/macros/latex/contrib/skmath.tds.zip
2019/10/16 | 345652 | install/macros/latex/contrib/skrapport.tds.zip
@@ -232506,12 +232506,12 @@
2008/02/10 | 19110 | macros/latex/contrib/ean13isbn/License.txt
2021/01/24 | 422 | macros/latex/contrib/ean13isbn/README
2021/01/24 | 322624 | macros/latex/contrib/ean13isbn.zip
-2024/04/23 | 79851 | macros/latex/contrib/easybook/easybook.dtx
+2024/04/24 | 80307 | macros/latex/contrib/easybook/easybook.dtx
2024/01/04 | 2081 | macros/latex/contrib/easybook/easybook.ins
-2024/04/23 | 639377 | macros/latex/contrib/easybook/easybook.pdf
-2024/04/23 | 101021 | macros/latex/contrib/easybook/easybook.tex
+2024/04/25 | 639763 | macros/latex/contrib/easybook/easybook.pdf
+2024/04/25 | 101717 | macros/latex/contrib/easybook/easybook.tex
2024/01/03 | 801 | macros/latex/contrib/easybook/README.md
-2024/04/23 | 686445 | macros/latex/contrib/easybook.zip
+2024/04/24 | 686755 | macros/latex/contrib/easybook.zip
2009/06/17 | 82589 | macros/latex/contrib/easy/doc/docbib.pdf
2009/06/17 | 78378 | macros/latex/contrib/easy/doc/docbmat.pdf
2009/06/17 | 99132 | macros/latex/contrib/easy/doc/doceqn.pdf
@@ -234052,6 +234052,15 @@
2020/05/17 | 33991 | macros/latex/contrib/exercises/exercises.dtx
2020/05/17 | 1951 | macros/latex/contrib/exercises/exercises.ins
2020/05/17 | 420909 | macros/latex/contrib/exercises/exercises.pdf
+2024/04/24 | 173 | macros/latex/contrib/exercisesheets/examples/exercises/exshexample-ex1.tex
+2024/04/24 | 123 | macros/latex/contrib/exercisesheets/examples/exercises/exshexample-ex2.lua
+2024/04/24 | 2894 | macros/latex/contrib/exercisesheets/examples/exshexample-embedded.tex
+2024/04/24 | 7751 | macros/latex/contrib/exercisesheets/examples/exshexample.tex
+2024/04/24 | 128498 | macros/latex/contrib/exercisesheets/exercisesheets-doc.pdf
+2024/04/24 | 48364 | macros/latex/contrib/exercisesheets/exercisesheets-doc.tex
+2024/04/24 | 62270 | macros/latex/contrib/exercisesheets/exercisesheets.sty
+2024/04/24 | 683 | macros/latex/contrib/exercisesheets/README
+2024/04/24 | 159160 | macros/latex/contrib/exercisesheets.zip
2020/05/17 | 623 | macros/latex/contrib/exercises/README.md
2020/05/17 | 372129 | macros/latex/contrib/exercises.zip
2014/10/21 | 333079 | macros/latex/contrib/exercise.zip
@@ -234295,11 +234304,11 @@
2018/01/22 | 11599 | macros/latex/contrib/fancyhandout/fancyhandout-doc.tex
2018/01/22 | 1095 | macros/latex/contrib/fancyhandout/README.md
2018/01/22 | 74486 | macros/latex/contrib/fancyhandout.zip
-2022/11/09 | 201210 | macros/latex/contrib/fancyhdr/fancyhdr.dtx
-2022/09/05 | 2205 | macros/latex/contrib/fancyhdr/fancyhdr.ins
-2022/11/09 | 870150 | macros/latex/contrib/fancyhdr/fancyhdr.pdf
-2022/11/09 | 2031 | macros/latex/contrib/fancyhdr/README
-2022/11/09 | 896652 | macros/latex/contrib/fancyhdr.zip
+2024/04/23 | 202937 | macros/latex/contrib/fancyhdr/fancyhdr.dtx
+2024/04/23 | 2205 | macros/latex/contrib/fancyhdr/fancyhdr.ins
+2024/04/23 | 875225 | macros/latex/contrib/fancyhdr/fancyhdr.pdf
+2024/04/23 | 2019 | macros/latex/contrib/fancyhdr/README
+2024/04/24 | 902271 | macros/latex/contrib/fancyhdr.zip
2018/01/20 | 61719 | macros/latex/contrib/fancylabel/fancylabel.dtx
2018/01/20 | 1785 | macros/latex/contrib/fancylabel/fancylabel.ins
2017/12/30 | 230161 | macros/latex/contrib/fancylabel/fancylabel.pdf
@@ -240309,12 +240318,12 @@
2024/03/06 | 23652 | macros/latex/contrib/jslectureplanner/jsmembertable.sty
2024/03/06 | 10156 | macros/latex/contrib/jslectureplanner/README
2024/03/06 | 1498662 | macros/latex/contrib/jslectureplanner.zip
-2024/04/20 | 394387 | macros/latex/contrib/jsonparse/jsonparse-doc.pdf
-2024/04/20 | 23129 | macros/latex/contrib/jsonparse/jsonparse-doc.tex
-2024/04/20 | 22010 | macros/latex/contrib/jsonparse/jsonparse.sty
+2024/04/24 | 410605 | macros/latex/contrib/jsonparse/jsonparse-doc.pdf
+2024/04/24 | 21680 | macros/latex/contrib/jsonparse/jsonparse-doc.tex
+2024/04/24 | 21494 | macros/latex/contrib/jsonparse/jsonparse.sty
2024/04/05 | 19105 | macros/latex/contrib/jsonparse/LICENCE
-2024/04/20 | 1498 | macros/latex/contrib/jsonparse/README.md
-2024/04/21 | 393939 | macros/latex/contrib/jsonparse.zip
+2024/04/24 | 1549 | macros/latex/contrib/jsonparse/README.md
+2024/04/24 | 408102 | macros/latex/contrib/jsonparse.zip
2015/06/02 | 141342 | macros/latex/contrib/jumplines/jumplines_doc.pdf
2015/06/02 | 10822 | macros/latex/contrib/jumplines/jumplines_doc.tex
2015/06/02 | 110248 | macros/latex/contrib/jumplines/jumplines_example.pdf
@@ -250410,33 +250419,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
-2024/04/23 | 80573 | macros/latex/contrib/siunitx/CHANGELOG.md
-2024/04/23 | 1166 | macros/latex/contrib/siunitx/README.md
-2024/04/23 | 11252 | macros/latex/contrib/siunitx/siunitx-abbreviation.dtx
-2024/04/23 | 4748 | macros/latex/contrib/siunitx/siunitx-abbreviations.cfg
-2024/04/23 | 18426 | macros/latex/contrib/siunitx/siunitx-angle.dtx
-2024/04/23 | 1729 | macros/latex/contrib/siunitx/siunitx-binary.cfg
-2024/04/23 | 2941 | macros/latex/contrib/siunitx/siunitx-binary.dtx
-2024/04/23 | 645465 | macros/latex/contrib/siunitx/siunitx-code.pdf
-2024/04/23 | 2621 | macros/latex/contrib/siunitx/siunitx-code.tex
-2024/04/23 | 8856 | macros/latex/contrib/siunitx/siunitx-command.dtx
-2024/04/23 | 39313 | macros/latex/contrib/siunitx/siunitx-complex.dtx
-2024/04/23 | 43854 | macros/latex/contrib/siunitx/siunitx-compound.dtx
-2024/04/23 | 22217 | macros/latex/contrib/siunitx/siunitx.dtx
-2024/04/23 | 31797 | macros/latex/contrib/siunitx/siunitx-emulation.dtx
-2024/04/23 | 3682 | macros/latex/contrib/siunitx/siunitx.ins
-2024/04/23 | 5816 | macros/latex/contrib/siunitx/siunitx-locale.dtx
-2024/04/23 | 163202 | macros/latex/contrib/siunitx/siunitx-number.dtx
-2024/04/23 | 703731 | macros/latex/contrib/siunitx/siunitx.pdf
-2024/04/23 | 37988 | macros/latex/contrib/siunitx/siunitx-print.dtx
-2024/04/23 | 15296 | macros/latex/contrib/siunitx/siunitx-quantity.dtx
-2024/04/23 | 9593 | macros/latex/contrib/siunitx/siunitx-symbol.dtx
-2024/04/23 | 55713 | macros/latex/contrib/siunitx/siunitx-table.dtx
-2024/04/23 | 168519 | macros/latex/contrib/siunitx/siunitx.tex
-2024/04/23 | 104101 | macros/latex/contrib/siunitx/siunitx-unit.dtx
-2024/04/23 | 273398 | macros/latex/contrib/siunitx/siunitx-v2.sty
-2024/04/23 | 31738 | macros/latex/contrib/siunitx/siunitx-version-1.cfg
-2024/04/23 | 1543476 | macros/latex/contrib/siunitx.zip
+2024/04/24 | 80821 | macros/latex/contrib/siunitx/CHANGELOG.md
+2024/04/24 | 1166 | macros/latex/contrib/siunitx/README.md
+2024/04/24 | 11252 | macros/latex/contrib/siunitx/siunitx-abbreviation.dtx
+2024/04/24 | 4748 | macros/latex/contrib/siunitx/siunitx-abbreviations.cfg
+2024/04/24 | 18426 | macros/latex/contrib/siunitx/siunitx-angle.dtx
+2024/04/24 | 1729 | macros/latex/contrib/siunitx/siunitx-binary.cfg
+2024/04/24 | 2941 | macros/latex/contrib/siunitx/siunitx-binary.dtx
+2024/04/24 | 645251 | macros/latex/contrib/siunitx/siunitx-code.pdf
+2024/04/24 | 2621 | macros/latex/contrib/siunitx/siunitx-code.tex
+2024/04/24 | 8856 | macros/latex/contrib/siunitx/siunitx-command.dtx
+2024/04/24 | 39313 | macros/latex/contrib/siunitx/siunitx-complex.dtx
+2024/04/24 | 43854 | macros/latex/contrib/siunitx/siunitx-compound.dtx
+2024/04/24 | 22217 | macros/latex/contrib/siunitx/siunitx.dtx
+2024/04/24 | 31797 | macros/latex/contrib/siunitx/siunitx-emulation.dtx
+2024/04/24 | 3682 | macros/latex/contrib/siunitx/siunitx.ins
+2024/04/24 | 5816 | macros/latex/contrib/siunitx/siunitx-locale.dtx
+2024/04/24 | 163202 | macros/latex/contrib/siunitx/siunitx-number.dtx
+2024/04/24 | 703738 | macros/latex/contrib/siunitx/siunitx.pdf
+2024/04/24 | 37988 | macros/latex/contrib/siunitx/siunitx-print.dtx
+2024/04/24 | 15296 | macros/latex/contrib/siunitx/siunitx-quantity.dtx
+2024/04/24 | 9443 | macros/latex/contrib/siunitx/siunitx-symbol.dtx
+2024/04/24 | 55713 | macros/latex/contrib/siunitx/siunitx-table.dtx
+2024/04/24 | 168519 | macros/latex/contrib/siunitx/siunitx.tex
+2024/04/24 | 104102 | macros/latex/contrib/siunitx/siunitx-unit.dtx
+2024/04/24 | 273398 | macros/latex/contrib/siunitx/siunitx-v2.sty
+2024/04/24 | 31738 | macros/latex/contrib/siunitx/siunitx-version-1.cfg
+2024/04/24 | 1543185 | macros/latex/contrib/siunitx.zip
2024/04/05 | 1904 | macros/latex/contrib/sjtutex/README.md
2024/04/05 | 214188 | macros/latex/contrib/sjtutex/sjtutex.dtx
2024/04/05 | 723329 | macros/latex/contrib/sjtutex/sjtutex.pdf
@@ -250809,10 +250818,10 @@
2016/10/06 | 136549 | macros/latex/contrib/spalign/spalign.pdf
2016/10/06 | 132943 | macros/latex/contrib/spalign.zip
2024/01/03 | 581 | macros/latex/contrib/spbmark/README.md
-2024/02/16 | 93842 | macros/latex/contrib/spbmark/spbmark.pdf
-2024/02/16 | 17550 | macros/latex/contrib/spbmark/spbmark.sty
-2024/02/16 | 19015 | macros/latex/contrib/spbmark/spbmark.tex
-2024/02/16 | 101281 | macros/latex/contrib/spbmark.zip
+2024/04/24 | 95175 | macros/latex/contrib/spbmark/spbmark.pdf
+2024/04/24 | 17550 | macros/latex/contrib/spbmark/spbmark.sty
+2024/04/24 | 19015 | macros/latex/contrib/spbmark/spbmark.tex
+2024/04/24 | 102486 | macros/latex/contrib/spbmark.zip
2010/10/31 | 241052 | macros/latex/contrib/sphack/sphack-doc.pdf
2010/10/31 | 4122 | macros/latex/contrib/sphack/sphack-doc.tex
2010/12/23 | 4230 | macros/latex/contrib/sphack/sphack.sty
@@ -268049,13 +268058,13 @@
2024/02/21 | 19106 | macros/unicodetex/latex/beaulivre/LICENSE
2024/02/21 | 7237 | macros/unicodetex/latex/beaulivre/README.md
2024/02/21 | 14331 | macros/unicodetex/latex/beaulivre.zip
-2024/04/16 | 131491 | macros/unicodetex/latex/bithesis/bithesis.dtx
-2024/04/16 | 3302 | macros/unicodetex/latex/bithesis/bithesis.ins
-2024/04/16 | 743578 | macros/unicodetex/latex/bithesis/bithesis.pdf
-2024/04/16 | 2348 | macros/unicodetex/latex/bithesis/contributing.md
-2024/04/16 | 2649 | macros/unicodetex/latex/bithesis/contributing-zh.md
-2024/04/16 | 1946 | macros/unicodetex/latex/bithesis/README.md
-2024/04/16 | 773066 | macros/unicodetex/latex/bithesis.zip
+2024/04/24 | 131598 | macros/unicodetex/latex/bithesis/bithesis.dtx
+2024/04/24 | 3302 | macros/unicodetex/latex/bithesis/bithesis.ins
+2024/04/24 | 750977 | macros/unicodetex/latex/bithesis/bithesis.pdf
+2024/04/24 | 2348 | macros/unicodetex/latex/bithesis/contributing.md
+2024/04/24 | 2649 | macros/unicodetex/latex/bithesis/contributing-zh.md
+2024/04/24 | 1946 | macros/unicodetex/latex/bithesis/README.md
+2024/04/24 | 780335 | macros/unicodetex/latex/bithesis.zip
2022/02/26 | 128251 | macros/unicodetex/latex/book-of-common-prayer/book-of-common-prayer.pdf
2022/02/26 | 6771 | macros/unicodetex/latex/book-of-common-prayer/book-of-common-prayer.sty
2022/02/26 | 17327 | macros/unicodetex/latex/book-of-common-prayer/book-of-common-prayer.tex
@@ -300679,7 +300688,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
-2024/04/21 | 251449 | support/TeX4ht/source/ChangeLog
+2024/04/23 | 251577 | 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
@@ -300691,7 +300700,7 @@
2021/05/03 | 1121 | support/TeX4ht/source/README
2021/05/03 | 1744 | support/TeX4ht/source/t1fontmake.lua
2021/05/03 | 297 | support/TeX4ht/source/t1fontsample.tex
-2024/04/20 | 1189721 | support/TeX4ht/source/tex4ht-4ht.tex
+2024/04/23 | 1189933 | 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
2023/10/16 | 21307 | support/TeX4ht/source/tex4ht-cond4ht.tex
@@ -305083,8 +305092,8 @@
2022/02/25 | 91728 | systems/texlive/tlnet/archive/atendofenv.doc.r62164.tar.xz
2022/02/25 | 1584 | systems/texlive/tlnet/archive/atendofenv.r62164.tar.xz
2022/02/25 | 3104 | systems/texlive/tlnet/archive/atendofenv.source.r62164.tar.xz
-2024/04/21 | 680072 | systems/texlive/tlnet/archive/atkinson.doc.r71010.tar.xz
-2024/04/21 | 337120 | systems/texlive/tlnet/archive/atkinson.r71010.tar.xz
+2024/04/24 | 680076 | systems/texlive/tlnet/archive/atkinson.doc.r71048.tar.xz
+2024/04/24 | 337124 | systems/texlive/tlnet/archive/atkinson.r71048.tar.xz
2019/11/25 | 348 | systems/texlive/tlnet/archive/attachfile2.aarch64-linux.r52909.tar.xz
2019/11/25 | 348 | systems/texlive/tlnet/archive/attachfile2.amd64-freebsd.r52909.tar.xz
2019/11/25 | 348 | systems/texlive/tlnet/archive/attachfile2.amd64-netbsd.r52909.tar.xz
@@ -306950,8 +306959,8 @@
2019/02/28 | 4124 | systems/texlive/tlnet/archive/comment.r41927.tar.xz
2022/04/05 | 324112 | systems/texlive/tlnet/archive/commonunicode.doc.r62901.tar.xz
2022/04/05 | 5628 | systems/texlive/tlnet/archive/commonunicode.r62901.tar.xz
-2024/03/30 | 615808 | systems/texlive/tlnet/archive/commutative-diagrams.doc.r70803.tar.xz
-2024/03/30 | 12764 | systems/texlive/tlnet/archive/commutative-diagrams.r70803.tar.xz
+2024/04/24 | 615932 | systems/texlive/tlnet/archive/commutative-diagrams.doc.r71053.tar.xz
+2024/04/24 | 12748 | systems/texlive/tlnet/archive/commutative-diagrams.r71053.tar.xz
2019/02/28 | 1860 | systems/texlive/tlnet/archive/compactbib.r15878.tar.xz
2020/03/13 | 708 | systems/texlive/tlnet/archive/compare.r54265.tar.xz
2019/02/28 | 1304 | systems/texlive/tlnet/archive/competences.doc.r47573.tar.xz
@@ -307260,8 +307269,8 @@
2019/03/24 | 372 | systems/texlive/tlnet/archive/csplain.x86_64-solaris.r50528.tar.xz
2019/02/28 | 321176 | systems/texlive/tlnet/archive/csquotes-de.doc.r23371.tar.xz
2019/02/28 | 400 | systems/texlive/tlnet/archive/csquotes-de.r23371.tar.xz
-2024/04/05 | 325292 | systems/texlive/tlnet/archive/csquotes.doc.r70858.tar.xz
-2024/04/05 | 18108 | systems/texlive/tlnet/archive/csquotes.r70858.tar.xz
+2024/04/24 | 325292 | systems/texlive/tlnet/archive/csquotes.doc.r71053.tar.xz
+2024/04/24 | 18152 | systems/texlive/tlnet/archive/csquotes.r71053.tar.xz
2019/02/28 | 1798840 | systems/texlive/tlnet/archive/cs.r41553.tar.xz
2020/03/24 | 2090188 | systems/texlive/tlnet/archive/css-colors.doc.r54512.tar.xz
2020/03/24 | 2236 | systems/texlive/tlnet/archive/css-colors.r54512.tar.xz
@@ -308250,9 +308259,9 @@
2021/07/19 | 313228 | systems/texlive/tlnet/archive/easing.doc.r59975.tar.xz
2021/07/19 | 2220 | systems/texlive/tlnet/archive/easing.r59975.tar.xz
2021/07/19 | 7876 | systems/texlive/tlnet/archive/easing.source.r59975.tar.xz
-2024/04/21 | 634732 | systems/texlive/tlnet/archive/easybook.doc.r71016.tar.xz
-2024/04/21 | 17036 | systems/texlive/tlnet/archive/easybook.r71016.tar.xz
-2024/04/21 | 16904 | systems/texlive/tlnet/archive/easybook.source.r71016.tar.xz
+2024/04/24 | 643876 | systems/texlive/tlnet/archive/easybook.doc.r71053.tar.xz
+2024/04/24 | 17240 | systems/texlive/tlnet/archive/easybook.r71053.tar.xz
+2024/04/24 | 17136 | systems/texlive/tlnet/archive/easybook.source.r71053.tar.xz
2019/02/28 | 4540 | systems/texlive/tlnet/archive/easy.doc.r19440.tar.xz
2023/10/12 | 344 | systems/texlive/tlnet/archive/easydtx.aarch64-linux.r68514.tar.xz
2023/10/12 | 344 | systems/texlive/tlnet/archive/easydtx.amd64-freebsd.r68514.tar.xz
@@ -309506,8 +309515,8 @@
2019/02/28 | 7576 | systems/texlive/tlnet/archive/gcite.source.r15878.tar.xz
2022/01/24 | 76744 | systems/texlive/tlnet/archive/gckanbun.doc.r61719.tar.xz
2022/01/24 | 2008 | systems/texlive/tlnet/archive/gckanbun.r61719.tar.xz
-2024/04/21 | 34640 | systems/texlive/tlnet/archive/gelasio.doc.r71012.tar.xz
-2024/04/21 | 1565084 | systems/texlive/tlnet/archive/gelasio.r71012.tar.xz
+2024/04/24 | 34652 | systems/texlive/tlnet/archive/gelasio.doc.r71047.tar.xz
+2024/04/24 | 1565068 | systems/texlive/tlnet/archive/gelasio.r71047.tar.xz
2019/02/28 | 311580 | systems/texlive/tlnet/archive/gender.doc.r36464.tar.xz
2019/02/28 | 1824 | systems/texlive/tlnet/archive/gender.r36464.tar.xz
2019/02/28 | 4348 | systems/texlive/tlnet/archive/gender.source.r36464.tar.xz
@@ -309971,10 +309980,10 @@
2021/06/21 | 38768 | systems/texlive/tlnet/archive/ha-prosper.source.r59651.tar.xz
2020/03/04 | 216528 | systems/texlive/tlnet/archive/har2nat.doc.r54080.tar.xz
2020/03/04 | 1112 | systems/texlive/tlnet/archive/har2nat.r54080.tar.xz
-2023/10/11 | 3032 | systems/texlive/tlnet/archive/haranoaji.doc.r68501.tar.xz
+2024/04/24 | 3032 | systems/texlive/tlnet/archive/haranoaji.doc.r71053.tar.xz
2023/10/11 | 3044 | systems/texlive/tlnet/archive/haranoaji-extra.doc.r68500.tar.xz
2023/10/11 | 26018152 | systems/texlive/tlnet/archive/haranoaji-extra.r68500.tar.xz
-2023/10/11 | 26182680 | systems/texlive/tlnet/archive/haranoaji.r68501.tar.xz
+2024/04/24 | 26182876 | systems/texlive/tlnet/archive/haranoaji.r71053.tar.xz
2019/02/28 | 120084 | systems/texlive/tlnet/archive/hardwrap.doc.r21396.tar.xz
2019/02/28 | 2732 | systems/texlive/tlnet/archive/hardwrap.r21396.tar.xz
2019/02/28 | 11108 | systems/texlive/tlnet/archive/hardwrap.source.r21396.tar.xz
@@ -311825,8 +311834,8 @@
2023/10/03 | 2748 | systems/texlive/tlnet/archive/luabidi.r68432.tar.xz
2023/05/31 | 657044 | systems/texlive/tlnet/archive/luacas.doc.r67247.tar.xz
2023/05/31 | 63948 | systems/texlive/tlnet/archive/luacas.r67247.tar.xz
-2022/02/25 | 164092 | systems/texlive/tlnet/archive/luacensor.doc.r62167.tar.xz
-2022/02/25 | 4348 | systems/texlive/tlnet/archive/luacensor.r62167.tar.xz
+2024/04/24 | 164096 | systems/texlive/tlnet/archive/luacensor.doc.r71053.tar.xz
+2024/04/24 | 4352 | systems/texlive/tlnet/archive/luacensor.r71053.tar.xz
2019/02/28 | 116564 | systems/texlive/tlnet/archive/lua-check-hyphen.doc.r47527.tar.xz
2019/02/28 | 3628 | systems/texlive/tlnet/archive/lua-check-hyphen.r47527.tar.xz
2019/02/28 | 412328 | systems/texlive/tlnet/archive/luacode.doc.r25193.tar.xz
@@ -313155,9 +313164,9 @@
2019/02/28 | 7064 | systems/texlive/tlnet/archive/niceframe.source.r36086.tar.xz
2023/08/28 | 520 | systems/texlive/tlnet/archive/niceframe-type1.doc.r68091.tar.xz
2023/08/28 | 275488 | systems/texlive/tlnet/archive/niceframe-type1.r68091.tar.xz
-2024/02/20 | 2499984 | systems/texlive/tlnet/archive/nicematrix.doc.r69984.tar.xz
-2024/02/20 | 41884 | systems/texlive/tlnet/archive/nicematrix.r69984.tar.xz
-2024/02/20 | 90528 | systems/texlive/tlnet/archive/nicematrix.source.r69984.tar.xz
+2024/04/24 | 1349156 | systems/texlive/tlnet/archive/nicematrix.doc.r71053.tar.xz
+2024/04/24 | 42040 | systems/texlive/tlnet/archive/nicematrix.r71053.tar.xz
+2024/04/24 | 90816 | systems/texlive/tlnet/archive/nicematrix.source.r71053.tar.xz
2019/02/28 | 2473836 | systems/texlive/tlnet/archive/nicetext.doc.r38914.tar.xz
2019/02/28 | 54740 | systems/texlive/tlnet/archive/nicetext.r38914.tar.xz
2019/02/28 | 28908 | systems/texlive/tlnet/archive/nicetext.source.r38914.tar.xz
@@ -315689,9 +315698,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
-2024/04/16 | 1286276 | systems/texlive/tlnet/archive/siunitx.doc.r70958.tar.xz
-2024/04/16 | 67888 | systems/texlive/tlnet/archive/siunitx.r70958.tar.xz
-2024/04/16 | 123064 | systems/texlive/tlnet/archive/siunitx.source.r70958.tar.xz
+2024/04/24 | 1286148 | systems/texlive/tlnet/archive/siunitx.doc.r71053.tar.xz
+2024/04/24 | 67908 | systems/texlive/tlnet/archive/siunitx.r71053.tar.xz
+2024/04/24 | 123112 | systems/texlive/tlnet/archive/siunitx.source.r71053.tar.xz
2024/04/06 | 709888 | systems/texlive/tlnet/archive/sjtutex.doc.r70867.tar.xz
2024/04/06 | 154544 | systems/texlive/tlnet/archive/sjtutex.r70867.tar.xz
2024/04/06 | 39888 | systems/texlive/tlnet/archive/sjtutex.source.r70867.tar.xz
@@ -316343,13 +316352,13 @@
2024/03/01 | 90916 | systems/texlive/tlnet/archive/tex4ht.amd64-freebsd.r70276.tar.xz
2024/03/01 | 88408 | systems/texlive/tlnet/archive/tex4ht.amd64-netbsd.r70286.tar.xz
2024/03/08 | 70304 | systems/texlive/tlnet/archive/tex4ht.armhf-linux.r70489.tar.xz
-2024/04/22 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r71035.tar.xz
+2024/04/24 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r71043.tar.xz
2024/03/01 | 90856 | systems/texlive/tlnet/archive/tex4ht.i386-freebsd.r70276.tar.xz
2024/03/01 | 91840 | systems/texlive/tlnet/archive/tex4ht.i386-linux.r70276.tar.xz
2024/03/01 | 76840 | systems/texlive/tlnet/archive/tex4ht.i386-netbsd.r70286.tar.xz
2024/03/01 | 86840 | systems/texlive/tlnet/archive/tex4ht.i386-solaris.r70276.tar.xz
-2024/04/22 | 1140328 | systems/texlive/tlnet/archive/tex4ht.r71035.tar.xz
-2024/04/22 | 1491752 | systems/texlive/tlnet/archive/tex4ht.source.r71035.tar.xz
+2024/04/24 | 1140432 | systems/texlive/tlnet/archive/tex4ht.r71043.tar.xz
+2024/04/24 | 1493312 | systems/texlive/tlnet/archive/tex4ht.source.r71043.tar.xz
2024/03/01 | 185964 | systems/texlive/tlnet/archive/tex4ht.universal-darwin.r70274.tar.xz
2024/03/01 | 61988 | systems/texlive/tlnet/archive/tex4ht.windows.r70269.tar.xz
2024/03/11 | 57948 | systems/texlive/tlnet/archive/tex4ht.x86_64-cygwin.r70560.tar.xz
@@ -316574,8 +316583,8 @@
2022/03/21 | 276 | systems/texlive/tlnet/archive/texlive-cz.r62854.tar.xz
2024/03/15 | 1569304 | systems/texlive/tlnet/archive/texlive-de.doc.r70638.tar.xz
2024/03/15 | 280 | systems/texlive/tlnet/archive/texlive-de.r70638.tar.xz
-2024/04/22 | 1893992 | systems/texlive/tlnet/archive/texlive-en.doc.r71036.tar.xz
-2024/04/22 | 276 | systems/texlive/tlnet/archive/texlive-en.r71036.tar.xz
+2024/04/24 | 1894240 | systems/texlive/tlnet/archive/texlive-en.doc.r71042.tar.xz
+2024/04/24 | 272 | systems/texlive/tlnet/archive/texlive-en.r71042.tar.xz
2024/03/06 | 5641916 | systems/texlive/tlnet/archive/texlive-es.doc.r70417.tar.xz
2024/03/06 | 284 | systems/texlive/tlnet/archive/texlive-es.r70417.tar.xz
2024/03/27 | 1270592 | systems/texlive/tlnet/archive/texlive-fr.doc.r70783.tar.xz
@@ -316627,7 +316636,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
-2024/04/23 | 434804 | systems/texlive/tlnet/archive/texlive-scripts.doc.r71039.tar.xz
+2024/04/24 | 434800 | systems/texlive/tlnet/archive/texlive-scripts.doc.r71052.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
@@ -316649,7 +316658,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
-2024/04/23 | 114192 | systems/texlive/tlnet/archive/texlive-scripts.r71039.tar.xz
+2024/04/24 | 114152 | systems/texlive/tlnet/archive/texlive-scripts.r71052.tar.xz
2022/09/13 | 580 | systems/texlive/tlnet/archive/texlive-scripts.universal-darwin.r64356.tar.xz
2024/04/14 | 60548 | systems/texlive/tlnet/archive/texlive-scripts.windows.r70934.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.x86_64-cygwin.r64356.tar.xz
@@ -317913,8 +317922,8 @@
2022/01/24 | 347268 | systems/texlive/tlnet/archive/vhistory.doc.r61719.tar.xz
2022/01/24 | 8400 | systems/texlive/tlnet/archive/vhistory.r61719.tar.xz
2022/01/24 | 5182308 | systems/texlive/tlnet/archive/visualfaq.doc.r61719.tar.xz
-2023/07/24 | 4695648 | systems/texlive/tlnet/archive/visualfaq-fr.doc.r67718.tar.xz
-2023/07/24 | 788 | systems/texlive/tlnet/archive/visualfaq-fr.r67718.tar.xz
+2024/04/24 | 4717868 | systems/texlive/tlnet/archive/visualfaq-fr.doc.r71053.tar.xz
+2024/04/24 | 784 | systems/texlive/tlnet/archive/visualfaq-fr.r71053.tar.xz
2022/01/24 | 568 | systems/texlive/tlnet/archive/visualfaq.r61719.tar.xz
2019/02/28 | 13043468 | systems/texlive/tlnet/archive/visualpstricks.doc.r39799.tar.xz
2019/02/28 | 432 | systems/texlive/tlnet/archive/visualpstricks.r39799.tar.xz
@@ -318571,16 +318580,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
2024/04/11 | 125030 | systems/texlive/tlnet/install-tl
-2024/04/23 | 5749656 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2024/04/23 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2024/04/23 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2024/04/24 | 5750415 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2024/04/24 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2024/04/24 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2024/04/13 | 5743 | systems/texlive/tlnet/install-tl-windows.bat
-2024/04/23 | 27715297 | systems/texlive/tlnet/install-tl-windows.exe
-2024/04/23 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2024/04/23 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2024/04/23 | 34425887 | systems/texlive/tlnet/install-tl.zip
-2024/04/23 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2024/04/23 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2024/04/24 | 27718729 | systems/texlive/tlnet/install-tl-windows.exe
+2024/04/24 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2024/04/24 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2024/04/24 | 34425870 | systems/texlive/tlnet/install-tl.zip
+2024/04/24 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2024/04/24 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc
2024/03/13 | 1229 | systems/texlive/tlnet/README.md
2024/03/13 | 0 | systems/texlive/tlnet/TEXLIVE_2024
2024/01/02 | 9011 | systems/texlive/tlnet/tlpkg/gpg/pubring.gpg
@@ -318590,7 +318599,7 @@
2024/01/02 | 1280 | systems/texlive/tlnet/tlpkg/gpg/trustdb.gpg
2024/01/16 | 50726 | systems/texlive/tlnet/tlpkg/installer/config.guess
2010/11/11 | 11651 | systems/texlive/tlnet/tlpkg/installer/COPYING.MinGW-runtime.txt
-2024/04/22 | 7325 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+2024/04/24 | 7190 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2024/03/15 | 229654 | 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
@@ -318632,12 +318641,12 @@
2023/02/21 | 20371 | systems/texlive/tlnet/tlpkg/TeXLive/TLCrypto.pm
2024/01/31 | 5840 | systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm
2023/04/08 | 28167 | systems/texlive/tlnet/tlpkg/TeXLive/TLPaper.pm
-2024/04/23 | 19429599 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
-2024/04/23 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2024/04/24 | 19429686 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2024/04/24 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
2024/03/10 | 87229 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm
-2024/04/23 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
-2024/04/23 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2024/04/23 | 2565416 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2024/04/24 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2024/04/24 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2024/04/24 | 2565900 | 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
@@ -330073,7 +330082,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
-2024/04/24 | 186 | timestamp
+2024/04/25 | 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
diff --git a/FILES.byname.gz b/FILES.byname.gz
index 0e28eb7143..78cb0fe3fc 100644
--- a/FILES.byname.gz
+++ b/FILES.byname.gz
Binary files differ
diff --git a/FILES.last07days b/FILES.last07days
index d7eafd98af..f720e486a2 100644
--- a/FILES.last07days
+++ b/FILES.last07days
@@ -1,88 +1,167 @@
-2024/04/23 | 9593 | macros/latex/contrib/siunitx/siunitx-symbol.dtx
+2024/04/25 | 639763 | macros/latex/contrib/easybook/easybook.pdf
+2024/04/25 | 101717 | macros/latex/contrib/easybook/easybook.tex
+2024/04/24 | 95175 | macros/latex/contrib/spbmark/spbmark.pdf
+2024/04/24 | 9443 | macros/latex/contrib/siunitx/siunitx-symbol.dtx
+2024/04/24 | 90816 | systems/texlive/tlnet/archive/nicematrix.source.r71053.tar.xz
+2024/04/24 | 902271 | macros/latex/contrib/fancyhdr.zip
+2024/04/24 | 8856 | macros/latex/contrib/siunitx/siunitx-command.dtx
+2024/04/24 | 8734 | fonts/libertine/latex/libertineRoman.sty
+2024/04/24 | 859366 | fonts/libertine/doc/libertine-samples.pdf
+2024/04/24 | 80821 | macros/latex/contrib/siunitx/CHANGELOG.md
+2024/04/24 | 80307 | macros/latex/contrib/easybook/easybook.dtx
+2024/04/24 | 784 | systems/texlive/tlnet/archive/visualfaq-fr.r71053.tar.xz
+2024/04/24 | 780335 | macros/unicodetex/latex/bithesis.zip
+2024/04/24 | 7751 | macros/latex/contrib/exercisesheets/examples/exshexample.tex
+2024/04/24 | 750977 | macros/unicodetex/latex/bithesis/bithesis.pdf
+2024/04/24 | 7190 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+2024/04/24 | 703738 | macros/latex/contrib/siunitx/siunitx.pdf
+2024/04/24 | 686755 | macros/latex/contrib/easybook.zip
+2024/04/24 | 683 | macros/latex/contrib/exercisesheets/README
+2024/04/24 | 680076 | systems/texlive/tlnet/archive/atkinson.doc.r71048.tar.xz
+2024/04/24 | 67908 | systems/texlive/tlnet/archive/siunitx.r71053.tar.xz
+2024/04/24 | 645251 | macros/latex/contrib/siunitx/siunitx-code.pdf
+2024/04/24 | 643876 | systems/texlive/tlnet/archive/easybook.doc.r71053.tar.xz
+2024/04/24 | 62270 | macros/latex/contrib/exercisesheets/exercisesheets.sty
+2024/04/24 | 615932 | systems/texlive/tlnet/archive/commutative-diagrams.doc.r71053.tar.xz
+2024/04/24 | 5816 | macros/latex/contrib/siunitx/siunitx-locale.dtx
+2024/04/24 | 5770 | fonts/libertine/doc/libertine-samples.tex
+2024/04/24 | 5750415 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2024/04/24 | 55713 | macros/latex/contrib/siunitx/siunitx-table.dtx
+2024/04/24 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2024/04/24 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2024/04/24 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2024/04/24 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2024/04/24 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2024/04/24 | 48364 | macros/latex/contrib/exercisesheets/exercisesheets-doc.tex
+2024/04/24 | 4748 | macros/latex/contrib/siunitx/siunitx-abbreviations.cfg
+2024/04/24 | 4717868 | systems/texlive/tlnet/archive/visualfaq-fr.doc.r71053.tar.xz
+2024/04/24 | 43854 | macros/latex/contrib/siunitx/siunitx-compound.dtx
+2024/04/24 | 4352 | systems/texlive/tlnet/archive/luacensor.r71053.tar.xz
+2024/04/24 | 434800 | systems/texlive/tlnet/archive/texlive-scripts.doc.r71052.tar.xz
+2024/04/24 | 4214 | fonts/junicode/README
+2024/04/24 | 42040 | systems/texlive/tlnet/archive/nicematrix.r71053.tar.xz
+2024/04/24 | 4120566 | biblio/ctan-bibdata.zip
+2024/04/24 | 410605 | macros/latex/contrib/jsonparse/jsonparse-doc.pdf
+2024/04/24 | 408102 | macros/latex/contrib/jsonparse.zip
+2024/04/24 | 39313 | macros/latex/contrib/siunitx/siunitx-complex.dtx
+2024/04/24 | 37988 | macros/latex/contrib/siunitx/siunitx-print.dtx
+2024/04/24 | 3708800 | biblio/ctan-bibdata/ctan.pdf
+2024/04/24 | 3682 | macros/latex/contrib/siunitx/siunitx.ins
+2024/04/24 | 35799 | fonts/libertine/doc/libertine.tex
+2024/04/24 | 3500 | fonts/libertine/README
+2024/04/24 | 34652 | systems/texlive/tlnet/archive/gelasio.doc.r71047.tar.xz
+2024/04/24 | 34425870 | systems/texlive/tlnet/install-tl.zip
+2024/04/24 | 337124 | systems/texlive/tlnet/archive/atkinson.r71048.tar.xz
+2024/04/24 | 3302 | macros/unicodetex/latex/bithesis/bithesis.ins
+2024/04/24 | 325292 | systems/texlive/tlnet/archive/csquotes.doc.r71053.tar.xz
+2024/04/24 | 31797 | macros/latex/contrib/siunitx/siunitx-emulation.dtx
+2024/04/24 | 31738 | macros/latex/contrib/siunitx/siunitx-version-1.cfg
+2024/04/24 | 3032 | systems/texlive/tlnet/archive/haranoaji.doc.r71053.tar.xz
+2024/04/24 | 2941 | macros/latex/contrib/siunitx/siunitx-binary.dtx
+2024/04/24 | 2894 | macros/latex/contrib/exercisesheets/examples/exshexample-embedded.tex
+2024/04/24 | 2862730 | biblio/ctan-bibdata/ctan.bib
+2024/04/24 | 27718729 | systems/texlive/tlnet/install-tl-windows.exe
+2024/04/24 | 273398 | macros/latex/contrib/siunitx/siunitx-v2.sty
+2024/04/24 | 272 | systems/texlive/tlnet/archive/texlive-en.r71042.tar.xz
+2024/04/24 | 2649 | macros/unicodetex/latex/bithesis/contributing-zh.md
+2024/04/24 | 2621 | macros/latex/contrib/siunitx/siunitx-code.tex
+2024/04/24 | 26182876 | systems/texlive/tlnet/archive/haranoaji.r71053.tar.xz
+2024/04/24 | 2565900 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2024/04/24 | 237884 | fonts/libertine/doc/libertine.pdf
+2024/04/24 | 2348 | macros/unicodetex/latex/bithesis/contributing.md
+2024/04/24 | 22217 | macros/latex/contrib/siunitx/siunitx.dtx
+2024/04/24 | 21680 | macros/latex/contrib/jsonparse/jsonparse-doc.tex
+2024/04/24 | 21494 | macros/latex/contrib/jsonparse/jsonparse.sty
+2024/04/24 | 21340 | fonts/junicode/latex/junicode.sty
+2024/04/24 | 20766815 | install/fonts/libertine.tds.zip
+2024/04/24 | 20580217 | fonts/libertine.zip
+2024/04/24 | 1946 | macros/unicodetex/latex/bithesis/README.md
+2024/04/24 | 19429686 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2024/04/24 | 19358 | fonts/libertine/latex/libertine.sty
+2024/04/24 | 19015 | macros/latex/contrib/spbmark/spbmark.tex
+2024/04/24 | 1894240 | systems/texlive/tlnet/archive/texlive-en.doc.r71042.tar.xz
+2024/04/24 | 18426 | macros/latex/contrib/siunitx/siunitx-angle.dtx
+2024/04/24 | 18152 | systems/texlive/tlnet/archive/csquotes.r71053.tar.xz
+2024/04/24 | 1790216 | fonts/ibarra.zip
+2024/04/24 | 17550 | macros/latex/contrib/spbmark/spbmark.sty
+2024/04/24 | 173 | macros/latex/contrib/exercisesheets/examples/exercises/exshexample-ex1.tex
+2024/04/24 | 1729 | macros/latex/contrib/siunitx/siunitx-binary.cfg
+2024/04/24 | 17240 | systems/texlive/tlnet/archive/easybook.r71053.tar.xz
+2024/04/24 | 17136 | systems/texlive/tlnet/archive/easybook.source.r71053.tar.xz
+2024/04/24 | 168519 | macros/latex/contrib/siunitx/siunitx.tex
+2024/04/24 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
+2024/04/24 | 164096 | systems/texlive/tlnet/archive/luacensor.doc.r71053.tar.xz
+2024/04/24 | 163202 | macros/latex/contrib/siunitx/siunitx-number.dtx
+2024/04/24 | 1625 | fonts/junicode/doc/junicode-samples.tex
+2024/04/24 | 159160 | macros/latex/contrib/exercisesheets.zip
+2024/04/24 | 1590764 | install/macros/latex/contrib/siunitx.tds.zip
+2024/04/24 | 1565068 | systems/texlive/tlnet/archive/gelasio.r71047.tar.xz
+2024/04/24 | 1549 | macros/latex/contrib/jsonparse/README.md
+2024/04/24 | 1543185 | macros/latex/contrib/siunitx.zip
+2024/04/24 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2024/04/24 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2024/04/24 | 15296 | macros/latex/contrib/siunitx/siunitx-quantity.dtx
+2024/04/24 | 1493312 | systems/texlive/tlnet/archive/tex4ht.source.r71043.tar.xz
+2024/04/24 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2024/04/24 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2024/04/24 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r71043.tar.xz
+2024/04/24 | 1349156 | systems/texlive/tlnet/archive/nicematrix.doc.r71053.tar.xz
+2024/04/24 | 132229100 | install/fonts/junicode.tds.zip
+2024/04/24 | 131935734 | fonts/junicode.zip
+2024/04/24 | 131598 | macros/unicodetex/latex/bithesis/bithesis.dtx
+2024/04/24 | 1286148 | systems/texlive/tlnet/archive/siunitx.doc.r71053.tar.xz
+2024/04/24 | 128498 | macros/latex/contrib/exercisesheets/exercisesheets-doc.pdf
+2024/04/24 | 12748 | systems/texlive/tlnet/archive/commutative-diagrams.r71053.tar.xz
+2024/04/24 | 123 | macros/latex/contrib/exercisesheets/examples/exercises/exshexample-ex2.lua
+2024/04/24 | 123112 | systems/texlive/tlnet/archive/siunitx.source.r71053.tar.xz
+2024/04/24 | 1166 | macros/latex/contrib/siunitx/README.md
+2024/04/24 | 114152 | systems/texlive/tlnet/archive/texlive-scripts.r71052.tar.xz
+2024/04/24 | 1140432 | systems/texlive/tlnet/archive/tex4ht.r71043.tar.xz
+2024/04/24 | 11252 | macros/latex/contrib/siunitx/siunitx-abbreviation.dtx
+2024/04/24 | 104102 | macros/latex/contrib/siunitx/siunitx-unit.dtx
+2024/04/24 | 102486 | macros/latex/contrib/spbmark.zip
2024/04/23 | 9385988 | install/fonts/garamond-libre.tds.zip
2024/04/23 | 936844 | macros/latex/contrib/nicematrix/nicematrix.pdf
2024/04/23 | 9342166 | fonts/garamond-libre.zip
2024/04/23 | 9133493 | install/fonts/cormorantgaramond.tds.zip
2024/04/23 | 905326 | macros/latex/contrib/nicematrix/nicematrix-french.pdf
2024/04/23 | 9047741 | fonts/cormorantgaramond.zip
-2024/04/23 | 8856 | macros/latex/contrib/siunitx/siunitx-command.dtx
-2024/04/23 | 80573 | macros/latex/contrib/siunitx/CHANGELOG.md
-2024/04/23 | 79851 | macros/latex/contrib/easybook/easybook.dtx
-2024/04/23 | 703731 | macros/latex/contrib/siunitx/siunitx.pdf
-2024/04/23 | 686445 | macros/latex/contrib/easybook.zip
+2024/04/23 | 875225 | macros/latex/contrib/fancyhdr/fancyhdr.pdf
2024/04/23 | 68183 | fonts/atkinson/doc/atkinson-samples.pdf
2024/04/23 | 6699 | fonts/ebgaramond/latex/ebgaramond.sty
-2024/04/23 | 645465 | macros/latex/contrib/siunitx/siunitx-code.pdf
-2024/04/23 | 639377 | macros/latex/contrib/easybook/easybook.pdf
2024/04/23 | 593882 | macros/latex/contrib/nicematrix/nicematrix-code.dtx
-2024/04/23 | 5816 | macros/latex/contrib/siunitx/siunitx-locale.dtx
-2024/04/23 | 5749656 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2024/04/23 | 55713 | macros/latex/contrib/siunitx/siunitx-table.dtx
2024/04/23 | 5299 | fonts/cormorantgaramond/latex/CormorantGaramond.sty
-2024/04/23 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
-2024/04/23 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2024/04/23 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc
-2024/04/23 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2024/04/23 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
-2024/04/23 | 4748 | macros/latex/contrib/siunitx/siunitx-abbreviations.cfg
2024/04/23 | 451 | fonts/atkinson/doc/atkinson-samples.tex
-2024/04/23 | 43854 | macros/latex/contrib/siunitx/siunitx-compound.dtx
-2024/04/23 | 434804 | systems/texlive/tlnet/archive/texlive-scripts.doc.r71039.tar.xz
-2024/04/23 | 4120564 | biblio/ctan-bibdata.zip
-2024/04/23 | 39313 | macros/latex/contrib/siunitx/siunitx-complex.dtx
2024/04/23 | 3883 | fonts/garamond-libre/latex/garamondlibre.sty
2024/04/23 | 3850 | fonts/atkinson/latex/atkinson.sty
-2024/04/23 | 37988 | macros/latex/contrib/siunitx/siunitx-print.dtx
2024/04/23 | 3713 | fonts/gelasio/latex/gelasio.sty
-2024/04/23 | 3708800 | biblio/ctan-bibdata/ctan.pdf
-2024/04/23 | 3682 | macros/latex/contrib/siunitx/siunitx.ins
2024/04/23 | 3635 | fonts/garamond-libre/README
-2024/04/23 | 34425887 | systems/texlive/tlnet/install-tl.zip
2024/04/23 | 3211 | fonts/ebgaramond/README
-2024/04/23 | 31797 | macros/latex/contrib/siunitx/siunitx-emulation.dtx
-2024/04/23 | 31738 | macros/latex/contrib/siunitx/siunitx-version-1.cfg
-2024/04/23 | 2941 | macros/latex/contrib/siunitx/siunitx-binary.dtx
+2024/04/23 | 2993 | fonts/ibarra/latex/ibarra.sty
2024/04/23 | 2863 | fonts/ebgaramond/doc/ebgaramond-samples.tex
-2024/04/23 | 2862730 | biblio/ctan-bibdata/ctan.bib
2024/04/23 | 2803 | fonts/cormorantgaramond/README
-2024/04/23 | 27715297 | systems/texlive/tlnet/install-tl-windows.exe
-2024/04/23 | 273398 | macros/latex/contrib/siunitx/siunitx-v2.sty
-2024/04/23 | 2621 | macros/latex/contrib/siunitx/siunitx-code.tex
2024/04/23 | 259212 | macros/latex/contrib/nicematrix/nicematrix.tex
-2024/04/23 | 2565416 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
-2024/04/23 | 22217 | macros/latex/contrib/siunitx/siunitx.dtx
+2024/04/23 | 251577 | support/TeX4ht/source/ChangeLog
+2024/04/23 | 2205 | macros/latex/contrib/fancyhdr/fancyhdr.ins
2024/04/23 | 2107438 | install/fonts/gelasio.tds.zip
2024/04/23 | 2081 | fonts/atkinson/README
2024/04/23 | 2076958 | fonts/gelasio.zip
-2024/04/23 | 19429599 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
-2024/04/23 | 18426 | macros/latex/contrib/siunitx/siunitx-angle.dtx
-2024/04/23 | 1729 | macros/latex/contrib/siunitx/siunitx-binary.cfg
+2024/04/23 | 202937 | macros/latex/contrib/fancyhdr/fancyhdr.dtx
+2024/04/23 | 2019 | macros/latex/contrib/fancyhdr/README
+2024/04/23 | 1893 | fonts/ibarra/README
+2024/04/23 | 1817638 | install/fonts/ibarra.tds.zip
+2024/04/23 | 173588 | fonts/ibarra/doc/ibarra-samples.pdf
2024/04/23 | 1729 | fonts/gelasio/README
2024/04/23 | 1695320 | macros/latex/contrib/nicematrix.zip
-2024/04/23 | 168519 | macros/latex/contrib/siunitx/siunitx.tex
-2024/04/23 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
2024/04/23 | 166907 | fonts/ebgaramond/doc/ebgaramond-samples.pdf
-2024/04/23 | 163202 | macros/latex/contrib/siunitx/siunitx-number.dtx
-2024/04/23 | 1591059 | install/macros/latex/contrib/siunitx.tds.zip
-2024/04/23 | 1543476 | macros/latex/contrib/siunitx.zip
-2024/04/23 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2024/04/23 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2024/04/23 | 15296 | macros/latex/contrib/siunitx/siunitx-quantity.dtx
-2024/04/23 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2024/04/23 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
2024/04/23 | 1289963 | install/fonts/atkinson.tds.zip
2024/04/23 | 1270957 | fonts/atkinson.zip
2024/04/23 | 12601973 | install/fonts/ebgaramond.tds.zip
2024/04/23 | 12499409 | fonts/ebgaramond.zip
-2024/04/23 | 1166 | macros/latex/contrib/siunitx/README.md
-2024/04/23 | 114192 | systems/texlive/tlnet/archive/texlive-scripts.r71039.tar.xz
-2024/04/23 | 11252 | macros/latex/contrib/siunitx/siunitx-abbreviation.dtx
-2024/04/23 | 104101 | macros/latex/contrib/siunitx/siunitx-unit.dtx
-2024/04/23 | 101021 | macros/latex/contrib/easybook/easybook.tex
+2024/04/23 | 1189933 | support/TeX4ht/source/tex4ht-4ht.tex
2024/04/22 | 88233964 | systems/texlive/tlnet/archive/junicode.r71027.tar.xz
2024/04/22 | 788136 | systems/texlive/tlnet/archive/ibarra.r71026.tar.xz
2024/04/22 | 7782 | graphics/pgf/contrib/commutative-diagrams/tikzlibrarycommutative-diagrams.velos.code.tex
-2024/04/22 | 7325 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2024/04/22 | 70084 | systems/texlive/tlnet/archive/njuthesis.source.r71034.tar.xz
2024/04/22 | 6560 | systems/texlive/tlnet/archive/fontscale.r71029.tar.xz
2024/04/22 | 641276 | install/graphics/pgf/contrib/commutative-diagrams.tds.zip
@@ -108,7 +187,6 @@
2024/04/22 | 3195 | fonts/haranoaji/README
2024/04/22 | 312064 | systems/texlive/tlnet/archive/ibarra.doc.r71026.tar.xz
2024/04/22 | 2824440 | systems/texlive/tlnet/archive/citation-style-language.r71025.tar.xz
-2024/04/22 | 276 | systems/texlive/tlnet/archive/texlive-en.r71036.tar.xz
2024/04/22 | 2619 | graphics/pgf/contrib/commutative-diagrams/tikzlibrarycommutative-diagrams.diorthono.code.tex
2024/04/22 | 25404 | systems/texlive/tlnet/archive/ufrgscca.r71033.tar.xz
2024/04/22 | 247348 | systems/texlive/tlnet/archive/citation-style-language.doc.r71025.tar.xz
@@ -117,17 +195,13 @@
2024/04/22 | 2094 | graphics/pgf/contrib/commutative-diagrams/tikzlibrarycommutative-diagrams.code.tex
2024/04/22 | 2009 | graphics/pgf/contrib/commutative-diagrams/tikzlibrarycommutative-diagrams.ektropi.code.tex
2024/04/22 | 2006 | graphics/pgf/contrib/commutative-diagrams/kodi.sty
-2024/04/22 | 1893992 | systems/texlive/tlnet/archive/texlive-en.doc.r71036.tar.xz
2024/04/22 | 1569 | graphics/pgf/contrib/commutative-diagrams/tikzlibrarycommutative-diagrams.ozos.code.tex
2024/04/22 | 1527364 | systems/texlive/tlnet/archive/libertine.doc.r71028.tar.xz
-2024/04/22 | 1491752 | systems/texlive/tlnet/archive/tex4ht.source.r71035.tar.xz
2024/04/22 | 13898620 | systems/texlive/tlnet/archive/libertine.r71028.tar.xz
-2024/04/22 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r71035.tar.xz
2024/04/22 | 1264728 | systems/texlive/tlnet/archive/njuthesis.doc.r71034.tar.xz
2024/04/22 | 123500 | systems/texlive/tlnet/archive/fontscale.doc.r71029.tar.xz
2024/04/22 | 11729 | graphics/pgf/contrib/commutative-diagrams/tikzlibrarycommutative-diagrams.mandyas.code.tex
2024/04/22 | 1163784 | systems/texlive/tlnet/archive/tuda-ci.doc.r71032.tar.xz
-2024/04/22 | 1140328 | systems/texlive/tlnet/archive/tex4ht.r71035.tar.xz
2024/04/21 | 9768 | systems/texlive/tlnet/archive/se2thesis.r71020.tar.xz
2024/04/21 | 9702 | macros/latex/contrib/tuda-ci/tex/tudamecheng.cfg
2024/04/21 | 9563 | biblio/citation-style-language/citeproc-context.lua
@@ -157,14 +231,12 @@
2024/04/21 | 6904 | macros/latex/contrib/ufrgscca/README.md
2024/04/21 | 6835 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaLeaflet.tex
2024/04/21 | 6813 | biblio/citation-style-language/citeproc-node-sort.lua
-2024/04/21 | 680072 | systems/texlive/tlnet/archive/atkinson.doc.r71010.tar.xz
2024/04/21 | 662459 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPub.pdf
2024/04/21 | 654840 | systems/texlive/tlnet/archive/litesolution.doc.r71017.tar.xz
2024/04/21 | 6461 | macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa.sty
2024/04/21 | 64309 | biblio/citation-style-language/citeproc-output.lua
2024/04/21 | 6375 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer2023.tex
2024/04/21 | 6365 | macros/latex/contrib/tuda-ci/tex/tudarules.sty
-2024/04/21 | 634732 | systems/texlive/tlnet/archive/easybook.doc.r71016.tar.xz
2024/04/21 | 629331 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPhD.pdf
2024/04/21 | 625767 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaThesis.pdf
2024/04/21 | 6212 | biblio/citation-style-language/citeproc-ir-node.lua
@@ -209,16 +281,13 @@
2024/04/21 | 4275 | biblio/citation-style-language/citation-style-language-compatible.sty
2024/04/21 | 4240 | macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa2008.sty
2024/04/21 | 420132 | systems/texlive/tlnet/archive/tikzducks.doc.r71015.tar.xz
-2024/04/21 | 393939 | macros/latex/contrib/jsonparse.zip
2024/04/21 | 3821 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaFromaddress.lco
2024/04/21 | 3762 | macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa2008.sty
2024/04/21 | 37255 | biblio/citation-style-language/citeproc-node-names.lua
2024/04/21 | 3672 | systems/texlive/tlnet/archive/litesolution.r71017.tar.xz
2024/04/21 | 3555 | macros/latex/contrib/tuda-ci/tex/tudafonts.sty
-2024/04/21 | 34640 | systems/texlive/tlnet/archive/gelasio.doc.r71012.tar.xz
2024/04/21 | 34288 | biblio/citation-style-language/citeproc-engine.lua
2024/04/21 | 3425 | macros/latex/contrib/ufrgscca/latex/ufrgscca-lists.sty
-2024/04/21 | 337120 | systems/texlive/tlnet/archive/atkinson.r71010.tar.xz
2024/04/21 | 33596 | macros/latex/contrib/tuda-ci/tex/tudaexercise.cls
2024/04/21 | 3323 | macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa.sty
2024/04/21 | 327639 | macros/unicodetex/latex/njuthesis/njuthesis.dtx
@@ -248,7 +317,6 @@
2024/04/21 | 25355 | biblio/citation-style-language/csl-locales-pt-PT.xml
2024/04/21 | 25328 | systems/texlive/tlnet/archive/se2thesis.source.r71020.tar.xz
2024/04/21 | 25210 | biblio/citation-style-language/csl-locales-es-MX.xml
-2024/04/21 | 251449 | support/TeX4ht/source/ChangeLog
2024/04/21 | 2513 | macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa.sty
2024/04/21 | 25139 | biblio/citation-style-language/csl-locales-fr-FR.xml
2024/04/21 | 25122 | biblio/citation-style-language/csl-locales-en-GB.xml
@@ -311,7 +379,6 @@
2024/04/21 | 20851 | biblio/citation-style-language/citeproc-element.lua
2024/04/21 | 2068 | macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa2008.sty
2024/04/21 | 2065 | macros/latex/contrib/ufrgscca/latex/ufrgscca-base-en.def
-2024/04/21 | 20580081 | fonts/libertine.zip
2024/04/21 | 20351 | biblio/citation-style-language/citation-style-language-cite.sty
2024/04/21 | 2024508 | systems/texlive/tlnet/archive/proflycee.doc.r71019.tar.xz
2024/04/21 | 1998 | biblio/citation-style-language/citeproc-node-number.lua
@@ -327,8 +394,6 @@
2024/04/21 | 1837 | biblio/citation-style-language/README.md
2024/04/21 | 18260 | systems/texlive/tlnet/archive/profsio.r71014.tar.xz
2024/04/21 | 1769 | macros/latex/contrib/fontscale/CHANGELOG.md
-2024/04/21 | 17036 | systems/texlive/tlnet/archive/easybook.r71016.tar.xz
-2024/04/21 | 16904 | systems/texlive/tlnet/archive/easybook.source.r71016.tar.xz
2024/04/21 | 16809 | macros/latex/contrib/tuda-ci/tex/tudaletter.cls
2024/04/21 | 16728 | biblio/citation-style-language/citation-style-language-doc.tex
2024/04/21 | 1665927 | support/TeX4ht/source/tex4ht-fonts-noncjk.tex
@@ -343,7 +408,6 @@
2024/04/21 | 16062 | biblio/citation-style-language/modern-humanities-research-association.csl
2024/04/21 | 15854 | biblio/citation-style-language/ieee.csl
2024/04/21 | 158028 | systems/texlive/tlnet/archive/cormorantgaramond.doc.r71011.tar.xz
-2024/04/21 | 1565084 | systems/texlive/tlnet/archive/gelasio.r71012.tar.xz
2024/04/21 | 15254 | biblio/citation-style-language/citeproc-latex-core.lua
2024/04/21 | 15036364 | systems/texlive/tlnet/archive/profcollege.doc.r71018.tar.xz
2024/04/21 | 14779489 | biblio/citation-style-language/citeproc-journal-data.lua
@@ -380,9 +444,7 @@
2024/04/20 | 8882 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
2024/04/20 | 88641 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
2024/04/20 | 8730 | systems/win32/miktex/tm/packages/fontscale.tar.lzma
-2024/04/20 | 8714 | fonts/libertine/latex/libertineRoman.sty
2024/04/20 | 8616 | fonts/libertine/latex/biolinum.sty
-2024/04/20 | 859366 | fonts/libertine/doc/libertine-samples.pdf
2024/04/20 | 84287 | graphics/pgf/contrib/profsio/doc/ProfSio-doc-fr.tex
2024/04/20 | 829151 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
2024/04/20 | 827390 | systems/win32/miktex/tm/packages/piton__doc.tar.lzma
@@ -442,7 +504,6 @@
2024/04/20 | 58945 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
2024/04/20 | 5824 | macros/latex/contrib/proflycee/doc/ProfLycee-doc.tex
2024/04/20 | 5808 | systems/win32/miktex/tm/packages/lscapeenhanced__source.tar.lzma
-2024/04/20 | 5778 | fonts/libertine/doc/libertine-samples.tex
2024/04/20 | 57471 | systems/win32/miktex/tm/packages/hulipsum__source.tar.lzma
2024/04/20 | 5674886 | systems/win32/miktex/tm/packages/profcollege__source.tar.lzma
2024/04/20 | 56381 | systems/win32/miktex/tm/packages/tugboat__source.tar.lzma
@@ -494,13 +555,11 @@
2024/04/20 | 427414 | systems/win32/miktex/tm/packages/minion2newtx__doc.tar.lzma
2024/04/20 | 42376 | systems/win32/miktex/tm/packages/easybook__source.tar.lzma
2024/04/20 | 423110 | macros/latex/required/babel/base/babel.pdf
-2024/04/20 | 4214 | fonts/junicode/README
2024/04/20 | 4183 | systems/win32/miktex/tm/packages/minion2newtx__source.tar.lzma
2024/04/20 | 409679 | systems/win32/miktex/tm/packages/tikzducks__doc.tar.lzma
2024/04/20 | 4038 | systems/win32/miktex/tm/packages/tikzmarmots__source.tar.lzma
2024/04/20 | 40387 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
2024/04/20 | 395223 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
-2024/04/20 | 394387 | macros/latex/contrib/jsonparse/jsonparse-doc.pdf
2024/04/20 | 3941832 | systems/texlive/tlnet/archive/luajittex.windows.r71006.tar.xz
2024/04/20 | 3926 | systems/win32/miktex/tm/packages/numspell__source.tar.lzma
2024/04/20 | 38319 | systems/win32/miktex/tm/packages/tagpdf.tar.lzma
@@ -512,14 +571,12 @@
2024/04/20 | 36727 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
2024/04/20 | 36572 | systems/win32/miktex/tm/packages/ufrgscca.tar.lzma
2024/04/20 | 359300 | macros/latex/contrib/se2thesis/se2thesis.pdf
-2024/04/20 | 35679 | fonts/libertine/doc/libertine.tex
2024/04/20 | 35357 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
2024/04/20 | 353465 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
2024/04/20 | 353431 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
2024/04/20 | 3527 | macros/latex/required/babel/base/bbidxglo.dtx
2024/04/20 | 352059 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
2024/04/20 | 3507433 | systems/win32/miktex/tm/packages/simpleicons.tar.lzma
-2024/04/20 | 3500 | fonts/libertine/README
2024/04/20 | 3496 | systems/win32/miktex/tm/packages/jsonparse.tar.lzma
2024/04/20 | 3434376 | systems/texlive/tlnet/archive/notebeamer.doc.r71002.tar.xz
2024/04/20 | 33880 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
@@ -539,7 +596,6 @@
2024/04/20 | 305509 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
2024/04/20 | 30348 | macros/latex/contrib/se2thesis/se2packages.dtx
2024/04/20 | 3015 | macros/latex/contrib/se2thesis/se2thesis.ins
-2024/04/20 | 2985 | fonts/ibarra/latex/ibarra.sty
2024/04/20 | 29706 | systems/win32/miktex/tm/packages/bithesis__source.tar.lzma
2024/04/20 | 293363 | systems/win32/miktex/tm/packages/lua-typo__doc.tar.lzma
2024/04/20 | 29200 | support/TeX4ht/source/Makefile
@@ -587,7 +643,6 @@
2024/04/20 | 2390 | fonts/garamond-libre/latex/LGRGaramondLibre-Sup.fd
2024/04/20 | 2390 | fonts/garamond-libre/latex/LGRGaramondLibre-Inf.fd
2024/04/20 | 23835 | systems/win32/miktex/tm/packages/tugboat-plain.tar.lzma
-2024/04/20 | 237747 | fonts/libertine/doc/libertine.pdf
2024/04/20 | 2368 | fonts/garamond-libre/latex/T1GaramondLibre-Sup.fd
2024/04/20 | 2368 | fonts/garamond-libre/latex/T1GaramondLibre-Inf.fd
2024/04/20 | 2368793 | macros/latex/required/babel/base.zip
@@ -597,22 +652,18 @@
2024/04/20 | 23339 | systems/win32/miktex/tm/packages/miktex-misc.tar.lzma
2024/04/20 | 232557 | macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.pdf
2024/04/20 | 231891 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
-2024/04/20 | 23129 | macros/latex/contrib/jsonparse/jsonparse-doc.tex
2024/04/20 | 22366 | systems/win32/miktex/tm/packages/simpleicons__source.tar.lzma
2024/04/20 | 221408 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
2024/04/20 | 220823 | systems/win32/miktex/tm/packages/pst-geometrictools__doc.tar.lzma
-2024/04/20 | 22010 | macros/latex/contrib/jsonparse/jsonparse.sty
2024/04/20 | 21890 | macros/latex/required/babel/base/bbcompat.dtx
2024/04/20 | 218714 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
2024/04/20 | 217647 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
2024/04/20 | 21564 | macros/latex/contrib/huaz/huaz.tex
-2024/04/20 | 21324 | fonts/junicode/latex/junicode.sty
2024/04/20 | 2123041 | macros/latex/contrib/proflycee.zip
2024/04/20 | 2104924 | systems/texlive/tlnet/archive/luatex.windows.r71006.tar.xz
2024/04/20 | 209328 | systems/win32/miktex/tm/packages/tugboat-plain__doc.tar.lzma
2024/04/20 | 20867 | systems/win32/miktex/tm/packages/tikzducks.tar.lzma
2024/04/20 | 20802 | macros/latex/contrib/huaz/huaz.sty
-2024/04/20 | 20766679 | install/fonts/libertine.tds.zip
2024/04/20 | 2074386 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
2024/04/20 | 2072967 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
2024/04/20 | 2061720 | systems/win32/miktex/tm/packages/tagpdf__doc.tar.lzma
@@ -627,21 +678,16 @@
2024/04/20 | 19785 | systems/win32/miktex/tm/packages/piton.tar.lzma
2024/04/20 | 1969 | macros/latex/required/babel/base/README.md
2024/04/20 | 1960 | fonts/libertine/latex/libertineMono.sty
-2024/04/20 | 19312 | fonts/libertine/latex/libertine.sty
2024/04/20 | 1929616 | systems/texlive/tlnet/archive/luahbtex.windows.r71006.tar.xz
2024/04/20 | 1923 | macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.tex
2024/04/20 | 1922 | systems/win32/miktex/tm/packages/aobs-tikz.tar.lzma
2024/04/20 | 19106 | macros/latex/contrib/se2thesis/LICENSE.txt
-2024/04/20 | 1883 | fonts/ibarra/README
2024/04/20 | 183620 | systems/win32/miktex/tm/packages/crossrefenum__source.tar.lzma
2024/04/20 | 18336 | systems/win32/miktex/tm/packages/bodeplot__source.tar.lzma
2024/04/20 | 182748 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
-2024/04/20 | 1819805 | install/fonts/ibarra.tds.zip
-2024/04/20 | 1792383 | fonts/ibarra.zip
2024/04/20 | 17840 | systems/texlive/tlnet/archive/bodeplot.source.r71000.tar.xz
2024/04/20 | 1773575 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
2024/04/20 | 1773312 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
-2024/04/20 | 175741 | fonts/ibarra/doc/ibarra-samples.pdf
2024/04/20 | 174602 | systems/win32/miktex/tm/packages/luamplib__doc.tar.lzma
2024/04/20 | 174112 | systems/texlive/tlnet/archive/luamplib.doc.r71003.tar.xz
2024/04/20 | 173961 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
@@ -649,14 +695,12 @@
2024/04/20 | 1691169 | macros/latex/contrib/proflycee/doc/ProfLycee-doc.pdf
2024/04/20 | 16623 | systems/win32/miktex/tm/packages/easybook.tar.lzma
2024/04/20 | 163152 | systems/texlive/tlnet/tlpkg/TeXLive/TLUtils.pm
-2024/04/20 | 1629 | fonts/junicode/doc/junicode-samples.tex
2024/04/20 | 159934 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
2024/04/20 | 157762 | systems/win32/miktex/tm/packages/epcqrcode__doc.tar.lzma
2024/04/20 | 155491 | systems/win32/miktex/tm/packages/hulipsum__doc.tar.lzma
2024/04/20 | 15462 | systems/win32/miktex/tm/packages/luamplib.tar.lzma
2024/04/20 | 1531096 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
2024/04/20 | 15224 | systems/texlive/tlnet/archive/luamplib.r71003.tar.xz
-2024/04/20 | 1498 | macros/latex/contrib/jsonparse/README.md
2024/04/20 | 149874 | graphics/pgf/contrib/profsio/tex/ProfSio.sty
2024/04/20 | 14587 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
2024/04/20 | 1439411 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
@@ -670,8 +714,6 @@
2024/04/20 | 135652 | systems/win32/miktex/tm/packages/fadingimage__doc.tar.lzma
2024/04/20 | 1345145 | systems/win32/miktex/tm/packages/notebeamer__doc.tar.lzma
2024/04/20 | 1341542 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
-2024/04/20 | 132229103 | install/fonts/junicode.tds.zip
-2024/04/20 | 131935737 | fonts/junicode.zip
2024/04/20 | 13189 | systems/win32/miktex/tm/packages/lua-typo.tar.lzma
2024/04/20 | 13187 | systems/win32/miktex/tm/packages/lato-math__source.tar.lzma
2024/04/20 | 1300 | systems/texlive/tlnet/archive/fadingimage.r71001.tar.xz
@@ -682,7 +724,6 @@
2024/04/20 | 12377 | systems/win32/miktex/tm/packages/fgruler__source.tar.lzma
2024/04/20 | 123278 | systems/win32/miktex/tm/packages/siunitx__source.tar.lzma
2024/04/20 | 122417 | systems/win32/miktex/tm/packages/gitinfo-lua__doc.tar.lzma
-2024/04/20 | 1189721 | support/TeX4ht/source/tex4ht-4ht.tex
2024/04/20 | 11883 | systems/win32/miktex/tm/packages/crossrefenum.tar.lzma
2024/04/20 | 117785 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
2024/04/20 | 11768 | systems/win32/miktex/tm/packages/jsonparse__source.tar.lzma
@@ -935,25 +976,12 @@
2024/04/19 | 10168 | macros/latex/contrib/profcollege/latex/PfCPapiers.tex
2024/04/19 | 1003736 | systems/texlive/tlnet/archive/eplain.doc.r70992.tar.xz
2024/04/19 | 1000 | macros/latex/contrib/profcollege/latex/PfCJeton.tex
-2024/04/18 | 918998 | macros/latex/contrib/acmart/acmart.pdf
2024/04/18 | 795757 | graphics/pgf/contrib/bodeplot.zip
2024/04/18 | 6948 | systems/texlive/tlnet/archive/texfot.r70969.tar.xz
-2024/04/18 | 634239 | macros/latex/contrib/acmart/samples/sample-acmsmall-biblatex.pdf
-2024/04/18 | 624039 | macros/latex/contrib/acmart/samples/sample-acmsmall-submission.pdf
-2024/04/18 | 623030 | macros/latex/contrib/acmart/samples/sample-manuscript.pdf
2024/04/18 | 6223 | fonts/lato-math/lato-math.sty
-2024/04/18 | 622065 | macros/latex/contrib/acmart/samples/sample-sigconf-biblatex.pdf
-2024/04/18 | 621531 | macros/latex/contrib/acmart/samples/sample-acmsmall.pdf
-2024/04/18 | 611542 | macros/latex/contrib/acmart/samples/sample-acmlarge.pdf
2024/04/18 | 604 | systems/texlive/tlnet/archive/graphics-def.doc.r70970.tar.xz
-2024/04/18 | 569299 | macros/latex/contrib/acmart/samples/sample-acmtog-conf.pdf
-2024/04/18 | 569061 | macros/latex/contrib/acmart/samples/sample-acmtog.pdf
-2024/04/18 | 5512 | macros/latex/contrib/acmart/Makefile
-2024/04/18 | 439778 | macros/latex/contrib/acmart/acmguide.pdf
2024/04/18 | 438780 | fonts/lato-math/LatoMath.otf
2024/04/18 | 41316 | macros/luatex/latex/lua-typo/lua-typo-2023-03-08.sty
-2024/04/18 | 400681 | macros/latex/contrib/acmart/samples/sample-acmengage.pdf
-2024/04/18 | 39521 | macros/latex/contrib/acmart/samples/samples.dtx
2024/04/18 | 3749 | macros/luatex/latex/lua-typo/README.md
2024/04/18 | 37262 | graphics/pgf/contrib/bodeplot/bodeplot-2024-02-06.sty
2024/04/18 | 350638 | macros/luatex/latex/lua-typo.zip
@@ -962,14 +990,11 @@
2024/04/18 | 337017 | macros/latex/contrib/thesis-ekf.zip
2024/04/18 | 3178 | graphics/pgf/contrib/bodeplot/README.md
2024/04/18 | 2997 | macros/luatex/latex/lua-typo/doc/lua-typo-demo.tex
-2024/04/18 | 292953 | macros/latex/contrib/acmart/acmart.dtx
2024/04/18 | 27950 | fonts/lato-math/LatoMath.ltx
-2024/04/18 | 2773 | macros/latex/contrib/acmart/acmart.bib
2024/04/18 | 25642 | macros/luatex/latex/lua-typo/lua-typo-2021-04-18.sty
2024/04/18 | 2524 | systems/texlive/tlnet/archive/tikzmarmots.r70972.tar.xz
2024/04/18 | 2430347 | fonts/lato-math.zip
2024/04/18 | 215208 | macros/luatex/latex/lua-typo/doc/lua-typo.pdf
-2024/04/18 | 214495 | macros/latex/contrib/acmart/samples/sample-acmcp.pdf
2024/04/18 | 208117 | fonts/lato-math/LatoMath.pdf
2024/04/18 | 206176 | systems/texlive/tlnet/archive/tikzmarmots.doc.r70972.tar.xz
2024/04/18 | 199974 | macros/latex/contrib/thesis-ekf/thesis-ekf.pdf
@@ -977,9 +1002,7 @@
2024/04/18 | 1937253 | fonts/lato-math/unimath-lato.pdf
2024/04/18 | 16859 | macros/luatex/latex/lua-typo/doc/lua-typo-demo.pdf
2024/04/18 | 16521 | fonts/lato-math/unimath-lato.ltx
-2024/04/18 | 1560 | macros/latex/contrib/acmart/samples/samples.ins
2024/04/18 | 1426 | graphics/pgf/contrib/bodeplot/bodeplot.ins
-2024/04/18 | 13713 | macros/latex/contrib/acmart/README
2024/04/18 | 129799 | macros/luatex/latex/lua-typo/source/lua-typo.dtx
2024/04/18 | 127708 | fonts/lato-math/LatoMath-Bold.otf
2024/04/18 | 12332605 | macros/latex/contrib/acmart.zip
@@ -987,58 +1010,3 @@
2024/04/18 | 10728 | systems/texlive/tlnet/archive/graphics-def.r70970.tar.xz
2024/04/18 | 107094 | macros/luatex/latex/lua-typo/doc/lua-typo-fr.pdf
2024/04/18 | 106469 | graphics/pgf/contrib/bodeplot/bodeplot.dtx
-2024/04/18 | 1060242 | macros/latex/contrib/acmart/samples/sample-sigconf-i13n.pdf
-2024/04/18 | 1056847 | macros/latex/contrib/acmart/samples/sample-acmsmall-conf.pdf
-2024/04/18 | 1053423 | macros/latex/contrib/acmart/samples/sample-sigplan.pdf
-2024/04/18 | 1048751 | macros/latex/contrib/acmart/samples/sample-sigconf-authordraft.pdf
-2024/04/18 | 1044964 | macros/latex/contrib/acmart/samples/sample-sigconf.pdf
-2024/04/17 | 993 | macros/eplain/doc/demo/Makefile
-2024/04/17 | 9189 | graphics/pgf/contrib/tikzmarmots/tikzmarmots-doc.tex
-2024/04/17 | 90978 | macros/eplain/doc/ChangeLog
-2024/04/17 | 89453 | macros/eplain/doc/lscommnt.jpg
-2024/04/17 | 8792 | macros/eplain/doc/NEWS
-2024/04/17 | 823420 | macros/eplain/doc/eplain.html
-2024/04/17 | 8178 | macros/eplain/doc/demo/xhyper.tex
-2024/04/17 | 743904 | systems/texlive/tlnet/archive/bithesis.doc.r70966.tar.xz
-2024/04/17 | 726401 | macros/eplain/doc/eplain.pdf
-2024/04/17 | 696 | graphics/pgf/contrib/tikzmarmots/README.md
-2024/04/17 | 657 | macros/eplain/doc/AUTHORS
-2024/04/17 | 635 | graphics/pgf/contrib/tikzmarmots/tikzlibrarymarmots.code.tex
-2024/04/17 | 610 | graphics/pgf/contrib/tikzmarmots/tikzmarmots.sty
-2024/04/17 | 594 | macros/latex/contrib/fadingimage/README.md
-2024/04/17 | 5160 | systems/texlive/tlnet/archive/lscapeenhanced.source.r70967.tar.xz
-2024/04/17 | 4768 | systems/texlive/tlnet/archive/pixelarttikz.r70964.tar.xz
-2024/04/17 | 402881 | macros/eplain/doc/eplain.info
-2024/04/17 | 395852 | systems/texlive/tlnet/archive/dvipdfmx.amd64-netbsd.r70963.tar.xz
-2024/04/17 | 36936 | support/texfot.zip
-2024/04/17 | 368092 | systems/texlive/tlnet/archive/dvipdfmx.i386-netbsd.r70963.tar.xz
-2024/04/17 | 36739 | macros/eplain/tex/btxmac.tex
-2024/04/17 | 33928 | support/texfot/texfot.pdf
-2024/04/17 | 3048 | macros/latex/contrib/fadingimage/tex/fadingimage.sty
-2024/04/17 | 27480 | systems/texlive/tlnet/archive/bithesis.source.r70966.tar.xz
-2024/04/17 | 2610 | macros/latex/contrib/litesolution/doc/figure/universe.tex
-2024/04/17 | 259129 | macros/eplain/source/eplain-source-3.14.zip
-2024/04/17 | 257652 | systems/texlive/tlnet/archive/lscapeenhanced.doc.r70967.tar.xz
-2024/04/17 | 249487 | macros/latex/contrib/nicematrix/nicematrix-french.tex
-2024/04/17 | 2493 | macros/eplain/doc/util/trimsee
-2024/04/17 | 24487 | macros/eplain/tex/arrow.tex
-2024/04/17 | 2173 | macros/eplain/doc/demo/lscommnt.tex
-2024/04/17 | 209675 | graphics/pgf/contrib/tikzmarmots/tikzmarmots-doc.pdf
-2024/04/17 | 208505 | graphics/pgf/contrib/tikzmarmots.zip
-2024/04/17 | 20800 | systems/texlive/tlnet/archive/bithesis.r70966.tar.xz
-2024/04/17 | 188375 | macros/eplain/source/xeplain.tex
-2024/04/17 | 186 | macros/eplain/tex/eplain.aux
-2024/04/17 | 1859 | macros/eplain/doc/README
-2024/04/17 | 18523 | macros/eplain/doc/eplain.man1.pdf
-2024/04/17 | 1845 | macros/eplain/doc/eplain.1
-2024/04/17 | 18011 | macros/eplain/doc/COPYING
-2024/04/17 | 17721 | macros/eplain/doc/xhyper.jpg
-2024/04/17 | 16400 | support/texfot/texfot.pl
-2024/04/17 | 1488 | systems/texlive/tlnet/archive/lscapeenhanced.r70967.tar.xz
-2024/04/17 | 1460480 | install/macros/eplain.tds.zip
-2024/04/17 | 1459681 | macros/eplain.zip
-2024/04/17 | 1449 | macros/eplain/doc/util/idxuniq
-2024/04/17 | 139235 | macros/eplain/tex/eplain.tex
-2024/04/17 | 1286624 | systems/texlive/tlnet/archive/pixelarttikz.doc.r70964.tar.xz
-2024/04/17 | 1270 | macros/eplain/doc/INSTALL
-2024/04/17 | 121 | macros/eplain/tex/eplain.ini
diff --git a/biblio/ctan-bibdata/ctan.bib b/biblio/ctan-bibdata/ctan.bib
index 1de6beb87a..3d7e662597 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 24-04-2024, 02:00:03
+%% created at 25-04-2024, 02:00:04
%%
%% This file is provided under the terms of the LPPL v1.3 or
@@ -8858,8 +8858,8 @@
title = {The \texttt{bithesis} package},
subtitle = {Templates for the Beijing Institute of Technology},
author = {Feng Kaiyu},
- date = {2024-04-16},
- version = {3.7.4},
+ date = {2024-04-24},
+ version = {3.7.5},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/unicodetex/latex/bithesis},
url = {https://ctan.org/pkg/bithesis},
@@ -20838,8 +20838,8 @@
title = {The \texttt{easybook} package},
subtitle = {Easily typesetting Chinese theses or books},
author = {Qu Yi},
- date = {2024-04-23},
- version = {2024ax},
+ date = {2024-04-24},
+ version = {2024az},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/latex/contrib/easybook},
url = {https://ctan.org/pkg/easybook},
@@ -24267,6 +24267,17 @@
The package also permits to hide the solutions.},
}
+@manual{ctan-exercisesheets,
+ title = {The \texttt{exercisesheets} package},
+ subtitle = {Typeset exercise sheets for university courses and school classes},
+ author = {Frank Fuhlbrück},
+ date = {2024-04-24},
+ version = {0.17},
+ license = {lppl1.3c},
+ mirror = {https://mirror.ctan.org/macros/latex/contrib/exercisesheets},
+ url = {https://ctan.org/pkg/exercisesheets},
+}
+
@manual{ctan-exerquiz,
title = {The \texttt{exerquiz} package},
subtitle = {Environments for defining exercises and quizzes},
@@ -24812,8 +24823,8 @@
title = {The \texttt{fancyhdr} package},
subtitle = {Extensive control of page headers and footers in \LaTeX{}2e},
author = {Pieter van Oostrum},
- date = {2022-11-09},
- version = {4.1},
+ date = {2024-04-24},
+ version = {4.2},
license = {lppl1.3},
mirror = {https://mirror.ctan.org/macros/latex/contrib/fancyhdr},
url = {https://ctan.org/pkg/fancyhdr},
@@ -33369,7 +33380,7 @@
title = {The \texttt{ibarra} package},
subtitle = {LaTeX support for the Ibarra Real Nova family of fonts},
author = {Bob Tennent},
- date = {2024-04-20},
+ date = {2024-04-24},
version = {},
license = {ofl,lppl},
mirror = {https://mirror.ctan.org/fonts/ibarra},
@@ -36123,8 +36134,8 @@
title = {The \texttt{jsonparse} package},
subtitle = {Parse, store and access JSON data in \LaTeX{} documents},
author = {Jasper Habicht},
- date = {2024-04-21},
- version = {0.7.1},
+ date = {2024-04-24},
+ version = {0.8.0},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/latex/contrib/jsonparse},
url = {https://ctan.org/pkg/jsonparse},
@@ -36178,7 +36189,7 @@
title = {The \texttt{Junicode} package},
subtitle = {A TrueType and OpenType font family for mediaevalists},
author = {Peter S. Baker and Bob Tennent},
- date = {2024-04-20},
+ date = {2024-04-24},
version = {2.206},
license = {ofl,lppl},
mirror = {https://mirror.ctan.org/fonts/junicode},
@@ -39898,7 +39909,7 @@
title = {The \texttt{libertine} package},
subtitle = {Use of Linux Libertine and Biolinum fonts with \LaTeX{}},
author = {Bob Tennent},
- date = {2024-04-21},
+ date = {2024-04-24},
version = {5.3.0},
license = {gpl,ofl,lppl},
mirror = {https://mirror.ctan.org/fonts/libertine},
@@ -63979,8 +63990,8 @@
title = {The \texttt{siunitx} package},
subtitle = {A comprehensive (SI) units package},
author = {Joseph Wright},
- date = {2024-04-23},
- version = {3.3.15},
+ date = {2024-04-24},
+ version = {3.3.16},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/latex/contrib/siunitx},
url = {https://ctan.org/pkg/siunitx},
@@ -65138,8 +65149,8 @@
title = {The \texttt{spbmark} package},
subtitle = {Customize superscripts and subscripts},
author = {Qu Yi},
- date = {2024-02-16},
- version = {1.46e},
+ date = {2024-04-24},
+ version = {1.46f},
license = {cc-by-4},
mirror = {https://mirror.ctan.org/macros/latex/contrib/spbmark},
url = {https://ctan.org/pkg/spbmark},
diff --git a/fonts/ibarra/README b/fonts/ibarra/README
index 20f908c57b..7edee95b0a 100644
--- a/fonts/ibarra/README
+++ b/fonts/ibarra/README
@@ -1,4 +1,4 @@
-This is the README for the ibarra package, version 2024-04-20.
+This is the README for the ibarra package, version 2024-04-23.
This package provides LaTeX, pdfLaTeX, XeLaTeX and LuaLaTeX
support for the Ibarra Real Nova family of fonts, designed
@@ -37,8 +37,8 @@ Font encodings supported are OT1, T1, LY1 and TS1.
Command \ibarra selects the Ibarra Real Nova family and
\ibarraSemiBold selects the SemiBold series. To select
-oldstyle or lining figures locally, use \oldstylenums
-or \liningnums, respectively.
+oldstyle or lining figures locally, use \oldstylenums{...}
+or \liningnums{...}, respectively.
The original fonts are available at
https://github.com/googlefonts/ibarrareal. and are licensed
diff --git a/fonts/ibarra/doc/ibarra-samples.pdf b/fonts/ibarra/doc/ibarra-samples.pdf
index 813559dd2b..b0abd821dc 100644
--- a/fonts/ibarra/doc/ibarra-samples.pdf
+++ b/fonts/ibarra/doc/ibarra-samples.pdf
Binary files differ
diff --git a/fonts/ibarra/latex/ibarra.sty b/fonts/ibarra/latex/ibarra.sty
index 2e272a67d8..6fe4914967 100644
--- a/fonts/ibarra/latex/ibarra.sty
+++ b/fonts/ibarra/latex/ibarra.sty
@@ -1,6 +1,6 @@
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{ibarra}
- [2024/04/20 (Bob Tennent) Supports IbarraRealNova Real Nova fonts for all LaTeX engines.]
+ [2024/04/23 (Bob Tennent) Supports IbarraRealNova Real Nova fonts for all LaTeX engines.]
\RequirePackage{ifxetex,ifluatex,xkeyval,textcomp}
@@ -82,15 +82,15 @@
BoldFont = *-SemiBold ,
BoldItalicFont = *-SemiBoldItalic ]
{IbarraRealNova}
- \DeclareRobustCommand{\oldstylenums}{\addfontfeatures{Numbers={OldStyle}}}
- \DeclareRobustCommand{\liningnums}{\addfontfeatures{Numbers={}}}
+ \DeclareTextFontCommand{\oldstylenums}{\addfontfeatures{Numbers={OldStyle}}}
+ \DeclareTextFontCommand{\liningnums}{\addfontfeatures{Numbers={}}}
\else % type1
\def\ibarrafamily{IbarraRealNova-\ibarra@figurestyle}
\def\ibarra{\fontfamily{\ibarrafamily}\selectfont}
\renewcommand*\rmdefault{\ibarrafamily}
\def\ibarraSemiBold{\fontfamily{\ibarrafamily}\fontseries{sb}\selectfont}
- \DeclareRobustCommand{\oldstylenums}{\fontfamily{IbarraRealNova-OsF}\selectfont}
- \DeclareRobustCommand{\liningnums}{\fontfamily{IbarraRealNova-LF}\selectfont}
+ \DeclareTextFontCommand{\oldstylenums}{\fontfamily{IbarraRealNova-OsF}\selectfont}
+ \DeclareTextFontCommand{\liningnums}{\fontfamily{IbarraRealNova-LF}\selectfont}
\fi
\ifibarra@ttf
diff --git a/fonts/junicode/README b/fonts/junicode/README
index e48a722995..cabab11165 100644
--- a/fonts/junicode/README
+++ b/fonts/junicode/README
@@ -1,5 +1,5 @@
This is the README for version 2.206 of Peter S. Baker's
-Junicode family of fonts (2024-04-20). The Junicode font is
+Junicode family of fonts (2024-04-23). The Junicode font is
primarily for scholars and students of the Middle Ages, but
it serves users with a wide variety of interests. It tracks
the development of the Medieval Unicode Font Initiative
diff --git a/fonts/junicode/doc/junicode-samples.tex b/fonts/junicode/doc/junicode-samples.tex
index 173c0a5d36..6218a12bea 100644
--- a/fonts/junicode/doc/junicode-samples.tex
+++ b/fonts/junicode/doc/junicode-samples.tex
@@ -41,19 +41,19 @@
\section*{Oldstyle Numbers}
-{\oldstylenums 1234567890}
+\oldstylenums{1234567890}
\section*{Lining Numbers}
-{\liningnums 1234567890}
+\liningnums{1234567890}
\section*{Tabular Numbers}
-{\tabularnums 1234567890}
+\tabularnums{1234567890}
\section*{Proportional Numbers}
-{\proportionalnums 1234567890}
+\proportionalnums{1234567890}
\section*{Superior Numbers}
diff --git a/fonts/junicode/latex/junicode.sty b/fonts/junicode/latex/junicode.sty
index eb9776aaf6..56255b27b7 100644
--- a/fonts/junicode/latex/junicode.sty
+++ b/fonts/junicode/latex/junicode.sty
@@ -18,7 +18,7 @@
%
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{junicode}
- [2024/04/20 (Peter Baker and Bob Tennent) Supports Junicode static fonts.]
+ [2024/04/23 (Peter Baker and Bob Tennent) Supports Junicode static fonts.]
\RequirePackage{iftex,xkeyval}
@@ -221,10 +221,10 @@
\fa@naming@exception{figures}{{inferior}{tabular}}{Inf}
\def\infigures{\@nomath\infigures\fontfigurestyle{inferior}\selectfont}
- \DeclareRobustCommand{\oldstylenums}{\fontfamily{Junicode-\junicode@figurealign OsF}\selectfont}
- \DeclareRobustCommand{\liningnums}{\fontfamily{Junicode-\junicode@figurealign LF}\selectfont}
- \DeclareRobustCommand{\tabularnums}{\fontfamily{Junicode-T\junicode@figurestyle}\selectfont}
- \DeclareRobustCommand{\proportionalnums}{\fontfamily{Junicode-\junicode@figurestyle}\selectfont}
+ \DeclareTextFontCommand{\oldstylenums}{\fontfamily{Junicode-\junicode@figurealign OsF}\selectfont}
+ \DeclareTextFontCommand{\liningnums}{\fontfamily{Junicode-\junicode@figurealign LF}\selectfont}
+ \DeclareTextFontCommand{\tabularnums}{\fontfamily{Junicode-T\junicode@figurestyle}\selectfont}
+ \DeclareTextFontCommand{\proportionalnums}{\fontfamily{Junicode-\junicode@figurestyle}\selectfont}
\newcommand*{\jBold}{\fontseries{b}\selectfont}
@@ -487,10 +487,10 @@
\providecommand\sufigures{\addfontfeatures{VerticalPosition=Superior}}
\providecommand\infigures{\addfontfeatures{VerticalPosition=Inferior}}
-\DeclareRobustCommand{\tabularnums}{\addfontfeatures{Numbers=Tabular}}
-\DeclareRobustCommand{\proportionalnums}{\addfontfeatures{Numbers=Proportional}}
-\DeclareRobustCommand{\oldstylenums}{\addfontfeatures{Numbers=OldStyle}}
-\DeclareRobustCommand{\liningnums}{\addfontfeatures{Numbers=Lining}}
+\DeclareTextFontCommand{\tabularnums}{\addfontfeatures{Numbers=Tabular}}
+\DeclareTextFontCommand{\proportionalnums}{\addfontfeatures{Numbers=Proportional}}
+\DeclareTextFontCommand{\oldstylenums}{\addfontfeatures{Numbers=OldStyle}}
+\DeclareTextFontCommand{\liningnums}{\addfontfeatures{Numbers=Lining}}
% Convenience commands for non-verbose access to the cvNN features.
% See also the "jcv" mnemonics below.
diff --git a/fonts/libertine/README b/fonts/libertine/README
index 87d4a4fbc0..0725a807b8 100644
--- a/fonts/libertine/README
+++ b/fonts/libertine/README
@@ -1,4 +1,4 @@
-This is the README for libertine, version 5.3.0 (2024-04-20).
+This is the README for libertine, version 5.3.0 (2024-04-23).
This package provides support for use of the Linux Libertine and Linux
Biolinum families of fonts with LaTeX. Most features are usable with
diff --git a/fonts/libertine/doc/libertine-samples.pdf b/fonts/libertine/doc/libertine-samples.pdf
index 4a670934c3..6330ced85e 100644
--- a/fonts/libertine/doc/libertine-samples.pdf
+++ b/fonts/libertine/doc/libertine-samples.pdf
Binary files differ
diff --git a/fonts/libertine/doc/libertine-samples.tex b/fonts/libertine/doc/libertine-samples.tex
index ab22664b7b..ef9c387828 100644
--- a/fonts/libertine/doc/libertine-samples.tex
+++ b/fonts/libertine/doc/libertine-samples.tex
@@ -53,19 +53,19 @@
\subsection*{Oldstyle Numbers}
-{\oldstylenums 1234567890}
+\oldstylenums{1234567890}
\subsection*{Lining Numbers}
-{\liningnums 1234567890}
+\liningnums{1234567890}
\subsection*{Tabular Numbers}
-{\tabularnums 1234567890}
+\tabularnums{1234567890}
\subsection*{Proportional Numbers}
-{\proportionalnums 1234567890}
+\proportionalnums{1234567890}
\subsection*{Superior Numbers}
@@ -108,19 +108,19 @@ X\textsup{1234567890}
\subsection*{Oldstyle Numbers}
-{\oldstylenumsf 1234567890}
+\oldstylenumsf{1234567890}
\subsection*{Lining Numbers}
-{\liningnumsf 1234567890}
+\liningnumsf{1234567890}
\subsection*{Tabular Numbers}
-{\tabularnumsf 1234567890}
+\tabularnumsf{1234567890}
\subsection*{Proportional Numbers}
-{\proportionalnumsf 1234567890}
+\proportionalnumsf{1234567890}
\subsection*{Superior Numbers}
diff --git a/fonts/libertine/doc/libertine.pdf b/fonts/libertine/doc/libertine.pdf
index 37bb52f2b7..5c8e0b8791 100644
--- a/fonts/libertine/doc/libertine.pdf
+++ b/fonts/libertine/doc/libertine.pdf
Binary files differ
diff --git a/fonts/libertine/doc/libertine.tex b/fonts/libertine/doc/libertine.tex
index b64e65c838..7f9fbd0127 100644
--- a/fonts/libertine/doc/libertine.tex
+++ b/fonts/libertine/doc/libertine.tex
@@ -150,15 +150,15 @@ The option \verb\defaultfeatures=...\ allows the user to add default OpenType
features; for example, \verb\defaultfeatures={Variant=01}\ will force use of the Stylistic~Set~1
variant glyphs.
-Commands \verb|\oldstylenums| and \verb|\oldstylenumsf| are defined to
+Commands \verb|\oldstylenums{|\ldots\verb|}| and \verb|\oldstylenumsf{|\ldots\verb|}| are defined to
allow for local use of old-style figures in Libertine and Biolinum,
respectively, if lining figures is the default, and similarly
-\verb|\liningnums| and \verb|\liningnumsf|.
+\verb|\liningnums{|\ldots\verb|}| and \verb|\liningnumsf{|\ldots\verb|}|.
-Similarly, commands \verb|\tabularnums| and \verb|\tabularnumsf| are defined
+Similarly, commands \verb|\tabularnums{|\ldots\verb|}| and \verb|\tabularnumsf{|\ldots\verb|}| are defined
to allow local use of monospaced figures in Libertine or Biolinum,
respectively, if proportional figures is the default, and similarly
-\verb|\proportionalnums| and \verb|\proportionalnumsf|.
+\verb|\proportionalnums{|\ldots\verb|}| and \verb|\proportionalnumsf{|\ldots\verb|}|.
Superior numbers (for footnote markers) are available using \verb|\sufigures|
or \verb|\textsu{|\ldots\verb|}|.
diff --git a/fonts/libertine/latex/libertine.sty b/fonts/libertine/latex/libertine.sty
index 0e1b9bfebf..7ed9e94f7b 100644
--- a/fonts/libertine/latex/libertine.sty
+++ b/fonts/libertine/latex/libertine.sty
@@ -1,5 +1,5 @@
\ProvidesPackage{libertine}[%
- 2024/04/20 (Bob Tennent) Supports Libertine and Biolinum fonts for all LaTeX engines.]
+ 2024/04/23 (Bob Tennent) Supports Libertine and Biolinum fonts for all LaTeX engines.]
% with (partial) compatibilty with libertine-type1, biolinum-type1,
% libertine, libertine-legacy and libertineotf packages
@@ -472,31 +472,31 @@
\iflibertine@otf
\iflibertine@rm
- \DeclareRobustCommand{\oldstylenums}{\addfontfeatures{Numbers=OldStyle}}
- \DeclareRobustCommand{\liningnums}{\addfontfeatures{Numbers=Lining}}
+ \DeclareTextFontCommand{\oldstylenums}{\addfontfeatures{Numbers=OldStyle}}
+ \DeclareTextFontCommand{\liningnums}{\addfontfeatures{Numbers=Lining}}
\fi
\iflibertine@sf
- \DeclareRobustCommand{\oldstylenumsf}{\addfontfeatures{Numbers=OldStyle}}
- \DeclareRobustCommand{\liningnumsf}{\addfontfeatures{Numbers=Lining}}
+ \DeclareTextFontCommand{\oldstylenumsf}{\addfontfeatures{Numbers=OldStyle}}
+ \DeclareTextFontCommand{\liningnumsf}{\addfontfeatures{Numbers=Lining}}
\fi
\else % type1
\iflibertine@rm
\iflibertine@sf % Both Libertine and Biolinum
- \DeclareRobustCommand{\oldstylenums}{\libertineOsF}
- \DeclareRobustCommand{\liningnums}{\libertineLF}
- \DeclareRobustCommand{\oldstylenumsf}{\biolinumOsF}
- \DeclareRobustCommand{\liningnumsf}{\biolinumLF}
+ \DeclareTextFontCommand{\oldstylenums}{\libertineOsF}
+ \DeclareTextFontCommand{\liningnums}{\libertineLF}
+ \DeclareTextFontCommand{\oldstylenumsf}{\biolinumOsF}
+ \DeclareTextFontCommand{\liningnumsf}{\biolinumLF}
\else % Libertine only
- \DeclareRobustCommand{\oldstylenums}{\libertineOsF}
- \DeclareRobustCommand{\liningnums}{\libertineLF}
- \DeclareRobustCommand{\oldstylenumsf}{\sffamily\oldstylenums}
- \DeclareRobustCommand{\liningnumsf}{\sffamily}
+ \DeclareTextFontCommand{\oldstylenums}{\libertineOsF}
+ \DeclareTextFontCommand{\liningnums}{\libertineLF}
+ \DeclareTextFontCommand{\oldstylenumsf}{\sffamily\oldstylenums}
+ \DeclareTextFontCommand{\liningnumsf}{\sffamily}
\fi
\else % Biolinum only
% \oldstylenums defined by \textcomp?
- \DeclareRobustCommand{\liningnums}{}
- \DeclareRobustCommand{\oldstylenumsf}{\biolinumOsF}
- \DeclareRobustCommand{\liningnumsf}{\biolinumLF}
+ \DeclareTextFontCommand{\liningnums}{}
+ \DeclareTextFontCommand{\oldstylenumsf}{\biolinumOsF}
+ \DeclareTextFontCommand{\liningnumsf}{\biolinumLF}
\fi
\fi
@@ -504,21 +504,21 @@
\iflibertine@otf
\iflibertine@rm
- \DeclareRobustCommand{\tabularnums}{\addfontfeatures{Numbers=Tabular}}
- \DeclareRobustCommand{\proportionalnums}{\addfontfeatures{Numbers=Proportional}}
+ \DeclareTextFontCommand{\tabularnums}{\addfontfeatures{Numbers=Tabular}}
+ \DeclareTextFontCommand{\proportionalnums}{\addfontfeatures{Numbers=Proportional}}
\fi
\iflibertine@sf
- \DeclareRobustCommand{\tabularnumsf}{\addfontfeatures{Numbers=Tabular}}
- \DeclareRobustCommand{\proportionalnumsf}{\addfontfeatures{Numbers=Proportional}}
+ \DeclareTextFontCommand{\tabularnumsf}{\addfontfeatures{Numbers=Tabular}}
+ \DeclareTextFontCommand{\proportionalnumsf}{\addfontfeatures{Numbers=Proportional}}
\fi
\else % type1
\iflibertine@rm
- \DeclareRobustCommand{\tabularnums}{\fontfamily{LinuxLibertineT-T\libertine@figurestyle}\selectfont}
- \DeclareRobustCommand{\proportionalnums}{\fontfamily{LinuxLibertineT-\libertine@figurestyle}\selectfont}
+ \DeclareTextFontCommand{\tabularnums}{\fontfamily{LinuxLibertineT-T\libertine@figurestyle}\selectfont}
+ \DeclareTextFontCommand{\proportionalnums}{\fontfamily{LinuxLibertineT-\libertine@figurestyle}\selectfont}
\fi
\iflibertine@sf
- \DeclareRobustCommand{\tabularnumsf}{\fontfamily{LinuxBiolinumT-T\biolinum@figurestyle}\selectfont}
- \DeclareRobustCommand{\proportionalnumsf}{\fontfamily{LinuxBiolinumT-\biolinum@figurestyle}\selectfont}
+ \DeclareTextFontCommand{\tabularnumsf}{\fontfamily{LinuxBiolinumT-T\biolinum@figurestyle}\selectfont}
+ \DeclareTextFontCommand{\proportionalnumsf}{\fontfamily{LinuxBiolinumT-\biolinum@figurestyle}\selectfont}
\fi
\fi
diff --git a/fonts/libertine/latex/libertineRoman.sty b/fonts/libertine/latex/libertineRoman.sty
index 9b43a10b3b..9b8fdb9b7a 100644
--- a/fonts/libertine/latex/libertineRoman.sty
+++ b/fonts/libertine/latex/libertineRoman.sty
@@ -1,5 +1,5 @@
\ProvidesPackage{libertineRoman}[%
- 2024/04/20 (Bob Tennent) Supports Libertine Roman fonts for all LaTeX engines.]
+ 2024/04/23 (Bob Tennent) Supports Libertine Roman fonts for all LaTeX engines.]
\RequirePackage{ifxetex,ifluatex,xkeyval,textcomp}
@@ -225,23 +225,23 @@
% Define \oldstylenums[f] and \liningnums[f]
\iflibertine@otf
- \DeclareRobustCommand{\oldstylenums}{\addfontfeatures{Numbers=OldStyle}}
- \DeclareRobustCommand{\liningnums}{\addfontfeatures{Numbers=Lining}}
+ \DeclareTextFontCommand{\oldstylenums}{\addfontfeatures{Numbers=OldStyle}}
+ \DeclareTextFontCommand{\liningnums}{\addfontfeatures{Numbers=Lining}}
\else % type1
- \DeclareRobustCommand{\oldstylenums}{\libertineOsF}
- \DeclareRobustCommand{\liningnums}{\libertineLF}
- \DeclareRobustCommand{\oldstylenumsf}{\sffamily\oldstylenums}
- \DeclareRobustCommand{\liningnumsf}{\sffamily}
+ \DeclareTextFontCommand{\oldstylenums}{\libertineOsF}
+ \DeclareTextFontCommand{\liningnums}{\libertineLF}
+ \DeclareTextFontCommand{\oldstylenumsf}{\sffamily\oldstylenums}
+ \DeclareTextFontCommand{\liningnumsf}{\sffamily}
\fi
% Define \tabularnums[f] and \proportionalnums[f]
\iflibertine@otf
- \DeclareRobustCommand{\tabularnums}{\addfontfeatures{Numbers=Tabular}}
- \DeclareRobustCommand{\proportionalnums}{\addfontfeatures{Numbers=Proportional}}
+ \DeclareTextFontCommand{\tabularnums}{\addfontfeatures{Numbers=Tabular}}
+ \DeclareTextFontCommand{\proportionalnums}{\addfontfeatures{Numbers=Proportional}}
\else % type1
- \DeclareRobustCommand{\tabularnums}{\fontfamily{LinuxLibertineT-T\libertine@figurestyle}\selectfont}
- \DeclareRobustCommand{\proportionalnums}{\fontfamily{LinuxLibertineT-\libertine@figurestyle}\selectfont}
+ \DeclareTextFontCommand{\tabularnums}{\fontfamily{LinuxLibertineT-T\libertine@figurestyle}\selectfont}
+ \DeclareTextFontCommand{\proportionalnums}{\fontfamily{LinuxLibertineT-\libertine@figurestyle}\selectfont}
\fi
\iflibertine@otf
diff --git a/macros/latex/contrib/easybook/easybook.dtx b/macros/latex/contrib/easybook/easybook.dtx
index b6c3eceaaa..08b7136aac 100644
--- a/macros/latex/contrib/easybook/easybook.dtx
+++ b/macros/latex/contrib/easybook/easybook.dtx
@@ -15,7 +15,7 @@
%<*class>
\NeedsTeXFormat{LaTeX2e}[2021/11/15]
\RequirePackage{l3keys2e}
-\ProvidesExplClass{easybook}{2024/04/23}{2024ax}
+\ProvidesExplClass{easybook}{2024/04/24}{2024az}
{Easily typesetting Chinese theses or books}
\bool_new:N \l__eb_compile_draft_bool
@@ -297,7 +297,7 @@
%<*package>
\NeedsTeXFormat{LaTeX2e}[2021/11/15]
\RequirePackage{l3keys2e,etoolbox}
-\ProvidesExplPackage{easybase}{2024/04/23}{2024ax}
+\ProvidesExplPackage{easybase}{2024/04/24}{2024az}
{Easily typesetting Chinese theses or books}
\cs_generate_variant:Nn \dim_set:Nn { NV }
@@ -310,6 +310,7 @@
\cs_generate_variant:Nn \ctex_define:nn { nx }
\cs_generate_variant:Nn \eb_set_hyperref:n { x }
\cs_generate_variant:Nn \eb_at_begin_environment:nn { on }
+\cs_generate_variant:Nn \tl_if_novalue:nF { V }
\cs_set_protected:Npn \ctex_define:nn #1
{ \keys_define:nn { ctex/#1 } }
@@ -373,7 +374,7 @@
{\IfFileExists{#2.sty}{\RequirePackage{#2}[#3]}{}}
{\IfFileExists{#2.sty}{\RequirePackage[#1]{#2}[#3]}{}}
}
-\cs_new_protected:Npn \LoadPackage #1
+\cs_new_protected:Npn \ebloadpackage #1
{
\int_compare:nTF { \clist_count:n {#1} <= 1 }
{ \RequirePackage }
@@ -433,14 +434,20 @@
\seq_set_from_clist:Nn \l__eb_module_paths_seq
{
- style,subfont,spread,
- bibset,thmset,tocset,
- hdrset,refset,geoset,float
+ tools,font,spread,
+ bib,thmt,toc,
+ hdr,ref,geo,float
}
\seq_map_inline:Nn \l__eb_module_paths_seq
{
\ctex_define:n { #1 .meta:nn = { ctex/#1 } {##1} }
- \cs_new_protected:cpn { eb#1 } ##1 { \ctex_set:nn {#1} {##1} }
+ \cs_new_protected:cpn { eb#1set } ##1 { \ctex_set:nn {#1} {##1} }
+ }
+\RenewDocumentCommand{\ctexset}{om}
+ {
+ \IfValueTF{#1}
+ {\ctex_set:nn {#1} {#2}}
+ {\ctex_set:n {#2}}
}
\bool_until_do:nn
{ \int_compare_p:nNn { \seq_count:N \l__eb_module_paths_seq } < { 8 } }
@@ -481,7 +488,7 @@
The~'\string\chapter'\ command~will~not~be~used.
}
-\LoadPackage
+\ebloadpackage
{
[text]{spbmark},
[normalem]{ulem},
@@ -525,7 +532,7 @@
\eb@tag@brackets@right
}
}
-\ctex_define:nn { style }
+\ctex_define:nn { tools }
{
multoc .int_set:N = \l__eb_toc_columns_int,
multoc .default:n = 2,
@@ -554,20 +561,20 @@
marginparsep = 8pt,
marginparwidth = 2.54cm
}
-\ctex_define:nn { geoset }
+\cs_new:Npn \eb_unknown_kv_handle:
+ {
+ \str_use:N \l_keys_key_str
+ \tl_if_novalue:VF \l_keys_value_tl
+ { = {\exp_not:V \l_keys_value_tl} }
+ }
+\ctex_define:nn { geo }
{
headruleskip .tl_set:N = \headruleskip,
headruleskip .initial:n = 0pt,
footruleskip .tl_set:N = \footruleskip,
footruleskip .initial:n = 3.5pt,
- unknown .code:n =
- {
- \exp_args:Nx \geometry
- {
- \str_use:N \l_keys_key_str
- \tl_if_empty:NF \l_keys_value_tl { = \exp_not:n { {#1} } }
- }
- }
+ unknown .code:n = \exp_args:Nx \geometry { \eb_unknown_kv_handle: },
+ unknown .default:V = \c_novalue_tl
}
\cs_new_protected:Npn \blankpagestyle #1
@@ -628,7 +635,7 @@
{ none* } { \text_lowercase:n }
}
}
-\ctex_define:nn { hdrset }
+\ctex_define:nn { hdr }
{
chap-mark .cs_set:Np = \eb@mark@chapter@whole #1,
chap-mark .initial:n =
@@ -710,7 +717,7 @@
\providecommand{\kaishu}{\itshape}
}
-\ctex_define:nn { style }
+\ctex_define:nn { tools }
{
fntnumwith .choices:nn =
{ part,page,chapter }
@@ -866,7 +873,7 @@
\tl_new:N \l__eb_fnmarktext_format_tl
\tl_new:N \l__eb_fncustom_format_tl
\clist_new:N \l__eb_footnote_value_clist
-\ctex_define:nn { hdrset }
+\ctex_define:nn { hdr }
{
fnfirstindent .tl_set:N = \fnfirstindent,
fnfirstindent .initial:n = 1em,
@@ -907,7 +914,7 @@
fntext-num/unknown .code:n = \eb_fnmarktext_short_label_set:Nn \thefootnote {#1},
fnmarktext-num .meta:n = { fntext-num = #1,fnmark-num = #1 },
fnmarktext-num .initial:n = plain,
- unknown .code:n = \eb_msg_deprecated_option:n { hdrset }
+ unknown .code:n = \eb_msg_deprecated_option:n { hdr }
}
\eb_at_end_preamble:n
@@ -1033,7 +1040,7 @@
{ \reset@font }
{
\setspread{\eb@spread@footnote}
- \eb@subfont@footnote
+ \eb@font@footnote
}
}
\cs_set_eq:NN \eb@@makefntext \@makefntext
@@ -1150,7 +1157,7 @@
{ \tl_clear:N \l__eb_fnmarktext_format_tl }
}
\bool_if:NF \l__eb_fnmarktext_format_match_bool { \spbset{spcmd = { }} }
- \eb@subfont@footnote
+ \eb@font@footnote
}
\cs_new_protected:Npn \defupfntmark #1
{ \cs_set:Npn \@makefnmark { \hbox:n {#1} } }
@@ -1241,7 +1248,7 @@
\@addtoreset{#3}{#5}
\IfBooleanF{#1}
{
- \exp_args:Nc \cs_gset:Npn { the#3 }
+ \cs_gset:cpn { the#3 }
{ \use:c { the#5 }#4#2{#3} }
}
}
@@ -1255,20 +1262,21 @@
\cs_set:Npn \thebisection { \eb_section_counter_prefix:n { bi } }
\cs_set:Npn \thebisubsection { \thebisection.\@arabic\c@bisubsection }
\cs_set:Npn \thesection { \eb_section_counter_prefix:n { } }
-\tl_new:N \eb@before@addbitoc@hook
-\NewDocumentCommand{\BeforeAddBitoc}{sm}
+\tl_new:N \eb@before@bitocline@hook
+\NewDocumentCommand{\BeforeAddtoBitoc}{sm}
{
\IfBooleanTF{#1}
- {\tl_gset:Nn \eb@before@addbitoc@hook {#2}}
- {\tl_gput_right:Nn \eb@before@addbitoc@hook {#2}}
+ {\tl_gset:Nn \eb@before@bitocline@hook {#2}}
+ {\tl_gput_right:Nn \eb@before@bitocline@hook {#2}}
}
+\cs_set_eq:NN \BeforeAddBitoc \BeforeAddtoBitoc
\cs_new_protected:Npn \CTEX@addbitocline #1#2
{
\group_begin:
\def\CTEX@prechapter{\CTEX@prebichapter}
\def\CTEX@thechapter{\CTEX@bichapter@number}
\def\CTEX@postchapter{\CTEX@postbichapter}
- \eb@before@addbitoc@hook
+ \eb@before@bitocline@hook
\tl_if_eq:NnTF \g__eb_bilist_permute_value_tl { mix }
{ \addcontentsline{toc}{#1} }
{ \addcontentsline{tec}{#1} }
@@ -1332,7 +1340,7 @@
}
}
-\ctex_define:nn { style }
+\ctex_define:nn { tools }
{
hyphen-figure .tl_set:N = \l__eb_hyphen_figure_tl,
hyphen-table .tl_set:N = \l__eb_hyphen_table_tl,
@@ -1344,7 +1352,7 @@
hyphen-listing = #1,hyphen-equation = #1
},
hyphen-every .initial:n = .,
- unknown .code:n = \eb_msg_deprecated_option:n { style }
+ unknown .code:n = \eb_msg_deprecated_option:n { tools }
}
\eb_seq_map_inline:nn
{ figure,table,lstlisting,equation }
@@ -1613,7 +1621,7 @@
{
\IfBooleanT{#1}
{
- \ctex_set:nn { tocset } { between = { },bibetween = { } }
+ \ctex_set:nn { toc } { between = { },bibetween = { } }
\tl_set:Nn \l__eb_toc_tmpa_tl {*}
\tl_set:Nn \l__eb_toc_tmpb_tl
{
@@ -1646,7 +1654,7 @@
\eb_seq_map_inline:nn
{ tocafter,tocindent,tocrule }
{
- \ctex_define:nn { tocset }
+ \ctex_define:nn { toc }
{
#1-every .code:n =
{
@@ -1659,7 +1667,7 @@
}
}
}
-\ctex_define:nn { tocset }
+\ctex_define:nn { toc }
{
lolskip .skip_set:N = \eb@toc@lol@skip,
lolskip .initial:n = 10pt,
@@ -1675,7 +1683,7 @@
hang .initial:n = true,
pagenumwd .code:n = \contentsmargin{#1},
pagenumwd .initial:n = 1.55em,
- unknown .code:n = \eb_msg_deprecated_option:n { tocset }
+ unknown .code:n = \eb_msg_deprecated_option:n { toc }
}
\NewDocumentCommand{\tocrule}{st-O{0.7pc}d()mO{}}
{
@@ -1771,7 +1779,7 @@
\ctex_assign_heading_name:nn { biappendix } {#1}
\bool_if:NTF \l__eb_class_mode_book_bool
{
- \eb_preto_cmd:nn { eb@before@addbitoc@hook }
+ \eb_preto_cmd:nn { eb@before@bitocline@hook }
{
\def\CTEX@prechapter{\CTEX@prebiappendix}
\def\CTEX@thechapter{#2}
@@ -1797,40 +1805,40 @@
}
}
-\ctex_define:nn { subfont }
+\ctex_define:nn { font }
{
- caption-table .tl_set:N = \l__eb_subfont_caption_table_tl,
- caption-figure .tl_set:N = \l__eb_subfont_caption_figure_tl,
- caption-listing .tl_set:N = \l__eb_subfont_caption_listing_tl,
+ caption-table .tl_set:N = \l__eb_font_caption_table_tl,
+ caption-figure .tl_set:N = \l__eb_font_caption_figure_tl,
+ caption-listing .tl_set:N = \l__eb_font_caption_listing_tl,
caption-every .meta:n =
{
caption-table = #1,caption-figure = #1,
caption-listing = #1
},
caption-every .initial:n = \sffamily\small,
- footnote .tl_set:N = \eb@subfont@footnote,
+ footnote .tl_set:N = \eb@font@footnote,
marginpar .tl_set:N = \marginfont,
marginpar .initial:n = \footnotesize,
- unknown .code:n = \eb_msg_deprecated_option:n { subfont }
+ unknown .code:n = \eb_msg_deprecated_option:n { font }
}
-\cs_new_protected:Npn \addtosubfont #1#2
+\cs_new_protected:Npn \ebaddtofont #1#2
{
\str_case:nnF {#1}
{
{ table }
- { \tl_put_right:Nn \l__eb_subfont_caption_table_tl {#2} }
+ { \tl_put_right:Nn \l__eb_font_caption_table_tl {#2} }
{ figure }
- { \tl_put_right:Nn \l__eb_subfont_caption_figure_tl {#2} }
+ { \tl_put_right:Nn \l__eb_font_caption_figure_tl {#2} }
{ listing }
- { \tl_put_right:Nn \l__eb_subfont_caption_listing_tl {#2} }
+ { \tl_put_right:Nn \l__eb_font_caption_listing_tl {#2} }
{ every }
{
- \tl_put_right:Nn \l__eb_subfont_caption_table_tl {#2}
- \tl_put_right:Nn \l__eb_subfont_caption_figure_tl {#2}
- \tl_put_right:Nn \l__eb_subfont_caption_listing_tl {#2}
+ \tl_put_right:Nn \l__eb_font_caption_table_tl {#2}
+ \tl_put_right:Nn \l__eb_font_caption_figure_tl {#2}
+ \tl_put_right:Nn \l__eb_font_caption_listing_tl {#2}
}
}
- { \tl_put_right:cn { l__eb_subfont_#1_tl } {#2} }
+ { \tl_put_right:cn { l__eb_font_#1_tl } {#2} }
}
\ctex_define:nn { spread }
{
@@ -1892,7 +1900,7 @@
\DeclareCaptionFont{eb@#1@font}
{
\setspread{\fp_use:c { l__eb_spread_caption_#1_fp }}
- \tl_use:c { l__eb_subfont_caption_#1_tl }
+ \tl_use:c { l__eb_font_caption_#1_tl }
}
}
\captionsetup
@@ -1975,7 +1983,7 @@
\SetEnumitemValue{ref}{enumii}{\arabic{enumi}.\alph*}
\SetEnumitemValue{ref}{enumiii}{\arabic{enumi}.\alph{enumii}.\roman*}
\setlist{nosep,labelsep = 0.5em,listparindent = \parindent}
-\setlist[1]{leftmargin = *,align = left,mode = unboxed}
+\setlist[1]{leftmargin = *,align = left}
\setlist[itemize,1]{label = bullet}
\setlist[itemize,2]{label = endash}
\setlist[itemize,3]{label = asterisk}
@@ -2070,8 +2078,12 @@
\cs_set_eq:NN \eb@declaretheoremsyle@save \declaretheoremstyle
\RenewDocumentCommand{\declaretheoremstyle}{O{}mO{}}
{\eb@declaretheoremsyle@save[#1,#3]{#2}}
- \ctex_define:nn { thmset }
- { unknown .code:n = \eb_msg_deprecated_option:n { thmset } }
+ \ctex_define:nn { thmt }
+ {
+ loeskip .skip_set:N = \eb@thmt@loe@skip,
+ loeskip .initial:n = 10pt,
+ unknown .code:n = \eb_msg_deprecated_option:n { thmt }
+ }
\declaretheoremstyle{default}[
spaceabove = 0ex plus .1ex,
spacebelow = 0ex plus .1ex,
@@ -2086,7 +2098,17 @@
\cs_undefine:N \proof
\DeclareFloatList{theorem}{loe}
\eb_preto_cmd:nn { listoftheorems }
- { \def\contentsline #1 {\use:c { thmt@contentsline@#1 }{#1}} }
+ {
+ \group_begin:
+ \def\contentsline #1 {\use:c { thmt@contentsline@#1 }{#1}}
+ }
+ \eb_appto_cmd:nn { listoftheorems } { \group_end: }
+ \eb_preto_cmd:nn { @chapter }
+ {
+ \skip_if_eq:nnF { \eb@thmt@loe@skip } { \c_zero_skip }
+ { \addtocontents{loe}{\protect\addvspace{\skip_use:N \eb@thmt@loe@skip}} }
+ }
+ \def\thmtlo@chaptervspacehack{}
\def\thmtname{\thmt@thmname}
\def\thmtenvname{\thmt@envname}
\def\thmtnote{\thmt@shortoptarg}
@@ -2095,7 +2117,7 @@
\def\thmtifnote #1#2
{
\tl_if_empty:NTF \thmt@shortoptarg
- { \protect\thmtformatoptarg{#2} }
+ {#2}
{ \protect\thmtformatoptarg{#1} }
}
\NewDocumentCommand{\settheoremtocline}{smm}
@@ -2153,7 +2175,7 @@
{ \file_if_exist_input:n { eb-tcolorbox.cfg } }
\bool_set_true:N \l__eb_backend_bibtex_bool
-\ctex_define:nn { bibset }
+\ctex_define:nn { bib }
{
backend .choice:,
backend .value_required:n = true,
@@ -2165,7 +2187,7 @@
datafile .clist_set:N = \l__eb_bib_datafile_clist,
bititle .tl_set:N = \eb@bib@bitoc@title,
bititle .initial:n = Bibliography,
- unknown .code:n = \eb_msg_deprecated_option:n { bibset }
+ unknown .code:n = \eb_msg_deprecated_option:n { bib }
}
\cs_new_protected:Npn \eb_bibtex_natbib_set:
@@ -2294,9 +2316,9 @@
\cs_new_protected:Npn \eb_define_theme_color:n #1
{ \definecolorset{HTML}{ctex@}{}{frame,#1;emph,#1;verb,#1} }
\cs_new_protected:Npn \DeclareLinkColor #1
- { \ctex_define:nx { refset } { \eb_link_color_set:n {#1} } }
+ { \ctex_define:nx { ref } { \eb_link_color_set:n {#1} } }
\cs_new_protected:Npn \DeclareThemeColor #1
- { \ctex_define:nx { style } { \eb_theme_color_set:n {#1} } }
+ { \ctex_define:nx { tools } { \eb_theme_color_set:n {#1} } }
\cs_new_protected:Npn \eb_color_assign_cmd_set:nn #1#2
{
\cs_new:cpn { eb_#2_color_set:n } ##1
@@ -2316,7 +2338,7 @@
{ color } { theme }
}
{ \eb_color_assign_cmd_set:nn #1 }
-\ctex_define:nx { refset }
+\ctex_define:nx { ref }
{
linkcolor .choice:,
linkcolor .value_required:n = true,
@@ -2331,7 +2353,7 @@
linkcolor .initial:n = navyblue,
linkcolor-every .code:n = \eb_define_link_color:n { \exp_not:n {#1} }
}
-\ctex_define:nx { style }
+\ctex_define:nx { tools }
{
color .choice:,
color .value_required:n = true,
@@ -2361,7 +2383,7 @@
{ \eb_set_hyperref:n { colorlinks } }
\cs_new_protected:Npn \eb_link_toc_put:n #1
{ \eb_set_hyperref:n { linktoc = #1 } }
-\ctex_define:nn { refset }
+\ctex_define:nn { ref }
{
linktype .choice:,
linktype .value_required:n = true,
@@ -2374,14 +2396,8 @@
linktoc .value_required:n = true,
linktoc/unknown .code:n = \eb_link_toc_put:n {#1},
linktoc .initial:n = all,
- unknown .code:n =
- {
- \eb_set_hyperref:x
- {
- \str_use:N \l_keys_key_str
- \tl_if_empty:NF \l_keys_value_tl { = \exp_not:n { {#1} } }
- }
- }
+ unknown .code:n = \eb_set_hyperref:x { \eb_unknown_kv_handle: },
+ unknown .default:V = \c_novalue_tl
}
\cs_new_protected:Npn \eb_allow_url_break:
@@ -2463,7 +2479,7 @@
}
%</package>
%<*tcolorbox>
-\ProvidesExplFile{eb-tcolorbox.cfg}{2024/04/23}{2024ax}
+\ProvidesExplFile{eb-tcolorbox.cfg}{2024/04/24}{2024az}
{Customization of tcolorbox for easybook}
\cs_set_protected:Npn \addtotcbstyle #1#2
diff --git a/macros/latex/contrib/easybook/easybook.pdf b/macros/latex/contrib/easybook/easybook.pdf
index 34d5b0f5ee..eb2bc6422e 100644
--- a/macros/latex/contrib/easybook/easybook.pdf
+++ b/macros/latex/contrib/easybook/easybook.pdf
Binary files differ
diff --git a/macros/latex/contrib/easybook/easybook.tex b/macros/latex/contrib/easybook/easybook.tex
index 5cef727432..a00aeb12d0 100644
--- a/macros/latex/contrib/easybook/easybook.tex
+++ b/macros/latex/contrib/easybook/easybook.tex
@@ -23,8 +23,8 @@
name = easybook,
color-scheme = blue,
title = EASYBOOK使用手册,
- version = v2024ax,
- date = 2024/04/23,
+ version = v2024az,
+ date = 2024/04/24,
authors = 瞿毅,
info = 简便地排版中文学位论文或书籍,
email = toquyi@163.com,
@@ -53,9 +53,12 @@
\setlist[1]{labelindent = \parindent}
\setlist[itemize,1]{label = smallbullet,leftmargin = *}
\setcounter{tocdepth}{2}
-\SetTblrInner[talltblr]{hline{1,Z} = {0.8pt,DarkBlue}}
-\SetTblrTemplate{caption}{empty}
+\SetTblrInner[longtblr]{hline{1,Z} = {1pt,DarkBlue}}
+\SetTblrOuter[longtblr]{presep = \bigskipamount,postsep = \bigskipamount}
+\DefTblrTemplate{caption-tag}{default}{表\thetable}
+\DefTblrTemplate{caption-sep}{default}{\quad}
\DefTblrTemplate{remark-sep}{default}{\space}
+\SetTblrStyle{caption-tag}{font = \bfseries}
\SetTblrStyle{remark}{font = \small\normalfont}
\ExplSyntaxOn\makeatletter
@@ -124,14 +127,6 @@
% Use a separate module margin marker to prevent overlap
\newcommand{\smodule}[1]{\cnltx@module@text*{\normalsize #1}}
\newcommand{\noitemsep}{\setlength{\itemsep}{0ex}}
-\newcommand{\insertalltblr}[3][]
- {
- \begin{center}
- \begin{talltblr}[#1]{#2}
- #3
- \end{talltblr}
- \end{center}
- }
\renewcommand{\cnltx@package@abstract@width}{0.85\linewidth}
\renewcommand{\cnltx@write@lastname}{}
\renewcommand{\cmltx@list@setup}
@@ -158,13 +153,13 @@
rulecolor = \color{DarkBlue},
framerule = 0.5pt,
frame = single,
- framesep = 6pt
+ framesep = 8pt
}
\DefineVerbatimEnvironment{frameverb}{Verbatim}
{
listparameters =
{
- \setlength{\topsep}{\bigskipamount}
+ \setlength{\topsep}{1.2\bigskipamount}
\appto\FV@EndList{\nointerlineskip}
}
}
@@ -173,36 +168,24 @@
label = \rule{0pt}{12pt}\textnormal{\bfseries 例~\arabic{ctexexam}},
listparameters =
{
- \setlength{\topsep}{\bigskipamount}
+ \setlength{\topsep}{1.2\bigskipamount}
\appto\FV@EndList{\nointerlineskip}
\refstepcounter{ctexexam}\ctexexamlabelref
}
}
-\newcommand{\cancelitem}
- {
- \renewcommand*{\@cnltx@option@one}[2]
- {
- ##1{##2}
- \cnltx@checkdefault{\hfill\newline}
- }
- \renewcommand*{\@cnltx@option@two}[3]
- {
- ##1{##2}{##3}
- \cnltx@checkdefault{\hfill\newline}
- }
- }
\newcommand{\optpath}[1]{\item\code{\textcolor{SlateGray}{#1}}}
\makeatother\ExplSyntaxOff
\labelformat{section}{节#1}
\labelformat{subsection}{小节#1}
\labelformat{subsubsection}{小节#1}
\labelformat{ctexexam}{例#1}
+\labelformat{table}{表#1}
\begin{document}
\section{准备开始}
您在使用 \easybook{} 文档类编写文档前可能需要具备以下的条件:
\begin{itemize}
- \item 使用 \hologo{XeLaTeX}(推荐)或 \hologo{LuaLaTeX} 两种编译方式。
+ \item 使用 \hologo{XeLaTeX}(推荐)或 \hologo{LuaLaTeX} 两种编译方式之一。
\item 由于文档类用到了一些 \LaTeX 和依赖宏包较新的功能,需要版本至少在\textbf{2021/11/15}以后的 \LaTeX 内核支持。建议您安装最新的 \TeX 发行版。
\item 虽然手册对基本用法做了介绍,但这并不是入门教程,所涉及到宏包的用法与命令并未进行详细介绍,需要对它们有所了解。您应当具有一定的 \LaTeX 使用基础,可以在 \TeX 综合网站 \href{https://www.ctan.org/}{CTAN} 查看相关资源。
\end{itemize}
@@ -255,24 +238,25 @@
\ding{72} 需要注意正确\textbf{编译索引}要增加 \code{-shell-escape} 命令行选项。
\subsection{依赖宏包}
-以下为 \pkg*{easybase} 直接调用的关键宏包清单,通常情况下它们是常用且稳定的。\colorbox{PaleTurquoise}{蓝色}背景的宏包表示修改了或依赖它们的内部命令。\colorbox{GreenYellow}{绿色}背景的宏包表示并未调用它们,但做了一些预配置,可在导言区手动载入以实现相关的功能。
-\insertalltblr
+\ref{table:package list} 为 \pkg*{easybase} 直接调用的关键宏包清单,通常情况下它们是常用且稳定的。\colorbox{PaleTurquoise}{蓝色}背景的宏包表示修改了或依赖它们的内部命令。\colorbox{GreenYellow}{绿色}背景的宏包表示并未调用它们,但做了一些预配置,可在导言区手动载入以实现相关的功能。
+\begin{longtblr}
+ [caption = 依赖的宏包清单,label = table:package list]
{
- colspec = *{5}{c},
- cells = {cmd = \pkg*},
- cell{1}{3,4} = PaleTurquoise,
- cell{2}{5} = PaleTurquoise,
- cell{3}{2,4} = PaleTurquoise,
- cell{5}{1} = GreenYellow,
- cell{1}{2} = GreenYellow,
- cell{3}{1,4} = GreenYellow
- }{
- amsthm & bicaption & ctex & caption & chemformula \\
- enumitem & etoolbox & fancyhdr & geometry & hyperref \\
- imakeidx & listings & marginnote & mathtools & multicol \\
- pifont & pdfpages & siunitx & spbmark & thmtools \\
- tcolorbox & titletoc & tabularray & ulem &
+ colspec = *{5}{c},
+ cells = {cmd = \pkg*},
+ cell{1}{3,4} = PaleTurquoise,
+ cell{2}{5} = PaleTurquoise,
+ cell{3}{2,4} = PaleTurquoise,
+ cell{5}{1} = GreenYellow,
+ cell{1}{2} = GreenYellow,
+ cell{3}{1,4} = GreenYellow
}
+ amsthm & bicaption & ctex & caption & chemformula \\
+ enumitem & etoolbox & fancyhdr & geometry & hyperref \\
+ imakeidx & listings & marginnote & mathtools & multicol \\
+ pifont & pdfpages & siunitx & spbmark & thmtools \\
+ tcolorbox & titletoc & tabularray & ulem &
+\end{longtblr}
\section{文档类选项}
\label{sec:document class options}
@@ -295,7 +279,7 @@
\keychoice{floatpage}{true,\fbox{false}}
开启这个选项后浮动环境 \env{table} 和 \env{figure} 的比例参数会使用默认值。关闭它则尽可能避免出现浮动页,使图表环境与正文段落更加紧凑,减少多余的空白版面。
\keychoice{theorem}{\fbox{true},false}
- 是否提供定理功能支持。选项开启时定理样式模块生效,此时会载入 \pkg*{amsthm} 和 \pkg*{thmtools} 宏包。
+ 是否提供定理功能支持。选项开启时定理模块生效,此时会载入 \pkg*{amsthm} 和 \pkg*{thmtools} 宏包。
\end{options}
\subsection{配置字体}
@@ -314,23 +298,26 @@
\begin{options}
\keychoice{font}{noto,times,times*,ebgaramond,libertine,palatino,\fbox{auto}}\dtag
- 预置的英文字体相关配置方案如下表所示。这些字体已经包含在了 \hologo{TeXLive} 发行版中,所以通常不需要再专门安装。如果您想使用其它英文字体,可以使用 \pkg*{fontspec} 宏包的相关命令进行设置。
- \insertalltblr[
- remark{\ding{72}} = \code{times*} 方案为 \textsf{windows} 系统的预置字体。
- ]{
- colspec = @{}*{4}{c}@{},
- hline{2} = {0.5pt,DarkBlue},
- row{1} = {font = \sffamily},
- column{1} = {cmd = \code}
- }{
- & 正文字体 & 无衬线字体 & 等宽字体 \\
- noto & Noto Serif & Noto Sans & Noto Sans Mono \\
- times & XITS & TG Heros & TG Cursor \\
- times* & Times New Roman & Arial & Courier New \\
- ebgaramond & EB Garamond & Libertinus Sans & LM Mono \\
- palatino & TG Pagella & Libertinus Sans & LM Mono \\
- libertine & Libertinus Serif & Libertinus Sans & LM Mono
- }
+ 预置的英文字体相关配置方案如\ref{table:english font} 所示。这些字体已经包含在了 \hologo{TeXLive} 发行版中,所以通常不需要再专门安装。如果您想使用其它英文字体,可以使用 \pkg*{fontspec} 宏包的相关命令进行设置。
+ \begin{longtblr}
+ [
+ caption = 英文字体预设方案,
+ label = table:english font,
+ remark{\ding{72}} = \code{times*} 方案为 \textsf{windows} 系统的预置字体。
+ ]{
+ colspec = @{}*{4}{c}@{},
+ hline{2} = {0.5pt,DarkBlue},
+ row{1} = {font = \sffamily},
+ column{1} = {cmd = \code}
+ }
+ & 正文字体 & 无衬线字体 & 等宽字体 \\
+ noto & Noto Serif & Noto Sans & Noto Sans Mono \\
+ times & XITS & TG Heros & TG Cursor \\
+ times* & Times New Roman & Arial & Courier New \\
+ ebgaramond & EB Garamond & Libertinus Sans & LM Mono \\
+ palatino & TG Pagella & Libertinus Sans & LM Mono \\
+ libertine & Libertinus Serif & Libertinus Sans & LM Mono
+ \end{longtblr}
\end{options}
\begin{options}
@@ -352,49 +339,51 @@
\section{接口选项}
\label{sec:interface options}
\begin{commands}
- \command*{ctexset}[\marg{键值列表}]
- \easybook{} 扩展了 \CTeX 宏集 \hologo{LaTeX3} 风格键值的通用控制命令 \cs*{ctexset},接口选项同样可用它设置,原有的 \meta{键值列表} 仍然可用。本文档类目前有9个模块用于实现常规的排版功能,如下表所示。模块名也是统一接口 \cs*{ctexset} 的路径,不同模块单独接口的命令名\textbf{加上前缀} \code{eb}:
- \insertalltblr
+ \command*{ctexset}[\oarg{模块名}\marg{键值列表}]
+ \easybook{} 扩展了 \CTeX 宏集 \hologo{LaTeX3} 风格键值的通用控制命令 \cs*{ctexset},接口选项同样可用它设置,原有的 \meta{键值列表} 仍然可用。本文档类目前有9个模块用于实现常规的排版功能,如\ref{table:module List} 所示。
+ \begin{longtblr}
+ [caption = 模块功能和名称清单,label = table:module List]
{
- colspec = @{}*{5}{c}@{},
- hline{3} = {0.5pt,DarkBlue},
- row{1,3} = {font = \sffamily,belowsep = 0pt},
- row{2,4} = {cmd = \module*}
- }{
- \hyperref[subsec:style]{风格} & \hyperref[subsec:other font]{其它字体} & \hyperref[subsec:spacing]{行距} & \hyperref[subsec:hyperlinks]{超链接} & \hyperref[subsec:reference]{参考文献} \\
- style & subfont & spread & refset & bibset \\
- \hyperref[subsec:theorem of style]{定理样式} & \hyperref[subsec:page margins]{页面尺寸} & \hyperref[subsec:header and footer]{页眉页脚} & \hyperref[subsec:catalog style]{目录样式} & \\
- thmset & geoset & hdrset & tocset &
+ colspec = @{}*{5}{c}@{},
+ hline{3} = {0.5pt,DarkBlue},
+ row{1,3} = {font = \sffamily,belowsep = 0pt},
+ row{2,4} = {cmd = \module*}
}
-
- 例如使用下面\ref{subsec:style} 介绍的风格 \module*{style} 模块,路径名与所属下级选项之间可以 \code{/} 或 \code{=} 号分开,斜线 \code{/} 后不能有空格或者换行:
- \begin{ctexexam}
+ \hyperref[subsec:tools]{工具} & \hyperref[subsec:font]{字体} & \hyperref[subsec:spread]{行距} & \hyperref[subsec:hyperlinks]{超链接} & \hyperref[subsec:reference]{参考文献} \\
+ tools & font & spread & ref & bib \\
+ \hyperref[subsec:theorem]{定理} & \hyperref[subsec:page margins]{页面尺寸} & \hyperref[subsec:header and footer]{页眉页脚} & \hyperref[subsec:catalog]{目录} & \\
+ thmt & geo & hdr & toc &
+ \end{longtblr}
+
+ \ref{exam:kv setting} 使用\ref{subsec:tools} 介绍的工具模块 \module*{tools} 举例三种键值列表设置方式:1. 各 \meta{模块名} 是统一接口 \cs*{ctexset} 的键路径。2. 不同模块还具有单独的接口命令 \cs*{eb}\meta{模块名}\code{\textcolor{cs}{set}}。3. \meta{模块名} 也可以使用 \cs*{ctexset} 命令的可选参数设置。路径名与所属下级选项之间可以 \code{/} 或 \code{=} 号分开,斜线 \code{/} 后不能有空格或者换行。
+ \begin{ctexexam}[labelref = exam:kv setting]
\ctexset
{
- style/color = seaside,
- style =
+ tools/color = seaside,
+ tools =
{
fntnumwith = page,
uppercase = first
}
}
- \ebstyle{hyphen-figure = {-}}
+ \ctexset[tools]{spcmd = \color{red}}
+ \ebtoolsset{hyphen-figure = {-}}
\end{ctexexam}
- 文档类有三种选项:布尔型 \choicekey*{key}{true,false},选项的值为真 \code{true} 或假 \code{false},如果不指定默认为真。键值型 \key*{key}{value} 需要为选项指定值,后面 \code{=} 号不能省略。选择型 \choicekey*{key}{one,\fbox{two},three} 根据提供的可选值进行设定。
+ \easybook{} 文档类有三种选项:布尔型 \choicekey*{key}{true,false},选项的值为真 \code{true} 或假 \code{false},如果不指定默认为真。键值型 \key*{key}{value} 需要为选项指定值,后面 \code{=} 号不能省略。选择型 \choicekey*{key}{one,\fbox{two},three} 根据提供的可选值进行设定。
\end{commands}
-\subsection[风格]{风格\smodule{style}}
-\label{subsec:style}
+\subsection[工具]{工具\smodule{tools}}
+\label{subsec:tools}
\begin{options}
\keychoice{color}{\fbox{none},seaside,energy,cyberpunk}
- 预置了四种颜色主题,默认主题 \code{none} 为黑白页面,颜色主题不包括超链接。
+ \easybook{} 预置了四种颜色主题,默认主题 \code{none} 为黑白页面,颜色主题不包括超链接。
\begin{commands}
\command{DeclareThemeColor}[\splitmarg{风格名称,颜色1,颜色2,颜色3}]
声明新的颜色主题命令。它的参数以英文逗号分隔,第一部分为颜色风格名称,后面三部分为 \code{HTML} 颜色代码,构成主题颜色列表。其中 \meta{颜色1} 为标题标签,\meta{颜色2} 为列表编号、定理标签和公式编号括号,\meta{颜色3} 为代码抄录。类似地更改超链接颜色见\ref{subsec:hyperlinks}。
\begin{ctexexam}
\DeclareThemeColor{fancy,2acb25,60aacc,ebc01c}
- \ctexset{style/color = fancy}
+ \ctexset{tools/color = fancy}
\end{ctexexam}
\end{commands}
\keyval{color-every}{HTML颜色代码}
@@ -411,7 +400,7 @@
设置行间公式标签的括号及格式,以英文逗号分隔,分别代表左右括号。\meta{左括号} 的末尾可以是带有一个参数的命令,用于接受公式编号。将标签括号设置为方括号,并给编号使用无衬线字体:
\begin{ctexexam}
\newcommand{\bracketsf}[1]{[\textsf{#1}}
- \ebstyle{tagform = {\bracketsf,]}}
+ \ebtoolsset{tagform = {\bracketsf,]}}
\end{ctexexam}
\kvsplit-{figurepath}{\marg{路径名1}\marg{路径名2}$\cdots$\marg{路径名n}}
设置插入图片的文件夹路径名。可以有多个路径名,每个路径包含在花括号内分隔,只有一个路径时需要包含在两层括号内。
@@ -460,9 +449,9 @@
上下标命令 \cs{supersub} 对应的上下标水平对齐方式,有左 \code{l}、居中 \code{c} 和右 \code{r} 三种对齐方式。
\end{options}
-\subsection[超链接]{超链接\smodule{refset}}
+\subsection[超链接]{超链接\smodule{ref}}
\label{subsec:hyperlinks}
-模块 \module*{refset} 将超链接选项交给 \pkg*{hyperref} 宏包处理。除了一些超链接颜色的选项失效,其它由宏包全局和接口命令 \cs*{hypersetup} 支持的多数选项可用。
+模块 \module*{ref} 将超链接选项交给 \pkg*{hyperref} 宏包处理。除了一些超链接颜色的选项失效,其它由宏包全局和接口命令 \cs*{hypersetup} 支持的多数选项可用。
\begin{options}
\keychoice{linktype}{\fbox{edge},colors,none}
超链接类型。\code{edge} 使超链接形式为边框,\code{colors} 使超链接字体为彩色,\code{none} 关闭超链接边框与颜色,此时 \option{linkcolor} 选项无效。
@@ -479,7 +468,7 @@
\end{options}
\subsection[行距]{行距\smodule{spread}}
-\label{subsec:spacing}
+\label{subsec:spread}
行距因子用于设置各种行距倍数,\meta{数值} 是不带有长度单位的浮点数。各类行距既可以在导言区全局设置,也可以在正文中设置对后面生效。
\begin{options}
\keyval{line}{数值}
@@ -497,9 +486,9 @@
\keyval{caption-every}{数值}\Default{1.2}
同时设置图片、表格和代码题注的行距因子。
\keyval{footnote}{数值}\Default{1.2}
- 脚注内容整体的行距因子。可以使用 \module*{hdrset} 模块 \option{fnpara-format} 选项的代码单独覆盖每个脚注的行距,从而使脚注间和内容文本自身的行距不同。
+ 脚注内容整体的行距因子。可以使用 \module*{hdr} 模块 \option{fnpara-format} 选项的代码单独覆盖每个脚注的行距,从而使脚注间和内容文本自身的行距不同。
\begin{ctexexam}
- \ebspread{footnote = 1.3}
+ \ebspreadset{footnote = 1.3}
\ebhdrset{fnpara-format = \linespread{1.2}\selectfont}
\end{ctexexam}
\keyval{every}{数值}
@@ -510,8 +499,8 @@
行间公式与下面正文间的额外距离。
\end{options}
-\subsection[其它字体]{其它字体\smodule{subfont}}
-\label{subsec:other font}
+\subsection[其它字体]{其它字体\smodule{font}}
+\label{subsec:font}
\begin{options}
\keyval{caption-table}{字体命令}\Default{\cs*{sffamily}\cs*{small}}
设置表格题注的字体,包括字体族、字体系列、字体尺寸和字体形状命令。
@@ -528,15 +517,15 @@
\end{options}
\begin{commands}
- \command{addtosubfont}[\marg{字体类型}\marg{字体命令}]
+ \command{ebaddtofont}[\marg{字体类型}\marg{字体命令}]
用于在上述各种字体原有的格式上附加代码。其中 \meta{字体命令} 也可以包括行距命令且相对于 \module*{spread} 模块具有优先性,不同题注的 \meta{字体类型} 则为相应选项的后缀名。
\begin{ctexexam}
- \addtosubfont{every}{\linespread{1.5}\selectfont}
- \addtosubfont{footnote}{\sffamily}
+ \ebaddtofont{every}{\linespread{1.5}\selectfont}
+ \ebaddtofont{footnote}{\sffamily}
\end{ctexexam}
\end{commands}
-\subsection[参考文献]{参考文献\smodule{bibset}}
+\subsection[参考文献]{参考文献\smodule{bib}}
\label{subsec:reference}
\begin{options}
\keychoice{backend}{\fbox{bibtex},biblatex}
@@ -546,7 +535,7 @@
\keyval{citestyle}{标注风格}
标注参考文献的风格。后端为 \hologo{BibTeX} 时可使用 \option{super}(数字上标标注,默认)或 \option{numbers}(数字标注)等 \pkg*{natbib} 宏包带有的标注风格,后端为 \hologo{biber} 时可使用 \pkg*{biblatex} 宏包支持的标注风格。
\keyval{datafile}{数据库列表}
- 参考文献数据库的文件名列表,文件列表以花括号包裹并以英文逗号分隔。使用 \hologo{biber} 处理时文件名要带 \code{bib} 扩展名,若参考文献文件不在当前文件夹则文件名需要包含路径,即 \code{path/file.bib}。不设置参考文献数据库名时 \module*{bibset} 模块中的选项会失效,即不自动载入 \pkg*{natbib} 或 \pkg*{biblatex} 宏包,此时需要手动载入相关宏包配置参考文献。
+ 参考文献数据库的文件名列表,文件列表以花括号包裹并以英文逗号分隔。使用 \hologo{biber} 处理时文件名要带 \code{bib} 扩展名,若参考文献文件不在当前文件夹则文件名需要包含路径,即 \code{path/file.bib}。不设置参考文献数据库名时 \module*{bib} 模块中的选项会失效,即不自动载入 \pkg*{natbib} 或 \pkg*{biblatex} 宏包,此时需要手动载入相关宏包配置参考文献。
\end{options}
\begin{commands}
@@ -579,9 +568,9 @@
\end{ctexexam}
\end{options}
-\subsection[定理样式]{定理样式\smodule{thmset}}
-\label{subsec:theorem of style}
-模块 \module*{thmset} 由 \pkg*{thmtools} 宏包提供支持,主要提供了定理环境和样式声明两个命令。定理环境声明命令 \cs{declaretheorem} 使用的定理样式由样式声明命令 \cs{declaretheoremstyle} 提供,文档类预置了一个定理样式 \code{default},但未定义任何定理环境。
+\subsection[定理]{定理\smodule{thmt}}
+\label{subsec:theorem}
+定理模块 \module*{thmt} 由 \pkg*{thmtools} 宏包提供支持,主要提供了定理环境和样式声明两个命令。定理环境声明命令 \cs{declaretheorem} 使用的定理样式由样式声明命令 \cs{declaretheoremstyle} 提供,文档类预置了一个定理样式 \code{default},但未定义任何定理环境。
\begin{commands}
\command{declaretheorem}[\oarg{键值列表1}\marg{环境名}\oarg{键值列表2}]
定理环境声明命令。可选参数的 \meta{键值列表1} 与 \meta{键值列表2} 等效,其中常用的选项如下:
@@ -650,15 +639,21 @@
\begin{commands}\noitemsep
\command{listoftheorems}[\sarg\oarg{键值列表}]\default{}
\item\key{listoftheorems}{定理目录标题名}
- \command{settheoremtocline}[\sarg\marg{环境名}\marg{标题定义}]\newtagv{2024ax}%
- 对 \pkg*{thmtools} 宏包的定理环境目录命令 \cs{listoftheorems} 进行了兼容调整,\ref{subsec:directory command} 和\ref{subsec:catalog style} 中的选项机制均可用,但标题定义选项 \option{tocline} 较为特殊,需用 \cs{settheoremtocline} 命令单独设置。在 \meta{标题定义} 中有三个命令 \cs{thmtname}、\cs{thmtenvname} 和 \cs{thmtnote} 分别代表定理名、定理环境名和题注用于排版目录条目。
+ \command{settheoremtocline}[\sarg\marg{环境名}\marg{标题定义}]\newtagv{2024az}%
+ 对 \pkg*{thmtools} 宏包的定理环境目录命令 \cs{listoftheorems} 进行了兼容调整,\ref{subsec:directory command} 和\ref{subsec:catalog} 中的选项机制均可用,但标题定义选项 \option{tocline} 较为特殊,需用 \cs{settheoremtocline} 命令单独设置。在 \meta{标题定义} 中有三个命令 \cs{thmtname}、\cs{thmtenvname} 和 \cs{thmtnote} 分别代表定理名、定理环境名和题注用于排版目录条目。
+\end{commands}
+
+\begin{commands}
+ \optpath{thmt/}\key{loeskip}{弹性长度}\Default{10pt}
+ 定理目录中每章第一个条目上方增加的垂直距离。与 \CTeX 的表格和图片目录中每章间的条目距离选项 \option*{lotskip} 和 \option*{lofskip} 类似,在 \cls*{article} 模式中此选项失效。
\command{thmtifnote}[\marg{存在题注代码}\marg{不存在题注代码}]
- 默认情况下 \meta{标题定义} 中需包含 \cs{thmtifnote} 命令用于判断是否存在题注从而输出不同的内容,若使用 \cs*{settheoremtocline}\code{*} 命令则没有这个限制。
+ 如果标题没题注即定理环境不用可选参数,则标题不加入定理目录,这是默认且合理的行为。若需要将无题注的标题加入目录可将 \meta{环境名} 加入目录风格的 \option{show} 选项或使用 \cs*{settheoremtocline}\code{*} 命令。是否存在题注需要在 \meta{标题定义} 中使用 \cs{thmtifnote} 命令判定,从而输出不同的内容。
\command{thmtifname}[\marg{存在编号代码}\marg{不存在编号代码}]
在 \meta{标题定义} 中测试当前定理是否有编号从而输出不同的内容,定理风格选项 \keyis{numbered}{no} 设置当前定理环境没有编号。
\begin{ctexexam}
\contentsuse{caixiang}{loe}
\RegisterTocName{caixiang}
+ \setlisttheoremstyle{ignoreall,show = caixiang}
\settheoremtocline{caixiang}
{%
\listnumberline{caixiang}
@@ -667,9 +662,9 @@
\end{ctexexam}
\end{commands}
-\subsection[页面尺寸]{页面尺寸\smodule{geoset}}
+\subsection[页面尺寸]{页面尺寸\smodule{geo}}
\label{subsec:page margins}
-模块 \module*{geoset} 会将选项(除了前两个为附加)交给页面尺寸宏包 \pkg*{geometry} 处理,并且支持它的键值列表,预置的页面尺寸与 \textsf{Word} 的默认值接近。下面列举几种代表性选项,其它选项可查阅宏包帮助文档。当在此设置纸张规格时,会覆盖文类选项 \option{paper} 的设置。
+模块 \module*{geo} 会将选项(除了前两个为附加)交给页面尺寸宏包 \pkg*{geometry} 处理,并且支持它的键值列表,预置的页面尺寸与 \textsf{Word} 的默认值接近。下面列举几种代表性选项,其它选项可查阅宏包帮助文档。当在此设置纸张规格时,会覆盖文类选项 \option{paper} 的设置。
\begin{options}\noitemsep
\keyval{headruleskip}{页眉线间距}\Default*{0pt}
\keyval{footruleskip}{页脚线间距}\Default*{3.5pt}
@@ -688,9 +683,9 @@
\end{ctexexam}
\end{options}
-\subsection[页眉页脚]{页眉页脚\smodule{hdrset}}
+\subsection[页眉页脚]{页眉页脚\smodule{hdr}}
\label{subsec:header and footer}
-模块 \module*{hdrset} 设置的命令由 \pkg*{fancyhdr} 宏包提供支持。标题标记由标签和标题组成,选项中参数 \code{\#1} 代表当前章、节或小节的标题。在 \cls*{book} 模式时使用标题标记选项 \option{chap-mark} 和 \option{sec-mark},在 \cls*{article} 模式时使用 \option{sec-mark} 和 \option{subsec-mark} 选项,这与标准文档类的行为一致。重新设置标题标记选项时标记大小写选项 \option{uppercase} 会失效。
+模块 \module*{hdr} 设置的命令由 \pkg*{fancyhdr} 宏包提供支持。标题标记由标签和标题组成,选项中参数 \code{\#1} 代表当前章、节或小节的标题。在 \cls*{book} 模式时使用标题标记选项 \option{chap-mark} 和 \option{sec-mark},在 \cls*{article} 模式时使用 \option{sec-mark} 和 \option{subsec-mark} 选项,这与标准文档类的行为一致。重新设置标题标记选项时标记大小写选项 \option{uppercase} 会失效。
\begin{options}
\keyval{chap-mark}{标题标记}
\code{chapter} 级别标题标记的内容,包含了标签选项 \option{chap-label} 和章标题 \code{\#1}。
@@ -757,8 +752,8 @@
\end{ctexexam}
\end{commands}
-\subsection[脚注格式]{脚注格式\smodule{hdrset}}
-模块 \module*{hdrset} 还可以灵活调整脚注编号和内容的格式。格式主要包括脚注标记的编号类型、字体、附加符号和对齐方式等,以及脚注内容的首行缩进、行距和字体等。基本思想是提供常规和自定义标记(\code{fncustom})两种脚注,常规脚注的标记分为正文(\code{fnmark})和内容(\code{fntext})标记两种,且两者编号类型分离,自定义脚注的标记与其共享格式。目前脚注模块基本兼容 \pkg*{footmisc} 宏包。
+\subsection[脚注]{脚注\smodule{hdr}}
+模块 \module*{hdr} 还可以灵活调整脚注编号和内容的格式。格式主要包括脚注标记的编号类型、字体、附加符号和对齐方式等,以及脚注内容的首行缩进、行距和字体等。基本思想是提供常规和自定义标记(\code{fncustom})两种脚注,常规脚注的标记分为正文(\code{fnmark})和内容(\code{fntext})标记两种,且两者编号类型分离,自定义脚注的标记与其共享格式。目前脚注模块基本兼容 \pkg*{footmisc} 宏包。
\begin{options}
\keychoice{footnotetype}{plain,\fbox{hang},flush,bottom}
脚注的类型。悬挂缩进 \code{hang} 是默认值,\code{plain} 是原始的类型,\code{flush} 使脚注内容标记位于脚注首行边缘外侧并右对齐。当存在浮动环境排版时,脚注可能位于页面中间,\code{bottom} 使脚注始终位于页面底端。其中 \code{bottom} 是复合选项,可以与前三种类型重复或复合使用:
@@ -850,9 +845,9 @@
\end{ctexexam}
\end{commands}
\keychoice{fnboth-format}{\textcolor{SlateGray}{format code},match}
- 同时设定默认脚注标记 \option{fnmarktext-format} 和自定义脚注标记 \option{fncustom-format} 的格式。两种脚注标记匹配上标格式 \option{spcmd} 的值是独立的,使用 \code{match} 则可以同时匹配。会覆盖 \module*{subfont} 模块脚注字体选项 \option{footnote} 相同类型的命令,最后一个格式命令可以带有一个参数接受脚注标记。
+ 同时设定默认脚注标记 \option{fnmarktext-format} 和自定义脚注标记 \option{fncustom-format} 的格式。两种脚注标记匹配上标格式 \option{spcmd} 的值是独立的,使用 \code{match} 则可以同时匹配。会覆盖 \module*{font} 模块脚注字体选项 \option{footnote} 相同类型的命令,最后一个格式命令可以带有一个参数接受脚注标记。
\keyval{fnpara-format}{格式代码}
- 脚注内容文本的格式。会覆盖 \module*{subfont} 模块脚注字体选项 \option{footnote} 相同类型的命令,最后一个格式命令可以带有一个参数接受脚注内容文本。
+ 脚注内容文本的格式。会覆盖 \module*{font} 模块脚注字体选项 \option{footnote} 相同类型的命令,最后一个格式命令可以带有一个参数接受脚注内容文本。
\kvsplit{fntext-code}{前代码,后代码}
可以用 \meta{前代码} 与 \meta{后代码} 额外增加脚注内容标记前后的代码。也可以只有前部分,\meta{前代码} 中最后一个格式命令可以带有一个参数接受脚注内容标记。由于脚注标记处于水平模式,可以配合盒子命令设置脚注内容标记的对齐方式,或在标记与脚注首行间插入一点距离。
\begin{ctexexam}
@@ -864,9 +859,9 @@
\end{ctexexam}
\end{options}
-\subsection[目录样式]{目录样式\smodule{tocset}}
-\label{subsec:catalog style}
-模块 \module*{tocset} 将使用 \pkg*{titletoc} 宏包处理目录样式。默认包括 \module*{part}、\module*{chapter}、\module*{section}、\module*{subsection}、\module*{figure}、\module*{table} 和 \module*{lstlisting} 条目名的键路径,而使用 \module*{float} 路径可以统一设置图片、表格和代码目录的样式。选项前带有 \ding{73} 符号表示支持所有相应\textbf{条目名}的路径,其它选项则处于 \module*{tocset} 键路径下。目前支持多数学术论文目录样式,更复杂的样式可以查看 \pkg*{titletoc} 的相关用法。
+\subsection[目录]{目录\smodule{toc}}
+\label{subsec:catalog}
+模块 \module*{toc} 将使用 \pkg*{titletoc} 宏包处理目录样式。默认包括 \module*{part}、\module*{chapter}、\module*{section}、\module*{subsection}、\module*{figure}、\module*{table} 和 \module*{lstlisting} 条目名的键路径,而使用 \module*{float} 路径可以统一设置图片、表格和代码目录的样式。选项前带有 \ding{73} 符号表示支持所有相应\textbf{条目名}的路径,其它选项则处于 \module*{toc} 键路径下。目前支持多数学术论文目录样式,更复杂的样式可以查看 \pkg*{titletoc} 的相关用法。
\begin{options}
\keyval{tocformat}{条目格式}\dtag
目录中各类型条目的格式。可以设置条目字体和加入垂直间距等,垂直间距最好使用防止垂直间距重合的 \cs*{addvspace} 命令。如果是段落型目录,格式代码仅在段落中当前级别条目前执行一次。
@@ -942,7 +937,7 @@
\newcommand{\listoffiguretables}{\listoffigures} % 同时输出图表目录的命令
\end{ctexexam}
\command{SetTocStyle}[\marg{条目名}\marg{风格名}\marg{键值列表}]
- 定义条目类型名称为 \meta{风格名} 的目录风格。使用 \cs*{ctexset} 命令设置目录样式时,除了条目标题定义选项 \option{tocline},其它选项只有在目录输出命令前设置才有效,定义完目录风格后用 \cs{UseTocStyle} 命令可以在正文中任意位置生效。如果是没有 \ding{73} 符号的选项,\meta{条目名} 设置为 \module*{tocset}。
+ 定义条目类型名称为 \meta{风格名} 的目录风格。使用 \cs*{ctexset} 命令设置目录样式时,除了条目标题定义选项 \option{tocline},其它选项只有在目录输出命令前设置才有效,定义完目录风格后用 \cs{UseTocStyle} 命令可以在正文中任意位置生效。如果是没有 \ding{73} 符号的选项,\meta{条目名} 设置为 \module*{toc}。
\command{UseTocStyle}[\marg{条目名}\marg{风格名}\marg{扩展名}]
使用对应条目类型名称为 \meta{风格名} 的目录风格,随后标题在目录中的格式会改变。本命令导言区和正文区均可使用,第三个必选参数还需要指定条目标题加入目录文件的 \meta{扩展名}。
\begin{ctexexam}
@@ -968,7 +963,7 @@
\keyval{lolskip}{弹性长度}\Default{10pt}
代码目录中每章第一个条目上方增加的垂直距离。与 \CTeX 的表格和图片目录中每章间的条目距离选项 \option*{lotskip} 和 \option*{lofskip} 类似,在 \cls*{article} 模式中此选项失效。
\keyval{between}{代码钩子}\dtag[\textcolor{red}{\ding{73}}]
- 目录标题与条目内容间的钩子(作用于标题下方间距之后),如果是 \cls*{book} 模式则默认插入 \code{-10pt} 垂直距离抵消首行目录的额外垂直间距,这是由于图表和 由 \pkg*{newfloat} 宏包所创建环境的目录默认每使用一次章标题在题注目录中插入 \code{10pt} 距离。除了条目名的键路径外,此选项也可用于 \module*{tocset} 路径中,表示章节标题目录标题代码钩子,如果是 \cls*{book} 模式则默认插入 \code{-1pc} 垂直距离。
+ 目录标题与条目内容间的钩子(作用于标题下方间距之后),如果是 \cls*{book} 模式则默认插入 \code{-10pt} 垂直距离抵消首行目录的额外垂直间距,这是由于图表和 由 \pkg*{newfloat} 宏包所创建环境的目录默认每使用一次章标题在题注目录中插入 \code{10pt} 距离。除了条目名的键路径外,此选项也可用于 \module*{toc} 路径中,表示章节标题目录标题代码钩子,如果是 \cls*{book} 模式则默认插入 \code{-1pc} 垂直距离。
\keyval{bibetween}{代码钩子}
与选项 \option{between} 类似,是英文章节标题目录(如果启用)标题代码钩子。
\keychoice{dotalign}{\fbox{true},false}
@@ -1077,26 +1072,26 @@
\command{bisubsection}[\sarg\oarg{目录中文标题}\marg{中文标题}\marg{目录英文标题}]
\code{subsection} 小节级别的双语目录标题命令,具有独立的 \code{bisubsection} 计数器。
- 它们的星号变体命令使文中标题不编号,但是仍然加入双语目录,若英文标题参数空置那么仅加入中文目录而不加入英文目录,这一特点与 \cs*{chapter}\sarg{} 等命令的行为不太一样,在一些情况下会用到。可选参数是目录中的中文条目,默认与中文标题一致,正文标题过长时可用它设置在目录中显示的标题。默认情况下双语目录条目的格式是一致的,共享使用 \module*{tocset} 模块的设置。提供了两个选项 \option{biname} 和 \option{binumber} 修改英文目录章标题条目的名字及编号:
- \begin{options}\cancelitem
+ 它们的星号变体命令使文中标题不编号,但是仍然加入双语目录,若英文标题参数空置那么仅加入中文目录而不加入英文目录,这一特点与 \cs*{chapter}\sarg{} 等命令的行为不太一样,在一些情况下会用到。可选参数是目录中的中文条目,默认与中文标题一致,正文标题过长时可用它设置在目录中显示的标题。默认情况下双语目录条目的格式是一致的,共享使用 \module*{toc} 模块的设置。提供了两个选项 \option{biname} 和 \option{binumber} 修改英文目录章标题条目的名字及编号:
+ \begin{options}
\optpath{chapter/}\kvsplit+{biname}{英文目录前名字,英文目录后名字}\Default{Chapter\cs*{space}}
更改英文目录 \code{chapter} 级别的标题条目编号前后名字,类似于 \CTeX 的 \option*{name} 选项。
- \optpath{chapter/}\keyval{binumber}{英文目录编号输出命令}\Default{\cs*{arabic}\Marg{chapter}}
+ \optpath{chapter/}\key{binumber}{英文目录编号输出命令}\Default{\cs*{arabic}\Marg{chapter}}
更改英文目录 \code{chapter} 级别的标题条目编号输出格式,类似于 \CTeX 的 \option*{number} 选项。下面两种设置英文目录中章标题编号的方式等效:
\end{options}
\begin{ctexexam}
\ctexset{chapter/binumber = \arabic{chapter}}
- \BeforeAddBitoc{\ctexset{chapter/nmuber = \arabic{chapter}}}
+ \BeforeAddtoBitoc{\ctexset{chapter/nmuber = \arabic{chapter}}}
\end{ctexexam}
\end{commands}
\begin{commands}
\command{appendix}[\splitoarg{前名字,后名字}\darg{编号输出命令}]
附录起始命令,其后的章节标题变为附录形式。\meta{前名字} 为英文目录中附录标题的前名字,同理 \meta{后名字} 为英文目录中附录标题的后名字。前后名字之间用一个半角逗号分开,也可以只有一部分,表示英文目录中附录标题前名字。\meta{编号输出命令} 为附录标题计数器在英文目录中的编号命令。注意这两个参数仅对 \code{bichapter} 级别的标题生效。
- \command{BeforeAddBitoc}[\sarg\marg{英文标题加入目录前的代码}]
+ \command{BeforeAddtoBitoc}[\sarg\marg{英文标题加入目录前的代码}]
作用于局部范围的英文目录标题条目钩子,代码在标题加入目录前执行,可以插入条目标题定义命令临时改变英文目录中条目的格式,带有星号参数的命令会重置之前的代码。这个命令设置英文目录条目的标题格式具有最高优先级,放置在导言区或 \cs{bichapter} 等双语标题命令前生效。举一个在英文目录节标题条目编号前添加 \code{Section} 字符串的例子:
\begin{ctexexam}
- \BeforeAddBitoc{\ctexset{section/name = Section\space}}
+ \BeforeAddtoBitoc{\ctexset{section/name = Section\space}}
\bisection{中文标题}{English title}
\end{ctexexam}
\end{commands}
@@ -1117,7 +1112,7 @@
\end{ctexexam}
\end{commands}
-\subsection[上标和下标]{上标和下标\smodule{style}}
+\subsection[上标和下标]{上标和下标\smodule{tools}}
上标和下标的功能来自 \pkg*{spbmark} 宏包,下面有三个命令可以用于输出上标和下标。可以使用键值列表的形式对上下标格式进行局部或全局设置,下面命令中两个可选参数的键值列表是等效的。全局设置的详情见\ref{subsubsec:super-sub-script},更多命令和详细用法见 \pkg*{spbmark} 宏包说明文档。
\begin{commands}
\command{super}[\sarg\oarg{键值列表1}\marg{内容}\oarg{键值列表2}]
@@ -1514,7 +1509,7 @@
\item 新增段落型目录条目附加代码的选项 \option{tocbegin}、\option{tocsep} 和 \option{tocend}。
\end{version}
\shortversion{v = 2024aw,date = 2022/04/22,changes = 新增新建章节标题命令 \cs{NewTitleCommand} 和 \cs{NewTitleEntryCommand}。}
- \shortversion{v = 2024ax,date = 2022/04/23,changes = 增加对 \pkg*{thmtools} 宏包定理环境目录 \cs{listoftheorems} 的支持。}
+ \shortversion{v = 2024az,date = 2022/04/24,changes = 增加对 \pkg*{thmtools} 宏包定理环境目录 \cs{listoftheorems} 的支持。}
\end{changelog}
\nocite{*}
diff --git a/macros/latex/contrib/exercisesheets/README b/macros/latex/contrib/exercisesheets/README
new file mode 100644
index 0000000000..e9b2e49242
--- /dev/null
+++ b/macros/latex/contrib/exercisesheets/README
@@ -0,0 +1,17 @@
+The exercisesheets package
+
+The exercisesheets package provides a way to typeset exercise sheets as used in
+university courses. It evolved from a set of macros an environments that were
+finally combined into this package.
+
+Copyright (c) 2008-2024 Sebastian Kuhnert, Frank Fuhlbrück
+Licence: LPPL 1.3c or later
+Current Maintainer: Frank Fuhlbrück
+
+Files belonging to this package:
+exercisesheets.sty The package itself
+exercisesheets-doc.tex Documentation source
+exsh_lexercise.lua Helper file for internal lua code
+README This file
+examples Folder with example tex files
+examples/exercises Example exercise used by example tex files
diff --git a/macros/latex/contrib/exercisesheets/examples/exercises/exshexample-ex1.tex b/macros/latex/contrib/exercisesheets/examples/exercises/exshexample-ex1.tex
new file mode 100644
index 0000000000..395aef3156
--- /dev/null
+++ b/macros/latex/contrib/exercisesheets/examples/exercises/exshexample-ex1.tex
@@ -0,0 +1,9 @@
+\begin{exercise}
+ Include an exercise from an external file.
+ \begin{solution}[framed]
+ I just did this.
+ \pause
+ And this, too.
+ \end{solution}
+\end{exercise}
+
diff --git a/macros/latex/contrib/exercisesheets/examples/exercises/exshexample-ex2.lua b/macros/latex/contrib/exercisesheets/examples/exercises/exshexample-ex2.lua
new file mode 100644
index 0000000000..23012696cd
--- /dev/null
+++ b/macros/latex/contrib/exercisesheets/examples/exercises/exshexample-ex2.lua
@@ -0,0 +1,7 @@
+return exercise {
+ task = [[Include an exercise via the Lua interface.]],
+ solution=[[
+ I think this worked.
+ ]],
+}
+
diff --git a/macros/latex/contrib/exercisesheets/examples/exshexample-embedded.tex b/macros/latex/contrib/exercisesheets/examples/exshexample-embedded.tex
new file mode 100644
index 0000000000..d9cf557647
--- /dev/null
+++ b/macros/latex/contrib/exercisesheets/examples/exshexample-embedded.tex
@@ -0,0 +1,116 @@
+\documentclass[aspectratio=169]{beamer}
+\usetheme{Berlin}
+\usefonttheme{professionalfonts}
+\useoutertheme{infolines}
+\useinnertheme{rounded}
+\setbeamertemplate{itemize items}[circle]
+\setbeamertemplate{enumerate items}[circle]
+\setbeamertemplate{sections/subsections in toc}[circle]
+\setbeamercolor{item projected}{bg=black}
+\setbeamercolor{item}{fg=black}
+\setbeamertemplate{navigation symbols}{}
+
+\setbeamertemplate{footline}[frame number]
+
+\setbeamercolor{block title}{bg=black}
+\setbeamercolor{section in toc}{fg=red,bg=white}
+
+\AtBeginSection[]{
+\begin{frame}
+\begin{block}{Overview}
+\tableofcontents[sectionstyle=show/shaded,subsectionstyle=hide/hide/hide]
+\end{block}
+\end{frame}
+}
+
+\AtBeginSubsection[]{
+\begin{frame}[allowframebreaks]
+\begin{block}{Overview}
+\tableofcontents[sectionstyle=show/hide,subsectionstyle=show/shaded/hide]
+\end{block}
+\end{frame}
+}
+
+
+\author{Example Author}
+\title{Embedding Exercises}
+\subtitle{a never-ending journey}
+\makeatletter
+\date{compilation date: \the\year-\two@digits{\the\month}-\two@digits{\the\day}}
+\makeatother
+
+
+
+\newenvironment<>{stlist}[1][]{%
+ \setbeamertemplate{enumerate items}{\alph{enumi})}
+ \setbeamertemplate{enumerate subitem}{\arabic{enumii}.}
+ \setbeamertemplate{enumerate subsubitem}{\arabic{enumii}.}
+ \begin{enumerate}[#1]
+}{\end{enumerate}}
+
+%embedded already sets a lot of values, see documentation
+%in non-embedded mode, exercisesheets clears beamers headline
+%and footline if non of the beamerwith...line arguments are used.
+\usepackage[embedded]{exercisesheets}
+\makeatletter
+\exshset{
+ strings/sheet={Missions},
+ exercisespath=exercises,
+ subtask environment=stlist,
+ task restate font={\color{gray}},
+ imp/.style={pointsinfo=important},
+ vi/.style={pointsinfo=very important},
+}
+\makeatother
+
+\parindent 0pt
+\setlength{\parskip}{\baselineskip}
+
+
+
+\begin{document}
+\begin{frame}
+\maketitle
+\end{frame}
+
+\section{Introduction}
+
+\begin{frame}
+ Let me tell you everything \pause\textbf{about embedding exercises}.
+\end{frame}
+
+\section{Examples}
+
+\subsection{without a sheet environment}
+
+ \begin{frame}
+ \begin{block}{}
+ Since our exercises are already in a dedicated subsection,\pause
+ we do not need an extra sheet environment.
+ \end{block}
+ \end{frame}
+
+ \includeexercise*[imp]{exshexample-ex1}
+ \includeLexercise*[vi]{exshexample-ex2}
+
+\subsection{with a sheet environment}
+
+\begin{sheet}[note={The exercises are within a separated sheet
+ environment.}]
+ \includeexercise*[imp,solutions]{exshexample-ex1}
+\end{sheet}
+
+\begingroup
+\def\sheetfancy[#1]#2{\textcolor{red}{#2}}%nope, nothing happens
+\exshset{sheet sectioning cmd=\sheetfancy}
+
+\begin{sheet}[note={This sheet header looks exactly like the first one, because \texttt{sheet sectioning cmd} is only used for
+non-beamer documents.}]
+ \includeLexercise*[imp,solutions]{exshexample-ex2}
+\end{sheet}
+\endgroup
+
+
+\end{document}
+
+
diff --git a/macros/latex/contrib/exercisesheets/examples/exshexample.tex b/macros/latex/contrib/exercisesheets/examples/exshexample.tex
new file mode 100644
index 0000000000..815b7d54af
--- /dev/null
+++ b/macros/latex/contrib/exercisesheets/examples/exshexample.tex
@@ -0,0 +1,286 @@
+\long\def\ifbeamer#1#2{#2}
+\ifbeamer{\documentclass{beamer}}{\documentclass[a5paper]{article}}
+
+%navigation symbols and the title collide if
+%beamerwithheadline is set
+\ifbeamer{
+ \setbeamertemplate{navigation symbols}{}
+}{}
+
+%patchenumerate is the deafault
+\usepackage[patchenumerate=true,beamerwithheadline,
+ %when directly messing with page breaks
+ %and the sheet start page actio (as we do below)
+ %using exercisesheets' page numer redefinitions per
+ %sheet do not make much sense
+ patchpagenumbers=false,
+ beamerwithfootline,
+ beamercompatibility,
+ exercisespath=exercises]%
+ {exercisesheets}
+\usepackage{varioref}
+\usepackage{hyperref}
+\usepackage{xcolor}
+
+\exshset{solutions=true,
+task restate font={\color{black!60}},
+only={1-3,5-},
+}
+
+%solutions may be printed out on paper -> a4
+%exercises are read on (smartphone) screen -> a5
+\ifsolutions{
+ \usepackage[left=1cm,right=1cm,top=1cm,bottom=1.5cm,a4paper]{geometry}
+ }{
+ \usepackage[left=0.7cm,right=0.7cm,top=1cm,bottom=1.5cm]{geometry}
+}
+
+%Usually the person responsible for the entire course:
+\author{Exampleauthor}
+\date{Example term/semester}
+\title{Introduction to Exercise Sheets Creation}
+\subject{Introduction to Exercise Sheets Creation}
+%Only used for beamer at the moment:
+\exshset{exauthor={Author of exercises}}
+
+\ifbeamer{\exshset{beameruseblocks=false}}{}
+
+
+
+
+
+\begin{document}
+
+%1
+\begin{sheet}[note={Learn how to create nice exercise sheets.},
+ date={Novanuar 42, -2022},title={First Sheet}]
+
+ \includeexercise*{exshexample-ex1}
+ \includeLexercise*{exshexample-ex2}
+
+ \begin{exercise}[points={many, many},firstline={Read the manual.}]
+ \end{exercise}
+
+ \begin{exercise}[points={sum},firstline={After you read the manual:}]
+ Play around with this example. You might want to read further manuals like:
+ \begin{enumerate}
+ %pointsfloatright should be usually set globally
+ \item\points[pointsfloatright]{2}pgf (for pgfkeys)
+ \item enumitem and similar \points[abbrev,bonus]{1}
+ \begin{enumerate}
+ \item paralist \thesubex
+ \item
+ \begin{enumerate}
+ \item varioref
+ \end{enumerate}
+ \end{enumerate}
+ \item all the others \points[inplace]{3} (why not?)
+ \label{subex:man2}
+ \end{enumerate}
+ \end{exercise}
+\end{sheet}
+
+\begingroup
+\ifbeamer{}{
+ \exshset{
+ %default is \clearpage
+ sheet start page action={\pagebreak[3]\hrule},
+ sheet end page action={\vspace{4mm}\hrule\vspace{2cm}},
+ }
+}
+
+%2
+\begin{sheet}[date={Novanuar 35, -2022}]
+ \begin{exercise}[points={many, many},
+ firstline={Read the manual.}]
+ \end{exercise}
+ \begin{solution}[framed,fragile]
+ Oh no, it's quite long.
+ \newframe
+ Really long, but please \verb|\relax|.
+ Ok, but my brain feels like:
+ \begin{verbatim}
+%
+ x
+ $ t
+&
+
+
+\
+#
+ \end{verbatim}
+ And yours?
+ \end{solution}
+\end{sheet}
+
+%3
+\begin{sheet}[date={Novanuar 28, -2022},title={Third Sheet},
+ number within sheet]
+ \begin{exercise}[points={many, many},
+ firstline={Read the manual.}]
+ \begin{solution}
+ OK, done.
+ \newpage
+ still done.
+ \end{solution}
+ \end{exercise}
+\end{sheet}
+
+\endgroup
+
+%4
+\begin{sheet}
+ \begin{Lexercise}
+ task = [[
+ This exercise will be skipped.
+ ]],
+ \end{Lexercise}
+ \begin{Lexercise}
+ task = [[
+ \label{ex:skiplex}%
+ This exercise will be skipped, but it has a reference.
+ ]],
+ subexercises = {[[\label{subex:skiplexOne} first]]},
+ \end{Lexercise}
+ \begin{exercise}[points={many, many},%savetasks,
+ main task font={\tiny},subtask font={\itshape}
+ ]
+ \begin{maintask}
+ \label{ex:skipex} This exercise will be skipped.
+ Furt
+ \end{maintask}
+ \begin{subtasks}
+ \item {first \label{subex:skipexOneOne}} This is an \string\item\space inside a subtasks environment. If
+ \verb|subtask environment| is set to enumerate/itemize etc.,
+ this works with some caveats (font settings for substaks are not used).
+ \subtask{second}
+ \end{subtasks}
+ \begin{enumerate}
+ \setcounter{enumi}{2}
+ \subtask {first \label{subex:skipexOne}}
+ This is a \string\subtask{} without the susbtasks
+ environment, which is unsupported and a bad example!
+ \item {\label{subex:skipexTwo}} {12345}
+ \end{enumerate}
+ \end{exercise}
+\end{sheet}
+
+%5
+\begin{sheet}[date={Novanuar 21, -2022}]
+ \begin{exercise}[points={many, many},
+ firstline={Read the manual.}]
+ \begin{solution}[framed]
+ OK, done (again).
+ \newframe
+ Otherwise, I wouldn't know \textbackslash newframe now which
+ does not exist in beamer.
+ \end{solution}
+ \end{exercise}
+
+ Loading varioref enables you to refer to sub-exercises, like
+ this: Did you do \ref{subex:man2}? It is the subexercise
+ \subexnref{subex:man2} and has label \subexlref{subex:man2}.
+
+
+ \begin{exercise}[points={many, many},
+ firstline={Play around with the options.}]
+ Some exercise, there are far too few.
+ \begin{solution}[defersolutiontitle]
+ \begin{frame}
+ This is a dual-use solution with explicit
+ beamer frames (and no framed).
+ \solutiontitle
+ Note, that we can freely place the title, because of
+ defersolutiontitle.
+ \end{frame}
+ \end{solution}
+ \end{exercise}
+
+ \begin{exercise}[points={many, many},beamersolution,
+ firstline={Play around with the options.}]
+ \begin{solution}
+ This solution is only shown if using the non-beamer version, because the option beamersolution was used. Otherwise both
+ solutions would be shown. You can set
+ the option beamersolution for individual (normal) solutions
+ to ignore some but not all solutions of an exercise.
+ \end{solution}
+ \begin{beamersolution}[defersolutiontitle]
+ \begin{frame}[t]
+ \solutiontitle
+ This beamersolution is only shown if using the beamer
+ version.
+ \end{frame}
+ \end{beamersolution}
+ \end{exercise}
+
+
+
+ \begin{exercise}[points={many, many},savetasks,
+ main task font={\tiny},subtask font={\itshape}
+ ]
+ \begin{maintask}
+ The exercise task can be saved and restated.
+ \end{maintask}
+ \begin{subtasks}
+ \subtask{first}
+ \begin{solution}[framed]
+ None (yet).
+ \end{solution}
+ \subtask{second}
+ \end{subtasks}
+ I forgot all the tasks!
+ \restatetask
+ Yeah, but what about the subtasks? I forgot the \restatetask[1] and the \restatetask[2] one. Or did I?
+ \end{exercise}
+
+ \begin{Lexercise}
+ --use [[]] if you need \ or escape it: "\\"
+ firstline = [[Assume $\pi=4$.]],
+ points=10,
+ name="Pragmatic",
+ options=[[main task font={\itshape}]],
+ task = [[
+ This is the main task specified via the Lua
+ interface, like subexercise \ref{subex:skiplexOne} in \ref{ex:skiplex}, whereas \ref{subex:skipexOne}
+ and \ref{subex:skipexTwo} in
+ \ref{ex:skipex} use the \LaTeX~interface.
+ ]],
+ solution=[[
+ This is a solution for the main task.
+ ]],
+ altsolutions={
+ {
+ name="Alternative Solution",
+ text="This is also a solution."
+ },{
+ idea=true,
+ text="This is also a solution."
+ }
+ },
+ \end{Lexercise}
+
+ \begin{Lexercise}
+ firstline = "Assume $e=3$.",
+ points="sum",
+ task = [[
+ This exercise has some subexercises. The Lua interface
+ computes point sums in a single pass.
+ ]],
+ subexercises = {
+ {
+ task = "First things first.",
+ bonuspoints = 4,
+ pointoptions = "abbrev",--passed to LaTeX interface
+ solution = [[None.]],
+ },{
+ task = "Second things afterwards.",
+ points = 16,
+ altsolutions = { [[None.]],[[Yet.]] },
+ }
+ }
+ \end{Lexercise}
+
+\end{sheet}
+
+\end{document}
+
diff --git a/macros/latex/contrib/exercisesheets/exercisesheets-doc.pdf b/macros/latex/contrib/exercisesheets/exercisesheets-doc.pdf
new file mode 100644
index 0000000000..5aed5c6aa1
--- /dev/null
+++ b/macros/latex/contrib/exercisesheets/exercisesheets-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/exercisesheets/exercisesheets-doc.tex b/macros/latex/contrib/exercisesheets/exercisesheets-doc.tex
new file mode 100644
index 0000000000..eb89c48b9e
--- /dev/null
+++ b/macros/latex/contrib/exercisesheets/exercisesheets-doc.tex
@@ -0,0 +1,1086 @@
+%% exercisesheets.tex
+%% Copyright 2008-2024 Sebastian Kuhnert, Frank Fuhlbrück
+%
+% This work may be distributed and/or modified under the conditions
+% of the LaTeX Project Public License, either version 1.3c of this
+% license or (at your option) any later version. The latest version
+% of this license is in https://www.latex-project.org/lppl.txt and
+% version 1.3c or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Frank Fuhlbrück.
+%
+% This work consists of the files listed in README.
+
+\documentclass[DIV12,BCOR0mm]{scrartcl}
+
+\usepackage{arev}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[activate]{microtype}
+\usepackage{csquotes}
+\usepackage{xspace}
+\usepackage{xcolor}
+\usepackage{calc}
+\usepackage{listings}
+\lstloadlanguages{TeX}
+\lstset{%
+ language=[LaTeX]TeX,
+ basicstyle=\ttfamily\color{blue!50!black},
+ texcs={def,let,renewcommand,long,begin,end,usepackage,ifdef},
+ texcsstyle=\color{blue!60!gray},
+ keywordstyle=\bfseries,
+ keywords={
+ beamersolution,
+ exshset,
+ exercise,
+ hint,
+ includeexercise,
+ inexlabel,
+ ifnonoralsolutions,
+ iforalsolutions,
+ ifsamplesolutions,
+ ifsolutions,
+ Lexercise,
+ loadexercise,
+ maintask,
+ newframe,
+ points,
+ restatetask,
+ restatetaskbeamer,
+ sheet,
+ solution,
+ subexnref,
+ subexlref,
+ subtask,
+ subtasks,
+ TODO,
+ },
+ keywordstyle=[2]\optionstyle,
+ keywords=[2]{
+ bonus,
+ firstline,
+ framed,
+ inplace,
+ name,
+ only,
+ optional,
+ options,
+ oral,
+ strings,
+ solutionsby,
+ },
+ identifierstyle=,%{}\color{red!60!gray},
+ texcl,
+ commentstyle=\itshape,
+ showstringspaces=false,
+ breaklines,
+ breakatwhitespace,
+ columns=flexible,
+ escapeinside={(*}{*)},
+ mathescape=false,
+}
+
+\usepackage[pdfusetitle,colorlinks]{hyperref}
+
+\newcommand{\exsh}{\texttt{exercisesheets}\xspace}
+
+\newcommand{\param}[1]{$\langle${\normalfont\itshape #1\/}$\rangle$}
+\newcommand{\maybe}[1]{\textcolor{green!50!black}{#1}}
+\newcommand{\mand}[1]{\textcolor{blue!50!black}{#1}}
+\newcommand{\codestyle}{\normalfont\ttfamily\color{blue!50!black}}
+\newcommand{\optionstyle}{\normalfont\ttfamily\color{red!50!black}}
+\newcommand{\option}[1]{{\optionstyle #1}}
+\newcommand{\optitem}[1][]{\item[{\codestyle #1}]}
+\newcommand{\vers}[1]{{\normalfont\ttfamily\color{black!90} #1}}
+\newcommand{\versitem}[1][]{\item[v. \vers{#1}]}
+\newcommand{\filename}[1]{{\normalfont\ttfamily\color{magenta!80!black}#1}}
+\newcommand{\binary}[1]{{\normalfont\ttfamily\color{yellow!50!black}#1}}
+\newcommand{\luadisp}[1]{{\normalfont\ttfamily\color{cyan!50!black}#1}}
+
+\usepackage[english,iso]{isodate}
+\title{The \exsh Package}
+\author{Sebastian Kuhnert\and Frank Fuhlbrück}
+\date{Version 0.17, \printdateTeX{2024/04/23}}
+
+\begin{document}
+\maketitle
+
+The \exsh package provides a way to typeset exercise sheets as used in university courses and school classes. It evolved from a set of macros an environments that were finally combined into this package. Starting from Version \vers{0.7}, there was an alternative variant designed for use with the beamer class, which is integrated into the main package since version \vers{0.11}. Not all combinations of options have been tested with the beamer variant. From version \vers{0.16} on, there is an embedded mode that allows using exercise in lecture notes etc. without requiring page breaks. Since the package includes a loading mechanism for exercises in external files, the same exercises can be reused in different contexts.
+
+
+\subsection*{Licence}
+Copyright \textcopyright{} 2008--2024 Sebastian Kuhnert and Frank Fuhlbrück.
+Permission is granted to copy, distribute and/or modify this software under the
+terms of the \LaTeX{} Project Public Licence, version 1.3c or later. This
+package is maintained, the Current Maintainer is
+Frank Fuhlbrück
+\footnote{\href{mailto:frank@fuhlbrueck.net}{frank@fuhlbrueck.net}}.
+
+
+\section{Reading this Document}
+
+\begin{itemize}
+ \item All macros and environments defined by this package are
+ printed in bold like this: \lstinline|\points| and
+ \lstinline|\begin{sheet}\end{sheet}|.
+ \item Key-value style options with a mandatory argument are
+ printed like this: {\codestyle \option{only}=\param{list of ranges}}, while optional (usually boolean) arguments
+ look like this: {\codestyle \option{embedded}\maybe{=\param{true/false}}}.
+\end{itemize}
+
+
+
+
+\section{Related Classes and Packages}
+
+\subsection{Packages with Similar Functionality}
+\begin{itemize}
+ \item The \texttt{exercise} package offers similar functionality, though the
+ concept is a bit different: That package provides explicit commands for
+ sub-exercises while \exsh (in its standard setting)
+ relies on other means like the \texttt{enumerate}
+ environment for this. An advantage of the \texttt{exercise} package is that
+ answers can be delayed. On the other hand \exsh's environment based user
+ interface is a bit cleaner and you have to care less about package internals.
+ \item The \texttt{xsim} (and its predecessor \texttt{exsheets}) package also offers a similar set of features for the average user. It also has a mechanism for hiding certain exercises and solutions that works a bit differently than the mechanism of
+ this package. There is (to my knowledge) no explicit beamer support.
+\end{itemize}
+
+\subsection{Recommended Additional Packages}
+\begin{itemize}
+ \item The use of \texttt{hyperref} is encouraged. Please use the options
+ \texttt{pdfusetitle}, \texttt{plainpages=false} and \texttt{pdfpagelabels} for
+ optimal results.
+ \item If the \texttt{babel} package is loaded, the appropriate
+ \option{language=\param{lang}}-option is automatically derived and can be
+ omitted.
+ \item The use of \texttt{enumitem} or \texttt{paralist} is recommended. Top
+ level enumerating lists are then modified to have the form (a), (b), \dots{},
+ which is useful in exercise definitions (you can override this).
+ \item If the \texttt{varioref} package is used, appropriate label formats are
+ installed for exercises and sub-exercises.
+ \item If the \texttt{xcolor} package is loaded, to-do markers generated with
+ \lstinline|\TODO| are printed in red.
+\end{itemize}
+
+\subsection{Packages Loaded by \exsh}
+\begin{itemize}
+ \item \texttt{etoolbox} (at least version
+ 1.7)
+ \item \texttt{scrlfile} (part of \KOMAScript{})
+ \item \texttt{pgfkeys} (part of PGF 2.0)
+ \item \texttt{ifthen}
+ \item \texttt{amsmath} (for \lstinline|\numberwithin|)
+ \item \texttt{iflualatex}
+ \item \texttt{refcount} (for \lstinline|\getrefnumber|)
+\end{itemize}
+
+
+\section{Basic Usage}
+
+\subsection{Package Loading}
+The beamer variant is integrated now and automatically activated
+if the current document class is beamer.
+
+\begin{lstlisting}
+\usepackage(*\maybe{[\param{options}]}*){exercisesheets}
+\end{lstlisting}
+
+The following options are available:
+\begin{description}
+ \optitem[{\option{only}=\mand{\param{list of ranges}}}] When given, only the mentioned
+ sheets will be included in the output. This is useful to speed up compilation
+ times for big documents. Some efforts are made that sheet and exercise
+ numbering remain consistent and references to exercises and enumerated lists
+ on skipped sheets still work as expected. References to other objects are
+ broken though (they currently point to the exercise or item containing them).
+ The \param{list of ranges} is a comma separated list of sheet numbers and
+ sheet ranges. If a comma is included in the range, it has to be protected with
+ a pair of braces. The special sheet \enquote{number} \texttt{last} stands for
+ the last sheet in the document (this may require an additional \LaTeX{} run).
+ Examples:
+ \begin{description}
+ \optitem[{\option{only}=3}] Only include the 3rd sheet of the document.
+ \optitem[{\option{only}=\{1,3,5,7\}}] Only include the sheets 1, 3, 5 and 7.
+ \optitem[{\option{only}=last}] Only include the last sheet of the document.
+ \optitem[{\option{only}=\{3-5,8-last\}}] Exclude the sheets 1, 2, 6 and 7.
+ \optitem[{\option{only}=\{-2,5-\}}] Exclude the sheets 3 and 4.
+ \end{description}
+ \optitem[{\option{all}}] Typeset all sheets (equivalent to \option{only=-}). This is
+ the default.
+ \optitem[{\option{solutions\maybe{=\param{true/false/oral/nonoral/sample oral/sample nonoral/sample all}}}}] By default,
+ solutions (provided in the \texttt{solution} environment) are not included in
+ the output. By providing the option \option{solutions=true} (or just
+ \option{solutions}) this can be changed. Choosing \option{solutions=oral}
+ shows only solutions for exercises marked \option{oral} (useful for printouts
+ taken to class). Choosing \option{solutions=nonoral} shows only solutions for
+ exercises that are not marked \option{oral} (useful for correcting).
+ If you want to provided sample solutions for your students but only for some
+ of your exercises you can use the \texttt{sample} key to select those
+ exercises along with any options starting with sample here.
+ Note that non-sample exercises are skipped completely (not only their solutions) if you
+ choose an option starting with sample.
+ \optitem[{\option{gradingguides\maybe{=\param{true/false}}}}]
+ Within \texttt{gradingguide} environments (usually used inside \texttt{solution}) you can
+ specify e.g. the amount of points to assign for certain solutions. This option
+ controls whether or not to include this guides in the output (e.g. solutions for
+ correcting contain them, but sample solutions for students don't).
+ \optitem[{\option{solutionsby}=\mand{\param{name/names}}}] Use this to give the authors of the
+ solutions. They are credited at the beginning of each sheet, if the solutions
+ are included in the output.
+ \optitem[{\option{language}=\mand{\param{lang}}}] Set the language of the sheet and
+ exercise heads to \param{lang}. If the \texttt{babel} package is loaded this
+ is not necessary, as the main document language will be automatically
+ detected. Currently \option{english}, \option{german} and \option{ngerman} are
+ supported. Other translations are welcome: Please contact the author.
+ \optitem[{\option{pointsfloatright}}] Use an alternative mechanism to place points for Sub-Exercises.
+ If this option is used, the points label for a Sub-Exercise is placed at the (right) end of the current line.
+ It is especially useful if used in a context like \texttt{$\backslash$item$\backslash$points$\{3\}$}.
+ This option exploits (and partially breaks) RTL-Support.
+ \optitem[{\option{exercisespath}}] Set the (relative) path of the
+ directory containing exercises to be included via
+ \lstinline|\includeexercise|.
+ \optitem[{\option{patchenumerate}\maybe{=\param{true/false}}}] Sets
+ enumerate item labels for the first four levels, starting with
+ a), b) etc. for the top-level (sub-exercises). Depending on other
+ loaded packages (\lstinline|enumitem|, \lstinline|paralist|) the mechanism
+ slightly differs. This option is active by default.
+ \optitem[{\option{settitle}\maybe{=\param{true/false}}}] If set to true
+ (which is the default),
+ the document \lstinline|\title| will be automatically set to the value
+ of \option{strings/sheets} and the value of \option{strings/solutions} will be
+ appended if \option{solutions} is not \lstinline|false|.
+ \optitem[{\option{patchpagenumbers}\maybe{=\param{true/false}}}] If true
+ (default), pages will be numbered within sheets and page numbers
+ get a prefix of the form ``{\codestyle\param{sheet number}-}''.
+ \optitem[{\option{usestartsection}\maybe{=\param{true/false}}}] If true
+ (default), the command \lstinline|\@startsection| is used to create
+ the header of any exercise as a section, which (among other
+ things) adds an entry to the TOC (if existent) at level 1
+ (usually corresponding to \lstinline|\section|).
+ \optitem[{\option{embedded}\maybe{=\param{true/false}}}] Default: false.
+ Embedded mode allows for exercise ``sheets'' which do not
+ interfere with a surrounding document. More explicitly, it does
+ not interfere with \lstinline|secnumdepth|, defines special counters
+ \lstinline|exshsheet| and \lstinline|exshexercise| to use them for
+ \option{sheet counter} and \option{exercise counter},
+ respectively and sets all of \option{patchenumerate},
+ \option{settitle}, \option{patchpagenumbers} and
+ \option{usestartsection} to \lstinline|false|.
+ An internally defined macro which basically does no extra
+ formatting or adding anything to the TOC is used as
+ \option{sheet sectioning cmd} instead of the usual \lstinline|\part|.
+ Finally,
+ the \option{sheet start page action} and the
+ \option{sheet end page action} are both set to \lstinline|\relax|.
+ If you want to override any of this, do it after setting
+ \option{embedded} to \lstinline|true|.
+ \item{\option{minskips\maybe{=\param{true/false}}}} Default: false.
+ If true, the values of
+ \option{above sheet title skip},
+ \option{below sheet header skip},
+ \option{above first exercise skip} and
+ \option{below exercise title skip} are all set to 0pt.
+ \optitem[{\option{showtodos} / \option{hidetodos}}]
+ \lstinline|\TODO| markers
+ are hidden by default, this option switches their behavior. This
+ option is usually set within \lstinline|\ifsamplesolutions| or
+ similar.
+ \optitem[{\option{beamercompatibility}\maybe{=\param{true/false}}}]
+ This option (which only is effective in the non-beamer version)
+ defines several beamer macros with as trivial
+ effects as possible, e.g., \lstinline|\pause| becomes \lstinline|\relax|
+ and overlay specifications are mostly ignored. Be careful to use
+ this option after loading \lstinline|enumitem| etc. as the enumerate
+ and itemize environment are defined to swallow overlay
+ specifications without effect, this also holds for
+ \lstinline|\item<1->|. If you load \lstinline|exercisesheets| before them
+ use \lstinline|\exshset| afterwards.
+ The current list of redefinitions is as
+ follows:
+\begin{lstlisting}
+ \let\pause\relax
+ \def\frame{}
+ \renewcommand{\frame}[1][]{}
+ \let\endframe\relax
+ \def\onslide<##1>{}
+ \def\only<##1>##2{##2}
+ \def\uncover<##1>##2{##2}
+ \def\visible<##1>##2{##2}
+ \def\invisible<##1>##2{##2}
+ \long\def\alt<##1>##2##3{##2}
+ \long\def\temporal<##1>##2##3##4{##3}
+ \let\exsh@origitem\item
+ \def\exsh@ovrlitem<##1>{\exsh@origitem}
+ \def\item{\@ifnextchar<\exsh@ovrlitem\exsh@origitem}
+ \let\exsh@origitemize\itemize
+ \def\exsh@ovrlitemize[##1]{\exsh@origitemize}
+ \def\itemize{\@ifnextchar[\exsh@ovrlitemize\exsh@origitemize}
+ \let\exsh@origenumerate\enumerate
+ \def\exsh@ovrlenumerate[##1]{\exsh@origenumerate}
+ \def\enumerate{%
+ \@ifnextchar[\exsh@ovrlenumerate\exsh@origenumerate}
+\end{lstlisting}
+
+\optitem[{\option{filenameasexercisename}\maybe{=\param{true/false}}}]
+This option (set to false by default) causes
+\lstinline|\includeexercise| to
+set the name of an exercise as the filename (without extension).
+This has two purposes: If you have nice file names you can
+automatically name the exercise. On the other hand this is helpful
+during exercise sheet composition because it shows the name of
+the corresponding file in the compiled file.
+\end{description}
+
+\subsection{Supplying Meta-Data}
+
+The following commands are enhanced (or provided) to set the options controlling
+the sheet headers (see Section~\ref{sec:sheet}):
+\begin{lstlisting}
+\subject{(*\param{subject}*)}
+\author{(*\param{author}*)}
+\date{(*\param{semester}*)}
+\end{lstlisting}
+
+If one of these commands is omitted (and the corresponding option is not used
+either), a warning is issued.
+
+Please do not include a \lstinline|\title| in your document, as \exsh will
+automatically generate an appropriate one (this may require an additional
+\LaTeX{} run). If you want to set the title yourself, set the
+option \option{settitle} to \lstinline|false|.
+
+All this information is included in the PDF meta-data if the \texttt{hyperref}
+package is loaded with the option \texttt{pdfusetitle}.
+
+There is also a related option:
+\begin{description}
+ \optitem[{\option{exauthor}=\mand{\param{list of names}}}] If you want to use the
+ \lstinline|\author| macro for the general author of a course but
+ there are different authors for individual exercises or all
+ exercises in general, you can set this key. Currently only
+ exercisesheets-baemer uses this for the footline, while
+ \option{author} is used for the headline.
+\end{description}
+
+\subsection{Defining Exercise Sheets}
+\label{sec:sheet}
+\begin{lstlisting}
+\begin{sheet}(*\maybe{[\param{options}]}*)
+ (*\param{sheet contents}*)
+\end{sheet}
+\end{lstlisting}
+
+Insert a sheet into the document. This environment can be repeated to combine
+several sheets in a single \LaTeX{} file. For each sheet, a new page is started
+and an appropriate header is generated. The \param{sheet contents} can be
+anything but will usually consist of several \texttt{exercise} environments (see
+Section~\ref{sec:exercises-solutions}).
+
+The following \param{options} are supported:
+\begin{description}
+ \optitem[{\option{date}=\mand{\param{date}}}] Set the date the sheet was/will be issued. This
+ information is included in the sheet header. By default, this information is
+ omitted. See also the \option{semester} option.
+ \optitem[{\option{note}=\mand{\param{note}}}] Include \param{note} in the sheet header.
+ Useful to inform students when the sheet is due. If you want a note consisting
+ of more than one line split at a particular position, use
+ \lstinline|\protect\linebreak|.
+ \optitem[{\option{title}=\mand{\param{title}}}]
+ Directly set the sheet title. When this option is used, different
+ page numbering conventions are used. This is useful to
+ typeset exams (combined with the next option).
+ \optitem[{\option{number within sheet\maybe{=\param{true/false}}}}]
+ Deviate from the usual numbering theme and
+ restart from one for exercises on the sheet. The previous
+ counter value is restored after the sheet, so you can insert
+ a special sheet.
+ \optitem[{\option{author}=\mand{\param{author}}}] Set the author included in the sheet
+ head. By default, the value passed to \lstinline|\author| is used.
+ \optitem[{\option{exauthor}=\mand{\param{exauthor}}}] Only used by the beamer
+ variant, see above.
+ \optitem[{\option{subject}=\mand{\param{subject}}}] Set the subject included in the sheet
+ head. By default, the value passed to \lstinline|\subject| is used.
+ \optitem[{\option{semester}=\mand{\param{semester}}}] Set the semester included in the
+ sheet head. By default, the value passed to \lstinline|\date| is used.
+ \optitem[{\option{beamerwithheadline\maybe{=\param{true/false}}}}] Controls whether a headline with author, subject etc. is shown on beamer slides, similar to the regular sheets. This options is off by default as headlines (and footers) take a considerable amount
+ off space. If you specify the embedded option the current default headers and footers will be used if you omit this option. Otherwise omitting it will imply an empty headline.
+ \optitem[{\option{beamerwithfootline\maybe{=\param{true/false}}}}]
+ The same for the footer.
+ \optitem[{\option{beameruseblocks\maybe{=\param{true/false}}}}]
+ Controls whether the exercise title is shown inside a
+ beamer block (\param{true}) or a simple colorbox
+ (\param{false}, the default). Depending on your style a
+ block might look fancier, but it usually consume more space.
+\end{description}
+
+
+\subsection{Defining Exercises and Solutions}
+\label{sec:exercises-solutions}
+\begin{lstlisting}
+\begin{exercise}(*\maybe{[\param{options}]}*)
+ (*\param{exercise text}*)
+ \begin{solution}(*\maybe{[\param{solution options}]}*)
+ (*\param{solution text}*)
+ \end{solution}
+ \begin{beamersolution}(*\maybe{[\param{solution options}]}*)
+ (*\param{solution text}*)
+ \end{beamersolution}
+\end{exercise}
+\end{lstlisting}
+
+This inserts an exercise into the current document. All
+\lstinline|beamersolution|s are ignored, if the
+\exsh package with any class but beamer, but using beamer
+\exsh also processes
+normal solutions by default (set option \option{beamersolution}
+to turn this off).
+
+The following options are
+supported:
+\begin{description}
+ \optitem[{\option{name}=\mand{\param{text}}}] Use \param{text} as the name of the exercise.
+ Useful for exercises that prove a famous theorem.
+ \optitem[{\option{firstline}=\mand{\param{text}}}] Save some space by text \param{text}
+ behind the exercise title.
+ \optitem[{\option{savetasks\maybe{=\param{true/false}}}}] Saves the main task and each sub task
+ for later use with \lstinline|\restatetask[|%
+ \param{which}], where \param{which} is either \lstinline|main|
+ (default) or the number of a sub task.
+ \optitem[{\option{points}=\mand{\param{number/oral/sum}}}] Assign this
+ exercise \param{number} points. By default, exercises are
+ unlabelled. \param{oral} works the same way as the option
+ \option{oral}. The value \param{sum} displays the sum of all
+ occurrences of \lstinline|\points| within the exercise: Ordinary and
+ bonus points are treated separately. If there are only bonus
+ points, the option \option{bonus} is automatically triggered. To
+ undo this, either delete the \filename{.aux} file or explicitly use
+ \lstinline|\points[bonus=false]{\param{number}}| for at least one
+ subexercise. Points can be summed up also during a single pass
+ by using the Lua interface.
+ \optitem[{\option{oral}}] Label this exercise as \emph{oral}. This supersedes and is
+ superseded by the option \option{points}.
+ \optitem[{\option{pointsinfo}=\mand{\param{text}}}] Supply \param{text} as additional
+ information to be displayed after the points.
+ \optitem[{\option{optional}}] Shortcut for \option{pointsinfo=optional} with
+ automatic translation and abbreviation (if requested).
+ \optitem[{\option{bonus}}] Change \enquote{points} to \enquote{bonus points} (with
+ automatic translation and abbreviation).
+ \optitem[{\option{abbrev}}] Use abbreviated labels.
+ \optitem[{\option{exercisemark}=\mand{\param{symbol}}}] Mark the exercise
+ with \param{symbol} in the left margin.
+ \optitem[{\option{difficult}}] Shortcut for \option{exercisemark=*}.
+ \optitem[{\option{solutions\maybe{=\param{true/false/oral/nonoral/...}}}}] Use this to override the
+ document (or sheet) default.
+ \optitem[{\option{sample}}] Include this exercise (and its solution) in while compiling
+ sample solutions.
+ \optitem[{\option{beamersolution}}] For beamer variant only. If this option
+ is set all normal solutions will not be included and only
+ \lstinline|beamersolution|s are typeset.
+ \optitem[{\option{framed}}] For beamer variant only, simply ignored
+ elsewhere. If this option
+ is set for a normal solution, its content will be put on one or
+ more frames. Use \lstinline|\newframe| to start a new frame. This
+ option is especially helpful if you provide your own definitions
+ of \lstinline|\only| etc. and/or use the \option{beamercompatibility}.
+ for non-beamer compilation. \lstinline|\newframe|
+ is already defined as \lstinline|\relax| in non-beamer \exsh,
+ even without invoking \option{beamercompatibility}.
+ \optitem[{\option{fragile}}] For beamer variant only and only
+ used combined with framed, simply ignored elsewhere. Frames are
+ declared as \texttt{fragile} und parsing of \lstinline|\newframe|
+ etc. is done via Lua\LaTeX. Thus Lua\LaTeX is required
+ (and this requires font setup via fontspec etc.), but
+ you do not have to use any Lua code yourself. Mostly useful
+ for listings and other verbatim stuff within solutions.
+\end{description}
+
+Solutions are only typeset, if the \option{solutions} option is in effect. There
+can be multiple solution environments within a single exercise environment; this
+is useful if the exercise consists of several sub-exercises. Sub-exercises can
+simply be defined with an \texttt{enumerate} or \texttt{compactenum}
+environment.
+
+\section{Utilities}
+
+\subsection{Loading Excercises From Files}
+\begin{lstlisting}
+\includeexercise(*\param{file name}*)
+\includeexercise*(*\param{file name}*)
+\end{lstlisting}
+
+Both load the exercise from exercisespath/\param{file name}. Note
+that the exercise environment must be contained in the file. The
+starred version is helpful for faster skipping of unused exercises.
+In this case, the file is not opened to search for labels. Whenever
+the exercise is not skipped and you use the starred version and also
+use labels within the exercise file, \exsh outputs an error. This is
+done to ensure that references are not overlooked when the exercise
+is actually skipped later.
+
+\subsection{Including Hints}
+
+\begin{lstlisting}
+\begin{hint}(*\maybe{[\param{options}]}*)
+ (*\param{hint text}*)
+\end{hint}
+\end{lstlisting}
+
+\begin{lstlisting}
+\begin{hint*}(*\maybe{[\param{options}]}*)
+ (*\param{hint text}*)
+\end{hint*}
+\end{lstlisting}
+
+These environments include hints in the exercise definition. The first form
+starts a new paragraph, the second one puts the hint in parenthesis.
+
+\subsection{TODO Markers}
+
+You can use the following to include a red TODO marker in your document. This is
+useful to mark places where work is still in progress. A warning is issued at
+each place. TODO markers can also contain an optional description
+of the task that needs to be done. If you switch off displaying
+TODO markers (s.a.) the warning will be issued nevertheless.
+
+\begin{lstlisting}
+\TODO[what needs to be done]
+\end{lstlisting}
+
+\subsection{Annotating Points for Sub-Exercises}
+\begin{lstlisting}
+\begin{exercise}[(*\option{points}*)=sum]%sum produces 4+6
+ \begin{enumerate}
+ \item Part 1 \points{oral}
+ \item Part 2 \points[optional]{oral}
+ \item Part 3 \points{4}
+ \item Part 4 \points[bonus]{6}
+ \end{enumerate}
+ Sub-Exercises within continuous text can be annotated like this \points[inplace]{3} without adding space.
+\end{exercise}
+\end{lstlisting}
+
+\subsection{Explicitly Stating Tasks}
+In principle, \exsh aims to be very lightweight and there is not
+much mandatory structure inside exercises. Furthermore, the
+\lstinline|enumi| counter is used for sub-exercise. There are, however,
+situations where we want more explicit structure, for instance to
+have special font for the main task or the subtasks or to reuse
+some of the tasks later. This is especially handy if using the
+beamer variant where the original task and a part of the solution might be on different slides. In the future it might be possible to
+use other counters then \lstinline|enumi|, which is also only possible
+if sub-exercises are not simply \lstinline|\item|s in
+\lstinline|enumerate|. If you want to reuse the main or any subtasks
+you may use \lstinline|\restatetask| or \lstinline|\restatetaskbeamer|
+(this shows noting if not compiled with beamer). There is also
+a starred version (\lstinline|\restatetask*| /
+\lstinline|\restatetaskbeamer*|) for each of them, which adds a newline.
+All four have an optional argument that allows to restate
+a subtask instead of the main task. This argument is either
+\lstinline|main|, a number of a \textbf{previous} subtask or
+\lstinline|cur| for the current subtask. Using \option{headerrestate}
+for your solution will automatically restate the current
+task within the beamer solution header (does noting without
+beamer).
+
+
+
+\begin{lstlisting}
+\begin{exercise}[(*\option{points}*)=oral]
+ \begin{maintask}
+ A and B are true.
+ \end{maintask}
+ \begin{subtasks}
+ \subtask{A is true}
+ \begin{solution}[framed]
+ We want to show: \restatetask %A and B are true.
+ \newframe
+ Out first step is to show: \restatetask[cur] %A is true
+ \end{solution}
+ \subtask{If A is true, B is true.}
+ \begin{solution}[framed]
+ Obvious (i.e.: homework).
+ \end{solution}
+ \subtask{B is true}
+ \begin{solution}[framed]
+ We already know: \restatetask[1] and
+ \restatetask[2], therefore B is also true.
+ \end{solution}
+ \end{subtasks}
+\end{exercise}
+\end{lstlisting}
+
+\subsection{Labels and References within an Exercise}
+While the global reference labels set via varioref (if loaded)
+are nice for references to subexercises far away, always mentioning
+the exercise number seems superfluous. Furthermore, for usage in indices etc. you might want to use the arabic representation instead. This is what the commands \lstinline|\subexnref| and
+\lstinline|\subexlref| are designed for. However, both of them still
+require an ordinary label, which is not allowed in
+exercises loaded with \lstinline|\loadexercise*|.
+For this purpose \lstinline|\inexlabel| can be used which is just a
+normal label that is not redefined to produce an error.
+Furthermore, we define a counter \lstinline|subex| (which is
+currently just an alias for enumi, but this might change). You can
+use this counter (alias) with common commands like
+\lstinline|\arabic| or \lstinline|\alph|.
+
+\begin{lstlisting}
+\begin{exercise}
+ \begin{enumerate}
+ \item \inexlabel{subex:xisseven} Let $x_{\thesubex}=7$.
+ \item Compute $x_{\subexnref{subex:xisseven}}+3$.
+ \begin{solution}
+ From \subexlref{subex:xisseven} %(a)
+ we know that $x_{\subexnref{subex:xisseven}}$ is $7$ and
+ thus the sum is $10$.
+ \end{solution}
+ \end{enumerate}
+\end{exercise}
+\end{lstlisting}
+
+
+
+\section{Advanced Usage}
+
+\subsection{Setting Options}
+
+Options can be given at different places.
+\begin{enumerate}
+ \item As local options to one of the environments.
+ \item As package options: This is convenient for global options but suffers
+ from shortcomings in way \LaTeX{} processes options: Macros are expanded and
+ spaces are stripped.
+ \item By the independent \lstinline|\exshset| command. This is especially useful in
+ the preamble to set options that would be garbled by the \LaTeX{} option
+ handling routine. It also allows to change an option for the rest of the
+ current scope.
+\end{enumerate}
+
+Example: Change the solution authors of the following sheets:
+\begin{lstlisting}
+(*\param{some sheets}*)
+\exshset{solutionsby=(*\param{other authors}*)}
+(*\param{more sheets}*)
+\end{lstlisting}
+
+\subsection{Changing Strings}
+
+For some languages, predefined sets of strings are provided and automatically
+activated. If your language is not supported or if you want to change (some of)
+the used strings, you can do so with the following options:
+\begin{description}
+ \optitem[{\option{strings/sheet}=\mand{\param{string}}}]
+ \optitem[{\option{strings/sheets}=\mand{\param{string}}}]
+ \optitem[{\option{strings/solutions}=\mand{\param{string}}}]
+ \optitem[{\option{strings/solutionsby}=\mand{\param{string}}}]
+ \optitem[{\option{strings/exercise}=\mand{\param{string}}}]
+ \optitem[{\option{strings/solution}=\mand{\param{string}}}]
+ \optitem[{\option{strings/hint}=\mand{\param{string}}}]
+ \optitem[{\option{strings/oral}=\mand{\param{string}}}]
+ \optitem[{\option{strings/oral abbrev}=\mand{\param{string}}}]
+ \optitem[{\option{strings/point}=\mand{\param{string}}}]
+ \optitem[{\option{strings/points}=\mand{\param{string}}}]
+ \optitem[{\option{strings/points abbrev}=\mand{\param{string}}}]
+ \optitem[{\option{strings/bonus point}=\mand{\param{string}}}]
+ \optitem[{\option{strings/bonus points}=\mand{\param{string}}}]
+ \optitem[{\option{strings/bonus points abbrev}=\mand{\param{string}}}]
+ \optitem[{\option{strings/optional}=\mand{\param{string}}}]
+ \optitem[{\option{strings/optional abbrev}=\mand{\param{string}}}]
+\end{description}
+
+Example: Give an introduction that should only be included in the version with
+solutions:
+
+\begin{lstlisting}
+\begin{solution}[(*\option{strings/solution}*)=Introduction]
+ (*\param{introduction text}*)
+\end{solution}
+\end{lstlisting}
+
+
+\subsection{Changing Fonts}
+
+The package \exsh comes with its own way to change the used fonts. Each font can
+be changed in the following way:
+\begin{lstlisting}
+\exshset{(*\param{font element}=\param{font specification}*)}
+\end{lstlisting}
+The available \param{font element}s are listed below together with their default
+values:
+\begin{description}
+ \optitem[{\option{sheet header font}}] The basic font for subject, author, semester,
+ date, note and solution authors in the sheet headers.\\
+ Default: \lstinline|\normalfont\normalsize|
+ \optitem[{\option{subject font}}] The font for the subject in the sheet header.\\
+ Default: \lstinline|\scshape|
+ \optitem[{\option{author font}}] The font for the author in the sheet header.\\
+ Default: \lstinline|\scshape|
+ \optitem[{\option{semester font}}] The font for the semester in the sheet header.\\
+ Default: empty, i.\,e.\ no change.
+ \optitem[{\option{date font}}] The font for the date in the sheet header.\\
+ Default: empty, i.\,e.\ no change.
+ \optitem[{\option{solutionsby font}}] The font for the information who has produced
+ the solutions provided below the sheet title.\\
+ Default: \lstinline|\itshape|
+ \optitem[{\option{sheet note font}}] The font for the note provided below the sheet
+ title.\\
+ Default: \lstinline|\itshape\bfseries|
+ \optitem[{\option{sheet title font}}] The font for the sheet title itself.\\
+ Default: \lstinline|\Large\bfseries|
+ \optitem[{\option{exercise title font}}] The font for the exercise title.\\
+ Default: \lstinline|\bfseries|
+ \optitem[{\option{points font}}] The font for the number of points in the exercise
+ head (relative to the exercise title) and for \lstinline|\points|.\\
+ Default: \lstinline|\itshape|
+ \optitem[{\option{main task font}}] The font for the
+ \lstinline|maintask| environment.\\
+ Default: empty, i.\,e.\ no change.
+ \optitem[{\option{subtask font}}] The font for each
+ \lstinline|\subtask|.\\
+ Default: empty, i.\,e.\ no change.
+ \optitem[{\option{task restate font}}] The font used for
+ \lstinline|\restatetask|.\\
+ Default: \lstinline|\itshape|
+ \optitem[{\option{hint font}}] The font for hints. \\
+ Default: empty, i.\,e.\ no change.
+ \optitem[{\option{hint title font}}] The font for the string \enquote{Hint:}.\\
+ Default: \lstinline|\itshape|
+ \optitem[{\option{solution font}}] The font for solutions.\\
+ Default: empty, i.\,e.\ no change.
+ \optitem[{\option{solution title font}}] The font for the string
+ \enquote{Solution:}\\
+ Default: \lstinline|\bfseries|
+ \optitem[{\option{grading guide font}}] The font for grading guides.\\
+ Default: \lstinline|\itshape|
+ \optitem[{\option{todo marker font}}] The font for the string \enquote{TODO}.\\
+ Default: \lstinline|\ifdef{\color}{\color{red}}{}\bfseries|
+\end{description}
+
+\subsection{Controlling the Spacing, Page Handling and Separations between Elements}
+
+The following options allow fine-tuning of the spacing:
+\begin{description}
+ \optitem[{\option{below slide headline skip}=\mand{\param{dimen}}}] The distance between
+ haedline (if present) and slide content. Only used by beamer
+ variant, ignored elsewhere.\\
+ Default: \texttt{0mm}
+ \optitem[{\option{above sheet title skip}=\mand{\param{dimen}}}] The distance between
+ author/date and sheet title.\\
+ Default: \texttt{4ex}
+ \optitem[{\option{above sheet note skip}=\mand{\param{dimen}}}] The distance above the
+ sheet note.\\
+ Default: \texttt{.7ex}
+ \optitem[{\option{above solutionsby skip}=\mand{\param{dimen}}}] The distance above the
+ solution author.\\
+ Default: \texttt{1ex}
+ \optitem[{\option{below sheet header skip}=\mand{\param{dimen}}}] The distance below the
+ sheet header.\\
+ Default: \texttt{4ex plus 1ex minus .5ex}
+ \optitem[{\option{above exercise skip}=\mand{\param{dimen}}}] The distance above
+ exercises.\\
+ Default: \texttt{3ex plus 1ex minus .5ex}
+ \optitem[{\option{below exercise title skip}=\mand{\param{dimen}}}] The distance below
+ exercise titles.\\
+ Default: \texttt{\textbackslash parskip}
+ \optitem[{\option{above solution skip}=\mand{\param{dimen}}}] The distance above
+ solutions.\\
+ Default: \texttt{1ex}
+ \optitem[{\option{above hint skip}=\mand{\param{dimen}}}] The distance above hints.\\
+ Default: \texttt{1ex}
+\end{description}
+
+The following two options control the page handling at the beginning and
+at the end of each sheet:
+\begin{description}
+ \optitem[{\option{sheet start page action}=\mand{\param{macro}}}] Executed at the beginning
+ of each sheet.\\
+ Default: \lstinline|\clearpage|
+ \optitem[{\option{sheet end page action}=\mand{\param{macro}}}] Executed at the end
+ of each sheet.\\
+ Default: \lstinline|\clearpage|
+\end{description}
+
+The following option controls what follows after the string
+\option{strings/solution} within a solution header. Using this, you can disable a solution header completely or, for instance, add
+a horizontal bar below each solution title.
+\begin{description}
+ \optitem[{\option{solution title separator}=\mand{\param{content}}}] Inserted directly after \option{strings/solution} in a solution title:\\
+ Default: \lstinline|:\par|
+\end{description}
+
+\subsection{Controlling the Sectioning (beta)}
+
+By default, exercises are sections and sheets are parts. They use
+the respective counters and commands. This is impractical, if you
+want to include exercise ``sheets'' as, e.g., a subsection within
+a section of a book or article. While the page handling options
+already allow to dismiss page breaks, sectioning commands might
+still break your layout or structure. Since version \vers{0.15} you
+can use your own counters and commands to start sheets and
+(to a certain degree) exercises. Exercises are currently still
+started by \lstinline|\@startsection| with the counter set to
+\option{exercise counter}, but the level set to 1 (e.g. section).
+This will likely change with one of the next versions, but needs
+some testing. Thus, if you use any of these options, watch for
+undesired consequences and report them via gitlab if possible.
+
+\begin{description}
+ \optitem[{\option{sheet sectioning cmd}=\mand{\param{macro}}}] This macro is
+ called only in one place in the following way:
+ \lstinline|\macro[short title]{long title}|, so it
+ must take one argument in [brackets] and one normal argument.\\
+ Default: \lstinline|\part|
+ \optitem[{\option{sheet counter}=\mand{\param{counter}}}] This counter will be
+ incremented wit every sheet. There was always an internal counter
+ \lstinline|sheetid| used to distinguish sheets for hyperref even if
+ \lstinline|part|s value changed. Do not use this counter here, as it will have strange effects (incremented twice).\\
+ Default: \lstinline|part|
+ \optitem[{\option{exercise counter}=\mand{\param{counter}}}] This counter will
+ be incremented wit every exercise (usually within each sheet).
+ Default: \lstinline|section|
+\end{description}
+
+\subsection{Special Code for Solutions}
+\begin{lstlisting}
+\ifsolutions{(*\param{if true}*)}{(*\param{if false}*)}
+\iforalsolutions{(*\param{if true}*)}{(*\param{if false}*)}
+\ifnonoralsolutions{(*\param{if true}*)}{(*\param{if false}*)}
+\ifsamplesolutions{(*\param{if true}*)}{(*\param{if false}*)}
+\end{lstlisting}
+
+There are also special options for conditionals to be used in the arguments of
+the environments defined by this package:
+\begin{description}
+ \item[\option{ifsolutions=\{\param{options if true}\}\{\param{options if
+ false}\}}] Execute \param{options if true} if solutions are included in
+ the current document, \param{options if false} otherwise.
+ \item[\option{iforalsolutions=\{\param{options if true}\}\{\param{options if
+ false}\}}] Execute \param{options if true} if solutions for oral exercises
+ are included in the current document, \param{options if false} otherwise.
+ \item[\option{ifnonoralsolutions=\{\param{options if true}\}\{\param{options if
+ false}\}}] Execute \param{options if true} if solutions for non-oral
+ exercises are included in the current document, \param{options if false}
+ otherwise.
+ \item[\option{ifsamplesolutions=\{\param{options if true}\}\{\param{options if
+ false}\}}] Execute \param{options if true} if sample solutions for marked
+ exercises are included in the current document, \param{options if false}
+ otherwise.
+\end{description}
+
+Example 1: Only include points for sub-exercises when solutions are typeset:
+\begin{lstlisting}
+\ifsolutions{}{\renewcommand{\points}[2][]{}}
+\end{lstlisting}
+
+Example 2: Modify the sheet header spacing in the non-solution version:
+\begin{lstlisting}
+\begin{sheet}[(*\option{ifsolutions}*)={}{(*\option{above title skip}*)=2ex}]% usually 4ex
+ \dots
+\end{sheet}
+\end{lstlisting}
+
+\subsection{Using Hooks}
+There are several hooks used by \exsh:
+\begin{description}
+ \optitem[{\option{every sheet}}] This is used at the beginning of every sheet.
+ \optitem[{\option{every exercise}}] This is used at the beginning of every exercise.
+ \optitem[{\option{every solution}}] This is used at the beginning of every solution.
+ \optitem[{\option{every hint}}] This is used at the beginning of every hint.
+\end{description}
+
+Hooks can be used to influence the behaviour of the respective environments.
+Users of \texttt{tikz} should be familiar with the concept.
+
+\subsection{Control Skipping of Custom Macros in Skipped Exercises}
+\begin{description}
+ \optitem[{\option{custom skip macro}=\mand{\param{macro}}}]
+\end{description}
+
+If an exercise is not printed, some macros like \lstinline|\label{}|
+are processed nevertheless. However, if you define your own macro
+using one of these, then this macro will be completely ignored
+if the exercise containing it is skipped. This option allows to
+define a custom handler for your macros. The most common use
+checks for your custom macros with
+nested \lstinline|\ifstrequal|s and then either
+executes a custom skipper, replaces your macro with
+the standard version or uses \lstinline|\expandafter| to
+deliver the expanded version of your macro to
+\lstinline|\exshskipcontinue|.
+
+Example:
+\begin{lstlisting}
+\def\mylabel#1{...}
+\def\myitem{...}
+\def\myitemtwo{...}
+\def\skipmylabel#1{...\exshskipcontinue}
+\long\def\customskip#1{
+ \ifstrequal{#1}{\mylabel}
+ {\skipmylabel}
+ {\ifstrequal{#1}{\myitem}
+ {\exshskipcontinue\item}
+ {\ifstrequal{#1}{\myitemtwo}
+ {\expandafter\exshskipcontinue\myitemtwo}
+ {\exshskipcontinue}
+ }
+ }
+}
+\exshset{custom skip macro={\customskip}}
+\end{lstlisting}
+
+\section{The Lua Interface}
+\label{sec:lua}
+
+Since version \vers{0.11} there is a Lua interface for the exercise
+environment. This interface will offer roughly the same features.
+Its main purpose will be allowing to reorder sub-exercises more
+easily and to offer more dynamic options for the display of
+solutions (one combined solution or single after each sub-%
+exercise). %TODO finish
+
+\begin{lstlisting}
+\begin{Lexercise}
+ --use [[]] if you need \ or escape it in "": "\\"
+ firstline = [[Assume $\pi=4$.]],
+ points=10,
+ name="Pragmatic",
+ options=[[main task font={\itshape}]],
+ task = [[
+ This is the main task specified via the Lua
+ interface.
+ ]],
+ solution=[[
+ This is a solution for the main task.
+ ]],
+\end{Lexercise}
+\end{lstlisting}
+
+\section{Usage Tips}
+\label{sec:usage-tips}
+
+\subsection{Seperate Solution File}
+\label{sec:seper-solut-file}
+
+If you do not want to temporarily comment out the \option{solutions} option in
+your main file, say \texttt{exercises.tex}, you can create an additional file
+\texttt{solutions.tex} with the following contents:
+\begin{lstlisting}
+\PassOptionsToPackage{solutions}{exercisesheets}
+\input{exercises.tex}
+\end{lstlisting}
+If you leave out the \option{solutions} option in you main file, running
+\texttt{pdflatex exercises.tex} will create \texttt{exercises.pdf} without
+solutions and \texttt{pdflatex solutions.tex} will create \texttt{solutions.pdf}
+with solutions.
+
+This also works well in combination with a makefile that generates
+\texttt{solutions.tex} as a temporary file.
+
+\subsection{Compatibilty with make4ht and tex4ebook}
+Since version \vers{0.15} this package can be used with make4ht and tex4ebook in non-beamer mode. Some code for the sheet and exercise header already provides a similar alignment as when producing PDF files. If your goal is an exercise (or solution) document within a single HTML file that looks as similar to the PDF as possible, consider \url{https://tex.stackexchange.com/questions/605478/}, \url{https://tex.stackexchange.com/questions/662445} and \url{https://tex.stackexchange.com/questions/630992}.
+
+\section{Changelog}
+\label{sec:changelog}
+
+\begin{itemize}
+ \versitem[0.17:] 2024-04-23
+ \begin{itemize}
+ \item Make embedded mode work better with beamer. This
+ includes not overriding headlines and footlines and
+ incrementing the frame counter for non-frames.
+ \item issue an explicit warning if \string\subtask is outside of a subtasks environment
+ \item clearify documentation and use consistent styling
+ \item additional example for embedding exercises
+ \end{itemize}
+ \versitem[0.16:] 2024-03-07
+ \begin{itemize}
+ \item Embedded mode and most of the additional options it
+ automatically sets.
+ \end{itemize}
+ \versitem[0.15.1:] 2023-12-14
+ \begin{itemize}
+ \item bugfix: beamer support was broken in \vers{0.15} due to
+ a missing macro.
+ \end{itemize}
+ \versitem[0.15:] 2023-11-30
+ \begin{itemize}
+ \item new option \option{solution title separator}
+ (initially set to\lstinline|:\par|). Among other things, this
+ allows for solutions without any caption or header by
+ setting \option{solution title separator},~
+ \option{solution title font} as well as
+ \option{strings/solution} to \lstinline|\relax|.
+ \item initial support for \binary{make4ht} and
+ \binary{tex4ebook} by avoiding certain behavior when these
+ modes are used. Note that both are incompatible with beamer
+ mode.
+ \item initial decoupling of exercise and sheet from
+ sections and parts using the new options (defaults in
+ parenthesis) \option{sheet sectioning cmd} (\lstinline|\part|),
+ \option{sheet counter} (\lstinline|part|) and
+ \option{exercise counter} (\lstinline|section|).
+ \end{itemize}
+ \versitem[0.14:] 2023-02-06
+ \begin{itemize}
+ \item new option \option{headerrestate} to restate
+ the current (if in subexercise) or main task within
+ a solutions header
+ \item bugfix: \lstinline|\restatetask| etc. give meaningful error if \option{savetasks} is not set.
+ \end{itemize}
+ \versitem[0.13.1:] 2022-11-22
+ \begin{itemize}
+ \item bugfix: \lstinline|\detokenize| filenames when
+ \option{filenameasexercisename} is active as otherwise,
+ e.g., underscores would not be allowed in filenames.
+ \end{itemize}
+ \versitem[0.12.2:] 2022-10-20
+ \versitem[0.13:] 2022-11-07
+ \begin{itemize}
+ \item bugfix: \lstinline|\begingroup| and \lstinline|\endgroup|
+ within \lstinline|\subtask| now contain everything up to the
+ next \lstinline|\subtask|.
+ \item \lstinline|\restatetask| has now a starred version that
+ adds a newline and beamer versions for both the
+ regular and the starred version. Furthermore, there
+ is an argument \option{cur} to restate the current
+ subtask (the one just given before). This is only
+ defined within the aforementioned group, i.e.,
+ throws an error after \lstinline|\end{subtasks}|.
+ \end{itemize}
+ \versitem[0.12.2:] 2022-10-20
+ \begin{itemize}
+ \item bugfix: \luadisp{dofile} with
+ \luadisp{kpse.find\_file}
+ \item docs: document option \option{fragile}
+ \end{itemize}
+ \versitem[0.12.1:] 2022-10-19
+ \begin{itemize}
+ \item bugfix for \lstinline|\begin{enumerate}[<+->]|
+ \end{itemize}
+ \versitem[0.12:] 2022-09-02
+ \begin{itemize}
+ \item new option \option{beamerwithfootline}
+ \end{itemize}
+ \versitem[0.11:] 2022-02-11
+ \begin{itemize}
+ \item Local references and the subex counter
+ \item Lua interface (not documented yet, see example and example file)
+ \item Framed solutions can now be fragile, however this
+ also requires Lua\LaTeX (but not using the Lua Interface).
+ \item beamer version is now included (no separate package)
+ \item some bug fixes
+ \end{itemize}
+\end{itemize}
+
+
+\end{document}
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: t
+%%% End:
+
+%%% Local IspellDict: british
diff --git a/macros/latex/contrib/exercisesheets/exercisesheets.sty b/macros/latex/contrib/exercisesheets/exercisesheets.sty
new file mode 100644
index 0000000000..34a68ce6a7
--- /dev/null
+++ b/macros/latex/contrib/exercisesheets/exercisesheets.sty
@@ -0,0 +1,1961 @@
+%% exercisesheets.sty
+%% Copyright 2008-2023 Sebastian Kuhnert, Frank Fuhlbrück
+%
+% This work may be distributed and/or modified under the conditions
+% of the LaTeX Project Public License, either version 1.3c of this
+% license or (at your option) any later version. The latest version
+% of this license is in https://www.latex-project.org/lppl.txt and
+% version 1.3c or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Frank Fuhlbrück.
+%
+% This work consists of the files listed in README.
+
+
+%\NeedsTeXFormat{LaTeX2e}[1994/12/01]
+
+% don't forget to update the version and date in exercisesheets.tex
+\def\exsh@version{0.17}
+\def\exsh@date{2024/04/23}
+
+\ProvidesPackage{exercisesheets}[\exsh@date\space\exsh@version\space Typesetting of exercise sheets]
+\message{`Typesetting of exercise sheets' \exsh@version\space <\exsh@date>}
+
+% TODO: fix "above hint skip"
+
+
+\RequirePackage{etoolbox}%[2008/06/28]
+\RequirePackage{scrlfile}
+\RequirePackage{environ}
+
+\RequirePackage{pgfkeys}
+\RequirePackage{keyval}
+\RequirePackage{kvoptions}
+
+\RequirePackage{ifthen}
+\RequirePackage{ifluatex}
+
+\RequirePackage{amsmath}
+
+\RequirePackage{currfile}
+\RequirePackage{catchfile}
+
+%we need getrefnumber
+\RequirePackage{refcount}
+
+% configuration keys
+
+\newif\ifexsh@beamer
+\@ifclassloaded{beamer}{\exsh@beamertrue}{}
+\newif\ifexsh@html
+\@ifclassloaded{tex4ht}{\exsh@htmltrue}{}
+\ifdefined\HCode
+ \exsh@htmltrue
+\fi
+\ifexsh@html
+ \def\exsh@inshtml#1{\HCode{#1}}
+\else
+ \def\exsh@inshtml#1{}
+\fi
+
+\newif\ifexsh@patchenumerate\exsh@patchenumeratetrue
+\newif\ifexsh@settitle\exsh@settitletrue
+\newif\ifexsh@patchpagenumbers\exsh@patchpagenumberstrue
+\newif\ifexsh@patchheadandfoot\exsh@patchheadandfoottrue
+\newif\ifexsh@usestartsection\exsh@usestartsectiontrue
+\newif\ifexsh@firstexonsheet
+\def\exsh@firstexonsheettrue{\global\let\ifexsh@firstexonsheet\iftrue}
+\def\exsh@firstexonsheetfalse{\global\let\ifexsh@firstexonsheet\iffalse}
+\newif\ifexsh@savetasks
+\newif\ifexsh@solutions
+\newif\ifexsh@oralsolutions
+\newif\ifexsh@nonoralsolutions
+\newif\ifexsh@samplesolutions
+\newif\ifexsh@exnumsheet
+\newif\ifexsh@forcesample %force printing sample sol. of wrong type
+%For beamer only
+%%%%%%%%%%%%%%% BEGIN BEAMER-SPECIFIC: %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ifexsh@beamer
+\newif\ifexsh@beamerwithheadline
+\newif\ifexsh@beamerwithfootline
+\newif\ifexsh@beameruseblocks
+\newif\ifexsh@defersolutiontitle
+\newif\ifexsh@headerrestate
+\newif\ifexsh@framed
+\newif\ifexsh@fragile
+\fi
+%Also only true for beamer, but we want to use it elsewhere
+\newif\ifexsh@beamersolution
+%%
+\newif\ifexsh@gradingguides
+\newif\ifexsh@inplace
+\newif\ifexsh@sample
+\newif\ifexsh@hide%currently only set via sample in exercise env.
+\newif\ifexsh@pointsfloatright
+\newif\ifexsh@bonus
+\newif\ifexsh@abbrev
+\newif\ifexsh@sumuppoints
+\newif\ifexsh@filenameasexercisename
+\newif\ifexsh@showtodos
+\newif\ifexsh@beamercompatdone
+
+\def\exsh@beamercompatibility{
+\ifexsh@beamercompatdone
+ \PackageError{exercisesheets}{
+ beamercompatibility used twice}{}%
+\else
+%%%%%%%%%%%%%%% BEGIN BEAMER-SPECIFIC: %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifexsh@beamer
+ %currently we do nothing if beamer is loaded,
+ %but this might change
+\else%--------- NON-BEAMER: ---------------------------------------
+ \let\pause\relax
+ \def\frame{}
+ \renewcommand{\frame}[1][]{}
+ \let\endframe\relax
+ \def\onslide<##1>{}
+ \def\only<##1>##2{##2}
+ \def\uncover<##1>##2{##2}
+ \def\visible<##1>##2{##2}
+ \def\invisible<##1>##2{##2}
+ \long\def\alt<##1>##2##3{##2}
+ \long\def\temporal<##1>##2##3##4{##3}
+ \let\exsh@origitem\item
+ \def\exsh@ovrlitem<##1>{\exsh@origitem}
+ \def\item{\@ifnextchar<\exsh@ovrlitem\exsh@origitem}
+ \let\exsh@origitemize\itemize
+ \def\exsh@ovrlitemize[##1]{\exsh@origitemize}
+ \def\itemize{\@ifnextchar[\exsh@ovrlitemize\exsh@origitemize}
+ \let\exsh@origenumerate\enumerate
+ \def\exsh@ovrlenumerate[##1]{\exsh@origenumerate}
+ \def\enumerate{\@ifnextchar[\exsh@ovrlenumerate\exsh@origenumerate}
+\fi
+%%%%%%%%%%%%%%% END BEAMER-SPECIFIC %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \exsh@beamercompatdonetrue
+\fi
+}
+
+\pgfkeys{/exsh/.is family,/exsh,
+ patchenumerate/.is if=exsh@patchenumerate,
+ patchenumerate/.default=true,
+ settitle/.is if=exsh@settitle,
+ settitle/.default=true,
+ patchpagenumbers/.is if=exsh@patchpagenumbers,
+ patchpagenumbers/.default=true,
+ usestartsection/.is if=exsh@usestartsection,
+ usestartsection/.default=true,
+ embedded/.code={%
+ \exsh@patchenumeratefalse
+ \exsh@settitlefalse
+ \exsh@patchpagenumbersfalse
+ \exsh@patchheadandfootfalse
+ \exsh@usestartsectionfalse
+ \pgfkeysalso{secnumdepth=keep}%
+ \def\exhs@sheetnoheader[##1]##2{}%
+ \newcounter{exshsheet}
+ \newcounter{exshexercise}
+ \pgfkeysalso{
+ sheet sectioning cmd=\exhs@sheetnoheader,
+ sheet counter=exshsheet,
+ exercise counter=exshexercise,
+ sheet start page action=\relax,
+ sheet end page action=\relax,
+ }%
+ },
+ minskips/.code={%
+ \pgfkeysalso{
+ above sheet title skip=0pt,
+ below sheet header skip=0pt,
+ above first exercise skip=0pt,
+ below exercise title skip=0pt,
+ }%
+ },
+ savetasks/.is if=exsh@savetasks,
+ savetasks/.default=true,
+ solutions/.is choice,
+ solutions/true/.code=\exsh@solutionstrue\exsh@oralsolutionstrue\exsh@nonoralsolutionstrue,
+ solutions/oral/.code=\exsh@solutionstrue\exsh@oralsolutionstrue\exsh@nonoralsolutionsfalse,
+ solutions/nonoral/.code=\exsh@solutionstrue\exsh@oralsolutionsfalse\exsh@nonoralsolutionstrue,
+ solutions/sample nonoral/.code=\exsh@solutionstrue\exsh@oralsolutionsfalse\exsh@nonoralsolutionstrue\exsh@samplesolutionstrue,
+ solutions/sample oral/.code=\exsh@solutionstrue\exsh@oralsolutionstrue\exsh@nonoralsolutionsfalse\exsh@samplesolutionstrue,
+ solutions/sample all/.code=\exsh@solutionstrue\exsh@oralsolutionstrue\exsh@nonoralsolutionstrue\exsh@samplesolutionstrue,
+ solutions/false/.code=\exsh@solutionsfalse\exsh@oralsolutionsfalse\exsh@nonoralsolutionsfalse,
+ solutions/.default=true,
+ number within sheet/.is if=exsh@exnumsheet,
+ number within sheet/.default=true,
+ forcesample/.is if=exsh@forcesample,
+ forcesample/.default=true,
+ gradingguides/.is if=exsh@gradingguides,
+ gradingguides/.default=true,
+ only/.initial={-},
+ all/.style={/exsh/only={-}},all/.value forbidden,
+ solutionsby/.code={\def\exsh@solutionsby{#1}},
+ solutionsby/.value required,
+ exercisespath/.code={\def\exsh@exercisespath{#1}},
+ exercisespath/.value required,
+ bonus/.is if=exsh@bonus,
+ bonus/.default=true,
+ inplace/.is if=exsh@inplace,
+ inplace/.default=true,
+ sample/.is if=exsh@sample,
+ sample/.default=true,
+ showtodos/.is if=exsh@showtodos,
+ showtodos/.default=true,
+ filenameasexercisename/.is if=exsh@filenameasexercisename,
+ filenameasexercisename/.default=true,
+ pointsfloatright/.is if=exsh@pointsfloatright,
+ pointsfloatright/.default=true,
+ abbrev/.is if=exsh@abbrev,
+ abbrev/.default=true,
+ beamercompatibility/.default={ignore},
+ beamercompatibility/.initial={ignore},
+ beamercompatibility/.code={\exsh@beamercompatibility}
+}
+
+%%%%%%%%%%%%%%% BEGIN BEAMER-SPECIFIC: %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifexsh@beamer
+\pgfkeys{exsh,
+ beamerwithheadline/.is if=exsh@beamerwithheadline,
+ beamerwithheadline/.default=true,
+ beamerwithfootline/.is if=exsh@beamerwithfootline,
+ beamerwithfootline/.default=true,
+ beameruseblocks/.is if=exsh@beameruseblocks,
+ beameruseblocks/.default=true,
+ beamersolution/.is if=exsh@beamersolution,
+ beamersolution/.default=true,
+ defersolutiontitle/.is if=exsh@defersolutiontitle,
+ defersolutiontitle/.default=true,
+ headerrestate/.is if=exsh@headerrestate,
+ headerrestate/.default=true,
+ framed/.is if=exsh@framed,
+ framed/.default=true,
+ fragile/.is if=exsh@fragile,
+ fragile/.default=true,
+ beamersolution/.initial={false},
+ beamerwithheadline/.initial={false},
+ beamerwithfootline/.initial={false},
+ beameruseblocks/.initial={false},
+ defersolutiontitle/.initial={false},
+ headerrestate/.initial={false},
+ framed/.initial={false},
+}
+\else%--------- NON-BEAMER: ---------------------------------------
+\pgfkeys{exsh,
+ beamerwithheadline/.default={ignore},
+ beamerwithheadline/.initial={ignore},
+ beamerwithfootline/.default={ignore},
+ beamerwithfootline/.initial={ignore},
+ beamersolution/.default={ignore},
+ beamersolution/.initial={ignore},
+ defersolutiontitle/.default={ignore},
+ defersolutiontitle/.initial={ignore},
+ headerrestate/.default={ignore},
+ headerrestate/.initial={ignore},
+ framed/.default={ignore},
+ framed/.initial={ignore},
+ framed/.code={\let\newframe\relax},
+ fragile/.default={ignore},
+ fragile/.initial={ignore},
+}
+\fi
+%%%%%%%%%%%%%%% END BEAMER-SPECIFIC %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% store title data for sheet headers
+\ifundef\subject{% \subject is only provided by KOMA classes
+ \newcommand{\subject}[1]{}%
+ \def\@subject{}%
+}{}
+% beamer has subject, but not \@subject:
+\providecommand{\@subject}{}
+\apptocmd{\subject}{\pgfkeys{/exsh/subject={#1}}}{}{}%
+\ifdefempty{\@subject}{
+ \pgfkeys{exsh,subject/.initial={\PackageWarning{exercisesheets}{No \string\subject\space given}}}
+}{
+ \pgfkeys{/exsh/subject/.initial/.expand once=\@subject}
+}
+\ifdefstring{\@date}{\today}{
+ \pgfkeys{/exsh/semester/.initial={\PackageWarning{exercisesheets}{No semester given in \string\date}}}
+}{
+ \pgfkeys{/exsh/semester/.initial/.expand once=\@date}
+}
+\let\@exsh@origdate\date
+\renewcommand{\date}[1]{\@exsh@origdate{#1}\pgfkeys{/exsh/semester={#1}}}
+% this breaks (likely because of detokenization):
+% -> missing \begin{document}
+% \apptocmd{\date}{\pgfkeys{/exsh/semester={#1}}}{}{}
+\pgfkeys{/exsh/author/.code={%
+ \def\exsh@author{#1}%
+ \def\exsh@repeat{1}%
+ \loop\ifnum\exsh@repeat>0
+ \def\exsh@repeat{0}%
+ \patchcmd{\exsh@author}{\and}{, }{\def\exsh@repeat{1}}{}%
+ \repeat
+ },
+ /exsh/author/.expand once=\@author}
+\let\exsh@oldauthor\author
+\def\author#1{\exsh@oldauthor{#1}\pgfkeys{/exsh/author={#1}}}
+
+% helper macro for automatic language selection
+\newif\ifexsh@provideonly
+\def\exsh@deforprovide#1#2{%
+ \ifthenelse{\(\NOT\boolean{exsh@provideonly}\)
+ \OR \equal{}{\pgfkeysvalueof{#1}}}{%
+ \pgfkeys{#1=#2}%
+ }{}%
+}
+
+\pgfkeys{exsh,
+ %general package options
+ patchenumerate/.initial=true,
+ settitle/.initial=true,
+ patchpagenumbers/.initial=true,
+ custom skip macro/.initial=\exsh@skipcustomstuff,
+ showtodos/.initial={false},
+ hidetodos/.style={/exsh/showtodos=false},
+ hidetodos/.value forbidden,
+ % additional sheet info
+ title/.initial={},
+ date/.initial={},
+ note/.initial={},
+ exauthor/.initial={\exsh@author},
+ number within sheet/.initial={false},
+ %
+ % additional exercise info
+ name/.initial={},
+ forcesample/.initial={false},
+ firstline/.initial={},
+ points/.initial={},
+ oral/.style={/exsh/points=oral},oral/.value forbidden,
+ inplace/.initial={false},
+ sample/.initial={false},
+ filenameasexercisename/.initial={false},
+ pointsfloatright/.initial={false},
+ bonus/.initial={false},
+ nobonus/.style={/exsh/bonus=false},nobonus/.value forbidden,
+ abbrev/.initial={false},
+ noabbrev/.style={/exsh/abbrev=false},noabbrev/.value forbidden,
+ pointsinfo/.initial={},
+ optional/.style={/exsh/pointsinfo=\ifexsh@abbrev%
+ \pgfkeysvalueof{/exsh/strings/optional abbrev}%
+ \else%
+ \pgfkeysvalueof{/exsh/strings/optional}%
+ \fi},
+ optional/.value forbidden,
+ exercisemark/.initial={},
+ difficult/.style={/exsh/exercisemark=*},difficult/.value forbidden,
+ savetasks/.initial=false,
+}
+\pgfkeys{exsh,
+ %
+ % translatable strings
+ strings/sheet/.initial={},
+ strings/sheets/.initial={},
+ strings/solutions/.initial={},
+ strings/solutionsby/.initial={},
+ strings/gradingguide/.initial={},
+ strings/exercise/.initial={},
+ strings/solution/.initial={},
+ strings/idea/.initial={},
+ strings/hint/.initial={},
+ strings/remark/.initial={},
+ strings/oral/.initial={},
+ strings/oral abbrev/.initial={},
+ strings/point/.initial={},
+ strings/points/.initial={},
+ strings/points abbrev/.initial={},
+ strings/bonus point/.initial={},
+ strings/bonus points/.initial={},
+ strings/bonus points abbrev/.initial={},
+ strings/optional/.initial={},
+ strings/optional abbrev/.initial={},
+ %
+ % languages: predifined string sets
+ language/.is choice,
+ language/german/.code={%
+ \exsh@deforprovide{/exsh/strings/sheet} {\"Ubungsblatt}%
+ \exsh@deforprovide{/exsh/strings/sheets} {\"Ubungsbl\"atter}%
+ \exsh@deforprovide{/exsh/strings/solutions} {L\"osungsvorschl\"age}%
+ \exsh@deforprovide{/exsh/strings/solutionsby} {L\"osungen von}%
+ \exsh@deforprovide{/exsh/strings/gradingguide}{Bepunktung}%
+ \exsh@deforprovide{/exsh/strings/exercise} {Aufgabe}%
+ \exsh@deforprovide{/exsh/strings/solution} {L\"osung}%
+ \exsh@deforprovide{/exsh/strings/idea} {L\"osungsidee}%
+ \exsh@deforprovide{/exsh/strings/hint} {Hinweis}%
+ \exsh@deforprovide{/exsh/strings/remark} {Bemerkung}%
+ \exsh@deforprovide{/exsh/strings/oral} {m\"undlich}%
+ \exsh@deforprovide{/exsh/strings/oral abbrev} {mdl.}%
+ \exsh@deforprovide{/exsh/strings/point} {Punkt}%
+ \exsh@deforprovide{/exsh/strings/points} {Punkte}%
+ \exsh@deforprovide{/exsh/strings/points abbrev}{P.}%
+ \exsh@deforprovide{/exsh/strings/bonus point} {Zusatzpunkt}%
+ \exsh@deforprovide{/exsh/strings/bonus points}{Zusatzpunkte}%
+ \exsh@deforprovide{/exsh/strings/bonus points abbrev}{ZP.}%
+ \exsh@deforprovide{/exsh/strings/optional} {optional}%
+ \exsh@deforprovide{/exsh/strings/optional abbrev} {opt.}%
+ },language/german/.value forbidden,
+ language/ngerman/.style={/exsh/language/german=#1},
+ language/english/.code={%
+ \exsh@deforprovide{/exsh/strings/sheet} {Exercise Sheet}%
+ \exsh@deforprovide{/exsh/strings/sheets} {Exercise Sheets}%
+ \exsh@deforprovide{/exsh/strings/solutions} {Suggested Solutions}%
+ \exsh@deforprovide{/exsh/strings/solutionsby} {Solutions by}%
+ \exsh@deforprovide{/exsh/strings/gradingguide}{Grading guideline}%
+ \exsh@deforprovide{/exsh/strings/exercise} {Exercise}%
+ \exsh@deforprovide{/exsh/strings/solution} {Solution}%
+ \exsh@deforprovide{/exsh/strings/idea} {Idea for solution}%
+ \exsh@deforprovide{/exsh/strings/hint} {Hint}%
+ \exsh@deforprovide{/exsh/strings/remark} {Remark}%
+ \exsh@deforprovide{/exsh/strings/oral} {oral}%
+ \exsh@deforprovide{/exsh/strings/oral abbrev} {oral}%
+ \exsh@deforprovide{/exsh/strings/point} {point}%
+ \exsh@deforprovide{/exsh/strings/points} {points}%
+ \exsh@deforprovide{/exsh/strings/points abbrev}{p.}%
+ \exsh@deforprovide{/exsh/strings/bonus point} {bonus point}%
+ \exsh@deforprovide{/exsh/strings/bonus points}{bonus points}%
+ \exsh@deforprovide{/exsh/strings/bonus points abbrev}{b.p.}%
+ \exsh@deforprovide{/exsh/strings/optional} {optional}%
+ \exsh@deforprovide{/exsh/strings/optional abbrev} {opt.}%
+ },language/english/.value forbidden,
+ language/.unknown/.code={%
+ \PackageWarning{exercisesheets}{Unknown language \pgfkeyscurrentname.
+ Defaulting to English.}{}%
+ \pgfkeys{/exsh/language=english}%
+ },
+ %
+ % alternate strings
+ idea/.style={/exsh/strings/solution=\pgfkeysvalueof{/exsh/strings/idea}},
+ remark/.style={/exsh/strings/hint=\pgfkeysvalueof{/exsh/strings/remark}},
+ %
+ % hooks
+ every sheet/.code={},
+ every exercise/.code={},
+ every solution/.code={},
+ every hint/.code={},
+ %
+ % sectioning cmds and counters for sheet and exercise
+ % sheet sectioning cmd must take an optional
+ % and a mandatory argument
+ sheet sectioning cmd/.initial={\part},
+ sheet counter/.initial={part},
+ secnumdepth/.initial={-1},
+ exercise counter/.initial={section},
+ %
+ % font specifications
+ sheet header font/.initial=\normalfont\normalsize,
+ subject font/.initial=\scshape,
+ author font/.initial=\scshape,
+ semester font/.initial={},
+ date font/.initial={},
+ solutionsby font/.initial=\itshape,
+ sheet note font/.initial=\itshape\bfseries,
+ sheet title font/.initial=\Large\bfseries,
+ exercise title font/.initial=\bfseries,
+ points font/.initial=\itshape,
+ main task font/.initial={},
+ subtask font/.initial={},
+ task restate font/.initial=\itshape,
+ hint font/.initial={},
+ hint title font/.initial=\itshape,
+ solution font/.initial={},
+ solution title font/.initial=\bfseries,
+ solution title separator/.initial={:\par},
+ grading guide font/.initial=\itshape,
+ todo marker font/.initial=\ifdef{\color}{\color{red}}{}\bfseries,
+ %
+ % skip values
+ below slide headline skip/.initial={0mm},
+ above sheet title skip/.initial={4ex},
+ above sheet note skip/.initial={.7ex},
+ above solutionsby skip/.initial={1ex},
+ below sheet header skip/.initial={4ex plus 1ex minus .5ex},
+ above exercise skip/.initial={3ex plus 1ex minus .5em},
+ above first exercise skip/.initial={3ex plus 1ex minus .5em},
+ below exercise title skip/.initial={\parskip},
+ above solution skip/.initial={1ex},
+ above hint skip/.initial={1ex},
+ %
+ % page handling
+ sheet start page action/.initial={\clearpage},
+ sheet end page action/.initial={\clearpage},
+ %
+ % conditionals
+ ifsolutions/.code 2 args={\ifsolutions{\pgfkeysalso{#1}}{\pgfkeysalso{#2}}},
+ iforalsolutions/.code 2 args={\iforalsolutions{\pgfkeysalso{#1}}{\pgfkeysalso{#2}}},
+ ifnonoralsolutions/.code 2 args={\ifnonoralsolutions{\pgfkeysalso{#1}}{\pgfkeysalso{#2}}},
+}
+
+% default values
+\pgfkeys{exsh,solutions=false,all}
+
+% process package options
+\@expandtwoargs\pgfqkeys{/exsh}{\csname opt@exercisesheets.sty\endcsname}
+
+% mark options as processed
+\expandafter\undef\csname opt@exercisesheets.sty\endcsname
+
+% allow further keys to be set
+\def\exshset#1{\pgfkeys{exsh,#1}}
+
+%%%%%%%%%%%%%%% BEGIN BEAMER-ONLY: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifexsh@beamer
+\define@key{beamerframe}{t}[true]{% top
+ \beamer@frametopskip=-2pt\relax%
+ \beamer@framebottomskip=0pt plus 1fill\relax%
+ \beamer@frametopskipautobreak=\beamer@frametopskip\relax%
+ \beamer@framebottomskipautobreak=\beamer@framebottomskip\relax%
+}
+\fi
+%%%%%%%%%%%%%%% END BEAMER-ONLY %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% automatic language selection
+\AfterEndPreamble{%
+ \exsh@provideonlytrue
+ \ifdef{\bbl@main@language}{%
+ \pgfkeys{/exsh/language=\bbl@main@language}%
+ }{%
+ \pgfkeys{/exsh/language=english}%
+ }%
+ \exsh@provideonlyfalse
+}%
+
+% range checks
+\newif\ifexsh@isinrange
+\newif\ifexsh@singularrange
+\def\exsh@checkrange#1{%
+ \edef\exsh@range@entry{#1}%
+ \def\exsh@range@curstart{}%
+ \exsh@isinrangefalse
+ \exsh@singularrangetrue
+ \pgfkeysgetvalue{/exsh/only}{\exsh@temp}%
+ \ifthenelse{\equal{-}{\exsh@temp}}{%
+ \exsh@isinrangetrue
+ \ifnumequal{\exsh@lastsheet}{1}{%
+ \exsh@singularrangetrue
+ }{%
+ \exsh@singularrangefalse
+ }%
+ }{%
+ \expandafter\exsh@range@parsestart\exsh@temp\exsh@range@end
+ }%
+}
+\def\exsh@range@parsestart#1{%
+ \ifstrequal{#1}{,}{%
+ \exsh@singularrangefalse
+ \ifdefstring{\exsh@range@curstart}{last}{%
+ \let\exsh@range@curstart\exsh@lastsheet
+ }{}%
+ \ifdefequal{\exsh@range@entry}{\exsh@range@curstart}{%
+ \exsh@isinrangetrue
+ }{}%
+ \def\exsh@range@curstart{}%
+ \exsh@range@parsestart
+ }{%
+ \ifstrequal{#1}{\exsh@range@end}{%
+ \ifdefstring{\exsh@range@curstart}{last}{%
+ \let\exsh@range@curstart\exsh@lastsheet
+ }{}%
+ \ifdefequal{\exsh@range@entry}{\exsh@range@curstart}{%
+ \exsh@isinrangetrue
+ }{}%
+ }{%
+ \ifdefequal{#1}{-}{%
+ \exsh@singularrangefalse
+ \ifdefstring{\exsh@range@curstart}{}{%
+ \def\exsh@range@curstart{0}%
+ }{}%
+ \ifdefstring{\exsh@range@curstart}{last}{%
+ \let\exsh@range@curstart\exsh@lastsheet
+ }{}%
+ \def\exsh@range@curend{}%
+ \exsh@range@parseend
+ }{%
+ \appto{\exsh@range@curstart}{#1}%
+ \exsh@range@parsestart
+ }%
+ }%
+ }%
+}
+\def\exsh@range@parseend#1{%
+ \ifstrequal{#1}{,}{%
+ \ifdefstring{\exsh@range@curend}{last}{%
+ \def\exsh@range@curend{10000}%
+ }{}%
+ \ifdefstring{\exsh@range@curend}{}{
+ \def\exsh@range@curend{10000}%
+ }{}%
+ \ifthenelse{\NOT \(\exsh@range@curstart > \exsh@range@entry
+ \OR \exsh@range@entry > \exsh@range@curend\)}{%
+ \exsh@isinrangetrue
+ }{}%
+ \def\exsh@range@curstart{}%
+ \exsh@range@parsestart
+ }{%
+ \ifstrequal{#1}{\exsh@range@end}{%
+ \ifdefstring{\exsh@range@curend}{last}{%
+ \def\exsh@range@curend{10000}%
+ }{}%
+ \ifdefstring{\exsh@range@curend}{}{
+ \def\exsh@range@curend{10000}%
+ }{}%
+ \ifthenelse{\NOT \(\exsh@range@curstart > \exsh@range@entry
+ \OR \exsh@range@entry > \exsh@range@curend\)}{%
+ \exsh@isinrangetrue
+ }{%
+ }%
+ }{%
+ \appto{\exsh@range@curend}{#1}%
+ \exsh@range@parseend
+ }%
+ }%
+}
+
+% remember last sheet (for range checks)
+\def\exsh@lastsheet{0}% to be overridden in aux file
+\AtEndDocument{%
+ \immediate\write\@auxout{\string\gdef\string\exsh@lastsheet{\arabic{\pgfkeysvalueof{/exsh/sheet counter}}}}%
+}
+
+\ifexsh@patchpagenumbers
+ \numberwithin{page}{\pgfkeysvalueof{/exsh/sheet counter}}
+ \renewcommand{\thepage}{\arabic{page}}%changed for every sheet
+\fi
+\ifthenelse{\equal{\pgfkeysvalueof{/exsh/secnumdepth}}{keep}}{}{
+ \setcounter{secnumdepth}{\pgfkeysvalueof{/exsh/secnumdepth}}
+}
+
+\AfterPackage*{hyperref}{%
+ % make PDF destinations unique:
+ \def\theHsection{\arabic{sheetid}.\arabic{\pgfkeysvalueof{/exsh/exercise counter}}}%
+ \ifexsh@patchpagenumbers
+ \def\theHpage{\arabic{sheetid}-\arabic{page}}%
+ \fi
+ %
+ % open bookmarks when typesetting a single sheet
+ \AtEndPreamble{%
+ \exsh@checkrange{0}%
+ \ifexsh@singularrange\hypersetup{bookmarksopen}\fi
+ }%
+}
+
+
+\ifexsh@settitle
+% automatic title selection
+\let\exsh@title\relax
+\let\exsh@title@new\relax
+\def\exsh@write@title#1{%
+ \xdef\exsh@title@new{\expandonce #1}%
+ \protected@write\@auxout{}{\string\gdef\string\exsh@title{\expandonce\exsh@title@new}}%
+}
+\AfterEndDocument{%
+ \ifthenelse{\equal{\exsh@title}{\exsh@title@new}}{}{%
+ \@latex@warning@no@line{Label(s) may have changed.
+ Rerun to get cross-references right}%
+ }%
+}
+\AfterEndPreamble{%
+ \exsh@checkrange{0}%
+ \ifexsh@singularrange\else
+ \pgfkeysgetvalue{/exsh/strings/sheets}{\exsh@tmp}%
+ \exsh@write@title{\exsh@tmp}%
+ \fi
+}
+
+
+\AtBeginDocument{%
+ \ifexsh@solutions
+ \title{\exsh@title: \pgfkeysvalueof{/exsh/strings/solutions}}%
+ \else
+ \title{\exsh@title}
+ \fi
+}
+\else
+ \def\exsh@write@title#1{}
+\fi
+
+\newcounter{sheetid}% only used to disambiguate hyperref labels
+\newenvironment{sheet}[1][]{%
+ \pgfkeys{exsh,every sheet,#1}%
+% \pgfkeysvalueof{/exsh/sheet start page action}%
+ \stepcounter{sheetid}%
+ \ifthenelse{\equal{}{\pgfkeysvalueof{/exsh/title}}}{%
+ \numdef\exsh@tmp{\value{\pgfkeysvalueof{/exsh/sheet counter}}+1}%
+ \edef\exsh@temp{\expandonce{\pgfkeysvalueof{/exsh/strings/sheet}}\noexpand~\exsh@tmp}%
+ \pgfkeys{/exsh/title/.expand once={\exsh@temp}}%
+ \ifexsh@patchpagenumbers
+ \def\thepage{\arabic{\pgfkeysvalueof{/exsh/sheet counter}}-\arabic{page}}%
+ \fi
+ }{%
+ \ifexsh@patchpagenumbers
+ \def\thepage{\arabic{page}}%
+ \fi
+ }%
+ \ifexsh@exnumsheet
+ \edef\exsh@exnumstore{\arabic{\pgfkeysvalueof{/exsh/exercise counter}}}
+ \setcounter{\pgfkeysvalueof{/exsh/exercise counter}}{0}%
+ \fi
+ \numdef\exsh@tmp{\value{\pgfkeysvalueof{/exsh/sheet counter}}+1}%
+ \exsh@checkrange{\exsh@tmp}%
+ \ifexsh@isinrange
+ \ifexsh@singularrange
+ \pgfkeysgetvalue{/exsh/title}{\exsh@temp}%
+ \exsh@write@title{\exsh@temp}%
+ \fi
+ \exsh@sheethead
+ \else
+ \refstepcounter{\pgfkeysvalueof{/exsh/sheet counter}}%
+ \def\exsh@skipwhat{sheet}\expandafter\exsh@skipstuff
+ \fi
+}{%
+ \par
+ \begingroup
+ \ifnum\value{page}=1\thispagestyle{empty}\fi
+ \ifexsh@isinrange
+ \pgfkeysvalueof{/exsh/sheet end page action}%
+ \fi
+ \endgroup
+ \ifexsh@exnumsheet
+ \setcounter{\pgfkeysvalueof{/exsh/exercise counter}}{\exsh@exnumstore}%
+ \fi
+}
+\listadd{\exsh@enums}{enumerate}
+\listadd{\exsh@enums}{compactenum}
+\listadd{\exsh@enums}{asparaenum}
+\listadd{\exsh@enums}{inparaenum}
+\listadd{\exsh@enums}{subtasks}
+\listadd{\exsh@nonenums}{itemize}
+\listadd{\exsh@nonenums}{compactitem}
+\listadd{\exsh@nonenums}{asparaitem}
+\listadd{\exsh@nonenums}{inparaitem}
+\listadd{\exsh@nonenums}{description}
+\listadd{\exsh@nonenums}{compactdesc}
+\listadd{\exsh@nonenums}{asparadesc}
+\listadd{\exsh@nonenums}{inparadesc}
+\listadd{\exsh@nonenums}{asparablank}
+\listadd{\exsh@nonenums}{inparablank}
+\listadd{\exsh@nonenums}{list}
+
+%%%%%%%%%%%%%%% BEGIN BEAMER-SPECIFIC: %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifexsh@beamer
+ \let\exsh@hyper@itemtrue\relax
+\else%--------- NON-BEAMER: ---------------------------------------
+ \ifexsh@html
+ \let\exsh@hyper@itemtrue\relax%
+ \else
+ \def\exsh@hyper@itemtrue{\@hyper@itemtrue}%
+ \fi
+\fi
+%%%%%%%%%%%%%%% END BEAMER-SPECIFIC %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%TODO: We need some proper switch-case here
+%evaluate csname/csdef+detokenize
+\ExplSyntaxOn
+\cs_new_eq:NN \exsh@ifsingletoken \tl_if_single_token:nTF
+\ExplSyntaxOff
+\long\def\exsh@skipstuff#1{%
+ \exsh@ifsingletoken{#1}{%
+ \ifstrequal{#1}{\begin}{\exsh@skipstuff@begin}{%
+ \ifstrequal{#1}{\end}{\exsh@skipstuff@end}{%
+ \ifstrequal{#1}{\includeexercise}{\exsh@skipstuff@incex}{%
+ \ifstrequal{#1}{\includeLexercise}{\exsh@skipstuff@incLex}{%
+ \ifstrequal{#1}{\label}{\exsh@skipstuff@label}{%
+ \ifstrequal{#1}{\subtask}{\exsh@skipstuff@subtask}{%
+ \ifstrequal{#1}{\input}{\exsh@skipstuff@input}{%
+ \ifstrequal{#1}{\exsh@skipstuff@endfile}{\currfile@pop\exsh@skipstuff}{%
+ \ifstrequal{#1}{\setcounter}{\expandafter\exsh@skipstuff\setcounter}{%
+ \ifstrequal{#1}{\item}{\ifdef{\@enumctr}{\exsh@hyper@itemtrue\refstepcounter{\@enumctr}}{}}{}%
+ \pgfkeysvalueof{/exsh/custom skip macro}{#1}}}}}}}}}}%
+ }{%
+ \exsh@skipstuff#1%
+ }%
+}%
+\let\exshskipcontinue\exsh@skipstuff
+\long\def\exsh@skipcustomstuff#1{\exshskipcontinue}
+\def\exsh@skipstuff@end#1{%
+ \expandafter\ifstrequal\expandafter{\exsh@skipwhat}{#1}{%
+ \expandafter\end\expandafter{\exsh@skipwhat}%
+ \let\exsh@skipwhat\relax%
+ }{
+ \endgroup\exsh@skipstuff%
+ }%
+}
+\def\exsh@skipstuff@begin#1{%
+ \begingroup
+ \ifstrequal{#1}{Lexercise}{\exsh@skipstuff@Lexercise}{%
+ \ifstrequal{#1}{exercise}{\refstepcounter{\pgfkeysvalueof{/exsh/exercise counter}}%
+ % automatic label for the first exercise in every included file
+ \ifthenelse{\equal{\jobname}{\currfilebase}}{}{%
+ \ifcsdef{exsh@autolabel@\currfilebase}{}{%
+ \csdef{exsh@autolabel@\currfilebase}{}%
+ \exsh@autolabel{ex:\currfilebase}}}%
+ }{}%
+ \ifinlist{#1}{\exsh@enums}{%
+ \exsh@skipstuff@beginenum
+ }{%
+ \ifinlist{#1}{\exsh@nonenums}{%
+ \undef\@enumctr
+ }{}%
+ \exsh@skipstuff
+ }%
+ }%
+}
+\def\exsh@skipstuff@beginenum{%
+ \ifnum\@enumdepth>\thr@@
+ \@toodeep
+ \else
+ \advance\@enumdepth\@ne
+ \edef\@enumctr{enum\romannumeral\the\@enumdepth}%
+ \setcounter{\@enumctr}{0}%
+ \fi
+ \@ifundefined{@enumlabel@}{%
+ \exsh@skipstuff
+ }{%
+ \@ifnextchar[{\@enumlabel@{\exsh@skipstuff}[}{\exsh@skipstuff}%
+ }%
+}
+\def\exsh@skipstuff@label#1{%
+ % Locally modify \protected@write to use \immediate\write instead.
+ % This is needed to include labels after the last shipout in the aux file.
+ \begingroup
+ \def\protected@write##1##2##3{%
+ \begingroup
+ \let\protect\@unexpandable@protect
+ \immediate\write##1{##3}%
+ \endgroup
+ }%
+ \label{#1}%
+ \endgroup
+ \exsh@skipstuff
+}
+\def\exsh@skipstuff@subtask#1{%
+ \exsh@skipstuff \item #1
+}
+\def\exsh@skipstuff@input#1{%
+ \CatchFileDef{\exsh@inputfilecontent}{#1}{}%
+ \currfile@push
+ \currfile@set{#1}%
+ \expandafter\exsh@skipstuff\exsh@inputfilecontent\exsh@skipstuff@endfile
+}
+
+\def\exsh@skipstuff@incex{%
+ \@ifstar\exsh@skipstuff@incex@@\exsh@skipstuff@incex@%
+}
+
+\newcommand{\exsh@skipstuff@incex@}[2][]{%
+ \exsh@skipstuff\input{%
+ \ifdefvoid{\exsh@exercisespath}{}{\exsh@exercisespath/}#2}%
+}
+
+\newcommand{\exsh@skipstuff@incex@@}[2][]{%
+ \refstepcounter{\pgfkeysvalueof{/exsh/exercise counter}}
+ \exsh@autolabel{ex:#2}
+ \exsh@skipstuff
+}
+
+\def\exsh@skipstuff@incLex{%
+ \@ifstar\exsh@skipstuff@incLex@@\exsh@skipstuff@incLex@%
+}
+
+\newcommand{\exsh@skipstuff@incLex@}[2][]{%
+ \exsh@dlua{
+ local prefix =
+ "\ifdefvoid{\exsh@exercisespath}{}{\exsh@exercisespath/}"
+ exsh_cur_exercise=dofile(prefix .. "#2.lua")
+ }%
+ \expandafter\exsh@skipstuff%
+ \exsh@dlua{exsh_texprintlines(exsh_cur_exercise)}%
+}
+
+\let\exsh@skipstuff@incLex@@\exsh@skipstuff@incex@@
+
+%%%%%%%%%%%%%%% BEGIN BEAMER-SPECIFIC: %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifexsh@beamer
+\def\exsh@sheethead{%
+ \pgfkeysvalueof{/exsh/sheet start page action}%
+ \pgfkeysgetvalue{/exsh/title}{\exsh@tmp}%
+ \ifexsh@solutions
+ \expandafter\edef\expandafter\exsh@tmp{\expandonce\exsh@tmp:\noexpand~\pgfkeysvalueof{/exsh/strings/solutions}}%
+ \fi
+ \refstepcounter{\pgfkeysvalueof{/exsh/sheet counter}}%
+ \begin{frame}
+ \begin{block}{}
+ \centering\Large\exsh@tmp
+ \end{block}
+ \begingroup
+ \pgfkeysvalueof{/exsh/sheet header font}%
+ \ifexsh@solutions%
+ \ifdefvoid{\exsh@solutionsby}{}{%
+ \begingroup
+ \begin{block}{}
+ \pgfkeysvalueof{/exsh/solutionsby font}%
+ \vskip\pgfkeysvalueof{/exsh/above solutionsby skip}%
+ \relax%
+ \pgfkeysvalueof{/exsh/strings/solutionsby}%
+ ~\exsh@solutionsby\\\unskip%
+ \end{block}%
+ \endgroup
+ }%
+ \else
+ \fi
+ \ifthenelse{\equal{}{\pgfkeysvalueof{/exsh/note}}}{%
+ }{%
+ \ifbool{exsh@samplesolutions}{}{%
+ \begingroup
+ \begin{block}{}
+ \pgfkeysvalueof{/exsh/sheet note font}%
+ \vskip\pgfkeysvalueof{/exsh/above sheet note skip}\relax
+ \pgfkeysvalueof{/exsh/note}\\\unskip%
+ \end{block}%
+ \endgroup
+ }%
+ }%
+ \endgroup
+% \stepcounter{page}%
+ \end{frame}
+}
+\global\def\exsh@alignright#1{\hfill #1}%
+\else%--------- NON-BEAMER: ---------------------------------------
+\ifexsh@html
+% \global\def\exsh@part[#1]#2{#2}
+% \exshset{sheet sectioning cmd/.initial={\exsh@part}}
+ \global\def\exsh@alignright#1{%
+ \exsh@inshtml{<span style="float:right">}#1%
+ \exsh@inshtml{</span>}
+ }
+ \global\def\exsh@centering#1{%
+ \exsh@inshtml{<span style="display: block;text-align:center">}#1%
+ \exsh@inshtml{</span>}
+ }
+\else
+ \global\def\exsh@alignright#1{\hfill #1}%
+ \global\def\exsh@centering#1{\centering #1}
+\fi
+\def\exsh@sheethead{%
+ \pgfkeysvalueof{/exsh/sheet start page action}%
+ \pgfkeysgetvalue{/exsh/title}{\exsh@tmp}%
+ \ifexsh@solutions
+ \expandafter\edef\expandafter\exsh@tmp{\expandonce\exsh@tmp:\noexpand~\pgfkeysvalueof{/exsh/strings/solutions}}%
+ \fi
+ \refstepcounter{\pgfkeysvalueof{/exsh/sheet counter}}%
+ \pgfkeysvalueof{/exsh/sheet sectioning cmd}[\pgfkeysvalueof{/exsh/title}]{\normalsize
+ \pgfkeysvalueof{/exsh/sheet header font}%
+ \begingroup\raggedright%
+ {\pgfkeysvalueof{/exsh/subject font}\pgfkeysvalueof{/exsh/subject}}%
+ \exsh@alignright{\pgfkeysvalueof{/exsh/semester font}%
+ \pgfkeysvalueof{/exsh/semester}%
+ }\\
+ {\pgfkeysvalueof{/exsh/author font}\exsh@author}%
+ \exsh@alignright{
+ \pgfkeysvalueof{/exsh/date font}\pgfkeysvalueof{/exsh/date}%
+ }\\
+ \vskip\pgfkeysvalueof{/exsh/above sheet title skip}\relax%
+ \endgroup
+ \begingroup
+ \exsh@centering{\pgfkeysvalueof{/exsh/sheet title font}\exsh@tmp\\}\unskip
+ \endgroup
+ \begingroup
+ \pgfkeysvalueof{/exsh/sheet header font}%
+ \ifexsh@solutions%
+ \ifdefvoid{\exsh@solutionsby}{}{%
+ \begingroup
+ \pgfkeysvalueof{/exsh/solutionsby font}%
+ \vskip\pgfkeysvalueof{/exsh/above solutionsby skip}\relax
+ \exsh@centering{\pgfkeysvalueof{/exsh/strings/solutionsby}~\exsh@solutionsby\\}\unskip%
+ \endgroup
+ }%
+ \else
+ \fi
+ \ifthenelse{\equal{}{\pgfkeysvalueof{/exsh/note}}}{%
+ }{%
+ \ifbool{exsh@samplesolutions}{}{%
+ \begingroup
+ \pgfkeysvalueof{/exsh/sheet note font}%
+ \vskip\pgfkeysvalueof{/exsh/above sheet note skip}\relax
+ \exsh@centering{\pgfkeysvalueof{/exsh/note}\\}\unskip%
+ \endgroup
+ }%
+ }%
+ \endgroup
+ }%
+ \ifdim\z@=\pgfkeysvalueof{/exsh/below sheet header skip}\relax
+ \vskip-\parskip
+ \else
+ \unskip\vskip\pgfkeysvalueof{/exsh/below sheet header skip}\relax
+ \fi
+% \unskip
+% \vskip\pgfkeysvalueof{/exsh/below sheet header skip}\relax
+ \exsh@firstexonsheettrue
+ \ifexsh@patchpagenumbers%
+ \stepcounter{page}%
+ \fi
+}%
+\fi
+%%%%%%%%%%%%%%% END BEAMER-SPECIFIC %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ifdef{\othersectionslevelsformat}{%
+ \renewcommand{\othersectionlevelsformat}[1]{%
+ \ifstrequal{#1}{section}%
+ {}%
+ {\csname the#1\endcsname\autodot\enskip}}%
+}{}
+
+%Do not use \let here as \label may change before its use
+\def\exsh@autolabel{\label}
+\def\inexlabel{\label}
+
+\newcounter{exsh@pts@cur}
+\newcounter{exsh@ptsbonus@cur}
+\newenvironment*{exercise}[1][]{%
+ % TODO: \edef is not safe with luatex and umlauts, only fixed for "oral" for now
+ % TODO: check whether the TODO above is still relevant
+ %\edef seams to work fine with lualatex from TeXLive 2020
+ \pgfkeys{exsh,every exercise,#1,includeoverride}%
+ \ifthenelse{\equal{sum}{\pgfkeysvalueof{/exsh/points}}}{%
+ \ifcsname exsh@sumpts@\the\numexpr\arabic{\pgfkeysvalueof{/exsh/exercise counter}}+1\endcsname
+ \edef\exsh@sumpts{%
+ \csname exsh@sumpts@\the\numexpr\arabic{\pgfkeysvalueof{/exsh/exercise counter}}+1%
+ \endcsname%
+ }%
+ \edef\exsh@sumptsbonus{%
+ \csname exsh@sumptsbonus@\the\numexpr\arabic{\pgfkeysvalueof{/exsh/exercise counter}}+1%
+ \endcsname%
+ }%
+ \ifnumequal{\exsh@sumpts}{0}{%
+ \ifnumequal{\exsh@sumptsbonus}{0}{}{%
+ \edef\exsh@sumpts{\exsh@sumptsbonus}%
+ \exshset{bonus}%
+ }%
+ }{%
+ \ifnumequal{\exsh@sumptsbonus}{0}{}{%
+ \edef\exsh@sumpts{\exsh@sumpts+\exsh@sumptsbonus}%
+ }%
+ }%
+ \else%
+ \def\exsh@sumpts{??}%
+ \fi%
+ \exshset{points/.expanded={\exsh@sumpts}}
+ \setcounter{exsh@pts@cur}{0}
+ \setcounter{exsh@ptsbonus@cur}{0}
+ \exsh@sumuppointstrue%
+ }{%
+ \exsh@sumuppointsfalse%
+ }%
+ \ifthenelse{\equal{off}{\pgfkeysvalueof{/exsh/points}}}{%
+ \def\exsh@points{}%
+ \def\exsh@shortpoints{}%
+ }{%
+ \ifthenelse{\equal{}{\pgfkeysvalueof{/exsh/points}}}{%
+ \edef\exsh@points{\pgfkeysvalueof{/exsh/pointsinfo}}%
+ }{%
+ \ifthenelse{\equal{oral}{\pgfkeysvalueof{/exsh/points}}}{%
+ \ifexsh@abbrev%
+ \pgfkeysgetvalue{/exsh/strings/oral abbrev}{\exsh@points}%
+ \else%
+ \pgfkeysgetvalue{/exsh/strings/oral}{\exsh@points}%
+ \fi%
+ }{%
+ \ifexsh@abbrev%
+ \ifexsh@bonus%
+ \edef\exsh@points{\pgfkeysvalueof{/exsh/points} \pgfkeysvalueof{/exsh/strings/bonus points abbrev}}%
+ \else%
+ \edef\exsh@points{\pgfkeysvalueof{/exsh/points} \pgfkeysvalueof{/exsh/strings/points abbrev}}%
+ \fi%
+ \else%
+ \ifthenelse{\equal{1}{\pgfkeysvalueof{/exsh/points}}}{%
+ \ifexsh@bonus%
+ \edef\exsh@points{1 \pgfkeysvalueof{/exsh/strings/bonus point}}%
+ \else%
+ \edef\exsh@points{1 \pgfkeysvalueof{/exsh/strings/point}}%
+ \fi%
+ }{%
+ \ifexsh@bonus%
+ \edef\exsh@points{\pgfkeysvalueof{/exsh/points} \pgfkeysvalueof{/exsh/strings/bonus points}}%
+ \else%
+ \edef\exsh@points{\pgfkeysvalueof{/exsh/points} \pgfkeysvalueof{/exsh/strings/points}}%
+ \fi%
+ }%
+ \fi%
+ }%
+ \ifthenelse{\equal{}{\pgfkeysvalueof{/exsh/pointsinfo}}}{}{%
+ \edef\exsh@points{\expandonce\exsh@points, \pgfkeysvalueof{/exsh/pointsinfo}}%
+ }%
+ }%
+ \ifthenelse{\equal{}{\exsh@points}}{%
+ \def\exsh@shortpoints{}%
+ }{%
+ \edef\exsh@shortpoints{ (\expandonce\exsh@points)}%
+ }%
+% \preto\exsh@points{
+% \exsh@inshtml{<span style="float:right">}\hfill
+% \enskip\exsh@alignright\bgroup%
+% \pgfkeysvalueof{/exsh/points font}}%
+% \appto\exsh@points{\egroup\exsh@inshtml{</span>}}%
+ \edef\exsh@points{\exsh@alignright{%
+ \pgfkeysvalueof{/exsh/points font}\expandonce\exsh@points
+ }}
+ }%
+ \ifthenelse{\equal{}{\pgfkeysvalueof{/exsh/firstline}}}{%
+ \def\exsh@firstline{}%
+ }{%
+ \def\exsh@firstline{\pgfkeysvalueof{/exsh/firstline}}%
+ \preto\exsh@firstline{\quad\bgroup\normalfont\normalsize}%
+ \appto\exsh@firstline{\egroup}%
+ }%
+ \ifthenelse{\equal{}{\pgfkeysvalueof{/exsh/name}}}{%
+ \def\exsh@exname{}%
+ \def\exsh@shortexname{}%
+ }{%
+ \edef\exsh@exname{\space(\pgfkeysvalueof{/exsh/name})}%
+ \edef\exsh@shortexname{:\space\pgfkeysvalueof{/exsh/name}}%
+ }%
+ \refstepcounter{\pgfkeysvalueof{/exsh/exercise counter}}%
+ \edef\exsh@tmp{[\pgfkeysvalueof{/exsh/strings/exercise} \arabic{\pgfkeysvalueof{/exsh/exercise counter}}\exsh@shortexname\expandonce\exsh@shortpoints]}%
+ \ifbool{exsh@samplesolutions}{\ifbool{exsh@sample}{\exsh@hidefalse}{\exsh@hidetrue}}{\exsh@hidefalse}%
+ \ifbool{exsh@hide}{%
+ \def\exsh@skipwhat{exercise}\exsh@skipstuff%
+ }{%
+ \expandafter\exsh@startheader\exsh@tmp{\noindent%
+ \hbox to 0pt{\hss\pgfkeysvalueof{/exsh/exercisemark}}%
+ \pgfkeysvalueof{/exsh/strings/exercise}~\arabic{\pgfkeysvalueof{/exsh/exercise counter}}\exsh@exname\exsh@firstline\expandonce\exsh@points}%
+ \ifdim\z@=\pgfkeysvalueof{/exsh/below exercise title skip}\relax
+ \vskip-\parskip
+ \else
+ \unskip\vskip\pgfkeysvalueof{/exsh/below exercise title skip}\relax
+ \fi
+ \@afterindentfalse
+ % automatic label for the first exercise in every included file
+ \ifthenelse{\equal{\jobname}{\currfilebase}}{}{%
+ \ifcsdef{exsh@autolabel@\currfilebase}{}{%
+ \csdef{exsh@autolabel@\currfilebase}{}%
+ \exsh@autolabel{ex:\currfilebase}}}%
+ % Use \leavevmode to ensure proper distances above environments that start
+ % with a new \par. Make sure that a \label does not mess up the layout.
+ \@ifnextchar\label{\exsh@label}{\leavevmode\ignorespaces}%
+ }%
+}{%
+ %before writing point sums check that we actually computed them
+ \ifexsh@sumuppoints%
+ \immediate\write\@auxout{
+ \string\expandafter\gdef%
+ \detokenize{\csname} exsh@sumpts@\arabic{\pgfkeysvalueof{/exsh/exercise counter}}\endcsname{%
+ \arabic{exsh@pts@cur}%
+ }%
+ \string\expandafter\gdef%
+ \detokenize{\csname} exsh@sumptsbonus@\arabic{\pgfkeysvalueof{/exsh/exercise counter}}\endcsname{%
+ \arabic{exsh@ptsbonus@cur}%
+ }%
+ }%
+ \fi
+ \ifexsh@beamer\clearpage\fi%%%% <<<<<BEAMER ONLY%%%%%%%%%%%%%%%%%
+}
+\newcommand{\exsh@label}[2]{#1{#2}\leavevmode\ignorespaces}
+
+%%%%%%%%%%%%%%% BEGIN BEAMER-SPECIFIC: %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifexsh@beamer
+\newcommand{\exsh@startheader}[2][]{%
+ \newpage
+ \stepcounter{framenumber}
+% \begin{block}{}
+% \pgfkeysvalueof{/exsh/exercise title font}{#2}%
+% \end{block}
+ \ifbool{exsh@beameruseblocks}{%
+ \begingroup
+ \usebeamercolor{block title}
+ \setbeamercolor{block body}{bg=bg,fg=fg}
+ \block{}{\pgfkeysvalueof{/exsh/exercise title font}{#2}}%
+ \endblock
+ \endgroup
+ }{
+ \begin{beamercolorbox}[rounded=true,wd={\textwidth}]%
+ {block title}
+ \pgfkeysvalueof{/exsh/exercise title font}{#2}
+ \end{beamercolorbox}
+ }
+ \ifexsh@patchenumerate
+ \setbeamertemplate{enumerate items}{\insertenumlabel}
+ \renewcommand{\insertenumlabel}{
+ \ifnum\@enumdepth=1
+ \alph{enumi})
+ \else\ifnum\@enumdepth=2
+ \arabic{enumii}.
+ \else
+ \roman{enumiii}
+ \fi\fi
+ }
+ \fi
+}%
+\else%--------- NON-BEAMER: ---------------------------------------
+\ifexsh@usestartsection
+ \newcommand{\exsh@startheader}[2][]{%
+ \@startsection{section}{1}{\z@}{%
+ \ifexsh@firstexonsheet
+ \pgfkeysvalueof{/exsh/above first exercise skip}%
+ \else
+ \pgfkeysvalueof{/exsh/above exercise skip}
+ \fi
+ }{1em}% afterskip corrected below
+ {\pgfkeysvalueof{/exsh/exercise title font}}%
+ [#1]{#2}%
+ \exsh@firstexonsheetfalse
+ }%
+\else
+ \newcommand{\exsh@startheader}[2][]{%
+ \ifexsh@firstexonsheet
+ \ifdim\z@=\pgfkeysvalueof{/exsh/above first exercise skip}\relax
+ \vskip-\parskip
+ \else
+ \unskip%
+ \vskip\pgfkeysvalueof{/exsh/above first exercise skip}\relax
+ \fi
+ \else
+ \ifdim\z@=\pgfkeysvalueof{/exsh/above exercise skip}\relax
+ \vskip-\parskip
+ \else
+ \unskip%
+ \vskip\pgfkeysvalueof{/exsh/above exercise skip}\relax
+ \fi
+ \fi
+ {\pgfkeysvalueof{/exsh/exercise title font} #2}%
+ \exsh@firstexonsheetfalse
+ }
+\fi
+\fi
+%%%%%%%%%%%%%%% END BEAMER-SPECIFIC %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%includeoverride is not part of the public interface
+\exshset{includeoverride/.style={}}
+\def\includeexercise{%
+ \@ifstar\exsh@includeexercise@\exsh@includeexercise%
+}
+
+\newcommand{\exsh@includeexercise}[2][]{%
+ \ifbool{exsh@filenameasexercisename}{%
+ \exshset{includeoverride/.style={name={\detokenize{#2}},#1}}%
+ }{%
+ \exshset{includeoverride/.style={#1}}%
+ }%
+ \input{\ifdefvoid{\exsh@exercisespath}{}{\exsh@exercisespath/}#2}
+ \exshset{includeoverride/.style={}}
+}
+
+\newcommand{\exsh@includeexercise@}[2][]{%
+ \ifbool{exsh@filenameasexercisename}{%
+ \exshset{includeoverride/.style={name={\detokenize{#2}},#1}}%
+ }{%
+ \exshset{includeoverride/.style={#1}}%
+ }%
+ \begingroup
+ %auto labelling is still allowed, but other labels are forbidden
+ %here we may use \let as the definition is close to its use
+ \let\exsh@autolabel\label
+ \let\inexlabel\label
+ \def\label##1{%
+ \PackageError{exercisesheets}{\string\label{##1}\space
+ inside \string\includeexercise*}{}%
+ }
+ \input{\ifdefvoid{\exsh@exercisespath}{}{\exsh@exercisespath/}#2}
+ \endgroup
+ \exshset{includeoverride/.style={}}
+}
+
+
+\def\includeLexercise{%
+ \@ifstar\exsh@includeLexercise@\exsh@includeLexercise%
+}
+
+\ifluatex
+\newcommand{\exsh@includeLexercise}[2][]{%
+ \ifbool{exsh@filenameasexercisename}{%
+ \exshset{includeoverride/.style={name={#2},#1}}%
+ }{%
+ \exshset{includeoverride/.style={#1}}%
+ }%
+ \directlua{
+ local prefix =
+ "\ifdefvoid{\exsh@exercisespath}{}{\exsh@exercisespath/}"
+ exsh_cur_exercise=dofile(prefix .. "#2.lua")
+ exsh_texprintlines(exsh_cur_exercise)
+ }%
+ \exshset{includeoverride/.style={}}%
+}
+
+\newcommand{\exsh@includeLexercise@}[2][]{%
+ \ifbool{exsh@filenameasexercisename}{%
+ \exshset{includeoverride/.style={name={#2},#1}}%
+ }{%
+ \exshset{includeoverride/.style={#1}}%
+ }%
+ \begingroup
+ %auto labelling is still allowed, but other labels are forbidden
+ %here we may use \let as the definition is close to its use
+ \let\exsh@autolabel\label
+ \def\label##1{%
+ \PackageError{exercisesheets}{\string\label{##1}\space
+ inside \string\includeLexercise*}{}%
+ }
+ \directlua{
+ local prefix =
+ "\ifdefvoid{\exsh@exercisespath}{}{\exsh@exercisespath/}"
+ exsh_cur_exercise=dofile(prefix .. "#2.lua")
+ exsh_texprintlines(exsh_cur_exercise)
+ }%
+ \endgroup
+ \exshset{includeoverride/.style={}}
+}
+\else
+ \newcommand{\exsh@includeLexercise}[2][]{
+ \refstepcounter{\pgfkeysvalueof{/exsh/exercise counter}}
+ Lexercise needs Lua\LaTeX!
+ }
+ \let\exsh@includeLexercise@\exsh@includeLexercise
+\fi
+
+\AfterPackage*{varioref}{
+ \labelformat{section}{\pgfkeysvalueof{/exsh/strings/exercise}~\arabic{section}}
+}
+
+
+\let\exsh@subexn\getrefnumber
+
+\ifexsh@patchenumerate
+ \AfterPackage*{varioref}{
+ \labelformat{enumi}{\arabic{\pgfkeysvalueof{/exsh/exercise counter}}.\alph{enumi}}
+ \def\exsh@afterdot#1.#2{#2}%x.y -> y
+ \def\exsh@subexn#1{%
+ \if\getrefnumber{#1}0%
+ 0%
+ \else%x.y->y, then inverse \@alph
+ \the\numexpr(\expandafter\expandafter\expandafter%
+ \expandafter\expandafter\expandafter%
+ \expandafter`\expandafter\expandafter\expandafter%
+ \exsh@afterdot\getrefnumber{#1}-`a+1)\relax%
+ \fi%
+ }
+ }
+ \AfterPackage*{paralist}{
+ \setdefaultenum{(a)}{(1)}{i.}{A.}
+ }
+ \AfterPackage*{enumitem}{
+ \setenumerate[1]{label=(\alph*)}
+ \setenumerate[2]{label=(\arabic*)}
+ \setenumerate[3]{label=\roman*.}
+ \setenumerate[4]{label=\Alph.}
+ }
+ \def\theHenumi{enumi.\arabic{\pgfkeysvalueof{/exsh/sheet counter}}.\arabic{\pgfkeysvalueof{/exsh/exercise counter}}.\arabic{enumi}}
+%%%%%%%%%%%%%%% BEGIN BEAMER-SPECIFIC: %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifexsh@beamer
+ % code below breaks [] argument after \begin{enumerate}
+ % when beamer is used
+ % in beamer we set item labels separately
+ % see beamer specific def. of \exsh@startheader
+\else%--------- NON-BEAMER: ---------------------------------------
+ \AtEndPreamble{%
+ \@ifpackageloaded{paralist}{}{%
+ \@ifpackageloaded{enumitem}{}{%
+ \apptocmd{\enumerate}{
+ \ifnum\@enumdepth=1%
+ \def\labelenumi{(\alph{enumi})}
+ \def\labelenumii{\arabic{enumii}.}
+ \def\labelenumiii{\roman{enumiii}.}
+ \fi
+ }{}{}%
+ }%
+ }%
+ }%
+\fi
+%%%%%%%%%%%%%%% END BEAMER-SPECIFIC %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\fi
+
+\newcommand{\subexnref}[1]{\exsh@subexn{#1}}
+\newcommand{\subexlref}[1]{(\@alph{\exsh@subexn{#1}})}
+
+%for now this is not part of the public interface
+\exshset{subtask counter/.initial={enumi}}
+\exshset{subtask environment/.initial={enumerate}}
+\exshset{subtask item/.initial={item}}
+\edef\exsh@subtaskctr{\pgfkeysvalueof{/exsh/subtask counter}}
+\def\exsh@subtaskenv{\pgfkeysvalueof{/exsh/subtask environment}}
+\def\exsh@subtaskitm{\pgfkeysvalueof{/exsh/subtask item}}
+
+%define subex as an alias for enumi
+\expandafter\let\expandafter\c@subex%
+ \csname c@\exsh@subtaskctr\endcsname
+\expandafter\let\expandafter\p@subex%
+ \csname p@\exsh@subtaskctr\endcsname
+\expandafter\let\expandafter\thesubex%
+ \csname the\exsh@subtaskctr\endcsname
+\expandafter\let\expandafter\theHsubex%
+ \csname theH\exsh@subtaskctr\endcsname
+\expandafter\let\expandafter\cl@subex%
+ \csname cl@\exsh@subtaskctr\endcsname
+
+% reset equation numbering for each exercise
+\@addtoreset{equation}{\pgfkeysvalueof{/exsh/exercise counter}}
+
+\long\def\exsh@savemaintask#1{%
+ \global\def\exsh@restatetaskmain{#1}%
+ #1%
+}
+
+\newenvironment{maintask}[1][]{%
+ \pgfkeys{exsh,#1}%
+ \pgfkeysvalueof{/exsh/main task font}%
+ \ifbool{exsh@savetasks}{\Collect@Body\exsh@savemaintask}{}%
+ \ignorespaces
+}{}
+
+\newenvironment{subtasks}[1][]{%
+ \pgfkeys{exsh,#1}%
+ \begin{\exsh@subtaskenv}
+ \def\exsh@ifwithinsubt##1##2{##1}
+ \ignorespaces\begingroup
+}{
+ \endgroup
+ \end{\exsh@subtaskenv}%
+}
+
+\def\exsh@ifwithinsubt#1#2{#2}
+
+\def\exsh@ensuressubtasks{%
+ \exsh@ifwithinsubt{
+ \endgroup\begingroup
+ }{%
+ \PackageWarning{exercisesheets}{%
+ Using \subtask\space without a subtasks environment
+ is unsupported
+ }{}%
+ }%
+}
+
+\newcommand{\subtask}[2][]{%
+ \exsh@ensuressubtasks
+ \pgfkeys{exsh,#1}%
+ \csname\exsh@subtaskitm\endcsname%
+ {\pgfkeysvalueof{/exsh/subtask font} #2}%
+ \ifbool{exsh@savetasks}{%
+ \csgdef{exsh@restatetask\arabic{\exsh@subtaskctr}}{#2}%
+ \csdef{exsh@restatetaskcur}{#2}%
+ }{}%
+}
+
+\def\exsh@ensuresavetasks{%
+ \ifbool{exsh@savetasks}{}{%
+ \PackageError{exercisesheets}{%
+ If you want to restate something, you have to %
+ use the option savetasks.%
+ }{}%
+ }%
+}
+
+\def\restatetask{%
+ \exsh@ensuresavetasks%
+ \@ifstar\exsh@restatetask@\exsh@restatetask%
+}
+
+\newcommand{\exsh@restatetask}[1][main]{%
+ {\pgfkeysvalueof{/exsh/task restate font}%
+ \csname exsh@restatetask#1\endcsname}%
+}
+
+\newcommand{\exsh@restatetask@}[1][main]{%
+ {\pgfkeysvalueof{/exsh/task restate font}%
+ \csname exsh@restatetask#1\endcsname}\\%
+}
+
+%%%%%%%%%%%%%%% BEGIN BEAMER-SPECIFIC: %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifexsh@beamer
+ \let\restatetaskbeamer\restatetask
+\else%--------- NON-BEAMER: ---------------------------------------
+ \def\restatetaskbeamer{%
+ \@ifstar\exsh@restatetaskbeamer\exsh@restatetaskbeamer%
+ }
+ \newcommand{\exsh@restatetaskbeamer}[1][main]{}
+\fi
+%%%%%%%%%%%%%%% END BEAMER-SPECIFIC %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newenvironment{hint}[1][]{%
+ \par
+ \pgfkeys{exsh,every hint,#1,hint font}%
+ \vskip\pgfkeysvalueof{/exsh/above hint skip}\relax\noindent
+ {\pgfkeysvalueof{/exsh/hint title font}\pgfkeysvalueof{/exsh/strings/hint}:}~\ignorespaces
+}{%
+ \par
+}
+\newenvironment{hint*}[1][]{%
+ \pgfkeys{exsh,every hint,#1,hint font}%
+ ({\pgfkeysvalueof{/exsh/hint title font}\pgfkeysvalueof{/exsh/strings/hint}:}\space%
+}{%
+ \unskip)%
+}
+
+
+%%%%%%%%%%%%%%% BEGIN BEAMER-SPECIFIC: %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifexsh@beamer
+ \let\exsh@postsolutionclear\clearpage
+\else%--------- NON-BEAMER: ---------------------------------------
+ \let\exsh@postsolutionclear\par
+\fi
+%%%%%%%%%%%%%%% END BEAMER-SPECIFIC %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\providecommand{\solution}{}
+\renewenvironment{solution}[1][]{%
+ \pgfkeys{exsh,every solution,#1,solution font}%
+ \ifthenelse{\equal{oral}{\pgfkeysvalueof{/exsh/points}}}{%
+ \ifbool{exsh@oralsolutions}{%
+ \let\next\exsh@startsolution
+ }{%
+ \let\next\exsh@skipsolution
+ }%
+ }{%
+ \ifbool{exsh@nonoralsolutions}{%
+ \let\next\exsh@startsolution
+ }{%
+ \let\next\exsh@skipsolution
+ }%
+ }%
+ \ifbool{exsh@forcesample}{%
+ \ifbool{exsh@samplesolutions}{%
+ \let\next\exsh@startsolution
+ }{}%
+ }{}%
+ \ifbool{exsh@beamersolution}{%
+ \let\next\exsh@skipsolution
+ }{}%
+ \next
+}{%
+ \ifbool{exsh@beamersolution}{}{%
+ \ifthenelse{\equal{oral}{\pgfkeysvalueof{/exsh/points}}}{%
+ \ifbool{exsh@oralsolutions}{\exsh@postsolutionclear}{}%
+ }{%
+ \ifbool{exsh@nonoralsolutions}{\exsh@postsolutionclear}{}%
+ }%
+ }%
+}
+
+
+%%%%%%%%%%%%%%% BEGIN BEAMER-SPECIFIC: %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifexsh@beamer
+\def\exsh@solutiontitle#1{
+ \ifbool{exsh@beameruseblocks}{%
+ \begin{alertblock}{}%
+ {\pgfkeysvalueof{/exsh/solution title font}%
+ \pgfkeysvalueof{/exsh/strings/solution} %
+ (\pgfkeysvalueof{/exsh/strings/exercise} \arabic{\pgfkeysvalueof{/exsh/exercise counter}}%
+ \ifnum\@enumdepth>0\alph{subex}\fi)} %
+ \ifbool{exsh@headerrestate}{
+ \exsh@ensuresavetasks
+ \csname exsh@restatetask%
+ \ifnum\@enumdepth>0cur\else main\fi%
+ \endcsname%
+ }{}%
+ \end{alertblock}
+ }{
+ \begin{beamercolorbox}[rounded=true,wd={#1}]%
+ {block title alerted}
+ {\pgfkeysvalueof{/exsh/solution title font}%
+ \pgfkeysvalueof{/exsh/strings/solution} %
+ (\pgfkeysvalueof{/exsh/strings/exercise} \arabic{\pgfkeysvalueof{/exsh/exercise counter}}%
+ \ifnum\@enumdepth>0\alph{subex}\fi)} %
+ \ifbool{exsh@headerrestate}{
+ \exsh@ensuresavetasks
+ \csname exsh@restatetask%
+ \ifnum\@enumdepth>0cur\else main\fi%
+ \endcsname%
+ }{}%
+ \end{beamercolorbox}
+ }
+}
+\newcommand{\solutiontitle}[1][\linewidth]{
+ \ifhmode \linebreak\fi\exsh@solutiontitle{#1}
+}
+
+\newcommand{\deferredsolutiontitle}[1][\linewidth]{
+ \ifbool{exsh@defersolutiontitle}{%
+ \ifhmode \linebreak\fi\exsh@solutiontitle{#1}
+ }{}%
+}
+
+
+\long\def\exsh@processframes#1\newframe{%
+\ifstrequal{#1}{}{}{%
+\clearpage
+\begin{frame}[t]{}
+` \unskip\vskip1pt\vskip-\parskip
+ \solutiontitle[\textwidth]
+ #1
+\end{frame}%
+\exsh@processframes%
+}%no whitespace here is crucial for end detecttion
+}
+
+
+\long\def\exsh@collectedframe#1{
+\exsh@processframes#1\newframe\newframe
+}
+
+\else%--------- NON-BEAMER: ---------------------------------------
+%this command is only usefule for exercisesheets-beamer to place
+%the deferred title within a new frame
+\newcommand{\solutiontitle}[1][]{}
+\fi
+%%%%%%%%%%%%%%% END BEAMER-SPECIFIC %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%% BEGIN BEAMER-SPECIFIC: %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifexsh@beamer
+\def\exsh@startsolution{%
+ \ifnum\@enumdepth=0
+ \ifbool{exsh@framed}{}{\clearpage\stepcounter{framenumber}}
+ \fi
+% \usebeamercolor{block title alerted}
+% \setbeamercolor{block body}{bg=bg,fg=fg}
+% \block{}
+% \pgfkeysvalueof{/exsh/solution title font}%
+% \pgfkeysvalueof{/exsh/strings/solution} %
+% (\pgfkeysvalueof{/exsh/strings/exercise} \arabic{\pgfkeysvalueof{/exsh/exercise counter}}%
+% \alph{subex})%
+% \endblock
+ \ifbool{exsh@framed}{\exsh@defersolutiontitletrue}{}
+ \ifbool{exsh@defersolutiontitle}{}{%
+ \ifhmode \linebreak\fi
+ \exsh@solutiontitle{\linewidth}
+ }%
+ \let\next\relax
+ \ifbool{exsh@framed}{%
+ \def\next{\Collect@Body\exsh@collectedframe}%
+ \ifbool{exsh@fragile}{%
+ \ifluatex%
+ \def\next{\exsh@start@lframed@}
+ \else
+ \PackageError{exercisesheets}{Fragile frames require
+ LuaLaTeX!}{}
+ \fi%
+ }{}%
+ }{}%
+ \next%
+}%
+\else%--------- NON-BEAMER: ---------------------------------------
+\def\exsh@startsolution{\@afterindentfalse
+ \vskip\pgfkeysvalueof{/exsh/above solution skip}\relax%
+ {\parindent \z@
+ \pgfkeysvalueof{/exsh/solution title font}%
+ \pgfkeysvalueof{/exsh/strings/solution}%
+ \pgfkeysvalueof{/exsh/solution title separator}%
+ }\nobreak%
+ \@afterheading
+}%
+\fi
+%%%%%%%%%%%%%%% END BEAMER-SPECIFIC %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\long\def\exsh@skipsolution#1{%
+ \ifstrequal{#1}{\end}{\exsh@endsolution}{\exsh@skipsolution}%
+}
+\def\exsh@endsolution#1{%
+ \ifstrequal{#1}{solution}{
+ \end{solution}
+ }{%
+ \ifstrequal{#1}{beamersolution}{
+ \end{beamersolution}
+ }{%
+ \exsh@skipsolution}%
+ }%
+}
+
+%%%%%%%%%%%%%%% BEGIN BEAMER-SPECIFIC: %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifexsh@beamer
+\newenvironment<>{beamersolution}[1][]{%
+ \pgfkeys{exsh,every solution,#1,solution font}%
+ \ifthenelse{\equal{oral}{\pgfkeysvalueof{/exsh/points}}}{%
+ \ifbool{exsh@oralsolutions}{%
+ \let\next\exsh@startsolution
+ }{%
+ \let\next\exsh@skipsolution
+ }%
+ }{%
+ \ifbool{exsh@nonoralsolutions}{%
+ \let\next\exsh@startsolution
+ }{%
+ \let\next\exsh@skipsolution
+ }%
+ }%
+ \ifbool{exsh@forcesample}{%
+ \ifbool{exsh@samplesolutions}{%
+ \let\next\exsh@startsolution
+ }{}%
+ }{}%
+ \next
+}{%
+% \ifbool{exsh@framed}{\end{frame}}{}
+ \ifthenelse{\equal{oral}{\pgfkeysvalueof{/exsh/points}}}{%
+ \ifbool{exsh@oralsolutions}{\clearpage}{}%
+ }{%
+ \ifbool{exsh@nonoralsolutions}{\clearpage}{}%
+ }%
+}
+\else%--------- NON-BEAMER: ---------------------------------------
+%the regular version of exercisesheets.sty skips all beamer solutions
+\newenvironment{beamersolution}[1][]{\exsh@skipsolution}{}%
+\fi
+%%%%%%%%%%%%%%% END BEAMER-SPECIFIC %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newcommand{\points}[2][]{%
+ \ifthenelse{\equal{}{#2}}{}{\exshset{points=#2}}%
+ \bgroup%
+ \exshset{#1}%
+ \ifthenelse{\equal{}{\pgfkeysvalueof{/exsh/pointsinfo}}}{%
+ \def\exsh@tmp{}%
+ }{%
+ \def\exsh@tmp{, \pgfkeysvalueof{/exsh/pointsinfo}}%
+ }%
+ \ifthenelse{\equal{#2}{oral}}{%
+ \ifexsh@abbrev%
+ \exsh@subexpoints{\pgfkeysvalueof{/exsh/strings/oral abbrev}\exsh@tmp}%
+ \else%
+ \exsh@subexpoints{\pgfkeysvalueof{/exsh/strings/oral}\exsh@tmp}%
+ \fi%
+ }{%
+ \ifthenelse{\equal{#2}{}}{%
+ \exsh@subexpoints{\pgfkeysvalueof{/exsh/pointsinfo}}%
+ }{%
+ \ifexsh@abbrev%
+ \ifexsh@bonus%
+ \exsh@subexpoints{#2~\pgfkeysvalueof{/exsh/strings/bonus points abbrev}\exsh@tmp}%
+ \else%
+ \exsh@subexpoints{#2~\pgfkeysvalueof{/exsh/strings/points abbrev}\exsh@tmp}%
+ \fi%
+ \else%
+ \ifthenelse{\equal{#2}{1}}{%
+ \ifexsh@bonus%
+ \exsh@subexpoints{1~\pgfkeysvalueof{/exsh/strings/bonus point}\exsh@tmp}%
+ \else%
+ \exsh@subexpoints{1~\pgfkeysvalueof{/exsh/strings/point}\exsh@tmp}%
+ \fi%
+ }{%
+ \ifexsh@bonus%
+ \exsh@subexpoints{#2~\pgfkeysvalueof{/exsh/strings/bonus points}\exsh@tmp}%
+ \else%
+ \exsh@subexpoints{#2~\pgfkeysvalueof{/exsh/strings/points}\exsh@tmp}%
+ \fi%
+ }%
+ \fi%
+ \ifexsh@sumuppoints%
+ \ifexsh@bonus%
+ \addtocounter{exsh@ptsbonus@cur}{#2}
+ \else%
+ \addtocounter{exsh@pts@cur}{#2}
+ \fi%
+ \fi%
+ }%
+ }%
+ \egroup
+ \ignorespaces
+}
+
+\newenvironment{gradingguide}[1][]{%
+ \pgfkeys{exsh,#1,grading guide font}%
+ \ifbool{exsh@gradingguides}{%
+ \let\next\exsh@startguide
+ }{%
+ \let\next\exsh@skipguide
+ }%
+ \next
+}{}
+
+\def\exsh@startguide{\@afterindentfalse%
+ \par
+ {\parindent \z@
+ \pgfkeysvalueof{/exsh/strings/gradingguide}: }\nobreak%
+ \@afterheading
+}%
+
+\long\def\exsh@skipguide#1{%
+ \ifstrequal{#1}{\end}{\exsh@endguide}{\exsh@skipguide}%
+}
+\def\exsh@endguide#1{%
+ \ifstrequal{#1}{gradingguide}{\end{gradingguide}}{\exsh@skipguide}%
+}
+
+
+\ifluatex%
+ \ifdefined\luatextextdir
+ \def\exsh@putatend#1{%
+ \leavevmode\luatextextdir TRT\unskip{\luatextextdir TLT{\hfill~~#1}}\luatextextdir TLT}%
+ \else
+ \def\exsh@putatend#1{%
+ \leavevmode\textdir TRT\unskip{\textdir TLT{\hfill~~#1}}\textdir TLT}%
+ \fi
+\else%
+ \def\exsh@putatend#1{%
+ \TeXXeTstate=1%
+ \beginR\unskip{\beginL~~#1\endL}\hfill\beginL\TeXXeTstate=0}%
+\fi
+
+\def\exsh@leaveinplace#1{\unskip~{#1} }
+\def\exsh@insertFill#1{\unskip\nobreak\space\nobreak\hspace*{\fill}\allowbreak\hspace*{\fill}{#1}\unskip}
+
+\newcommand{\exsh@subexpoints}[1]{%
+ \ifexsh@inplace%
+ \exsh@leaveinplace{\pgfkeysvalueof{/exsh/points font}\mbox{(#1)}}%
+ \else%
+ \ifexsh@pointsfloatright% can be used directly after \item etc.
+ \exsh@putatend{\pgfkeysvalueof{/exsh/points font}\mbox{(#1)}}%
+ \else% original points macro with fill
+ \exsh@insertFill{\pgfkeysvalueof{/exsh/points font}\mbox{(#1)}}%
+ \fi%
+ \fi%
+}
+
+\newcommand{\TODO}[1][]{%
+ \ifexsh@showtodos
+ \ifmmode
+ \text{\pgfkeysvalueof{/exsh/todo marker font}TODO #1}%
+ \else
+ {\pgfkeysvalueof{/exsh/todo marker font}TODO #1}%
+ \fi
+ \fi
+ \PackageWarning{exercisesheets}{TODO marker found}%
+}
+
+\newcommand{\ifsolutions}[2]{%
+ \ifbool{exsh@solutions}{#1}{#2}%
+}
+
+\newcommand{\iforalsolutions}[2]{%
+ \ifbool{exsh@oralsolutions}{#1}{#2}%
+}
+\newcommand{\ifnonoralsolutions}[2]{%
+ \ifbool{exsh@nonoralsolutions}{#1}{#2}%
+}
+\newcommand{\ifsamplesolutions}[2]{%
+ \ifbool{exsh@samplesolutions}{#1}{#2}%
+}
+\newcommand{\samplehide}[1]{%
+ \ifbool{exsh@samplesolutions}{}{#1}%
+}
+
+
+%%%%%%%%%%%%%%% BEGIN BEAMER-ONLY: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifexsh@beamer
+\ifexsh@patchheadandfoot
+ \setbeamertemplate{headline}{}%
+ \setbeamertemplate{footline}{}%
+\fi
+\ifbool{exsh@beamerwithheadline}{%
+ \setbeamertemplate{headline}{%
+% \leavevmode%
+ \begin{beamercolorbox}[wd=\paperwidth,vmode]{frametitle}
+ \vspace{0.4em}
+ \leavevmode
+ \begingroup
+ \footnotesize%
+ \hspace*{2ex}{\pgfkeysvalueof{/exsh/subject font}%
+ \pgfkeysvalueof{/exsh/subject}} \hfill%
+ {\pgfkeysvalueof{/exsh/semester font}%
+ \pgfkeysvalueof{/exsh/semester}}\hspace{2ex}\hfil%
+ \vspace{1mm}\linebreak%
+ \hspace*{2ex}{\pgfkeysvalueof{/exsh/author font}\exsh@author}%
+ \hfill{\pgfkeysvalueof{/exsh/date font}%
+ \pgfkeysvalueof{/exsh/date}}%
+ \hspace{2ex}\hfil%\vspace{-1em}
+ \endgroup
+ \vspace{0.4em}
+ \end{beamercolorbox}%
+ \vspace*{3mm}
+ \vskip\pgfkeysvalueof{/exsh/below slide headline skip}\relax%
+ }
+ \addtobeamertemplate{frametitle}{\vspace{-3mm}}{}
+}{}%
+
+
+\ifbool{exsh@beamerwithfootline}{%
+ \setbeamertemplate{footline}{%
+ \leavevmode%
+ \hbox{\begin{beamercolorbox}[wd=.5\paperwidth,ht=2.5ex,dp=1.125ex,leftskip=.3cm,rightskip=.3cm]{frametitle}%
+ {\pgfkeysvalueof{/exsh/author font}\pgfkeysvalueof{/exsh/exauthor}}
+ \end{beamercolorbox}%
+ \begin{beamercolorbox}[wd=.5\paperwidth,ht=2.5ex,dp=1.125ex,leftskip=.3cm,rightskip=.3cm plus1fil]{author in head/foot}%
+ \usebeamerfont{author in head/foot}
+ \inserttitle
+ \hfill\insertpagenumber
+ \end{beamercolorbox}}%
+ \vskip0pt%
+ }
+}{}%
+\fi
+%%%%%%%%%%%%%%% END BEAMER-ONLY %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ifluatex
+ \let\exsh@dlua\directlua
+\else
+ \def\exsh@dlua#1{}
+\fi
+
+%change only some catcodes to
+\begingroup
+\catcode`!=0
+\catcode`\@=11
+\catcode`\_=12
+\catcode`\{=12 %set those to the same value (11/12) as below!
+\catcode`\}=12 %
+\catcode`<=1
+\catcode`>=2
+\catcode`\~=11
+\catcode`\\=11
+%% Expanded, when \catcode`\^^M=12 holds
+!global!long!def!exsh@start@Lexercise#1\end{Lexercise}< %
+ !exsh@dlua<exsh_cur_exercise=exercise({#1})> %
+ !endgroup!end<Lexercise>%
+>
+!global!long!def!exsh@start@skip@Lexercise#1\end{Lexercise}< %
+ !exsh@dlua<exsh_cur_exercise=exercise({#1})> %
+ !ifluatex!else%
+ !refstepcounter<!pgfkeysvalueof</exsh/exercise counter>>%
+ !fi
+ !endgroup!endgroup%
+ !expandafter!exsh@skipstuff%
+ !exsh@dlua<exsh_texprintlines(exsh_cur_exercise)>%
+>
+!global!long!def!exsh@start@lframed#1\end{solution}< %
+ !exsh@dlua<exsh_cur_solution=fragileframed([[#1]])> %
+ !endgroup!end<solution>%
+ !exsh@dlua<exsh_texprintlines(exsh_cur_solution)>%
+>
+!endgroup
+
+\def\exsh@lua@catcodesBG{
+\begingroup
+\catcode`!=12
+\catcode`\$=12
+\catcode`\#=12
+\catcode`\_=12
+\catcode`\^=12
+\catcode`\&=12
+\catcode`\|=12
+\catcode`\{=12 %set those to the same value (11/12) as above!
+\catcode`\}=12 %
+\catcode`\~=12
+\catcode`\@=11
+\catcode`\%=12
+\catcode`\ =12
+\catcode9=12
+\catcode`\^^I=12
+\catcode`\^^J=12\catcode`\^^M=12\catcode`\\=11\endlinechar-1}
+
+\newenvironment{Lexercise}{%
+ \exsh@lua@catcodesBG\exsh@start@Lexercise%
+}{%
+ \ifluatex
+ \exsh@dlua{exsh_texprintlines(exsh_cur_exercise)}%
+ \else
+ \refstepcounter{\pgfkeysvalueof{/exsh/exercise counter}}
+ Lexercise needs Lua\LaTeX!
+ \fi
+}
+
+\def\exsh@skipstuff@Lexercise{\exsh@lua@catcodesBG\exsh@start@skip@Lexercise}%
+\def\exsh@start@lframed@{\exsh@lua@catcodesBG\exsh@start@lframed}
+
+\exsh@dlua{dofile(kpse.find_file("exsh_lexercise.lua"))}
diff --git a/macros/latex/contrib/fancyhdr/README b/macros/latex/contrib/fancyhdr/README
index e03540dec7..4a7d219fdc 100644
--- a/macros/latex/contrib/fancyhdr/README
+++ b/macros/latex/contrib/fancyhdr/README
@@ -1,6 +1,8 @@
fancyhdr – Extensive control of page headers and footers in LaTeX2ε
-The package provides extensive facilities, both for constructing headers and footers, and for controlling their use (for example, at times when LaTeX would automatically change the heading style in use).
+The package provides extensive facilities, both for constructing headers
+and footers, and for controlling their use (for example, at times when
+LaTeX would automatically change the heading style in use).
The distribution package consists of the following files:
@@ -25,8 +27,8 @@ In order to latex the documentation you need to have a copy of
boxedminipage.sty (CTAN:/macros/latex/contrib/boxedminipage) and
refcount.sty (CTAN:/macros/latex/contrib/oberdiek/) installed.
-This is version 4.1 of fancyhdr.sty and extramarks.sty. They are
-described in the forthcoming third edition of The LaTeX Companion.
+This is version 4.2 of fancyhdr.sty and extramarks.sty. They are
+described in the third edition of The LaTeX Companion.
Extramarks.sty has not been changed, except for the version and
copyright information.
diff --git a/macros/latex/contrib/fancyhdr/fancyhdr.dtx b/macros/latex/contrib/fancyhdr/fancyhdr.dtx
index 2995092da6..43c6631bba 100644
--- a/macros/latex/contrib/fancyhdr/fancyhdr.dtx
+++ b/macros/latex/contrib/fancyhdr/fancyhdr.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1994-2022 by Pieter van Oostrum <pieter@vanoostrum.org>
+% Copyright (C) 1994-2024 by Pieter van Oostrum <pieter@vanoostrum.org>
% -------------------------------------------------------
%
% This file may be distributed and/or modified under the
@@ -26,11 +26,12 @@
%<fancyhdr>\ProvidesPackage{fancyhdr}%
%<fancyheadings>\ProvidesPackage{fancyheadings}
%<extramarks>\ProvidesPackage{extramarks}
-%<fancyhdr|fancyheadings|extramarks> [2022/11/09 v4.1
+%<fancyhdr|extramarks> [2024/04/23 v4.2
%<fancyhdr> Extensive control of page headers and footers]%
+%<fancyheadings> [2022/11/09 v4.1
%<fancyheadings> Legacy package to call fancyhdr]
%<extramarks> Extra marks for LaTeX]
-%<fancyhdr|extramarks>% Copyright (C) 1994-2022 by Pieter van Oostrum <pieter@vanoostrum.org>
+%<fancyhdr|extramarks>% Copyright (C) 1994-2024 by Pieter van Oostrum <pieter@vanoostrum.org>
%<fancyheadings>% Public domain
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \end{macrocode}
@@ -641,7 +642,7 @@
% \renewcommand{\footrulewidth}{2pt}
% \end{verbatim}
% (The \cs{thepage} macro displays the current page number.
-% \cs{textbf} puts it in bold face.)
+% \cs{textbf} puts its argument in bold face.)
%
% This is now fine, except that the first page does not need
% all these headers and footers. To eliminate all but the
@@ -847,14 +848,14 @@
% redefine existing page styles (like \texttt{plain}) or to define new ones,
% e.g. if part of your document needs a different page style. This command
% has two mandatory parameters: the first one is the name of the page style to be defined, the
-% second consists of commands that change the headers and/or footers, i.e.
-% \verb|fancyhead| etc. Also allowed are changes to \cs{headrulewidth} and
+% second consists of commands that change the headers and/or footers, i.e.,
+% \verb|\fancyhead| etc. Also allowed are changes to \cs{headrulewidth} and
% \cs{footrulewidth} or even \cs{headrule} and \cs{footrule}.
% The (re)defined page style uses the standard
% \texttt{fancy} definitions, amended by the definitions in the second
% parameter. In other words, those parts that are not redefined in the
% second parameter get their value from the \texttt{fancy} definition that
-% is current. In particular, if the second parameter is empty, i.e. given
+% is current. In particular, if the second parameter is empty, i.e., given
% as \verb+{}+, then the new page style is equal to page style
% \texttt{fancy}.
%
@@ -1051,7 +1052,7 @@
% before, we get a layout that is very similar to the page style \texttt{headings}.
%
% On the pages where new chapters start, we get a centered page number
-% in the footer; there is no header, and there are no decorative lines.
+% in the footer; there is nothing in the header, and there are no decorative lines.
%
% On an even page, we get the layout:
%
@@ -1617,6 +1618,15 @@
% \fancyheadoffset[LE,RO]{\marginparsep+\marginparwidth}
% \end{verbatim}
%
+% \textbf{NOTE:} If you change the \cs{textwidth} in the middle of your
+% document, for example by using the \Package{geometry}\TTindex{geometry} package,
+% by default the \cs{headwidth} will not change, as it picks up the value
+% of \cs{textwidth} at the beginning of the document. If you want it to track
+% the changes to \cs{textwidth}, you should use the command \verb|\fancyhfoffset{0pt}|
+% in the neighborhood of your header/footer definitions, unless you
+% already use such an \texttt{\ldots offset} command, of course.
+% \vspace{\baselineskip}
+%
% For the second example, we take the \amslatex/ book\footnote{George Gratzer,
% \textit{Math into LaTeX, An Introduction to \LaTeX{} and \amslatex/}, Birkhauser, Boston.}.
%
@@ -2303,9 +2313,9 @@
% \cs{firstxmark} will be `Continued\ldots'; (2) the block ends at a
% later page, therefore it does not contribute any marks to that page,
% and the marks are `inherited' from the last values of the previous page,
-% i.e. those from \texttt{\%~2}.
+% i.e., those from \texttt{\%~2}.
% On all of the pages after the block the values of \texttt{\%~4} will be used,
-% i.e. empty ones.
+% i.e., empty ones.
% This final \verb+\extramarks{}{}+ is to prevent the `Continued\ldots'
% header to spill over to the following pages.
% Of course in real life you would leave out the numbers.
@@ -2391,11 +2401,16 @@
% \extramarks{}{}%
% \extramarks{(Continued\ldots)}{Continued on next page\ldots}%
% \afterpage{\noindent\firstxmark\vspace{1ex}}%
-% }{\extramarks{(Continued\ldots)}{}%
+% \ignorespaces
+% }{%
+% \unskip\extramarks{(Continued\ldots)}{}%
% \extramarks{}{}\par
% }
% \end{verbatim}
%
+% Note how we use \cs{ignorespaces}, \cs{unskip} and \texttt{\%} to
+% prevent unwanted spaces to creep into the text.
+%
% It is a bit dangerous to use \cs{firstxmark} outside the page layout
% routine, but apparently with \cs{afterpage} this works. If you would
% need the information further on in the page you must remember the state of
@@ -2409,7 +2424,9 @@
% \newenvironment{continued}{\par
% \extramarks{}{}%
% \extramarks{(Continued\ldots)}{Continued on next page\ldots}%
-% }{\extramarks{(Continued\ldots)}{}%
+% \ignorespaces
+% }{%
+% \unskip\extramarks{(Continued\ldots)}{}%
% \extramarks{}{}\par\vspace{1ex}\mysaved}%
% }
% \fancyhead[L]{\leftmark}
@@ -2475,7 +2492,7 @@
% requires some hand-tuning to get the blobs nicely spaced out vertically.
% For the application that I originally designed this for, there were 12 sections,
% so I made the blobs
-% 18 mm apart, i.e. 9~mm blob separated by 9~mm whitespace. In order to avoid
+% 18 mm apart, i.e., 9~mm blob separated by 9~mm whitespace. In order to avoid
% calculations they are set in a \texttt{picture} environment with the
% \cs{unitlength} set to 18~mm. Page numbers are set in the headers at the
% outer sides, and the blobs are attached to these. In this example the
@@ -2585,7 +2602,7 @@
%
% In the first two cases you must first check if you have given the correct
% ``placement'' parameter to you float, e.g. \Cmd{begin\{figure\}[htp]}
-% specifies that your figure may be placed either: Here (i.e. in the text
+% specifies that your figure may be placed either: Here (i.e., in the text
% position where the command is given), on the Top of a page (which may be
% the page where you put the command), or on a separate Page of floats. You
% could also have specified ``\texttt{b}'' for Bottom of the page. The order of the
@@ -2701,7 +2718,7 @@
% in the preamble. Now you will be able to
% specify \texttt{[H]} as the position parameter, which will mean ``HERE
% and only HERE''. This may cause an unwanted page break however.
-% If you want to avoid the unwanted pagebreak, i.e. let
+% If you want to avoid the unwanted pagebreak, i.e., let
% \LaTeX{} move the float only if it doesn't fit on the page, then use the
% \Package{afterpage} package with:
% \TTindex{afterpage}\CmdIndex{afterpage}\CmdIndex{clearpage}%
@@ -2781,7 +2798,7 @@
% There isn't an equivalent ``\texttt{longfigure}'' solution, so for figures you
% will have to split yourself. In general this is less of a
% problem. However, the problem you get now is how to keep them together,
-% i.e. how to get the parts on subsequent pages, and how to get a single
+% i.e., how to get the parts on subsequent pages, and how to get a single
% entry in the list of figures.
%
% You will have to split the figure into pieces and put each part
@@ -3031,6 +3048,12 @@
% \item Make \Package{fancyhdr} compatible with the document class \Package{newlfm}.
% \item Make \cs{nouppercase} compatible with newer definitions of \cs{MakeUppercase}.
% \end{itemize}
+% \item Version 4.2, April 19-23, 2024
+% \begin{itemize}
+% \item Reset catcodes to their default values in order to facilitate
+% \cs{input} in headers/footers when \texttt{verbatim} is active.
+% (Issue \# 8 \url{https://github.com/pietvo/fancyhdr/issues/8}.)
+% \end{itemize}
% \end{itemize}
%
%
@@ -3315,7 +3338,7 @@
% conditionalized and they don't consume length registers. There is no need
% to have them as length registers unless you want to do calculations with
% them, which is unlikely. Note that this may make some uses of them
-% incompatible (i.e. if you have a file that uses \cs{setlength} or \cs{xxxx}!=)}
+% incompatible (i.e., if you have a file that uses \cs{setlength} or \cs{xxxx}!=)}
%
% \changes{fancyhdr v1.99a}{1996/05/10}{Added a few more \% signs.}
%
@@ -3485,7 +3508,7 @@
% \cs{f@nch@ifundefined}.
% This definition is copied from the \Package{tocloft} package by Peter
% Wilson and Will Robertson.
-% \begin{macrocode}
+% \begin{macrocode}
\newcommand{\f@nch@ifundefined}[1]{%
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname #1\endcsname\relax
@@ -3493,7 +3516,7 @@
\else
\expandafter\@secondoftwo
\fi}
-% \end{macrocode}
+% \end{macrocode}
% \end{macro}
%
% \changes{fancyhdr v4.0}{2019/03/17}{Added \texttt{headings} and
@@ -3992,11 +4015,23 @@
% \end{macro}
% \end{macro}
%
+% \begin{macro}{\f@nch@noUppercase}
+% We want \cs{nouppercase} to work with the various evolutionary stages of
+% \cs{MakeUppercase}. The current version (2022/11/09) accepts an optional
+% argument with a language specification. Therefore we define a dummy macro
+% \cs{f@nch@noUppercase} which copies its mandatory agument, as a
+% replacement for \cs{MakeUppercase} while \cs{nouppercase} is active.
+% \begin{macrocode}
+\newcommand\f@nch@noUppercase[2][]{#2}
+% \end{macrocode}
+%
% \begin{macro}{\f@nch@reset}
% Command to reset various things in the headers: a.o. single spacing
% (taken from setspace.sty) and the catcode of ^^M and
% \cs{endlinechar} (so that epsf files
-% in the header work if a verbatim crosses a page boundary) It also
+% in the header work if a verbatim crosses a page boundary).
+% Also reset the catcodes that are changed in verbatim environments,
+% \cs{makeatother} and \cs{ExplSyntaxOn}. It also
% defines a \cs{nouppercase} command that disables \cs{uppercase} and
% \cs{Makeuppercase}. It can only be used in the headers and footers. Set
% \cs{hsize} to \cs{headwidth} (this helps for multicol); reset
@@ -4006,15 +4041,16 @@
% \LaTeX{} output routine, so we don't have to do it here.
% \changes{fancyhdr v4.1}{2022/11/09}{Change \cs{nouppercase} to work with
% new definition of \cs{MakeUppercase}.}
-% \begin{macro}{\f@nch@noUppercase}
-% We want \cs{nouppercase} to work with the various evolutionary stages of
-% \cs{MakeUppercase}. The current version (2022/11/09) accepts an optional
-% argument with a language specification. Therefore we define a dummy macro
-% \cs{f@nch@noUppercase} which copies its mandatory agument, as a
-% replacement for \cs{MakeUppercase} while \cs{nouppercase} is active.
+% \changes{fancyhdr v4.2}{2024/04/19}{Reset catcodes to their default
+% values in order to facilitate \cs{input} in headers/footers when \texttt{verbatim}
+% is active. (Issue \# 8 \url{https://github.com/pietvo/fancyhdr/issues/8}.)}
% \begin{macrocode}
-\newcommand\f@nch@noUppercase[2][]{#2}
\def\f@nch@reset{\f@nch@everypar{}\restorecr\endlinechar=13
+ \catcode`\\=0\catcode`\{=1\catcode`\}=2\catcode`\$=3\catcode`\&=4
+ \catcode`\#=6\catcode`\^=7\catcode`\_=8\catcode`\ =10\catcode`\@=11
+ \catcode`\:=11\catcode`\~=13\catcode`\%=14
+ \catcode0=15 %NULL
+ \catcode9=10 %TAB
\let\\\@normalcr \let\raggedleft\f@nch@raggedleft
\let\raggedright\f@nch@raggedright \let\centering\f@nch@centering
\def\baselinestretch{1}%
diff --git a/macros/latex/contrib/fancyhdr/fancyhdr.pdf b/macros/latex/contrib/fancyhdr/fancyhdr.pdf
index b9302285cc..9f781dad3b 100644
--- a/macros/latex/contrib/fancyhdr/fancyhdr.pdf
+++ b/macros/latex/contrib/fancyhdr/fancyhdr.pdf
Binary files differ
diff --git a/macros/latex/contrib/jsonparse/README.md b/macros/latex/contrib/jsonparse/README.md
index ba87245374..6c268a9372 100644
--- a/macros/latex/contrib/jsonparse/README.md
+++ b/macros/latex/contrib/jsonparse/README.md
@@ -1,10 +1,10 @@
-![Version 0.7.1](https://img.shields.io/badge/version-0.7.1-blue)
+![Version 0.8.0](https://img.shields.io/badge/version-0.8.0-blue)
# The `jsonparse` package
The `jsonparse` package provides a handy way to read in JSON data from files or strings in LaTeX documents, parse the data and store it in a user-defined token variable. The package allows accessing the stored data via a JavaScript-flavored syntax.
-Using the commands `\JSONParseFromFile` or `\JSONParse`, JSON data can be stored in a token variable. Using the command `\JSONParseValue`, certain entried can be extracted from the stored data.
+Using the commands `\JSONParseFromFile` or `\JSONParse`, JSON data can be stored in a token variable. Using the command `\JSONParseValue`, entries can be extracted from the stored data.
---
@@ -43,3 +43,5 @@ Let's assume a file with the name `example.json` is stored in the working direct
We can store it in the token variable `\myJSONdata` using the command `\JSONParseFromFile{\myJSONdata}{example.json}`. Calling the command `\JSONParseValue{\myJSONdata}{contactPoint[0].telephone}` would then result in the output `+1 (555) 555-1234` (indices are zero-based per default).
This package including all files is subject to the LPPL 1.3c license.
+Copyright 2024 Jasper Habicht (mail(at)jasperhabicht.de).
+
diff --git a/macros/latex/contrib/jsonparse/jsonparse-doc.pdf b/macros/latex/contrib/jsonparse/jsonparse-doc.pdf
index eae5ebc7ac..3c5e5cb959 100644
--- a/macros/latex/contrib/jsonparse/jsonparse-doc.pdf
+++ b/macros/latex/contrib/jsonparse/jsonparse-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/jsonparse/jsonparse-doc.tex b/macros/latex/contrib/jsonparse/jsonparse-doc.tex
index 90de47fa5d..359cab1869 100644
--- a/macros/latex/contrib/jsonparse/jsonparse-doc.tex
+++ b/macros/latex/contrib/jsonparse/jsonparse-doc.tex
@@ -1,5 +1,5 @@
% File: jsonparse-doc.tex
-% Copyright 2024 Jasper Habicht (mail@jasperhabicht.de).
+% Copyright 2024 Jasper Habicht (mail(at)jasperhabicht.de).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
@@ -11,8 +11,8 @@
% This work has the LPPL maintenance status `maintained'.
%
\documentclass[a4paper]{article}
-\def\jsonparsefileversion{0.7.1}
-\def\jsonparsefiledate{20 April 2024}
+\def\jsonparsefileversion{0.8.0}
+\def\jsonparsefiledate{24 April 2024}
\usepackage[T1]{fontenc}
\usepackage{Alegreya}
@@ -194,6 +194,7 @@
\changes{v0.6.0}{2024/04/15}{Bug fixes, renaming of several commands.}
\changes{v0.7.0}{2024/04/18}{Renaming and rearranging of keys, escaping of special JSON escape sequences added.}
\changes{v0.7.1}{2024/04/20}{Access to first-level keys of object added.}
+\changes{v0.8.0}{2024/04/24}{Internal rewrite, escaping procedures changed.}
\begin{document}
@@ -220,25 +221,30 @@ The package can be loaded with the option \macro{debug}. It will then output to
\section{Escaping and special treatment of the input}\label{sec:escaping}
-\begin{macrodef}
-|escape|={<choice>}
-\end{macrodef}
-
-In general, characters in the JSON source that are special to TeX are not handled in a special way and will be treated by TeX the same way as if the user had input them in the document. However, certain escaping procedures are available to conform with the way JSON treats certain escape sequences.
+In general, the package reads the JSON source as string, which means that all characters have category code 12 (other), except for spaces which have category code 10 (space). The \macro{\endlinechar} value is set to $-1$. Furthermore, if PDFLaTeX is used, the upper-half of the 8-bit range is set to ``active''. JSON, however, defines a small set of escape sequences and in order to be able to process these, the category code of the backslash is set to 0 (escpape).
-The key \macro{escape} takes one of the values \macro{false}, \macro{basic} or \macro{full}. If no value is given, \macro{basic} is assumed and \macro{basic} is also the default setting if the key is not set at all. See more on setting keys below in section \ref{sec:settings}. The three values select different escape modes that are designed to have as little influence as possible to how TeX normally acts. While it would surely be possible to parse and rescan the input by changing category codes and rescanning the output per default, such practice might result un unintended output in special cases. Therefore, the current approach was chosen where changes to category codes are only introduced with the most most extensive escaping mode and rescanning of token sequences can be controlled by the user.
+JSON strings cannot contain the two characters \macro{"} and \macro{\}. These two characters need to be escaped with a preceding backslash (\macro{\}). This package therefore redefines locally the TeX control symbols \macro{\"}, \macro{\/}, \macro{\\}, \macro{\b}, \macro{\f}, \macro{\n}, \macro{\r}, \macro{\t} and \macro{\u}. These control symbols are prevented from expanding during parsing. For example, \macro{\"} is first defined as \macro{\exp_not:N \"} and only hen typeset, \macro{\"} is expanded to \macro{"}, which ensures that strings are parsed properly.
-Setting the key to \macro{false} disables the treatment of the input as described in the following of this section. The source code will be read and parsed as is. If the source does not contain any escape sequences, empty lines or TeX macro, this choice should be used.
+Similarly, the control symbol \macro{\/} expands eventually to \macro{/} and \macro{\\} to \macro{\c_backslash_str} (i.\,e. a backslash with category code 12). The escape sequence \macro{\u} followed by a hex value consisting of four digits eventually eventually expands to \macro{\char"} followed by the relevant four hex digits. The JSON escape sequences \macro{\b}, \macro{\f}, \macro{\n}, \macro{\r}, \macro{\t} or \macro{\u} (followed by a hex value) eventually expand to token variables of which the contents can be set using the relevant \macro{replacement} key. See more on setting keys below in section \ref{sec:settings}.
-If the key \macro{escape} is set to \macro{basic}, the package allows for empty lines in JSON strings. During parsing, every instance of the TeX macro \macro{\par} is replaced by a space.
+It is possible to insert TeX macros to the JSON source that will eventually be parsed when typesetting. Backslashes of TeX macros need to be escaped by another backslash. The TeX macros \macro{\"} and \macro{\\} must be escaped twice in the JSON source, so that they become \macro{\\\"} and \macro{\\\\} respectively.
-JSON strings cannot contain the two characters \macro{"} and \macro{\}. These two characters need to be escaped with a preceding backslash (\macro{\}). If the key \macro{escape} is set to \macro{basic}, this package therefore redefines locally the TeX control symbols \macro{\"}, \macro{\/} and \macro{\\}. During parsing, \macro{\"} expands to \macro{\exp_not:N \"} (i.\,e. it is prevented to expand during parsing) and only when typeset, \macro{\"} is expanded to \macro{"}, which ensures that strings are parsed properly. Similarly, the control symbol \macro{\/} expands to \macro{\exp_not:N \/} and finally to \macro{/} while \macro{\\} expands to \macro{\exp_not:N \\} and finally to \macro{\c_backslash_str} (i.\,e. a backslash with category code 12). Due to this procedure, the TeX macros \macro{\"} and \macro{\\} must be escaped twice in the JSON source, so that they become \macro{\\\"} and \macro{\\\\} respectively.
+\begin{macrodef}
+|\x|[<token variable name>][<key>]
+\end{macrodef}
+Using the control sequence \macro{\x}, it is possible to nest JSON strings into each other. The control sequence takes two arguments delimited by square brackets. The first argument represents the name of the token variable that holds the parsed JSON data where the inserted JSON string should be taken from. The second argument sets the key that should be selected. The following example shows a simple use case:
-With the key \macro{escape} set to \macro{basic}, other escape sequences defined by JSON, such as \macro{\b}, \macro{\f}, \macro{\n}, \macro{\r}, \macro{\t} or \macro{\u} (the latter followed by a hex value) are not escaped.
+\begin{codeexamplecolumns}
+ \JSONParse{\myJSONdataA}{
+ { "a" : { "b" : "c" } }
+ }
-If the key \macro{escape} is set to \macro{full}, apart from the above, the JSON escape sequences \macro{\b}, \macro{\f}, \macro{\n}, \macro{\r}, \macro{\t} or \macro{\u} (followed by a hex value) are parsed if the JSON source is read in as file using \macro{\JSONParseFromFile} (in other words, full escaping functionality is not supported for the command \macro{\JSONParse}). During parsing, these escape sequences are not expanded and only when being typeset expand to their relevant replacement. The escape sequence \macro{\u} followed by a hex value consisting of four digits eventually expands to \macro{\char"} followed by the relevant four hex digits. The escape sequences \macro{\b} (backspace), \macro{\f} (formfeed), \macro{\n} (linefeed), \macro{\r} (carriage return) and \macro{\t} (horizontal tab) expand to token variables of which the contents can be set using the relevant \macro{replacement} key. See more on setting keys below in section \ref{sec:settings}.
+ \JSONParse{\myJSONdataB}{
+ { "d" : \x[myJSONdataA][a] }
+ }
-Note that if the key \macro{escape} is set to \macro{full}, the category code of \macro{b}, \macro{f}, \macro{n}, \macro{r}, \macro{t} and \macro{u} will be set to 12 (other). Changing the category codes is necessary to be able to define single-letter control sequences in TeX. The category codes of these characters are changed back to 10 (letter) when stored in the property list that contains the parsed JSON string.
+ \JSONParseValue{\myJSONdataB}{d.b}
+\end{codeexamplecolumns}
\begin{macrodef}
replacement/|backspace|={<string>}
@@ -281,11 +287,11 @@ If the JSON string \macro{{ "key" : "value" }} is parsed into the token variable
Nested objects and arrays are assigned keys that adhere to JavaScript syntax. For example, if the JSON string \macro{{ "outer_key" : { "inner_key" : "value" } }} is parsed into the token variable \macro{\myJSONdata}, to select the value associated with the key \macro{inner_key}, the command \macro{\JSONParseValue{\myJSONdata}{outer_key.inner_key}} can be used. To give an example for an array, the command \macro{\JSONParseValue{\myJSONdata}{key[0]}} selects the first value of the array associated with the key \macro{key} in the JSON string \macro{{ "key" : [ "one" , "two" ] }}.
-The starred variant, \macro{\JSONParseValue*}, rescans the token list before it is typeset (which means that all category codes that may have been changed before are set to the default values), making it possible to place TeX commands in the JSON file. The starred variants of this and similar commands should not be placed in a \macro{\JSONParse} command. In order to adhere to proper JSON syntax, backslashes need to be escaped in the JSON source with another backslash.
+The non-starred variant of this command, \macro{\JSONParseValue}, rescans the token list before it is typeset (which means that all category codes that may have been changed before are set to the default values). The starred variant, \macro{\JSONParseValue*}, does not rescan the ouput. The non-starred variants of this and similar commands should therefore not be placed in a \macro{\JSONParse} command.
When a key is associated with an object or array, the whole object or array is output as JSON string. The special key \macro{.} (or the string defined using the key \macro{child sep}) returns the whole JSON object as string.
-If the output of whole objects or arrays is meant to be parsed again using \macro{\JSONParse}, the expandable command \macro{\JSONParseExpandableValue} is to be used.
+Whole objects or arrays can also be output as JSON string for further use in other macros using the expandable command \macro{\JSONParseExpandableValue}.
\begin{macrodef}
|\JSONParseArrayValues|{<token variable>}{<key>}[<subkey>]{<string>}
@@ -312,7 +318,7 @@ For example, let us assume the following JSON data structure is parsed into the
Then, when using \macro{\JSONParseArrayValues{\myJSONdata}{array}[key_a]{, }}, `one, three' is typeset to the document.
-The starred variant, \macro{\JSONParseArrayValues*}, rescans the token lists before they are typeset.
+The starred variant, \macro{\JSONParseArrayValues*}, does not rescan the token lists before they are typeset.
\begin{macrodef}
|\JSONParseArrayValuesMap|{<token variable>}{<key>}[<subkey>]{<command name>}
@@ -335,7 +341,7 @@ For example, let us assume the same JSON data structure as defined above parsed
\end{itemize}
\end{codeexamplecolumns}
-The starred variant, \macro{\JSONParseArrayValuesMap*}, rescans the token lists before they are typeset.
+The starred variant, \macro{\JSONParseArrayValuesMap*}, does not rescan the token lists before they are typeset.
\begin{macrodef}
|\JSONParseArrayCount|{<token variable>}{<key>}
diff --git a/macros/latex/contrib/jsonparse/jsonparse.sty b/macros/latex/contrib/jsonparse/jsonparse.sty
index dc42c7a229..447c70ae1b 100644
--- a/macros/latex/contrib/jsonparse/jsonparse.sty
+++ b/macros/latex/contrib/jsonparse/jsonparse.sty
@@ -1,5 +1,5 @@
% File: jsonparse.sty
-% Copyright 2024 Jasper Habicht (mail@jasperhabicht.de).
+% Copyright 2024 Jasper Habicht (mail(at)jasperhabicht.de).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
@@ -10,7 +10,7 @@
%
% This work has the LPPL maintenance status `maintained'.
%
-\ProvidesExplPackage {jsonparse} {2024-04-20} {0.7.1}
+\ProvidesExplPackage {jsonparse} {2024-04-24} {0.8.0}
{JSON Parse}
\bool_new:N \l__jsonparse_debug_mode_bool
@@ -55,8 +55,6 @@
\str_new:N \l__jsonparse_false_str
\str_new:N \l__jsonparse_null_str
\bool_new:N \l__jsonparse_array_index_zero_based_bool
-\bool_new:N \l__jsonparse_escape_basic_bool
-\bool_new:N \l__jsonparse_escape_full_bool
\str_new:N \l__jsonparse_backspace_str
\str_new:N \l__jsonparse_formfeed_str
@@ -65,21 +63,6 @@
\str_new:N \l__jsonparse_horizontal_tab_str
\keys_define:nn { jsonparse } {
- escape .choice: ,
- escape / false .code:n = {
- \bool_set_false:N \l__jsonparse_escape_basic_bool
- \bool_set_false:N \l__jsonparse_escape_full_bool
- } ,
- escape / basic .code:n = {
- \bool_set_true:N \l__jsonparse_escape_basic_bool
- \bool_set_false:N \l__jsonparse_escape_full_bool
- } ,
- escape / full .code:n = {
- \bool_set_true:N \l__jsonparse_escape_basic_bool
- \bool_set_true:N \l__jsonparse_escape_full_bool
- } ,
- escape .default:n = { basic } ,
- escape .initial:n = { basic } ,
array ~ index ~ zero-based .bool_set:N = \l__jsonparse_array_index_zero_based_bool ,
array ~ index ~ zero-based .default:n = { true } ,
array ~ index ~ zero-based .initial:n = { true } ,
@@ -119,33 +102,31 @@
\cs_new:Npn \str_casefold:n { \str_foldcase:n }
}
+\cs_generate_variant:Nn \tl_gset_rescan:Nnn { Nne }
\cs_generate_variant:Nn \tl_range:nnn { nne , nen }
\cs_generate_variant:Nn \tl_range:Nnn { Nne , Nen }
\cs_generate_variant:Nn \tl_remove_once:Nn { NV }
-\cs_generate_variant:Nn \tl_replace_all:Nnn { Nen }
-\cs_generate_variant:Nn \tl_rescan:nn { ne }
+\cs_generate_variant:Nn \tl_rescan:nn { no , ne }
\cs_generate_variant:Nn \tl_set:Nn { Ne }
-\cs_generate_variant:Nn \tl_set_rescan:Nnn { Nne }
\cs_generate_variant:Nn \tl_trim_spaces:n { e }
\cs_generate_variant:Nn \str_case_e:nn { en }
\cs_generate_variant:Nn \str_casefold:n { e }
\cs_generate_variant:Nn \str_head_ignore_spaces:n { e }
\cs_generate_variant:Nn \prop_gput:Nnn { Nee }
-\cs_generate_variant:Nn \prop_item:Nn { Ne }
-\cs_generate_variant:Nn \prop_put:Nnn { Nee }
+\cs_generate_variant:Nn \prop_item:Nn { Ne , ce }
+\cs_generate_variant:Nn \prop_put:Nnn { Nen , Nee }
\cs_generate_variant:Nn \msg_error:nnnn { nnee }
\cs_generate_variant:Nn \msg_log:nnn { nne }
\prg_generate_conditional_variant:Nnn \tl_if_eq:nn { en } { T }
\prg_generate_conditional_variant:Nnn \tl_if_head_eq_charcode:nN { eN } { T , TF }
-\prg_generate_conditional_variant:Nnn \tl_if_head_is_group:n { e } { TF }
\prg_generate_conditional_variant:Nnn \tl_if_in:nn { nV } { F }
-\prg_generate_conditional_variant:Nnn \str_if_eq:nn { en , eV } { T }
+\prg_generate_conditional_variant:Nnn \str_if_eq:nn { en , eV } { T , TF }
\prop_new:N \g_jsonparse_entries_prop
\prop_new:N \l__jsonparse_temp_prop
-\tl_new:N \l__jsonparse_json_tl
+\tl_new:N \g__jsonparse_json_tl
\tl_new:N \l__jsonparse_input_tl
\tl_new:N \l__jsonparse_temp_tl
\tl_new:N \l__jsonparse_prefix_tl
@@ -166,14 +147,11 @@
% ===
\cctab_const:Nn \c__jsonparse_json_escape_cctab {
- \char_set_catcode_group_begin:n { 123 } % left brace
- \char_set_catcode_group_end:n { 125 } % right brace
- \char_set_catcode_other:N b
- \char_set_catcode_other:N f
- \char_set_catcode_other:N n
- \char_set_catcode_other:N r
- \char_set_catcode_other:N t
- \char_set_catcode_other:N u
+ \cctab_select:N \c_str_cctab
+ \char_set_catcode_escape:n { 92 }
+ \bool_lazy_or:nnF
+ { \sys_if_engine_xetex_p: } { \sys_if_engine_luatex_p: }
+ { \int_step_function:nnN { 128 } { 255 } \char_set_catcode_active:n }
}
% ===
@@ -186,24 +164,8 @@
}
}
\prop_gclear:N \g_jsonparse_entries_prop
- \group_begin:
- \bool_if:NT \l__jsonparse_escape_full_bool {
- \cs_set:Npn \b { \exp_not:N \b }
- \cs_set:Npn \f { \exp_not:N \f }
- \cs_set:Npn \n { \exp_not:N \n }
- \cs_set:Npn \r { \exp_not:N \r }
- \cs_set:Npn \t { \exp_not:N \t }
- \cs_set:Npn \u { \exp_not:N \u }
- }
- \bool_if:NT \l__jsonparse_escape_basic_bool {
- \cs_set:Npn \par { \c_space_tl }
- \cs_set:Npn \" { \exp_not:N \" }
- \cs_set:Npn \/ { \exp_not:N \/ }
- \cs_set:Npn \\ { \exp_not:N \\ }
- }
- \jsonparse_parse:n {#2}
- \group_end:
- \prop_set_eq:NN #1 \g_jsonparse_entries_prop
+ \jsonparse_parse:n {#2}
+ \prop_gset_eq:NN #1 \g_jsonparse_entries_prop
\bool_if:NT \l__jsonparse_debug_mode_bool {
\msg_log:nne { jsonparse } { debug-info } {
JSON ~ parsing ~ done. \iow_newline:
@@ -213,26 +175,46 @@
\cs_new_protected:Npn \jsonparse_parse:n #1 {
\tl_set:Ne \l__jsonparse_input_tl { \tl_trim_spaces:n {#1} }
- \tl_if_head_is_group:eTF { \l__jsonparse_input_tl } {
- \exp_last_unbraced:Ne
- \__jsonparse_parse_object:w \l__jsonparse_input_tl \q_stop
+ \cs_if_exist_use:cTF { __jsonparse_parse_ \str_head_ignore_spaces:e { \l__jsonparse_input_tl } :w } {
+ \l__jsonparse_input_tl \q_stop
} {
- \cs_if_exist_use:cTF { __jsonparse_parse_ \str_head_ignore_spaces:e { \l__jsonparse_input_tl } :w } {
- \l__jsonparse_input_tl \q_stop
- } {
- % other
- \exp_last_unbraced:Ne
- \__jsonparse_parse_other:w \l__jsonparse_input_tl \q_stop
- }
+ % other
+ \exp_last_unbraced:Ne
+ \__jsonparse_parse_other:w \l__jsonparse_input_tl \q_stop
}
}
% ===
-\cs_new:Npn \__jsonparse_parse_object:w #1#2 \q_stop {
+\cs_new:cpn { __jsonparse_parse_ \c_left_brace_str :w } #1 \q_stop {
+ \exp_last_unbraced:Ne
+ \__jsonparse_parse_object_begin:w #1 \q_stop
+}
+
+\cs_new:cpn { __jsonparse_parse_ \c_right_brace_str :w } #1 \q_stop {
+ \exp_last_unbraced:Ne
+ \__jsonparse_parse_object_end:w #1 \q_stop
+}
+
+\cs_new:cpn { __jsonparse_parse_ [ :w } #1 \q_stop {
+ \exp_last_unbraced:Ne
+ \__jsonparse_parse_array_begin:w #1 \q_stop
+}
+
+\cs_new:cpn { __jsonparse_parse_ ] :w } #1 \q_stop {
+ \exp_last_unbraced:Ne
+ \__jsonparse_parse_array_end:w #1 \q_stop
+}
+
+\cs_new:cpn { __jsonparse_parse_ " :w } #1 \q_stop {
+ \exp_last_unbraced:Ne
+ \__jsonparse_parse_string_key:w #1 \q_stop
+}
+
+\exp_last_unbraced:NNo \cs_new:Npn \__jsonparse_parse_object_begin:w \c_left_brace_str #1 \q_stop {
\__jsonparse_array_key_set:
- \tl_set:Nn \l__jsonparse_remainder_tl {#2}
\group_begin:
+ \tl_set:Nn \l__jsonparse_remainder_tl {#1}
% object begin
\bool_if:NT \l__jsonparse_debug_mode_bool {
\msg_log:nnn { jsonparse } { debug-info } {
@@ -244,10 +226,19 @@
} {
\tl_set_eq:NN \l__jsonparse_object_array_key_tl \l__jsonparse_key_tl
\tl_set:Ne \l__jsonparse_prefix_tl { \l__jsonparse_key_tl \l__jsonparse_child_sep_str }
- \tl_set:Nn \l__jsonparse_val_tl {#1}
}
- \tl_set:Nn \l__jsonparse_object_array_val_tl { { #1 } }
- \exp_args:Ne \jsonparse_parse:n {#1}
+ \tl_set:Nn \l__jsonparse_object_array_val_tl { \c_left_brace_str #1 }
+ \__jsonparse_parse_remainder:
+}
+
+\exp_last_unbraced:NNo \cs_new:Npn \__jsonparse_parse_object_end:w \c_right_brace_str #1 \q_stop {
+ \tl_set:Ne \l__jsonparse_object_array_val_tl {
+ \tl_range:Nne \l__jsonparse_object_array_val_tl { 1 } {
+ \int_eval:n {
+ -1 * \tl_count:n {#1} - 1
+ }
+ }
+ }
\prop_gput:Nee \g_jsonparse_entries_prop
{ \l__jsonparse_object_array_key_tl } { \l__jsonparse_object_array_val_tl }
\bool_if:NT \l__jsonparse_debug_mode_bool {
@@ -256,31 +247,17 @@
\iow_char:N \ \iow_char:N \ (obj) ~ \str_use:N \l__jsonparse_object_array_val_tl
}
}
- % object end
- \bool_if:NT \l__jsonparse_debug_mode_bool {
- \msg_log:nnn { jsonparse } { debug-info } {
- (obj ~ end)
- }
- }
\group_end:
+ % object end
+ \bool_if:NT \l__jsonparse_debug_mode_bool {
+ \msg_log:nnn { jsonparse } { debug-info } {
+ (obj ~ end)
+ }
+ }
+ \tl_set:Nn \l__jsonparse_remainder_tl {#1}
\__jsonparse_parse_remainder:
}
-\cs_new:cpn { __jsonparse_parse_ [ :w } #1 \q_stop {
- \exp_last_unbraced:Ne
- \__jsonparse_parse_array_begin:w #1 \q_stop
-}
-
-\cs_new:cpn { __jsonparse_parse_ ] :w } #1 \q_stop {
- \exp_last_unbraced:Ne
- \__jsonparse_parse_array_end:w #1 \q_stop
-}
-
-\cs_new:cpn { __jsonparse_parse_ " :w } #1 \q_stop {
- \exp_last_unbraced:Ne
- \__jsonparse_parse_string_key:w #1 \q_stop
-}
-
\cs_new:Npn \__jsonparse_parse_array_begin:w [ #1 \q_stop {
\__jsonparse_array_key_set:
\group_begin:
@@ -318,13 +295,13 @@
}
}
\group_end:
- \tl_set:Nn \l__jsonparse_remainder_tl {#1}
% array end
\bool_if:NT \l__jsonparse_debug_mode_bool {
\msg_log:nnn { jsonparse } { debug-info } {
(arr ~ end)
}
}
+ \tl_set:Nn \l__jsonparse_remainder_tl {#1}
\__jsonparse_parse_remainder:
}
@@ -349,50 +326,18 @@
% key or string?
\tl_if_head_eq_charcode:eNTF { \l__jsonparse_remainder_tl } : {
\tl_remove_once:NV \l__jsonparse_remainder_tl \c_colon_str
- \bool_if:NT \l__jsonparse_escape_full_bool {
- \clist_map_inline:nn { \b , \f , \n , \r , \t , \u } {
- \tl_if_in:nnT {#1} {##1} {
- \msg_error:nne { jsonparse } { escape-in-key } {
- \token_to_str:N ##1
- }
- }
- }
- }
\tl_set:Ne \l__jsonparse_key_tl { \l__jsonparse_prefix_tl #1 }
- } {
- \group_begin:
- \bool_if:NT \l__jsonparse_escape_full_bool {
- \cs_set:Npn \b { \l__jsonparse_backspace_str }
- \cs_set:Npn \f { \l__jsonparse_formfeed_str }
- \cs_set:Npn \n { \l__jsonparse_linefeed_str }
- \cs_set:Npn \r { \l__jsonparse_carriage_return_str }
- \cs_set:Npn \t { \l__jsonparse_horizontal_tab_str }
- \cs_set:Npn \u { \char" }
- }
- \bool_if:NT \l__jsonparse_escape_basic_bool {
- \cs_set:Npn \" { " }
- \cs_set:Npn \/ { / }
- \cs_set:Npn \\ { \c_backslash_str }
- }
- \tl_set:Nn \l__jsonparse_val_tl {#1}
- \bool_if:NT \l__jsonparse_escape_full_bool {
- \tl_replace_all:Nen \l__jsonparse_val_tl { \char_generate:nn { 98 } { 12 } } { b }
- \tl_replace_all:Nen \l__jsonparse_val_tl { \char_generate:nn { 102 } { 12 } } { f }
- \tl_replace_all:Nen \l__jsonparse_val_tl { \char_generate:nn { 110 } { 12 } } { n }
- \tl_replace_all:Nen \l__jsonparse_val_tl { \char_generate:nn { 114 } { 12 } } { r }
- \tl_replace_all:Nen \l__jsonparse_val_tl { \char_generate:nn { 116 } { 12 } } { t }
- \tl_replace_all:Nen \l__jsonparse_val_tl { \char_generate:nn { 117 } { 12 } } { u }
- }
- \prop_gput:Nee \g_jsonparse_entries_prop
- { \l__jsonparse_key_tl } { \l__jsonparse_val_tl }
- % string
- \bool_if:NT \l__jsonparse_debug_mode_bool {
- \msg_log:nne { jsonparse } { debug-info } {
- (key) ~ \str_use:N \l__jsonparse_key_tl : \iow_newline:
- \iow_char:N \ \iow_char:N \ (str) ~ \str_use:N \l__jsonparse_val_tl
- }
- }
- \group_end:
+ } {
+ \tl_set:Nn \l__jsonparse_val_tl {#1}
+ \prop_gput:Nee \g_jsonparse_entries_prop
+ { \l__jsonparse_key_tl } { \l__jsonparse_val_tl }
+ % string
+ \bool_if:NT \l__jsonparse_debug_mode_bool {
+ \msg_log:nne { jsonparse } { debug-info } {
+ (key) ~ \str_use:N \l__jsonparse_key_tl : \iow_newline:
+ \iow_char:N \ \iow_char:N \ (str) ~ \str_use:N \l__jsonparse_val_tl
+ }
+ }
}
\__jsonparse_parse_remainder:
}
@@ -402,12 +347,13 @@
\tl_set:Nn \l__jsonparse_remainder_tl {#1}
\tl_set:Nn \l__jsonparse_temp_tl { #1 , }
\tl_replace_once:Nnn \l__jsonparse_temp_tl { ] } { , }
+ \tl_replace_once:Nen \l__jsonparse_temp_tl { \c_right_brace_str } { , }
\exp_last_unbraced:Ne
\__jsonparse_parse_other_aux:w \l__jsonparse_temp_tl \q_stop
}
\cs_new:Npn \__jsonparse_parse_other_aux:w #1 , #2 \q_stop {
- \tl_set:Nn \l__jsonparse_temp_tl {#1}
+ \tl_set:Ne \l__jsonparse_temp_tl { \tl_trim_spaces:n {#1} }
\cs_if_exist_use:cF { __jsonparse_parse_ \str_casefold:e { \l__jsonparse_temp_tl } : } {
\fp_if_nan:nTF {#1} {
% nan
@@ -493,11 +439,11 @@
\tl_range:nne {##1} { 1 } { \int_eval:n { \tl_count:n {#2} + 1 } }
} {
{ #2 \l__jsonparse_child_sep_str } {
- \prop_put:Nee \l__jsonparse_temp_prop
+ \prop_put:Nen \l__jsonparse_temp_prop
{ \tl_range:nen {##1} { \int_eval:n { \tl_count:n {#2} + 2 } } { -1 } } {##2}
}
{ #2 \l__jsonparse_array_sep_left_str } {
- \prop_put:Nee \l__jsonparse_temp_prop
+ \prop_put:Nen \l__jsonparse_temp_prop
{ \tl_range:nen {##1} { \int_eval:n { \tl_count:n {#2} + 1 } } { -1 } } {##2}
}
}
@@ -507,12 +453,26 @@
% ===
-\NewDocumentCommand { \JSONParse } { m +m } {
+\NewDocumentCommand { \JSONParse } { m +v } {
\tl_if_eq:enT { \tl_head:n {#2} } { \JSONParseValue } {
\msg_error:nn { jsonparse } { nested-non-expandable }
}
\prop_new:N #1
- \jsonparse_parse_to_prop:Nn #1 {#2}
+ \tl_gclear:N \g__jsonparse_json_tl
+ \group_begin:
+ \cs_set:Npn \" { \exp_not:N \" }
+ \cs_set:Npn \/ { \exp_not:N \/ }
+ \cs_set:Npn \\ { \exp_not:N \\ }
+ \cs_set:Npn \b { \exp_not:N \b }
+ \cs_set:Npn \f { \exp_not:N \f }
+ \cs_set:Npn \n { \exp_not:N \n }
+ \cs_set:Npn \r { \exp_not:N \r }
+ \cs_set:Npn \t { \exp_not:N \t }
+ \cs_set:Npn \u { \exp_not:N \u }
+ \cs_set:Npn \x [ ##1 ] [ ##2 ] { \prop_item:ce {##1} {##2} }
+ \tl_gset_rescan:Nne \g__jsonparse_json_tl { \cctab_select:N \c__jsonparse_json_escape_cctab } {#2}
+ \exp_args:NNe \jsonparse_parse_to_prop:Nn #1 { \g__jsonparse_json_tl }
+ \group_end:
}
\NewDocumentCommand { \JSONParseFromFile } { m m } {
@@ -520,25 +480,55 @@
\msg_error:nnn { jsonparse } { file-not-found }
{#2}
}
- \tl_clear:N \l__jsonparse_json_tl
- \bool_if:NTF \l__jsonparse_escape_full_bool {
- \file_get:nnN {#2} { \cctab_select:N \c__jsonparse_json_escape_cctab } \l__jsonparse_json_tl
- } {
- \file_get:nnN {#2} { } \l__jsonparse_json_tl
- }
\prop_new:N #1
- \jsonparse_parse_to_prop:Nn #1 { \l__jsonparse_json_tl }
+ \tl_gclear:N \g__jsonparse_json_tl
+ \group_begin:
+ \cs_set:Npn \" { \exp_not:N \" }
+ \cs_set:Npn \/ { \exp_not:N \/ }
+ \cs_set:Npn \\ { \exp_not:N \\ }
+ \cs_set:Npn \b { \exp_not:N \b }
+ \cs_set:Npn \f { \exp_not:N \f }
+ \cs_set:Npn \n { \exp_not:N \n }
+ \cs_set:Npn \r { \exp_not:N \r }
+ \cs_set:Npn \t { \exp_not:N \t }
+ \cs_set:Npn \u { \exp_not:N \u }
+ \cs_set:Npn \x [ ##1 ] [ ##2 ] { \prop_item:ce {##1} {##2} }
+ \file_get:nnN {#2} { \cctab_select:N \c__jsonparse_json_escape_cctab } \g__jsonparse_json_tl
+ \exp_args:NNe \jsonparse_parse_to_prop:Nn #1 { \g__jsonparse_json_tl }
+ \group_end:
}
\NewExpandableDocumentCommand { \JSONParseExpandableValue } { m m } {
\prop_item:Ne #1 {#2}
}
+\cs_set_eq:NN \__jsonparse_tex_quote \"
+\cs_set_eq:NN \__jsonparse_tex_backslash \\
+
+\cs_new:Npn \__jsonparse_rescan:n #1 {
+ \group_begin:
+ \cs_set:Npn \" { " }
+ \cs_set:Npn \/ { / }
+ \cs_set:Npn \\ { \c_backslash_str }
+ \cs_set:Npn \b { \l__jsonparse_backspace_str }
+ \cs_set:Npn \f { \l__jsonparse_formfeed_str }
+ \cs_set:Npn \n { \l__jsonparse_linefeed_str }
+ \cs_set:Npn \r { \l__jsonparse_carriage_return_str }
+ \cs_set:Npn \t { \l__jsonparse_horizontal_tab_str }
+ \cs_set:Npn \u { \char" }
+ \tl_set:Ne \l__jsonparse_temp_tl {#1}
+ \tl_analysis_log:N \l__jsonparse_temp_tl
+ \cs_set:Npn \" { \__jsonparse_tex_quote }
+ \cs_set:Npn \\ { \__jsonparse_tex_backslash }
+ \tl_rescan:no { } { \l__jsonparse_temp_tl }
+ \group_end:
+}
+
\NewDocumentCommand { \JSONParseValue } { s m m } {
\bool_if:NTF #1 {
- \tl_rescan:ne { } { \prop_item:Ne #2 {#3} }
+ \prop_item:Ne #2 {#3}
} {
- \prop_item:Ne #2 {#3}
+ \__jsonparse_rescan:n { \prop_item:Ne #2 {#3} }
}
}
@@ -564,9 +554,10 @@
\NewDocumentCommand { \JSONParseArrayValues } { s m m O{} m } {
\group_begin:
- \jsonparse_filter:Nn #2 {#3}
+ \tl_set:Nn \l__jsonparse_temp_tl {#2}
+ \jsonparse_filter:Nn \l__jsonparse_temp_tl {#3}
\bool_set_true:N \l__jsonparse_prop_map_first_bool
- \prop_map_inline:Nn #2 {
+ \prop_map_inline:Nn \l__jsonparse_temp_tl {
\str_if_eq:enT {
\tl_range:nen {##1} { \int_eval:n { -1 * \tl_count:n {#4} } } { -1 }
} {#4} {
@@ -576,9 +567,9 @@
#5
}
\bool_if:NTF #1 {
- \tl_rescan:ne { } {##2}
+ ##2
} {
- ##2
+ \__jsonparse_rescan:n {##2}
}
}
}
@@ -619,9 +610,9 @@
\tl_set:Ne \JSONParseArrayIndex { \__jsonparse_get_array_index:w ##1 \q_stop }
\tl_set:Ne \JSONParseArrayKey {##1}
\bool_if:NTF #1 {
- \tl_set_rescan:Nne \JSONParseArrayValue { } { \prop_item:Nn #2 {##1} }
+ \tl_set:Nn \JSONParseArrayValue { \prop_item:Nn #2 {##1} }
} {
- \tl_set:Ne \JSONParseArrayValue { \prop_item:Nn #2 {##1} }
+ \tl_set:Nn \JSONParseArrayValue { \__jsonparse_rescan:n { \prop_item:Nn #2 {##1} } }
}
\use:c {#5}
}
diff --git a/macros/latex/contrib/siunitx/CHANGELOG.md b/macros/latex/contrib/siunitx/CHANGELOG.md
index e469eef743..97c77dc5bc 100644
--- a/macros/latex/contrib/siunitx/CHANGELOG.md
+++ b/macros/latex/contrib/siunitx/CHANGELOG.md
@@ -7,6 +7,12 @@ Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to
## [Unreleased]
+## [v3.3.16] - 2024-04-24
+
+### Fixed
+- Ensure that mode-dependent symbols respect printing mode (see issue
+ [\#729](https://github.com/josephwright/siunitx/issues/729))
+
## [v3.3.15] - 2024-04-23
### Fixed
@@ -2098,7 +2104,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.15...HEAD
+[Unreleased]: https://github.com/josephwright/siunitx/compare/v3.3.16...HEAD
+[v3.3.16]: https://github.com/josephwright/siunitx/compare/v3.3.15...v3.3.16
[v3.3.15]: https://github.com/josephwright/siunitx/compare/v3.3.14...v3.3.15
[v3.3.14]: https://github.com/josephwright/siunitx/compare/v3.3.13...v3.3.14
[v3.3.13]: https://github.com/josephwright/siunitx/compare/v3.3.12...v3.3.13
diff --git a/macros/latex/contrib/siunitx/siunitx-code.pdf b/macros/latex/contrib/siunitx/siunitx-code.pdf
index 5571b7dbd5..2dc8e65250 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-symbol.dtx b/macros/latex/contrib/siunitx/siunitx-symbol.dtx
index 455adb6d59..ea97431841 100644
--- a/macros/latex/contrib/siunitx/siunitx-symbol.dtx
+++ b/macros/latex/contrib/siunitx/siunitx-symbol.dtx
@@ -161,18 +161,17 @@
{
\siunitx_declare_unit:Nen \degree
{
- \exp_not:N \ifmmode
- \@ifpackageloaded { unicode-math }
- { \@@_non_latin:n { "00B0 } }
- { { } ^ { \exp_not:N \circ } }
- \exp_not:N \else
- \exp_not:N \text
- {
- \@ifpackageloaded { inputenc }
- { \exp_not:N \textdegree }
- { \@@_non_latin:n { "00B0 } }
- }
- \exp_not:N \fi
+ \exp_not:N \TextOrMath
+ {
+ \@ifpackageloaded { inputenc }
+ { \exp_not:N \textdegree }
+ { \@@_non_latin:n { "00B0 } }
+ }
+ {
+ \@ifpackageloaded { unicode-math }
+ { \@@_non_latin:n { "00B0 } }
+ { { } ^ { \exp_not:N \circ } }
+ }
}
{ quantity-product = { } }
}
@@ -191,18 +190,17 @@
\group_end:
\siunitx_declare_unit:Ne \degreeCelsius
{
- \exp_not:N \ifmmode
- \@ifpackageloaded { unicode-math }
- { \@@_non_latin:n { "00B0 } }
- { { } ^ { \exp_not:N \circ } }
- \exp_not:N \else
- \exp_not:N \text
- {
- \@ifpackageloaded { inputenc }
- { \exp_not:N \textdegree }
- { \@@_non_latin:n { "00B0 } }
- }
- \exp_not:N \fi
+ \exp_not:N \TextOrMath
+ {
+ \@ifpackageloaded { inputenc }
+ { \exp_not:N \textdegree }
+ { \@@_non_latin:n { "00B0 } }
+ }
+ {
+ \@ifpackageloaded { unicode-math }
+ { \@@_non_latin:n { "00B0 } }
+ { { } ^ { \exp_not:N \circ } }
+ }
C
}
}
@@ -233,34 +231,33 @@
{ \exp_not:V \l_@@_tmpa_tl }
}
{
- \exp_not:N \ifmmode
- \@ifpackageloaded { fontspec }
- { \exp_not:V \l_@@_tmpb_tl }
- {
- \bool_lazy_or:nnTF
- {
- \@ifclassloaded { beamer }
- \c_true_bool
- \c_false_bool
- }
- {
- \@ifpackageloaded { kmath }
- \c_true_bool
- \c_false_bool
- }
- { \exp_not:V \l_@@_tmpb_tl }
- { \exp_not:V \l_@@_tmpa_tl }
- }
- \exp_not:N \else
- \exp_not:N \text
- {
- \bool_lazy_or:nnTF
- { \sys_if_engine_luatex_p: }
- { \sys_if_engine_xetex_p: }
- { \@@_non_latin:n { "2126 } }
- { \exp_not:N \textohm }
- }
- \exp_not:N \fi
+ \exp_not:N \TextOrMath
+ {
+ \bool_lazy_or:nnTF
+ { \sys_if_engine_luatex_p: }
+ { \sys_if_engine_xetex_p: }
+ { \@@_non_latin:n { "2126 } }
+ { \exp_not:N \textohm }
+ }
+ {
+ \@ifpackageloaded { fontspec }
+ { \exp_not:V \l_@@_tmpb_tl }
+ {
+ \bool_lazy_or:nnTF
+ {
+ \@ifclassloaded { beamer }
+ \c_true_bool
+ \c_false_bool
+ }
+ {
+ \@ifpackageloaded { kmath }
+ \c_true_bool
+ \c_false_bool
+ }
+ { \exp_not:V \l_@@_tmpb_tl }
+ { \exp_not:V \l_@@_tmpa_tl }
+ }
+ }
}
}
}
diff --git a/macros/latex/contrib/siunitx/siunitx-unit.dtx b/macros/latex/contrib/siunitx/siunitx-unit.dtx
index a7fd28e8bc..7faf5740da 100644
--- a/macros/latex/contrib/siunitx/siunitx-unit.dtx
+++ b/macros/latex/contrib/siunitx/siunitx-unit.dtx
@@ -86,7 +86,7 @@
% A small number of \LaTeXe{} math mode commands are assumed to be available
% as part of the formatted output. The \cs{mathchoice} command
% (normally the \TeX{} primitive) is needed when using different settings
-% for inline and siplay |per-mode|. The commands \cs{frac}, \cs{mathrm},
+% for inline and display |per-mode|. The commands \cs{frac}, \cs{mathrm},
% \cs{mbox}, \verb*|\ | and \cs{,} are used by the standard module settings.
% For the display of colored (highlighted) and cancelled units, the commands
% \cs{textcolor} and \cs{cancel} are assumed to be available.
diff --git a/macros/latex/contrib/siunitx/siunitx.dtx b/macros/latex/contrib/siunitx/siunitx.dtx
index 30b2d92366..6f49440f7c 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} {2024-04-23} {3.3.15}
+\ProvidesExplPackage {siunitx} {2024-04-24} {3.3.16}
{A comprehensive (SI) units package}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/siunitx/siunitx.pdf b/macros/latex/contrib/siunitx/siunitx.pdf
index 9315de3947..3c058ce3fa 100644
--- a/macros/latex/contrib/siunitx/siunitx.pdf
+++ b/macros/latex/contrib/siunitx/siunitx.pdf
Binary files differ
diff --git a/macros/latex/contrib/spbmark/spbmark.pdf b/macros/latex/contrib/spbmark/spbmark.pdf
index 2f512d8f75..c86957a167 100644
--- a/macros/latex/contrib/spbmark/spbmark.pdf
+++ b/macros/latex/contrib/spbmark/spbmark.pdf
Binary files differ
diff --git a/macros/latex/contrib/spbmark/spbmark.sty b/macros/latex/contrib/spbmark/spbmark.sty
index 117a0e167b..e4c45d13e8 100644
--- a/macros/latex/contrib/spbmark/spbmark.sty
+++ b/macros/latex/contrib/spbmark/spbmark.sty
@@ -9,7 +9,7 @@
% https://creativecommons.org/licenses/by/4.0/legalcode
\NeedsTeXFormat{LaTeX2e}[2018/12/31]
\RequirePackage{xparse,l3keys2e}
-\ProvidesExplPackage{spbmark}{2024/02/16}{1.46e}
+\ProvidesExplPackage{spbmark}{2024/04/24}{1.46f}
{Customize superscripts and subscripts}
\cs_generate_variant:Nn \box_set_ht:Nn { cv }
@@ -28,8 +28,8 @@
\cs_set_eq:NN \spb@math@super@save \sp
\cs_set_eq:NN \spb@math@sub@save \sb
\cs_set_eq:NN \spb@@makefnmark@save \@makefnmark
-\cs_new_protected:Npn \spb_define:n { \keys_define:nn { ctex/style } }
-\cs_new_protected:Npn \spb_set:n { \keys_set:nn { ctex/style } }
+\cs_new_protected:Npn \spb_define:n { \keys_define:nn { ctex/tools } }
+\cs_new_protected:Npn \spb_set:n { \keys_set:nn { ctex/tools } }
\cs_set_eq:NN \spbset \spb_set:n
\keys_define:nn { spbmark/option }
{
@@ -545,7 +545,7 @@
\IfPackageLoadedTF{easybase}
{\AddToHook{package/easybase/after}}
{\use:n}
- { \keys_define:nn { } { ctex/style .inherit:n = spbmark/option } }
+ { \keys_define:nn { } { ctex/tools .inherit:n = spbmark/option } }
\IfFormatAtLeastTF{2021/11/15}
{
\AddToHook{package/altsubsup/after}
diff --git a/macros/latex/contrib/spbmark/spbmark.tex b/macros/latex/contrib/spbmark/spbmark.tex
index 3235237822..9bd3057ad4 100644
--- a/macros/latex/contrib/spbmark/spbmark.tex
+++ b/macros/latex/contrib/spbmark/spbmark.tex
@@ -7,8 +7,8 @@
{
package = spbmark,
title = the spbmark package,
- version = v1.46e,
- date = 2024/02/16,
+ version = v1.46f,
+ date = 2024/04/24,
authors = Qu Yi,
info = Customize superscript and subscript,
email = toquyi@163.com,
diff --git a/macros/unicodetex/latex/bithesis/bithesis.dtx b/macros/unicodetex/latex/bithesis/bithesis.dtx
index 200c748f26..1c138e3a89 100644
--- a/macros/unicodetex/latex/bithesis/bithesis.dtx
+++ b/macros/unicodetex/latex/bithesis/bithesis.dtx
@@ -21,10 +21,10 @@
%<thesis>\ProvidesExplClass{bithesis}
%<report>\ProvidesExplClass{bitreport}
%<beamer>\ProvidesExplClass{bitbeamer}
-%<cls>{2024-04-16}{3.7.4}{BIT Thesis Templates}
+%<cls>{2024-04-24}{3.7.5}{BIT Thesis Templates}
%
%<*driver>
-\ProvidesFile{bithesis.dtx}[2024/04/16 3.7.4 BIT Thesis Templates]
+\ProvidesFile{bithesis.dtx}[2024/04/24 3.7.5 BIT Thesis Templates]
\documentclass[letterpaper]{l3doc}
\usepackage{dtx-style}
@@ -837,9 +837,9 @@
hyphen .initial:n = {true},
% 控制公式和上下文的距离
mathAboveDisplaySkip .dim_set:N = \l_@@_style_math_above_display_skip_dim,
- mathAboveDisplaySkip .initial:n = {3pt},
+ mathAboveDisplaySkip .initial:n = {10pt},
mathBelowDisplaySkip .dim_set:N = \l_@@_style_math_below_display_skip_dim,
- mathBelowDisplaySkip .initial:n = {3pt},
+ mathBelowDisplaySkip .initial:n = {10pt},
betterTimesNewRoman .bool_set:N = \l_@@_style_better_new_roman_bool,
betterTimesNewRoman .initial:n = {false},
}
@@ -886,9 +886,9 @@
omit .bool_set:N = \l_@@_publications_omit_bool,
omit .initial:n = {false},
maxbibnames .int_set:N = \l_@@_publications_maxbibnames_int,
- maxbibnames .initial:n = {3},
+ maxbibnames .initial:n = {10},
minbibnames .int_set:N = \l_@@_publications_minbibnames_int,
- minbibnames .initial:n = {1},
+ minbibnames .initial:n = {10},
}
% \end{macrocode}
% 在宏加载时,处理 |bithesis/option| 中的值。使得 |bithesis|
@@ -1489,6 +1489,7 @@
% preamble 中也不会有影响。
\AtBeginEnvironment{tabular}{\zihao{\l_@@_misc_tabular_font_size_tl}}
\AtBeginEnvironment{tabular*}{\zihao{\l_@@_misc_tabular_font_size_tl}}
+ \AtBeginEnvironment{tabularx}{\zihao{\l_@@_misc_tabular_font_size_tl}}
}
% \end{macrocode}
% \end{macro}
@@ -1601,11 +1602,13 @@
\cs_gset:Npn \lstlistingname {\c_@@_label_code_tl}
% 算法变成「章节号-序号」
+ % 为了减少修改,我们只适配按章编号的情况。
% 针对 algorithm 宏包
- \cs_gset:Npn \thealgorithm
- {\thechapter\g__bithesis_label_divide_char_tl\arabic{algorithm}}
+ \@ifpackagewith{algorithm}{chapter}{
+ \cs_gset:Npn \thealgorithm
+ {\thechapter\g__bithesis_label_divide_char_tl\arabic{algorithm}}
+ }
% 针对 algorithm2e 宏包
- % 为了减少修改,我们只适配按章编号(algochapter)的情况。
\@ifpackagewith{algorithm2e}{algochapter}{
% 名字中的“cf”是指其作者 Christophe Fiorio。
\cs_gset:Npn \thealgocf
diff --git a/macros/unicodetex/latex/bithesis/bithesis.pdf b/macros/unicodetex/latex/bithesis/bithesis.pdf
index 8056d149eb..fe983fec76 100644
--- a/macros/unicodetex/latex/bithesis/bithesis.pdf
+++ b/macros/unicodetex/latex/bithesis/bithesis.pdf
Binary files differ
diff --git a/support/TeX4ht/source/ChangeLog b/support/TeX4ht/source/ChangeLog
index 4cc207e332..2429b5742c 100644
--- a/support/TeX4ht/source/ChangeLog
+++ b/support/TeX4ht/source/ChangeLog
@@ -1,3 +1,22 @@
+2024-04-24 Karl Berry <karl@freefriends.org>
+
+ * tex4ht-4ht.tex (microtype.4ht): use |<TeX4ht copywrite|>
+ to get version ident, etc.
+
+2024-04-24 Michal Hoftich <michal.h21@gmail.com>
+
+ * tex4ht-4ht.tex (microtype.4ht),
+ * tex4ht-html4.tex (html4.4ht): use default value of letter spacing
+ provided by Microtype.
+ https://github.com/michal-h21/tex4ebook/issues/127
+
+2024-04-23 Michal Hoftich <michal.h21@gmail.com>
+
+ * tex4ht-4ht.tex (microtype.4ht),
+ * tex4ht-html4.tex (html4.4ht): added support for letter spacing
+ using the \textls command.
+ https://github.com/michal-h21/tex4ebook/issues/127
+
2024-04-22 Michal Hoftich <michal.h21@gmail.com>
* tex4ht-4ht.tex (tcolorbox.4ht): fixed handling of labels in
diff --git a/support/TeX4ht/source/tex4ht-4ht.tex b/support/TeX4ht/source/tex4ht-4ht.tex
index 8296aec575..4af3079f8a 100644
--- a/support/TeX4ht/source/tex4ht-4ht.tex
+++ b/support/TeX4ht/source/tex4ht-4ht.tex
@@ -1,4 +1,4 @@
-% $Id: tex4ht-4ht.tex 1507 2024-04-22 13:28:48Z michal_h21 $
+% $Id: tex4ht-4ht.tex 1512 2024-04-24 22:10:14Z karl $
% tex tex4ht-4ht or ht tex tex4ht-4ht
%
% Copyright 2009-2024 TeX Users Group
@@ -31389,11 +31389,11 @@ for output formats.
%%%%%%%%%%%%%
\<microtype.4ht\><<<
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% microtype.4ht |version %
-% Copyright (C) |CopyYear.2007. Eitan M. Gurari %
-|<TeX4ht copyright|>
+% microtype.4ht (|version), generated from |jobname.tex
+% Copyright |CopyYear.2007. Eitan M. Gurari
+|<TeX4ht copywrite|>
|<disable microtype|>
+ |<microtype textls|>
\Hinput{microtype}
\endinput
>>> \AddFile{9}{microtype}
@@ -31406,11 +31406,31 @@ for output formats.
\renewcommand{\UseMicroTypeSet}[2][]{}
\renewcommand{\SetProtrusion}[3][]{}
\renewcommand{\SetExpansion}[3][]{}
-\ifx \textls\UnDef\else
- \renewcommand{\textls}[2][]{#2}
-\fi
>>>
+We can try to provide a letterspacing command:
+
+\<microtype textls\><<<
+\NewConfigure{textls}{2}
+\ExplSyntaxOn
+\ifx\MT@letterspace\m@ne
+\edef\:letterspacedefault{\fp_eval:n{\MT@letterspace@default/1000}}
+\else
+\edef\:letterspacedefault{\fp_eval:n{\MT@letterspace/1000}}
+\fi
+\providecommand\:textls[2][]{%
+ \begingroup%
+ \ifx\relax#1\relax\else%
+ \edef\:letterspacing{\fp_eval:n{#1/1000}}%
+ \fi%
+ \a:textls%
+ #2%
+ \b:textls%
+ \endgroup%
+}
+\ExplSyntaxOff
+\HLet\MT@textls\:textls
+>>>
%%%%%%%%%%%%%
\Section{Bm.sty}
%%%%%%%%%%%%%
diff --git a/support/TeX4ht/source/tex4ht-html4.tex b/support/TeX4ht/source/tex4ht-html4.tex
index 3cdfddd791..4fe364db38 100644
--- a/support/TeX4ht/source/tex4ht-html4.tex
+++ b/support/TeX4ht/source/tex4ht-html4.tex
@@ -1,4 +1,4 @@
-% $Id: tex4ht-html4.tex 1504 2024-04-19 15:48:03Z michal_h21 $
+% $Id: tex4ht-html4.tex 1511 2024-04-24 12:46:19Z michal_h21 $
% Compile 4 times: latex tex4ht-html4
% Copy html4.4ht into the work directory before all but the last compilation.
%
@@ -21751,6 +21751,15 @@ users redefine the latter macro.
\ExplSyntaxOff
>>>
+%%%%%%%%%%%%%%%%%%%%%
+\section{microtype}
+%%%%%%%%%%%%%%%%%%%%%
+
+\<configure html4 microtype\><<<
+\Configure{textls}{\HCode{<span class="textls" \ifdefined\:letterspacing style="letter-spacing:\:letterspacing rem" \fi>}}{\HCode{</span>}}
+\Css{.textls{letter-spacing:\:letterspacedefault rem;}} % default letter spacing, if no amount is specified
+>>>
+
%%%%%%%%%%%%%%%%%%%%%
\section{mhchem}
diff --git a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
index 1cf9e664e0..7ab47c6a37 100644
--- a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+++ b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
@@ -47,6 +47,7 @@ $mirrors = {
},
'Korea' => {
'http://ftp.ktug.org/tex-archive/' => 1,
+ 'https://ftp.kaist.ac.kr/tex-archive/' => 1,
'https://kr.mirrors.cicku.me/ctan/' => 1,
'https://lab.uklee.pe.kr/tex-archive/' => 1,
'https://mirror.kakao.com/CTAN/' => 1,
@@ -94,6 +95,7 @@ $mirrors = {
'http://sendinnsky.selfhost.co/tex-archive/' => 1,
'http://vesta.informatik.rwth-aachen.de/ftp/pub/mirror/ctan/' => 1,
'https://ctan.ebinger.cc/tex-archive/' => 1,
+ 'https://ctan.joethei.xyz/' => 1,
'https://ctan.mc1.root.project-creative.net/' => 1,
'https://ctan.mirror.norbert-ruehl.de/' => 1,
'https://ctan.net/' => 1,
@@ -177,9 +179,6 @@ $mirrors = {
'https://mirror.quantum5.ca/CTAN/' => 1,
'https://muug.ca/mirror/ctan/' => 1,
},
- 'Costa Rica' => {
- 'https://mirrors.ucr.ac.cr/CTAN/' => 1,
- },
'USA' => {
'http://mirrors.ibiblio.org/pub/mirrors/CTAN/' => 1,
'https://ctan.math.illinois.edu/' => 1,
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
index 83025a145e..c912d2107a 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/2024
-depend revision/71052
+depend revision/71073
name 00texlive.image
category TLCore
-revision 71053
+revision 71070
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
@@ -1759,6 +1759,7 @@ runfiles size=14464
tlpkg/tlpsrc/exercisebank.tlpsrc
tlpkg/tlpsrc/exercisepoints.tlpsrc
tlpkg/tlpsrc/exercises.tlpsrc
+ tlpkg/tlpsrc/exercisesheets.tlpsrc
tlpkg/tlpsrc/exesheet.tlpsrc
tlpkg/tlpsrc/exframe.tlpsrc
tlpkg/tlpsrc/exp-testopt.tlpsrc
@@ -4886,7 +4887,7 @@ depend setting_available_architectures:aarch64-linux amd64-freebsd amd64-netbsd
name 00texlive.installer
category TLCore
-revision 71052
+revision 71073
shortdesc TeX Live standalone installer package
longdesc This package defines the files to go into the installer
longdesc archives (install-tl-unx.tar.gz, install-tl.zip) built by the
@@ -43345,24 +43346,24 @@ catalogue-version 0.1
name bithesis
category Package
-revision 70966
+revision 71068
shortdesc Templates for the Beijing Institute of Technology
relocated 1
longdesc This package establishes a simple and easy-to-use LaTeX
longdesc template for Beijing Institute of Technology dissertations,
longdesc including general undergraduate theses and master theses.
-containersize 20800
-containerchecksum 14f43265802c6de6b42af13d4a56854bc8fdbfe1a7f389fed1aebfb4089077b916bd69d618b022db8be7815d9d011e55524c3d11706a02a4a8f0f9aa94e51c0f
-doccontainersize 743904
-doccontainerchecksum a4e7e7f1f6d729e7c7bc820ea05c32796eca8f1aa95c3b2ad6e1870418b8c9e8645c74e3dc6d973c114eab1ae89062d136f9600520d020cc146ff0798b38c71a
-docfiles size=188
+containersize 20804
+containerchecksum 793aedc4aac4097f3e190e7c1024a2a69e5b5e4869e9dc2937f4da668816dbd9c03b08d50e5de22856bacd7ff7207d0c96b382a7fbddd14e2269d0d8cc25dae7
+doccontainersize 750976
+doccontainerchecksum 325238206c5173168202f049bcbd1d9b7d407947ddd3d84f2625bfb09158461ddc8abe29947319a2115fe7d04b8e1461d7f60ce0d4b1866256d02e817b62f4a6
+docfiles size=190
RELOC/doc/latex/bithesis/README.md details="Readme"
RELOC/doc/latex/bithesis/bithesis.pdf details="Package documentation" language="zh"
RELOC/doc/latex/bithesis/contributing-zh.md
RELOC/doc/latex/bithesis/contributing.md
RELOC/doc/latex/bithesis/dtx-style.sty
-srccontainersize 27480
-srccontainerchecksum d8692ffcc9e593385875132112d520cb1172764c8e2c2c09ead3acf74c7ac5071924a72bf5f63ed7d640892398abd0db0eb58a35ba03523757e94ed2d78c35d0
+srccontainersize 27500
+srccontainerchecksum 8279493e99d1ed201d7fdb58d52f0a04b4b459595b6d88747861145f27aabaa920d7ff3f597689b61dbc1929d5d2691a4bf879c4711f7f7337ad98e859bfb387
srcfiles size=34
RELOC/source/latex/bithesis/bithesis.dtx
RELOC/source/latex/bithesis/bithesis.ins
@@ -43378,7 +43379,7 @@ catalogue-contact-support https://github.com/BITNP/BIThesis/discussions
catalogue-ctan /macros/unicodetex/latex/bithesis
catalogue-license lppl1.3c
catalogue-topics class dissertation doc-templ chinese expl3
-catalogue-version 3.7.4
+catalogue-version 3.7.5
name bitpattern
category Package
@@ -72071,7 +72072,7 @@ containerchecksum 889eae40b82f31c7c4b3a17740399c763dabec7986fcb39261b252afff69a0
name collection-latexextra
category Collection
-revision 70976
+revision 71063
shortdesc LaTeX additional packages
relocated 1
longdesc A very large collection of add-on packages for LaTeX.
@@ -72563,6 +72564,7 @@ depend exercise
depend exercisebank
depend exercisepoints
depend exercises
+depend exercisesheets
depend exesheet
depend exframe
depend exp-testopt
@@ -73621,8 +73623,8 @@ depend zref-clever
depend zref-vario
depend zwgetfdate
depend zwpagelayout
-containersize 7164
-containerchecksum fc6f83b91d840e195c0b7106498106265ad490b456bfb7e9d384685a41bd6632f10d0ccad18c76daa266a2508f1ddaf61efba52d0dc106fe6d2e45d935aef961
+containersize 7168
+containerchecksum 3e9bde7d81824e7f4b861d66b5f842832ab307090bfe002dbf46d0ed99c82a2ee87a1c8d11661b3fe7257ad15d81ec980f7692983bcddfc8fcf94bb6caeae3fd
name collection-latexrecommended
category Collection
@@ -84759,7 +84761,7 @@ catalogue-version 0.1
name cormorantgaramond
category Package
-revision 71011
+revision 71057
shortdesc Cormorant Garamond family of fonts
relocated 1
longdesc This package provides LaTeX, pdfLaTeX, XeLaTeX and LuaLaTeX
@@ -84768,10 +84770,10 @@ longdesc Christian Thalman of Catharsis Fonts. The family includes
longdesc light, regular, medium, semi-bold, and bold weights, with
longdesc italics.
execute addMap CormorantGaramond.map
-containersize 5571660
-containerchecksum 119b399841b098150c2d8547984936b697c17fa8e5f7633a4e78e177f9e914d09567d687351fb3425215e4d3f00a420fada94ae931e2bbedd27866ca4c297e34
+containersize 5571628
+containerchecksum 38a0fb2a104d7b228f627fdcc50ebd637d9863a40e38898f87fbfe25d0ab8f5c0f4870607271dd58931237d0dd262c9fcb60f2197b4a8854fc257b51682dc536
doccontainersize 158028
-doccontainerchecksum 1ee8460cfa1763d03cbc70c8d5efeb0be448d82606c904c54a584147071886c79323219fc11101d7cf8fdd1babc95c5e37190ebbad16a413a28226a7b3c7ad13
+doccontainerchecksum cded570791b9e8320eb49f7a3271c08f57b7df348d22c2a5cb7fe0033b46dbe893d241339bffde6dc687e7415d427f8c4d9401903ef70ea7cd4d869f659afbcd
docfiles size=42
RELOC/doc/fonts/cormorantgaramond/OFL.txt
RELOC/doc/fonts/cormorantgaramond/README details="Readme"
@@ -106557,7 +106559,7 @@ catalogue-topics notes editorial
name easybook
category Package
-revision 71053
+revision 71062
shortdesc Easily typesetting Chinese theses or books
relocated 1
longdesc easybook is a pure academic template created based on the
@@ -106568,20 +106570,20 @@ longdesc providing multiple commands and interfaces allows users to
longdesc easily customize the thesis template. Its basic macro package
longdesc easybase can also be used with CTeX and standard document
longdesc classes.
-containersize 17240
-containerchecksum 2c277b9629d1da5f747f11775fe9bbb38a35bb541cab1d5a343f53a82599329f33961bc5b29711643de2908243fe5f3c6d184847c882b68ebe4f880e5c393351
-doccontainersize 643876
-doccontainerchecksum ce288fef66a31154ea125c2b6ec85889a00a37811cd11183061c30d030cdb1ab8c7a8318fc38a4830904b8208c69bbe20d54ae07e3cdb289b7aaa23854094da0
-docfiles size=176
+containersize 17560
+containerchecksum 9923e131e5ecb2f2ed364b941ec062410bea6f377c422262e6726cd0e6fc4428e5acd5006bcccfbf104f8629cab9de93e5ae8afc2b87c3411599353d53708c2b
+doccontainersize 665756
+doccontainerchecksum a2c1285a547ee064529e240b953af27875f3d7cdce125a6fbcd49ab394949b893186763aa99a10c6c4b6790098855fa4a470caccfedab5ed200927a7664ecbfa
+docfiles size=183
RELOC/doc/latex/easybook/README.md details="Readme"
RELOC/doc/latex/easybook/easybook.pdf details="Package documentation" language="zh"
RELOC/doc/latex/easybook/easybook.tex
-srccontainersize 17136
-srccontainerchecksum ece91206b34899929878a8230c24248d01049309d6b8442068cf426284dec26203293b6ecdf8e570f04fb5ae9c2a25f2f25993f20eadf8ea046038813122b253
+srccontainersize 17436
+srccontainerchecksum 71466ac8320b421a66e717947233e5f1f45a279f56ec6d50563c2fbac782c13a161366b64304e4f172e30485b11c8219913d2f89189a49e24a116ddb4d063435
srcfiles size=21
RELOC/source/latex/easybook/easybook.dtx
RELOC/source/latex/easybook/easybook.ins
-runfiles size=21
+runfiles size=22
RELOC/tex/latex/easybook/easybase.sty
RELOC/tex/latex/easybook/easybook.cls
RELOC/tex/latex/easybook/eb-tcolorbox.cfg
@@ -106590,7 +106592,7 @@ catalogue-contact-repository https://gitee.com/texno3/easybook
catalogue-ctan /macros/latex/contrib/easybook
catalogue-license lppl1.3c
catalogue-topics book-pub dissertation class doc-templ chinese expl3
-catalogue-version 2024aw
+catalogue-version 2024az
name easydtx
category Package
@@ -106974,7 +106976,7 @@ catalogue-version 4
name ebgaramond
category Package
-revision 66604
+revision 71069
shortdesc LaTeX support for EBGaramond fonts
relocated 1
longdesc EB Garamond is a revival by Georg Duffner of the 16th century
@@ -106982,11 +106984,11 @@ longdesc fonts designed by Claude Garamond. The LaTeX support package
longdesc works for (pdf)LaTeX, XeLaTeX and LuaLaTeX users; configuration
longdesc files for use with microtype are provided.
execute addMap EBGaramond.map
-containersize 8393360
-containerchecksum 4a676d0016c5b3c4e513dca01e7e2f1b5bfbc061e111935380af4937bdfe2493927b226b28972c060ee0c09e7c27c6bf828ea09151eec0b8df67530f62e30aac
-doccontainersize 521776
-doccontainerchecksum 82713ea36e1eeb1d2673a049d9ffcae97627406571e6e8e47fa6a6853511beb5a5eeef8a63fbe88e6c79539b1fbde880d0b2779f6f01f20eb7b1c7fc716104bc
-docfiles size=148
+containersize 8391100
+containerchecksum d02ac16a7ccb8ded53a42c002824791376357db9909c197f1fec6ce62f55d136833c995120e7a077e51b802c8cc2e1c18234d0e7833222fabd1f6bd04933578d
+doccontainersize 598752
+doccontainerchecksum 3f1a6164310b9104fc9753681fbb55a54417a1902a62cd5337e011f1d3fa9d7af11757ea5eaf5ecbddba34b7e7c6ed54ddc0b834bd9b9fdb601eb92e612ff460
+docfiles size=164
RELOC/doc/fonts/ebgaramond/AUTHORS.txt
RELOC/doc/fonts/ebgaramond/CONTRIBUTORS.txt
RELOC/doc/fonts/ebgaramond/EBGaramond-Initials-Glyphs.pdf
@@ -120159,6 +120161,42 @@ catalogue-license lppl1.2
catalogue-topics exercise
catalogue-version 1.1
+name exercisesheets
+category Package
+revision 71063
+shortdesc Typeset exercise sheets for university courses and school classes
+relocated 1
+longdesc This LaTeX package provides a way to typeset exercise sheets as
+longdesc used in university courses and school classes. It has evolved
+longdesc from a set of macros and environments that were finally
+longdesc combined into this package. Since version 0.11 it has a regular
+longdesc and a beamer mode (selected depending on the documentclass
+longdesc used). From version 0.16 on there is an embedded mode that
+longdesc allows using exercises in lecture notes etc. without requiring
+longdesc page breaks. Since the package includes a loading mechanism for
+longdesc exercises from external files, the same exercises can be reused
+longdesc in different contexts.
+containersize 12520
+containerchecksum 42bacd930a3fa8af36594984d5bbec23e062e7677a07709dc364019791411dc9311aec41fe9249f8509cc67db9085d812ad7886a6b8a310010cbde1985082407
+doccontainersize 144480
+doccontainerchecksum 1968c97bc991feaef167337b6de832a05e4789a844dafda7f4169ced00feff988806c30688667183d8b26d5dd9a7cd5bf4520d7aea3959c06f20c1ac2f3544ec
+docfiles size=50
+ RELOC/doc/latex/exercisesheets/README details="Readme"
+ RELOC/doc/latex/exercisesheets/examples/exercises/exshexample-ex1.tex
+ RELOC/doc/latex/exercisesheets/examples/exercises/exshexample-ex2.lua
+ RELOC/doc/latex/exercisesheets/examples/exshexample-embedded.tex
+ RELOC/doc/latex/exercisesheets/examples/exshexample.tex
+ RELOC/doc/latex/exercisesheets/exercisesheets-doc.pdf details="Package documentation"
+ RELOC/doc/latex/exercisesheets/exercisesheets-doc.tex
+runfiles size=16
+ RELOC/tex/latex/exercisesheets/exercisesheets.sty
+catalogue-contact-bugs https://gitlab.com/texedutools/exercisesheets/-/issues
+catalogue-contact-repository https://gitlab.com/texedutools/exercisesheets
+catalogue-ctan /macros/latex/contrib/exercisesheets
+catalogue-license lppl1.3c
+catalogue-topics exercise exam expl3 presentation use-luatex
+catalogue-version 0.17
+
name exesheet
category Package
revision 69838
@@ -121284,22 +121322,22 @@ catalogue-topics class presentation
name fancyhdr
category Package
-revision 64977
+revision 71064
shortdesc Extensive control of page headers and footers in LaTeX2e
relocated 1
longdesc The package provides extensive facilities, both for
longdesc constructing headers and footers, and for controlling their use
longdesc (for example, at times when LaTeX would automatically change
longdesc the heading style in use).
-containersize 5388
-containerchecksum 51254df035199653a78cc06c6b62f3d9edf3fa8c78911c0c667d5043376c9d449ce5a412ffb4e9df2bbd7b7459be8bf43f5ff296015ab2b2e146673290211a3f
-doccontainersize 844696
-doccontainerchecksum 3c3a1f01fd799b8530634ea917523f6a789f7f1b4dddf16e269ebb78ddaf749fff6ca07984044128147fbf5e568837688906c36c409688150f61490565b1a06e
-docfiles size=214
+containersize 5476
+containerchecksum 549315daa9bfc2202b9dfad181aa86b1dc7027dcc42f425d1ca9e2b0dd6dfe2c6313607ee06f7b4fb97ec7cf27c4f01350946ab94dc5a73e14209d11c7854cd9
+doccontainersize 849780
+doccontainerchecksum 31aef448fef6f0b1f99224b3dce3003a9e9ee2b494041b337ad36f897b1efd52201d80c1352360e8f95a5134d1df4b269cf71e6eaf2a89c79eb5e5f27907c455
+docfiles size=215
RELOC/doc/latex/fancyhdr/README details="Readme"
RELOC/doc/latex/fancyhdr/fancyhdr.pdf details="Users' manual (English)"
-srccontainersize 48120
-srccontainerchecksum 57db137f52c1f93ac8cb70e234985f6290d326f073a30a2eff4806da756126238f36ee87d123dccc71d4f73968e1342006fae63a96604e2b1b858d798f42c287
+srccontainersize 48480
+srccontainerchecksum f41fb0361061554a3d8e2a2f45aeea12831dc9454a5cbc4c8d050a79a81c44f69c2284c98ba66e757fd3dfef51c13924b0fb53a962537e097af08cc4dc9880bd
srcfiles size=51
RELOC/source/latex/fancyhdr/fancyhdr.dtx
RELOC/source/latex/fancyhdr/fancyhdr.ins
@@ -121313,7 +121351,7 @@ catalogue-contact-repository https://github.com/pietvo/fancyhdr
catalogue-ctan /macros/latex/contrib/fancyhdr
catalogue-license lppl1.3
catalogue-topics page-hf
-catalogue-version 4.1
+catalogue-version 4.2
name fancyhdr-it
category Package
@@ -134995,7 +135033,7 @@ catalogue-version 1.1
name garamond-libre
category Package
-revision 71013
+revision 71058
shortdesc The Garamond Libre font face
relocated 1
longdesc Garamond Libre is a free and open-source old-style font family.
@@ -135010,10 +135048,10 @@ longdesc scripts, as well as small capitals, old-style figures, superior
longdesc and inferior figures, historical ligatures, Byzantine musical
longdesc symbols, the IPA and swash capitals.
execute addMap GaramondLibre.map
-containersize 7141676
-containerchecksum a942887010f20d17e93f382e7886d8b6ec59063d2e1a1aebbc81053482f350d6a233a0ca43211d27ed5494272bb20c61b63615562a45ac32a315a1af53fa5ccd
-doccontainersize 495076
-doccontainerchecksum 940668d504f7735645cb67aadab86c837fdf0043e32ac82911f8f111708246503a2e84d1072a29f32856623018cdd11fdaf78cf917e02a5044240bc1c709685e
+containersize 7141672
+containerchecksum 53ad88338f2f1ec960d58956c165446208ffe213af3a37a15d33f6e794956fb754bc34bd2389e86552fb88351be827ffa098254231c72bdfdb3925844fe51587
+doccontainersize 495088
+doccontainerchecksum fea2680d1a649bb605ee2ac6de3626369fb86d3d638c1baface12812f1d35bb6852482996018f81558811e29b3c768c610190b4c686bc62ac0f47638fdde2f44
docfiles size=124
RELOC/doc/fonts/garamond-libre/COPYING
RELOC/doc/fonts/garamond-libre/README details="Readme"
@@ -152106,7 +152144,7 @@ catalogue-version 0.2
name ibarra
category Package
-revision 71026
+revision 71059
shortdesc LaTeX support for the Ibarra Real Nova family of fonts
relocated 1
longdesc The Ibarra Real Nova is a revival of a typeface designed by
@@ -152114,9 +152152,9 @@ longdesc Geronimo Gil for the publication of Don Quixote for the Real
longdesc Academia de la Lengua in 1780. Joaquin Ibarra was the printer.
execute addMap ibarra.map
containersize 788136
-containerchecksum 46b4af746664f685f22109daef5fe29af8a82cf6c7ab26a8390ee13d8e19c7082bf3b26655302509058613b0592c7364bb85dfff195064764de89e37833b5b94
-doccontainersize 312064
-doccontainerchecksum c46f26239c5965a74151f00027387a8c9b3f9467550ab825d00f4f2bca4faf84516c045d55965297c0638fce4daddfa2023584d12b2f354d9c0b39f350dec0f9
+containerchecksum 2b302cc5c97d546fb0f47d209ed1fa36e019bf5dd204b9b6c3325ce039860e44019ffd5c3482f6986bd894d73689300f8537fd3598f39dd3987811b741602a1e
+doccontainersize 309812
+doccontainerchecksum a163ee666360ef3c389b911fb3dd0ef491c234f8e4097def2143f4d4273d01ed3385f3c35edad13b1b018a46963bdbc124be6cd056d6a95aa477041d171b9cc6
docfiles size=85
RELOC/doc/fonts/ibarra/OFL.txt
RELOC/doc/fonts/ibarra/README details="Readme"
@@ -168721,17 +168759,17 @@ catalogue-version 1.13
name jsonparse
category Package
-revision 71031
+revision 71065
shortdesc Parse, store and access JSON data in LaTeX documents
relocated 1
longdesc This package provides an easy way to read in JSON data from
longdesc files or strings in LaTeX documents, parse the data and store
longdesc it in a user-defined token variable.
-containersize 4140
-containerchecksum 49fb35151be5af1fac11eef7efbfbb21b6676733f520ffb3c3fab2ff2bef52ac1a5734a2879cf117f3b9021e52f3fc88632333c114505f387f1ac1c02b12b445
-doccontainersize 386680
-doccontainerchecksum 88b07825be3332462823b0d76906cb1c7d539f4d777a4003293bca62d4432a0595ef002abec13b789d703d6958d76ea6859b2b8a06f0bebd8297f779a4fe0ef4
-docfiles size=109
+containersize 4088
+containerchecksum ce3b8684e55abd2fe3a9bd6433a36d662ad1d89bb95555b3dcb6e50afe3a1e33ae4176cc7e0c921dfc3f52ec1d47599f8a8f81bf58deb59d14261665cae301ff
+doccontainersize 400520
+doccontainerchecksum ea92ae56463027321b5e5c195760f393e1526c8a61a7b70cf7f32ea48d165cc17a4aaa60396046c569ea66df7100368dd3cf6aa49db8d04108403c4f899ca41a
+docfiles size=113
RELOC/doc/latex/jsonparse/LICENCE
RELOC/doc/latex/jsonparse/README.md details="Readme"
RELOC/doc/latex/jsonparse/jsonparse-doc.pdf details="Package documentation"
@@ -168743,7 +168781,7 @@ catalogue-contact-repository https://github.com/jasperhabicht/jsonparse
catalogue-ctan /macros/latex/contrib/jsonparse
catalogue-license lppl1.3c
catalogue-topics data-manip expl3
-catalogue-version 0.7.1
+catalogue-version 0.8.0
name jumplines
category Package
@@ -168774,7 +168812,7 @@ catalogue-version 0.2
name junicode
category Package
-revision 71027
+revision 71060
shortdesc A TrueType and OpenType font family for mediaevalists
relocated 1
longdesc Junicode is a TrueType/OpenType font family with many features
@@ -168783,10 +168821,10 @@ longdesc used by the Oxford Press in the late 17th and early 18th
longdesc centuries. It works well with Lua(La)TeX or Xe(La)TeX, but the
longdesc basic textual features are also available with (pdf)LaTeX.
execute addMap Junicode.map
-containersize 88233964
-containerchecksum 663aec9792d722f2ec49e3d63515c68c6eef445ceb190faedbca6956c8979fcd901fbf14ab3d0e50ac790ed2b9124fbbf31c65a5578f17b45f54aa79e6364f01
-doccontainersize 4310540
-doccontainerchecksum 37e8622193acac859932e3d75913d7e5a3f1cab3e35f48d247fd26bd505b68e2dde8bc6d75413fb705c89d4e29f76ae335d6633cfd9db770f920f5912a045763
+containersize 88233988
+containerchecksum cb3d8cadf5ef7a6c96802048f0237dda2769ab4052fad1aaf9d43dd07ce0682a0a038e4554979a000b6942e303cbf1ef5fa9720b8060303f4be2dd00f43d5176
+doccontainersize 4310552
+doccontainerchecksum f1478e791c869b9c3fa9486e3198f10d39347b2166f83bf939aaedcb1c20835df1f11e896d10923775b3c271606614674cdc7190332a14f649b5c71d6b278231
docfiles size=1133
RELOC/doc/fonts/junicode/About.tex
RELOC/doc/fonts/junicode/EnlargeAxis.tex
@@ -191330,7 +191368,7 @@ catalogue-version 2.0
name libertine
category Package
-revision 71028
+revision 71061
shortdesc Use of Linux Libertine and Biolinum fonts with LaTeX
relocated 1
longdesc The package provides the Libertine and Biolinum fonts in both
@@ -191344,10 +191382,10 @@ depend iftex
depend mweights
depend xkeyval
execute addMap libertine.map
-containersize 13898620
-containerchecksum 21d7217bf9dce1981ae9bf851012fe0d14ca9675a664d5a312b245551b1200cd46863fc19233029ab511c957c8c5484532f8391163912568fb33ee6ad0dbdee9
-doccontainersize 1527364
-doccontainerchecksum fa8e5e0e43178d5173da977298df0e1ebf0b3a831ba2572d0e2c59ad1b5cce9a34504cea2c1e5bb75edaac46577cc6f720ff89b06b4fe2a56c0f45820a356698
+containersize 13898536
+containerchecksum 49df19c29244996fd111fab655f3ac65dd106e1d6efec5207c0e505778445ab3badc90a1b70608537f45c1e108dd6d906f6105a697cf92f79f9649e486c1d6cd
+doccontainersize 1527480
+doccontainerchecksum a8508e83443cbb679ca7ae58d5a4ca6dccb3ed8fbb90e07f41f7ecb5d1816906dbf3bbc56951cca323b1095304ccf4b0b22dddd6d605005a2ac51cb3927ce67c
docfiles size=418
RELOC/doc/fonts/libertine/Bugs.txt
RELOC/doc/fonts/libertine/ChangeLog.txt
@@ -296926,7 +296964,7 @@ catalogue-version 1.36
name siunitx
category Package
-revision 71053
+revision 71066
shortdesc A comprehensive (SI) units package
relocated 1
longdesc Typesetting values with units requires care to ensure that the
@@ -296949,17 +296987,17 @@ longdesc sistyle, unitsdef and units. The aim is to have one package to
longdesc handle all of the possible unit-related needs of LaTeX users.
longdesc The package relies on LaTeX 3 support from the l3kernel and
longdesc l3packages bundles.
-containersize 67908
-containerchecksum 06f3274c3e1bdf7529c91d14f95b9ff2bd17b335d7dcdab19d833add7d83b393f562df5ae0f5dc1e7a680a19a095567ed4a3bc983cbce77a4c565b299c247346
-doccontainersize 1286148
-doccontainerchecksum c3f4cf52d645ebee1ec1ca79df4d789f9e91ed453fde9e042aa85cce8517844e6f9b2ec21e6f07aa676ab268103143c90ca96168d33c90d1bdd7b8fcb919d734
+containersize 67888
+containerchecksum 4a6b115ab7fe6f14853ef3c544eb33327e8f3319c2b87d23657bf7c6b76e747214693c848a029ea79a6488414bf6ccf254b607550ad729ad0e29a46bf3503695
+doccontainersize 1285832
+doccontainerchecksum fa9e7471e565736f99265b0ab5f29e84bb9aae37fe77f88cdaae79b79881e305d35b73d4c94f246759df5ca8a92032653fe95606d7f913091fd05a681a68a330
docfiles size=351
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 123112
-srccontainerchecksum 760c0f0124fc64bf3f4929a5e22fb83375a1f1dcade3f52e5d5682b0885efe350c6f5fe05b6cfde275add3248d51a3e94e27b109c3010f7f813a4ca3485d1ab5
+srccontainersize 123104
+srccontainerchecksum e3056a4067d140656ede067b752514ffdf9f0aafb96514083e97841328cca850ef29390c9f6d15fdfd32384e72d84e66cf6ea1420972ea8b4badb68c7e626dad
srcfiles size=190
RELOC/source/latex/siunitx/siunitx-abbreviation.dtx
RELOC/source/latex/siunitx/siunitx-angle.dtx
@@ -296979,7 +297017,7 @@ srcfiles size=190
RELOC/source/latex/siunitx/siunitx.dtx
RELOC/source/latex/siunitx/siunitx.ins
RELOC/source/latex/siunitx/siunitx.tex
-runfiles size=160
+runfiles size=159
RELOC/tex/latex/siunitx/siunitx-abbreviations.cfg
RELOC/tex/latex/siunitx/siunitx-binary.cfg
RELOC/tex/latex/siunitx/siunitx-v2.sty
@@ -296991,7 +297029,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.15
+catalogue-version 3.3.16
name sjtutex
category Package
@@ -301867,18 +301905,18 @@ catalogue-version 2.7
name spbmark
category Package
-revision 69907
+revision 71067
shortdesc Customize superscripts and subscripts
relocated 1
longdesc This package provides three commands \super, \sub and \supersub
longdesc to improve the layout of superscripts and subscripts which can
longdesc be adjusted with respect to relative position and format, and
longdesc can be used in text and math mode.
-containersize 3924
-containerchecksum 4e3cbc7ddd2a568c2ee2eff40f313b1b90e80f38bafae90642d80b785cc18cd2018960f8f9e087d788d2060283a00b294eda83ca15726780933567212b424ec8
-doccontainersize 98020
-doccontainerchecksum 14eef0e6f4495e87768d7afdde62f5e9edfd61529e58f586c275a2f1ec7f55a015ad5b2d929277a6cc7c08a82e250b18f6f2df62be1a9bb2d7703c2a99951b6d
-docfiles size=29
+containersize 3928
+containerchecksum c8bdcd15b4c4903a5e14e55a896fd939502259a81568b12f530d080374c60a5974d98f704e46035be7e1b3c95b80aa21dac7684df8b5f3d394f9df9e25fc3021
+doccontainersize 99196
+doccontainerchecksum fb78b8b276d1b98b2d39e26e8edd24296853a7146547a4a3fccdcf6ea45d6c4bede330a860bcf877ee32b148263360effa2985d08254133826edecd5f5f5847f
+docfiles size=30
RELOC/doc/latex/spbmark/README.md details="Readme"
RELOC/doc/latex/spbmark/spbmark.pdf details="Package documentation"
RELOC/doc/latex/spbmark/spbmark.tex
@@ -301888,7 +301926,7 @@ catalogue-contact-repository https://github.com/texno3/spbmark
catalogue-ctan /macros/latex/contrib/spbmark
catalogue-license cc-by-4
catalogue-topics subsup-pos expl3
-catalogue-version 1.46e
+catalogue-version 1.46f
name spectral
category Package
@@ -313970,7 +314008,7 @@ binfiles arch=x86_64-solaris size=1
name tex4ht
category Package
-revision 71043
+revision 71072
shortdesc Convert (La)TeX to HTML/XML
longdesc A converter from TeX and LaTeX to SGML-based formats such as
longdesc (X)HTML, MathML, OpenDocument, and Docbook, providing a
@@ -313991,10 +314029,10 @@ longdesc files from them is nontrivial, and generally done with the
longdesc Makefile in development, from which the TeX4ht package in TeX
longdesc Live is updated.
depend tex4ht.ARCH
-containersize 1140432
-containerchecksum eef5e1c360e6f24f38d455f26eac747cf5c7c8a5d1232b54b1ae4fefcb08c7123f76fc108eaa92fb626dd9a6d364a3649667905fd2d80a4d866507ce82bc1aa6
+containersize 1140668
+containerchecksum c8c08a213921fa35630298b59c4d824233e9f0eee7009afcae4bf5c5f4d8983b79768dd7d614b1b0c46a13e72791c72e79e846481a887baded86b741f739d9f1
doccontainersize 136384
-doccontainerchecksum 1e266da2e810f9dd03b751fc1ad848cec6246090c9f274ba875c8d622fb1006d8094c705d662f42ca931ee81c95ec6d22cdea91b3ace68a7e1d57b40d65066a5
+doccontainerchecksum e1bf7f3b20b0d15c20b8220ea5b8d0adac2515c6b17e87df746b9c9c0ef1f78b841cd100618218be0a7862f0495faa59f64dbe7869a246331c5a69ea639b56b5
docfiles size=260
texmf-dist/doc/generic/tex4ht/Makefile
texmf-dist/doc/generic/tex4ht/README details="Readme"
@@ -314066,8 +314104,8 @@ docfiles size=260
texmf-dist/doc/generic/tex4ht/mn56.html
texmf-dist/doc/generic/tex4ht/mn5x.png
texmf-dist/doc/generic/tex4ht/mn6x.png
-srccontainersize 1493312
-srccontainerchecksum 49b16b7d68ce172c82bef958b650180a897202f29135e4adcbb3b4f24062bead633d227187825bf25a1db5675b7aff97e0255e2668e9a01477a31676fbf795dd
+srccontainersize 1489484
+srccontainerchecksum af764e61f4d7e34d1a3be86aa5829dcd618b5bc32a3b64cf4bbb32298963c6c7ab97ffc5cd523ebc90bc57dcfebdbda8cb12f87fca3df6ada6e76d8f6014aa19
srcfiles size=4647
texmf-dist/source/generic/tex4ht/ChangeLog
texmf-dist/source/generic/tex4ht/Makefile
@@ -326174,14 +326212,14 @@ catalogue-version 6.8
name texlive-common
category TLCore
-revision 70084
+revision 71073
shortdesc TeX Live documentation (common elements)
relocated 1
postaction shortcut type=menu name="TeX Live documentation" cmd=TEXDIR/texmf-dist/doc/texlive/index.html
containersize 348
-containerchecksum 4dc70af9b9e5310080fba3e2116d7826973f3a539d79063f82b81413dcaa29ac623f46e07e94d128796465b69c85c1d9366af6379ee4bb310616cf6f7d3247a6
-doccontainersize 643080
-doccontainerchecksum 39738cda87d15acaa4a21716b3011a04e153bdf6d3ede7dcc1efc51d5f86d7673e6d0d6bcebdfa152b25b9fca542542966f1c38515b51e887ae86c98941ffd86
+containerchecksum 8677544960e83fe4d21dc5f88fab82da594f3ff48eefeba6b74a4360b5e4ff7182fb1d199017f95ebe7d5c3bbbffde1aefcbd275759c220c126186a96f8c30cf
+doccontainersize 643136
+doccontainerchecksum 1381a4c69c51babdbb3dc9127646928402127db52ff09c5b28f6b45263a1adca0eb1b37ae371a4399697751dc9db55ab085d72662e0e759268baf7ab56e92616
docfiles size=220
RELOC/doc/texlive/index.html
RELOC/doc/texlive/install-tl.html
@@ -326495,7 +326533,7 @@ docfiles size=376
name texlive-scripts
category TLCore
-revision 71052
+revision 71073
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.
@@ -326503,10 +326541,10 @@ depend texlive-scripts.ARCH
depend texlive.infra
execute addMap mathpple.map
postaction shortcut type=menu name="TeX Live command-line" cmd=TEXDIR/tlpkg/installer/tl-cmd.bat
-containersize 114152
-containerchecksum 30e746eaa60c93d621c73675c7ed6f6d660c2ffbbc30d15d164f30c8e38206b9bf5b51fe64a9d7ed6cdb7bab0ae467fd0de7fef560715ff4c985c5a6f4815083
-doccontainersize 434800
-doccontainerchecksum 42d066a822f8290a651a0a227a8b3ac8e8a1fbef62cc30c59841fcfa10dbad4932f0e14f6b38a5634a2574547d31e88e8f1164ae94e2e2434de732e8b06c80b6
+containersize 114160
+containerchecksum 95f75caebda907ffb78108f5903b52a055264cc2d163de74c68366cc8d5e4132f2a3345598af764078ba10a26e7e3f5ee1fec869735b97b442708c475471fd9a
+doccontainersize 434872
+doccontainerchecksum ef83135f0f01d01bdbfb5e9de8999bc897b02058e42d58de950b9d14b87723aa1bfb32f5f056820dbb230b7754c9066aff540aee044266b9f05c8602b542f792
docfiles size=568
doc.html
texmf-dist/doc/man/man1/fmtutil-sys.1
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
index 2c74a83280..eac2981e94 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
@@ -1 +1 @@
-24c2e7233bb3be8e6bd90f07bb363059 texlive.tlpdb
+16a78bb758e0f8e2c05fbc2a42efb41f texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
index cbe15f1033..58488b9a87 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
@@ -1 +1 @@
-9bcfa6e7f0b963550c288b445def353cd496fa53a157ef3cb31a69fd4642f7a3a985f7988ba1db5fae7da8ae3861db514df1b61c38002c750ab420d58333e658 texlive.tlpdb
+6cd1e9da7db4b57658a8629b7f049d97a3f08393f61516b97d020b6a7bc2d26efb242db8308a3ef6b431298739845cdb60cb11fb52e633aab4b82c85c7047230 texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
index b6b2690511..509aa92ad5 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+QqiBBqTOGHfhlDjHAFAmYoSJwACgkQTOGHfhlD
-jHBi4gf+KcIH6E1ib1eEmzNhckMeuFwMp8Ihm48dPecbgCSyQEKXF+4oAT9lPYmf
-lNSJyOj7N4/tagOsbx0XB+0R50leMcJJcACb4TEvYUPPvDGF9nn71oYMecTFUGDD
-oelKQZliZqcEOg/SFdPPjprXS/roHRFBQoh1QpsWmbOs3Du2WqfIKMURfrYsQT+t
-chKZiYQiu33UxShTUvi9sf7ZVZtxaO0MQQfgCp+z1gPKfsgXsKAMk/yWRqfSBqE5
-PwP0nJbrK2zjW1Sa2Qxvf+9gLZZi3oQ2dw7ifNimjL6cOfCUFY/uk1bW90Z93XIf
-r1q+jC6CUuUx48cYi1AFNPCq3gRelw==
-=nSRv
+iQEzBAEBCgAdFiEE2PL4YFeoV+QqiBBqTOGHfhlDjHAFAmYpmpQACgkQTOGHfhlD
+jHCmnQf9FpqV4LIFdSsedGj9h4cNNY/gZgyGf1cr253YDYlnLSuLckwYx6pLcbz5
+Og2bl/oQFVIs3/g6qVHCefSvLizhw6C+6GweM7EFYfO60bTTNR5VGYtR6Ppty7T5
+cKhzow8AsRvW7QtxV4Vc7aaAcTQ45h3LkY9Rv1r6507jmGlb82Uezjpz+KFlgX94
+aOxBP74AAydnsXqJ9k2z0BST7ogE39o6wPY/YfL5afT9sgn2OoaqIig2SgDp0bQ6
+ihP0uQn5Qx2ADLzk5aFO+oeNE/OB2L92s44XiZlKs2paFXCLin9kRl441weRTC+x
+7PE/nZeIhtGgF6pn+ofO0ysCrldQeg==
+=+Irc
-----END PGP SIGNATURE-----
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
index afdbbf3e84..a2f33c6153 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 2e42296ea2..765138a13e 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:
-2024-04-24-02-02
+2024-04-25-02-02