summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FILES.byname198
-rw-r--r--FILES.byname.gzbin2511268 -> 2511450 bytes
-rw-r--r--FILES.last07days688
-rw-r--r--biblio/ctan-bibdata/ctan.bib27
-rw-r--r--biblio/ctan-bibdata/ctan.pdfbin3640504 -> 3641569 bytes
-rw-r--r--macros/latex/contrib/curve2e/README.txt56
-rw-r--r--macros/latex/contrib/curve2e/curve2e-manual.pdfbin571431 -> 561047 bytes
-rw-r--r--macros/latex/contrib/curve2e/curve2e-manual.tex158
-rw-r--r--macros/latex/contrib/curve2e/curve2e.dtx230
-rw-r--r--macros/latex/contrib/curve2e/curve2e.pdfbin654288 -> 693186 bytes
-rw-r--r--macros/latex/contrib/jwjournal/DEPENDS.txt1
-rw-r--r--macros/latex/contrib/jwjournal/LICENSE416
-rw-r--r--macros/latex/contrib/jwjournal/README.md113
-rw-r--r--macros/latex/contrib/jwjournal/jwjournal-demo-cn.pdfbin0 -> 44037 bytes
-rw-r--r--macros/latex/contrib/jwjournal/jwjournal-demo-cn.tex71
-rw-r--r--macros/latex/contrib/jwjournal/jwjournal-demo-en.pdfbin0 -> 19537 bytes
-rw-r--r--macros/latex/contrib/jwjournal/jwjournal-demo-en.tex69
-rw-r--r--macros/latex/contrib/jwjournal/jwjournal-demo-fr.pdfbin0 -> 19476 bytes
-rw-r--r--macros/latex/contrib/jwjournal/jwjournal-demo-fr.tex71
-rw-r--r--macros/latex/contrib/jwjournal/jwjournal.cls214
-rw-r--r--macros/luatex/generic/luakeys/README.md33
-rw-r--r--macros/luatex/generic/luakeys/documentation.tex (renamed from macros/luatex/generic/luakeys/luakeys-doc.tex)403
-rw-r--r--macros/luatex/generic/luakeys/luakeys-debug.sty4
-rw-r--r--macros/luatex/generic/luakeys/luakeys-debug.tex4
-rw-r--r--macros/luatex/generic/luakeys/luakeys-doc.pdfbin398632 -> 0 bytes
-rw-r--r--macros/luatex/generic/luakeys/luakeys.lua2734
-rw-r--r--macros/luatex/generic/luakeys/luakeys.pdfbin0 -> 427721 bytes
-rw-r--r--macros/luatex/generic/luakeys/luakeys.sty15
-rw-r--r--macros/luatex/generic/luakeys/luakeys.tex9
-rw-r--r--macros/pdftex/mptopdf/doc/context/scripts/mkii/mptopdf.man2
-rw-r--r--macros/unicodetex/latex/einfart/DEPENDS.txt1
-rw-r--r--macros/unicodetex/latex/einfart/README.md23
-rw-r--r--macros/unicodetex/latex/einfart/einfart.cls4
-rw-r--r--macros/unicodetex/latex/simplivre/DEPENDS.txt1
-rw-r--r--macros/unicodetex/latex/simplivre/README.md24
-rw-r--r--macros/unicodetex/latex/simplivre/simplivre.cls4
-rw-r--r--systems/mac/mactex/ExtrasFolder.pdfbin38092 -> 38090 bytes
-rw-r--r--systems/mac/mactex/Licenses.txt4
-rw-r--r--systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl5
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb281
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.md52
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha5122
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc14
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.xzbin2440620 -> 2441600 bytes
-rw-r--r--timestamp2
45 files changed, 3579 insertions, 2304 deletions
diff --git a/FILES.byname b/FILES.byname
index 44a7879af1..194d215701 100644
--- a/FILES.byname
+++ b/FILES.byname
@@ -2038,12 +2038,12 @@
2022/12/25 | 1673 | biblio/citation-style-language/README.md
2022/12/25 | 11958 | biblio/citation-style-language/vancouver.csl
2022/12/25 | 604004 | biblio/citation-style-language.zip
-2023/01/04 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
+2023/01/05 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
2022/10/08 | 127 | biblio/ctan-bibdata/biblatex-ctan/ctan.cbx
-2023/01/04 | 2759191 | biblio/ctan-bibdata/ctan.bib
-2023/01/04 | 3639787 | biblio/ctan-bibdata/ctan.pdf
+2023/01/05 | 2759190 | biblio/ctan-bibdata/ctan.bib
+2023/01/05 | 3640504 | biblio/ctan-bibdata/ctan.pdf
2022/10/08 | 1415 | biblio/ctan-bibdata/README
-2023/01/04 | 4033578 | biblio/ctan-bibdata.zip
+2023/01/05 | 4035108 | biblio/ctan-bibdata.zip
2022/02/06 | 3110 | biblio/pbibtex/pbibtex-base/cpp.awk
2022/02/06 | 1009 | biblio/pbibtex/pbibtex-base/generate.sh
2022/02/06 | 22422 | biblio/pbibtex/pbibtex-base/jabbrv.bst
@@ -2199,7 +2199,7 @@
1989/12/11 | 6196 | biblio/tib/tib.man
1989/03/29 | 23265 | biblio/tib/vitaMake
2005/12/15 | 366385 | biblio/tib.zip
-2022/12/21 | 17946 | CTAN.sites
+2023/01/05 | 18020 | CTAN.sites
1990/10/03 | 5032 | dviware/beebe/00readme.txt
1990/10/03 | 479 | dviware/beebe/doc/00dir.cmd
1990/10/03 | 1209 | dviware/beebe/doc/00dir.lst
@@ -5417,7 +5417,7 @@
1990/10/02 | 5440 | dviware/vutex/vaxvms.hlp
1990/10/02 | 812 | dviware/vutex/vaxvms.ins
1990/10/02 | 127576 | dviware/vutex/vutex.web
-2023/01/04 | 350737 | FILES.last07days
+2023/01/05 | 343260 | 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
@@ -193780,6 +193780,7 @@
2021/08/19 | 464024 | install/macros/xetex/latex/mynsfc.tds.zip
2022/08/05 | 2009524 | install/macros/xetex/latex/xecjk.tds.zip
2022/10/30 | 1290311 | install/macros/xetex/latex/xepersian.tds.zip
+2023/01/05 | 88978 | install/macros/xetex/plain/unimath-plain-xetex.tds.zip
2008/06/20 | 3954 | install/macros/xetex/plain/xetexfontinfo.tds.zip
2013/01/04 | 36361 | install/support/adhocfilelist.tds.zip
2021/11/27 | 2294905 | install/support/albatross.tds.zip
@@ -201204,7 +201205,7 @@
2013/04/01 | 14776 | macros/context/contrib/context-visualcounter/tex/context/third/visualcounter/t-visualcounter.mkvi
2018/03/05 | 11 | macros/context/contrib/context-visualcounter/VERSION
2018/03/22 | 276789 | macros/context/contrib/context-visualcounter.zip
-2022/12/29 | 115677343 | macros/context/latest/cont-tmf.zip
+2023/01/04 | 115691230 | macros/context/latest/cont-tmf.zip
2016/04/21 | 32846 | macros/cstex/base/cmexb.tar.gz
2016/06/26 | 1728262 | macros/cstex/base/csfonts-t1.tar.gz
2007/03/01 | 187106 | macros/cstex/base/csfonts.tar.gz
@@ -217132,12 +217133,12 @@
1999/01/19 | 1335 | macros/latex/contrib/cursor/cursor.tex
1999/01/19 | 420 | macros/latex/contrib/cursor/read.me
2007/01/01 | 16025 | macros/latex/contrib/cursor.zip
-2021/01/12 | 183291 | macros/latex/contrib/curve2e/curve2e.dtx
-2021/01/12 | 571431 | macros/latex/contrib/curve2e/curve2e-manual.pdf
-2021/01/12 | 74065 | macros/latex/contrib/curve2e/curve2e-manual.tex
-2021/01/12 | 654288 | macros/latex/contrib/curve2e/curve2e.pdf
-2021/01/12 | 5989 | macros/latex/contrib/curve2e/README.txt
-2021/01/12 | 1297573 | macros/latex/contrib/curve2e.zip
+2023/01/01 | 185632 | macros/latex/contrib/curve2e/curve2e.dtx
+2023/01/01 | 561047 | macros/latex/contrib/curve2e/curve2e-manual.pdf
+2023/01/01 | 77532 | macros/latex/contrib/curve2e/curve2e-manual.tex
+2023/01/01 | 693186 | macros/latex/contrib/curve2e/curve2e.pdf
+2023/01/05 | 6084 | macros/latex/contrib/curve2e/README.txt
+2023/01/05 | 1307300 | macros/latex/contrib/curve2e.zip
2010/12/14 | 88817 | macros/latex/contrib/curve/curve.dtx
2010/12/14 | 3268 | macros/latex/contrib/curve/curve.el
2010/12/14 | 1746 | macros/latex/contrib/curve/curve.ins
@@ -225753,6 +225754,17 @@
2011/10/28 | 1485 | macros/latex/contrib/jvlisting/README
2011/11/17 | 8454 | macros/latex/contrib/jvlisting/test.tex
2011/11/18 | 202406 | macros/latex/contrib/jvlisting.zip
+2023/01/05 | 12 | macros/latex/contrib/jwjournal/DEPENDS.txt
+2023/01/05 | 6968 | macros/latex/contrib/jwjournal/jwjournal.cls
+2023/01/05 | 44037 | macros/latex/contrib/jwjournal/jwjournal-demo-cn.pdf
+2023/01/05 | 1387 | macros/latex/contrib/jwjournal/jwjournal-demo-cn.tex
+2023/01/05 | 19537 | macros/latex/contrib/jwjournal/jwjournal-demo-en.pdf
+2023/01/05 | 1452 | macros/latex/contrib/jwjournal/jwjournal-demo-en.tex
+2023/01/05 | 19476 | macros/latex/contrib/jwjournal/jwjournal-demo-fr.pdf
+2023/01/05 | 1671 | macros/latex/contrib/jwjournal/jwjournal-demo-fr.tex
+2023/01/05 | 19106 | macros/latex/contrib/jwjournal/LICENSE
+2023/01/05 | 4556 | macros/latex/contrib/jwjournal/README.md
+2023/01/05 | 93672 | macros/latex/contrib/jwjournal.zip
2018/09/21 | 71114 | macros/latex/contrib/kalendarium/kalendarium.dtx
2018/09/21 | 2343 | macros/latex/contrib/kalendarium/kalendarium.ins
2018/09/21 | 399783 | macros/latex/contrib/kalendarium/kalendarium.pdf
@@ -242591,15 +242603,15 @@
2022/03/20 | 258501 | macros/luatex/generic/luaaddplot/luaaddplot.pdf
2022/03/19 | 700 | macros/luatex/generic/luaaddplot/README.md
2022/03/20 | 259821 | macros/luatex/generic/luaaddplot.zip
-2022/12/23 | 795 | macros/luatex/generic/luakeys/luakeys-debug.sty
-2022/12/23 | 1179 | macros/luatex/generic/luakeys/luakeys-debug.tex
-2022/12/23 | 398632 | macros/luatex/generic/luakeys/luakeys-doc.pdf
-2022/12/23 | 61066 | macros/luatex/generic/luakeys/luakeys-doc.tex
-2022/12/23 | 37840 | macros/luatex/generic/luakeys/luakeys.lua
-2022/12/23 | 808 | macros/luatex/generic/luakeys/luakeys.sty
-2022/12/23 | 701 | macros/luatex/generic/luakeys/luakeys.tex
-2022/12/23 | 5855 | macros/luatex/generic/luakeys/README.md
-2022/12/23 | 420991 | macros/luatex/generic/luakeys.zip
+2023/01/05 | 63158 | macros/luatex/generic/luakeys/documentation.tex
+2023/01/05 | 796 | macros/luatex/generic/luakeys/luakeys-debug.sty
+2023/01/05 | 1181 | macros/luatex/generic/luakeys/luakeys-debug.tex
+2023/01/05 | 54283 | macros/luatex/generic/luakeys/luakeys.lua
+2023/01/05 | 427721 | macros/luatex/generic/luakeys/luakeys.pdf
+2023/01/05 | 1044 | macros/luatex/generic/luakeys/luakeys.sty
+2023/01/05 | 781 | macros/luatex/generic/luakeys/luakeys.tex
+2023/01/05 | 6587 | macros/luatex/generic/luakeys/README.md
+2023/01/05 | 453054 | macros/luatex/generic/luakeys.zip
2022/10/04 | 18092 | macros/luatex/generic/lualibs/LICENSE
2022/10/04 | 130531 | macros/luatex/generic/lualibs/lualibs-basic-merged.lua
2022/10/04 | 1850 | macros/luatex/generic/lualibs/lualibs-boolean.lua
@@ -245082,14 +245094,14 @@
2021/05/02 | 7597 | macros/optex/pkg/vlna.opm
2022/12/02 | 8637 | macros/optex/README
2022/12/03 | 2488994 | macros/optex.zip
-2022/01/06 | 732 | macros/pdftex/mptopdf/doc/context/scripts/mkii/mptopdf.man
-2022/01/06 | 4557 | macros/pdftex/mptopdf/scripts/context/perl/mptopdf.pl
-2022/01/06 | 4608 | macros/pdftex/mptopdf/scripts/context/stubs/mswin/mptopdf.exe
-2022/01/06 | 21474 | macros/pdftex/mptopdf/tex/context/base/mkii/supp-mis.mkii
-2022/01/06 | 42831 | macros/pdftex/mptopdf/tex/context/base/mkii/supp-mpe.mkii
-2022/01/06 | 71627 | macros/pdftex/mptopdf/tex/context/base/mkii/supp-pdf.mkii
-2022/01/06 | 7856 | macros/pdftex/mptopdf/tex/context/base/mkii/syst-tex.mkii
-2022/01/06 | 5322 | macros/pdftex/mptopdf/tex/generic/context/mptopdf/mptopdf.tex
+2023/01/04 | 732 | macros/pdftex/mptopdf/doc/context/scripts/mkii/mptopdf.man
+2023/01/04 | 4557 | macros/pdftex/mptopdf/scripts/context/perl/mptopdf.pl
+2023/01/04 | 4608 | macros/pdftex/mptopdf/scripts/context/stubs/mswin/mptopdf.exe
+2023/01/04 | 21474 | macros/pdftex/mptopdf/tex/context/base/mkii/supp-mis.mkii
+2023/01/04 | 42831 | macros/pdftex/mptopdf/tex/context/base/mkii/supp-mpe.mkii
+2023/01/04 | 71627 | macros/pdftex/mptopdf/tex/context/base/mkii/supp-pdf.mkii
+2023/01/04 | 7856 | macros/pdftex/mptopdf/tex/context/base/mkii/syst-tex.mkii
+2023/01/04 | 5322 | macros/pdftex/mptopdf/tex/generic/context/mptopdf/mptopdf.tex
1992/08/27 | 111203 | macros/physe/physe.doc
1992/08/27 | 71123 | macros/physe/physe.tex
1992/08/27 | 3024 | macros/physe/physupdt.tex
@@ -252272,10 +252284,11 @@
2021/12/09 | 1086 | macros/unicodetex/latex/chhaya/ref.bib
2021/12/09 | 6165 | macros/unicodetex/latex/chhaya/sankshep.tex
2022/01/02 | 134099 | macros/unicodetex/latex/chhaya.zip
-2023/01/02 | 31505 | macros/unicodetex/latex/einfart/einfart.cls
-2023/01/02 | 19106 | macros/unicodetex/latex/einfart/LICENSE
-2023/01/02 | 1478 | macros/unicodetex/latex/einfart/README.md
-2023/01/02 | 12120 | macros/unicodetex/latex/einfart.zip
+2023/01/05 | 15 | macros/unicodetex/latex/einfart/DEPENDS.txt
+2023/01/05 | 31505 | macros/unicodetex/latex/einfart/einfart.cls
+2023/01/05 | 19106 | macros/unicodetex/latex/einfart/LICENSE
+2023/01/05 | 1420 | macros/unicodetex/latex/einfart/README.md
+2023/01/05 | 12239 | macros/unicodetex/latex/einfart.zip
2023/01/02 | 566425 | macros/unicodetex/latex/fontsetup/doc/fontsetup-doc.pdf
2023/01/02 | 19159 | macros/unicodetex/latex/fontsetup/doc/fontsetup-doc.tex
2023/01/02 | 27714 | macros/unicodetex/latex/fontsetup/doc/fspsample-cmr.pdf
@@ -252631,10 +252644,11 @@
2016/02/13 | 1755 | macros/unicodetex/latex/realscripts/realscripts.ins
2016/02/13 | 106569 | macros/unicodetex/latex/realscripts/realscripts.pdf
2016/02/13 | 108915 | macros/unicodetex/latex/realscripts.zip
-2023/01/02 | 19106 | macros/unicodetex/latex/simplivre/LICENSE
-2023/01/02 | 1475 | macros/unicodetex/latex/simplivre/README.md
-2023/01/02 | 31509 | macros/unicodetex/latex/simplivre/simplivre.cls
-2023/01/02 | 12134 | macros/unicodetex/latex/simplivre.zip
+2023/01/05 | 15 | macros/unicodetex/latex/simplivre/DEPENDS.txt
+2023/01/05 | 19106 | macros/unicodetex/latex/simplivre/LICENSE
+2023/01/05 | 1361 | macros/unicodetex/latex/simplivre/README.md
+2023/01/05 | 31509 | macros/unicodetex/latex/simplivre/simplivre.cls
+2023/01/05 | 12233 | macros/unicodetex/latex/simplivre.zip
2022/08/24 | 451 | macros/unicodetex/latex/swungdash/README
2022/08/25 | 63795 | macros/unicodetex/latex/swungdash/swungdash-documentation.pdf
2022/08/25 | 4604 | macros/unicodetex/latex/swungdash/swungdash-documentation.tex
@@ -286142,10 +286156,10 @@
1993/07/19 | 61321 | systems/mac/macmakeindex.sit.hqx
2022/03/17 | 47 | systems/mac/mactex/BasicTeX.pkg.md5
2022/03/17 | 143 | systems/mac/mactex/BasicTeX.pkg.sha512
-2022/12/29 | 38092 | systems/mac/mactex/ExtrasFolder.pdf
+2023/01/04 | 38090 | systems/mac/mactex/ExtrasFolder.pdf
2022/03/17 | 50 | systems/mac/mactex/Ghostscript.pkg.md5
2022/03/17 | 146 | systems/mac/mactex/Ghostscript.pkg.sha512
-2022/12/29 | 1612 | systems/mac/mactex/Licenses.txt
+2023/01/04 | 1612 | systems/mac/mactex/Licenses.txt
2022/03/21 | 4961582623 | systems/mac/mactex/mactex-20220321.pkg
2022/03/21 | 54 | systems/mac/mactex/mactex-20220321.pkg.md5
2022/03/21 | 150 | systems/mac/mactex/mactex-20220321.pkg.sha512
@@ -286155,13 +286169,13 @@
2022/02/28 | 55345960 | systems/mac/mactex/mactex-ghostscript-9.55-20220208.pkg
2022/02/28 | 71 | systems/mac/mactex/mactex-ghostscript-9.55-20220208.pkg.md5
2022/03/17 | 167 | systems/mac/mactex/mactex-ghostscript-9.55-20220208.pkg.sha512
-2022/12/29 | 527505128 | systems/mac/mactex/mactex-MacTeXtras-20221229.zip
-2022/12/29 | 65 | systems/mac/mactex/mactex-MacTeXtras-20221229.zip.md5
-2022/12/29 | 161 | systems/mac/mactex/mactex-MacTeXtras-20221229.zip.sha512
+2023/01/04 | 527529020 | systems/mac/mactex/mactex-MacTeXtras-20230104.zip
+2023/01/04 | 65 | systems/mac/mactex/mactex-MacTeXtras-20230104.zip.md5
+2023/01/04 | 161 | systems/mac/mactex/mactex-MacTeXtras-20230104.zip.sha512
2022/03/21 | 45 | systems/mac/mactex/MacTeX.pkg.md5
2022/03/21 | 141 | systems/mac/mactex/MacTeX.pkg.sha512
-2022/12/29 | 49 | systems/mac/mactex/MacTeXtras.zip.md5
-2022/12/29 | 145 | systems/mac/mactex/MacTeXtras.zip.sha512
+2023/01/04 | 49 | systems/mac/mactex/MacTeXtras.zip.md5
+2023/01/04 | 145 | systems/mac/mactex/MacTeXtras.zip.sha512
2022/04/03 | 189 | systems/mac/mactex/README
1995/08/15 | 308344 | systems/mac/MakeIndex-Fat-1.0-sit.hqx
1994/04/20 | 2925109 | systems/mac/metafont/bluesky/MAC_MF_0.66.sit.hqx
@@ -293617,8 +293631,8 @@
2019/02/28 | 139420 | systems/texlive/tlnet/archive/kastrup.doc.r15878.tar.xz
2019/02/28 | 1388 | systems/texlive/tlnet/archive/kastrup.r15878.tar.xz
2019/02/28 | 7392 | systems/texlive/tlnet/archive/kastrup.source.r15878.tar.xz
-2022/09/04 | 998912 | systems/texlive/tlnet/archive/kaytannollista-latexia.doc.r64278.tar.xz
-2022/09/04 | 572 | systems/texlive/tlnet/archive/kaytannollista-latexia.r64278.tar.xz
+2023/01/05 | 998428 | systems/texlive/tlnet/archive/kaytannollista-latexia.doc.r65461.tar.xz
+2023/01/05 | 568 | systems/texlive/tlnet/archive/kaytannollista-latexia.r65461.tar.xz
2021/02/05 | 339680 | systems/texlive/tlnet/archive/kblocks.doc.r57617.tar.xz
2021/02/05 | 8140 | systems/texlive/tlnet/archive/kblocks.r57617.tar.xz
2019/02/28 | 718580 | systems/texlive/tlnet/archive/kdgdocs.doc.r24498.tar.xz
@@ -294862,8 +294876,8 @@
2022/06/02 | 11708 | systems/texlive/tlnet/archive/lua-ul.source.r63469.tar.xz
2022/02/27 | 73912 | systems/texlive/tlnet/archive/lua-uni-algos.doc.r62204.tar.xz
2022/02/27 | 7684 | systems/texlive/tlnet/archive/lua-uni-algos.r62204.tar.xz
-2021/01/08 | 289376 | systems/texlive/tlnet/archive/lua-visual-debug.doc.r57349.tar.xz
-2021/01/08 | 3476 | systems/texlive/tlnet/archive/lua-visual-debug.r57349.tar.xz
+2023/01/05 | 289572 | systems/texlive/tlnet/archive/lua-visual-debug.doc.r65464.tar.xz
+2023/01/05 | 3500 | systems/texlive/tlnet/archive/lua-visual-debug.r65464.tar.xz
2022/08/19 | 95244 | systems/texlive/tlnet/archive/luavlna.doc.r64142.tar.xz
2022/08/19 | 7636 | systems/texlive/tlnet/archive/luavlna.r64142.tar.xz
2022/11/23 | 1118500 | systems/texlive/tlnet/archive/lua-widow-control.doc.r65084.tar.xz
@@ -295693,8 +295707,8 @@
2020/03/04 | 8972 | systems/texlive/tlnet/archive/mslapa.r54080.tar.xz
2021/01/20 | 3064 | systems/texlive/tlnet/archive/ms.r57473.tar.xz
2021/01/20 | 10948 | systems/texlive/tlnet/archive/ms.source.r57473.tar.xz
-2022/12/16 | 480696 | systems/texlive/tlnet/archive/msu-thesis.doc.r65282.tar.xz
-2022/12/16 | 12928 | systems/texlive/tlnet/archive/msu-thesis.r65282.tar.xz
+2023/01/05 | 481040 | systems/texlive/tlnet/archive/msu-thesis.doc.r65462.tar.xz
+2023/01/05 | 12960 | systems/texlive/tlnet/archive/msu-thesis.r65462.tar.xz
2019/02/28 | 160144 | systems/texlive/tlnet/archive/mtgreek.doc.r17967.tar.xz
2019/02/28 | 1744 | systems/texlive/tlnet/archive/mtgreek.r17967.tar.xz
2019/02/28 | 2800 | systems/texlive/tlnet/archive/mtgreek.source.r17967.tar.xz
@@ -297178,9 +297192,9 @@
2019/02/28 | 2324 | systems/texlive/tlnet/archive/progressbar.r33822.tar.xz
2019/02/28 | 80808 | systems/texlive/tlnet/archive/progress.doc.r19519.tar.xz
2019/02/28 | 4192 | systems/texlive/tlnet/archive/progress.r19519.tar.xz
-2023/01/03 | 8536 | systems/texlive/tlnet/archive/projlib.doc.r65436.tar.xz
-2023/01/03 | 26080 | systems/texlive/tlnet/archive/projlib.r65436.tar.xz
-2023/01/03 | 26252 | systems/texlive/tlnet/archive/projlib.source.r65436.tar.xz
+2023/01/05 | 8636 | systems/texlive/tlnet/archive/projlib.doc.r65463.tar.xz
+2023/01/05 | 26060 | systems/texlive/tlnet/archive/projlib.r65463.tar.xz
+2023/01/05 | 26252 | systems/texlive/tlnet/archive/projlib.source.r65463.tar.xz
2022/08/25 | 462080 | systems/texlive/tlnet/archive/proof-at-the-end.doc.r64188.tar.xz
2022/08/25 | 7328 | systems/texlive/tlnet/archive/proof-at-the-end.r64188.tar.xz
2022/08/25 | 20852 | systems/texlive/tlnet/archive/proof-at-the-end.source.r64188.tar.xz
@@ -299251,7 +299265,7 @@
2022/03/05 | 164864 | systems/texlive/tlnet/archive/tex.i386-solaris.r62391.tar.xz
2019/02/28 | 1956 | systems/texlive/tlnet/archive/texilikechaps.r28553.tar.xz
2019/02/28 | 956 | systems/texlive/tlnet/archive/texilikecover.r15878.tar.xz
-2022/12/22 | 97472 | systems/texlive/tlnet/archive/texinfo.r65323.tar.xz
+2023/01/05 | 97300 | systems/texlive/tlnet/archive/texinfo.r65459.tar.xz
2019/02/28 | 1336 | systems/texlive/tlnet/archive/tex-ini-files.doc.r40533.tar.xz
2019/02/28 | 3264 | systems/texlive/tlnet/archive/tex-ini-files.r40533.tar.xz
2019/02/28 | 36596 | systems/texlive/tlnet/archive/tex-label.doc.r16372.tar.xz
@@ -299318,7 +299332,7 @@
2022/09/13 | 600 | systems/texlive/tlnet/archive/texlive-scripts.amd64-freebsd.r64356.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.amd64-netbsd.r64356.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.armhf-linux.r64356.tar.xz
-2023/01/04 | 423868 | systems/texlive/tlnet/archive/texlive-scripts.doc.r65443.tar.xz
+2023/01/05 | 423864 | systems/texlive/tlnet/archive/texlive-scripts.doc.r65459.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
@@ -299342,7 +299356,7 @@
2022/09/13 | 592 | systems/texlive/tlnet/archive/texlive-scripts.i386-linux.r64356.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.i386-netbsd.r64356.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.i386-solaris.r64356.tar.xz
-2023/01/04 | 113676 | systems/texlive/tlnet/archive/texlive-scripts.r65443.tar.xz
+2023/01/05 | 113704 | systems/texlive/tlnet/archive/texlive-scripts.r65459.tar.xz
2022/09/13 | 580 | systems/texlive/tlnet/archive/texlive-scripts.universal-darwin.r64356.tar.xz
2022/11/29 | 36264 | systems/texlive/tlnet/archive/texlive-scripts.win32.r65128.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.x86_64-cygwin.r64356.tar.xz
@@ -300289,8 +300303,8 @@
2022/10/24 | 134736 | systems/texlive/tlnet/archive/unigrazpub.doc.r64797.tar.xz
2022/10/24 | 5952 | systems/texlive/tlnet/archive/unigrazpub.r64797.tar.xz
2022/10/24 | 8892 | systems/texlive/tlnet/archive/unigrazpub.source.r64797.tar.xz
-2023/01/04 | 71824 | systems/texlive/tlnet/archive/unimath-plain-xetex.doc.r65455.tar.xz
-2023/01/04 | 5804 | systems/texlive/tlnet/archive/unimath-plain-xetex.r65455.tar.xz
+2023/01/05 | 61724 | systems/texlive/tlnet/archive/unimath-plain-xetex.doc.r65460.tar.xz
+2023/01/05 | 15952 | systems/texlive/tlnet/archive/unimath-plain-xetex.r65460.tar.xz
2020/12/30 | 63868 | systems/texlive/tlnet/archive/uninormalize.doc.r57257.tar.xz
2020/12/30 | 5720 | systems/texlive/tlnet/archive/uninormalize.r57257.tar.xz
2019/12/18 | 291268 | systems/texlive/tlnet/archive/uniquecounter.doc.r53162.tar.xz
@@ -301032,23 +301046,23 @@
2019/02/28 | 199392 | systems/texlive/tlnet/archive/xpunctuate.doc.r26641.tar.xz
2019/02/28 | 1324 | systems/texlive/tlnet/archive/xpunctuate.r26641.tar.xz
2019/02/28 | 4180 | systems/texlive/tlnet/archive/xpunctuate.source.r26641.tar.xz
-2022/12/22 | 336 | systems/texlive/tlnet/archive/xput.aarch64-linux.r65325.tar.xz
-2022/12/22 | 340 | systems/texlive/tlnet/archive/xput.amd64-freebsd.r65325.tar.xz
-2022/12/22 | 340 | systems/texlive/tlnet/archive/xput.amd64-netbsd.r65325.tar.xz
-2022/12/22 | 336 | systems/texlive/tlnet/archive/xput.armhf-linux.r65325.tar.xz
-2023/01/04 | 17244412 | systems/texlive/tlnet/archive/xput.doc.r65456.tar.xz
-2022/12/22 | 336 | systems/texlive/tlnet/archive/xput.i386-cygwin.r65325.tar.xz
-2022/12/22 | 340 | systems/texlive/tlnet/archive/xput.i386-freebsd.r65325.tar.xz
-2022/12/22 | 340 | systems/texlive/tlnet/archive/xput.i386-linux.r65325.tar.xz
-2022/12/22 | 336 | systems/texlive/tlnet/archive/xput.i386-netbsd.r65325.tar.xz
-2022/12/22 | 336 | systems/texlive/tlnet/archive/xput.i386-solaris.r65325.tar.xz
-2023/01/04 | 24116 | systems/texlive/tlnet/archive/xput.r65456.tar.xz
-2022/12/22 | 340 | systems/texlive/tlnet/archive/xput.universal-darwin.r65325.tar.xz
-2022/12/22 | 340 | systems/texlive/tlnet/archive/xput.x86_64-cygwin.r65325.tar.xz
-2022/12/22 | 344 | systems/texlive/tlnet/archive/xput.x86_64-darwinlegacy.r65325.tar.xz
-2022/12/22 | 344 | systems/texlive/tlnet/archive/xput.x86_64-linuxmusl.r65325.tar.xz
-2022/12/22 | 340 | systems/texlive/tlnet/archive/xput.x86_64-linux.r65325.tar.xz
-2022/12/22 | 340 | systems/texlive/tlnet/archive/xput.x86_64-solaris.r65325.tar.xz
+2023/01/05 | 364 | systems/texlive/tlnet/archive/xput.aarch64-linux.r65465.tar.xz
+2023/01/05 | 364 | systems/texlive/tlnet/archive/xput.amd64-freebsd.r65465.tar.xz
+2023/01/05 | 364 | systems/texlive/tlnet/archive/xput.amd64-netbsd.r65465.tar.xz
+2023/01/05 | 364 | systems/texlive/tlnet/archive/xput.armhf-linux.r65465.tar.xz
+2023/01/05 | 17244412 | systems/texlive/tlnet/archive/xput.doc.r65465.tar.xz
+2023/01/05 | 360 | systems/texlive/tlnet/archive/xput.i386-cygwin.r65465.tar.xz
+2023/01/05 | 364 | systems/texlive/tlnet/archive/xput.i386-freebsd.r65465.tar.xz
+2023/01/05 | 364 | systems/texlive/tlnet/archive/xput.i386-linux.r65465.tar.xz
+2023/01/05 | 364 | systems/texlive/tlnet/archive/xput.i386-netbsd.r65465.tar.xz
+2023/01/05 | 360 | systems/texlive/tlnet/archive/xput.i386-solaris.r65465.tar.xz
+2023/01/05 | 24116 | systems/texlive/tlnet/archive/xput.r65465.tar.xz
+2023/01/05 | 364 | systems/texlive/tlnet/archive/xput.universal-darwin.r65465.tar.xz
+2023/01/05 | 364 | systems/texlive/tlnet/archive/xput.x86_64-cygwin.r65465.tar.xz
+2023/01/05 | 372 | systems/texlive/tlnet/archive/xput.x86_64-darwinlegacy.r65465.tar.xz
+2023/01/05 | 368 | systems/texlive/tlnet/archive/xput.x86_64-linuxmusl.r65465.tar.xz
+2023/01/05 | 364 | systems/texlive/tlnet/archive/xput.x86_64-linux.r65465.tar.xz
+2023/01/05 | 364 | systems/texlive/tlnet/archive/xput.x86_64-solaris.r65465.tar.xz
2019/02/28 | 210248 | systems/texlive/tlnet/archive/xq.doc.r35211.tar.xz
2019/02/28 | 44060 | systems/texlive/tlnet/archive/xq.r35211.tar.xz
2022/08/05 | 377076 | systems/texlive/tlnet/archive/xsavebox.doc.r64049.tar.xz
@@ -301213,16 +301227,16 @@
2020/07/18 | 47816 | systems/texlive/tlnet/archive/zztex.doc.r55862.tar.xz
2020/07/18 | 101724 | systems/texlive/tlnet/archive/zztex.r55862.tar.xz
2022/07/17 | 124404 | systems/texlive/tlnet/install-tl
-2023/01/04 | 5834387 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2023/01/04 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2023/01/04 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2023/01/05 | 5834610 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2023/01/05 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2023/01/05 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2021/04/11 | 4945 | systems/texlive/tlnet/install-tl-windows.bat
-2023/01/04 | 20434486 | systems/texlive/tlnet/install-tl-windows.exe
-2023/01/04 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2023/01/04 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2023/01/04 | 25518503 | systems/texlive/tlnet/install-tl.zip
-2023/01/04 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2023/01/04 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2023/01/05 | 20434138 | systems/texlive/tlnet/install-tl-windows.exe
+2023/01/05 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2023/01/05 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2023/01/05 | 25518529 | systems/texlive/tlnet/install-tl.zip
+2023/01/05 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2023/01/05 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
2022/04/03 | 1229 | systems/texlive/tlnet/README.md
2022/04/03 | 0 | systems/texlive/tlnet/TEXLIVE_2022
2022/02/28 | 7791 | systems/texlive/tlnet/tlpkg/gpg/pubring.gpg
@@ -301232,7 +301246,7 @@
2022/02/28 | 1280 | systems/texlive/tlnet/tlpkg/gpg/trustdb.gpg
2022/10/09 | 49938 | systems/texlive/tlnet/tlpkg/installer/config.guess
2010/11/11 | 11651 | systems/texlive/tlnet/tlpkg/installer/COPYING.MinGW-runtime.txt
-2023/01/03 | 7184 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+2023/01/04 | 7315 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2022/10/13 | 225403 | 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
@@ -301275,12 +301289,12 @@
2021/05/16 | 20371 | systems/texlive/tlnet/tlpkg/TeXLive/TLCrypto.pm
2021/12/21 | 5429 | systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm
2021/12/21 | 27582 | systems/texlive/tlnet/tlpkg/TeXLive/TLPaper.pm
-2023/01/04 | 17927638 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
-2023/01/04 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2023/01/05 | 17928363 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2023/01/05 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
2022/04/18 | 86658 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm
-2023/01/04 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
-2023/01/04 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2023/01/04 | 2440620 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2023/01/05 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2023/01/05 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2023/01/05 | 2441600 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
2022/09/14 | 58922 | systems/texlive/tlnet/tlpkg/TeXLive/TLPOBJ.pm
2022/10/04 | 42404 | systems/texlive/tlnet/tlpkg/TeXLive/TLPSRC.pm
2021/12/21 | 16130 | systems/texlive/tlnet/tlpkg/TeXLive/TLTREE.pm
@@ -311474,7 +311488,7 @@
2014/07/05 | 611 | systems/win32/yandy/README
2014/07/05 | 1004628 | systems/win32/yandy/yandy-src.tar.xz
2014/07/05 | 1012416 | systems/win32/yandy.zip
-2023/01/05 | 186 | timestamp
+2023/01/06 | 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 2e818921fb..fb141433b6 100644
--- a/FILES.byname.gz
+++ b/FILES.byname.gz
Binary files differ
diff --git a/FILES.last07days b/FILES.last07days
index 3618fe2b63..b0cc41a2ae 100644
--- a/FILES.last07days
+++ b/FILES.last07days
@@ -1,3 +1,86 @@
+2023/01/05 | 998428 | systems/texlive/tlnet/archive/kaytannollista-latexia.doc.r65461.tar.xz
+2023/01/05 | 97300 | systems/texlive/tlnet/archive/texinfo.r65459.tar.xz
+2023/01/05 | 93672 | macros/latex/contrib/jwjournal.zip
+2023/01/05 | 88978 | install/macros/xetex/plain/unimath-plain-xetex.tds.zip
+2023/01/05 | 8636 | systems/texlive/tlnet/archive/projlib.doc.r65463.tar.xz
+2023/01/05 | 796 | macros/luatex/generic/luakeys/luakeys-debug.sty
+2023/01/05 | 781 | macros/luatex/generic/luakeys/luakeys.tex
+2023/01/05 | 6968 | macros/latex/contrib/jwjournal/jwjournal.cls
+2023/01/05 | 6587 | macros/luatex/generic/luakeys/README.md
+2023/01/05 | 63158 | macros/luatex/generic/luakeys/documentation.tex
+2023/01/05 | 61724 | systems/texlive/tlnet/archive/unimath-plain-xetex.doc.r65460.tar.xz
+2023/01/05 | 6084 | macros/latex/contrib/curve2e/README.txt
+2023/01/05 | 5834610 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2023/01/05 | 568 | systems/texlive/tlnet/archive/kaytannollista-latexia.r65461.tar.xz
+2023/01/05 | 54283 | macros/luatex/generic/luakeys/luakeys.lua
+2023/01/05 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2023/01/05 | 481040 | systems/texlive/tlnet/archive/msu-thesis.doc.r65462.tar.xz
+2023/01/05 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2023/01/05 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2023/01/05 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2023/01/05 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2023/01/05 | 4556 | macros/latex/contrib/jwjournal/README.md
+2023/01/05 | 453054 | macros/luatex/generic/luakeys.zip
+2023/01/05 | 44037 | macros/latex/contrib/jwjournal/jwjournal-demo-cn.pdf
+2023/01/05 | 427721 | macros/luatex/generic/luakeys/luakeys.pdf
+2023/01/05 | 423864 | systems/texlive/tlnet/archive/texlive-scripts.doc.r65459.tar.xz
+2023/01/05 | 4035108 | biblio/ctan-bibdata.zip
+2023/01/05 | 372 | systems/texlive/tlnet/archive/xput.x86_64-darwinlegacy.r65465.tar.xz
+2023/01/05 | 368 | systems/texlive/tlnet/archive/xput.x86_64-linuxmusl.r65465.tar.xz
+2023/01/05 | 364 | systems/texlive/tlnet/archive/xput.x86_64-solaris.r65465.tar.xz
+2023/01/05 | 364 | systems/texlive/tlnet/archive/xput.x86_64-linux.r65465.tar.xz
+2023/01/05 | 364 | systems/texlive/tlnet/archive/xput.x86_64-cygwin.r65465.tar.xz
+2023/01/05 | 364 | systems/texlive/tlnet/archive/xput.universal-darwin.r65465.tar.xz
+2023/01/05 | 364 | systems/texlive/tlnet/archive/xput.i386-netbsd.r65465.tar.xz
+2023/01/05 | 364 | systems/texlive/tlnet/archive/xput.i386-linux.r65465.tar.xz
+2023/01/05 | 364 | systems/texlive/tlnet/archive/xput.i386-freebsd.r65465.tar.xz
+2023/01/05 | 364 | systems/texlive/tlnet/archive/xput.armhf-linux.r65465.tar.xz
+2023/01/05 | 364 | systems/texlive/tlnet/archive/xput.amd64-netbsd.r65465.tar.xz
+2023/01/05 | 364 | systems/texlive/tlnet/archive/xput.amd64-freebsd.r65465.tar.xz
+2023/01/05 | 364 | systems/texlive/tlnet/archive/xput.aarch64-linux.r65465.tar.xz
+2023/01/05 | 3640504 | biblio/ctan-bibdata/ctan.pdf
+2023/01/05 | 360 | systems/texlive/tlnet/archive/xput.i386-solaris.r65465.tar.xz
+2023/01/05 | 360 | systems/texlive/tlnet/archive/xput.i386-cygwin.r65465.tar.xz
+2023/01/05 | 3500 | systems/texlive/tlnet/archive/lua-visual-debug.r65464.tar.xz
+2023/01/05 | 31509 | macros/unicodetex/latex/simplivre/simplivre.cls
+2023/01/05 | 31505 | macros/unicodetex/latex/einfart/einfart.cls
+2023/01/05 | 289572 | systems/texlive/tlnet/archive/lua-visual-debug.doc.r65464.tar.xz
+2023/01/05 | 2759190 | biblio/ctan-bibdata/ctan.bib
+2023/01/05 | 26252 | systems/texlive/tlnet/archive/projlib.source.r65463.tar.xz
+2023/01/05 | 26060 | systems/texlive/tlnet/archive/projlib.r65463.tar.xz
+2023/01/05 | 25518529 | systems/texlive/tlnet/install-tl.zip
+2023/01/05 | 2441600 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2023/01/05 | 24116 | systems/texlive/tlnet/archive/xput.r65465.tar.xz
+2023/01/05 | 20434138 | systems/texlive/tlnet/install-tl-windows.exe
+2023/01/05 | 19537 | macros/latex/contrib/jwjournal/jwjournal-demo-en.pdf
+2023/01/05 | 19476 | macros/latex/contrib/jwjournal/jwjournal-demo-fr.pdf
+2023/01/05 | 19106 | macros/unicodetex/latex/simplivre/LICENSE
+2023/01/05 | 19106 | macros/unicodetex/latex/einfart/LICENSE
+2023/01/05 | 19106 | macros/latex/contrib/jwjournal/LICENSE
+2023/01/05 | 18020 | CTAN.sites
+2023/01/05 | 17928363 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2023/01/05 | 17244412 | systems/texlive/tlnet/archive/xput.doc.r65465.tar.xz
+2023/01/05 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
+2023/01/05 | 1671 | macros/latex/contrib/jwjournal/jwjournal-demo-fr.tex
+2023/01/05 | 15 | macros/unicodetex/latex/simplivre/DEPENDS.txt
+2023/01/05 | 15 | macros/unicodetex/latex/einfart/DEPENDS.txt
+2023/01/05 | 15952 | systems/texlive/tlnet/archive/unimath-plain-xetex.r65460.tar.xz
+2023/01/05 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2023/01/05 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2023/01/05 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2023/01/05 | 1452 | macros/latex/contrib/jwjournal/jwjournal-demo-en.tex
+2023/01/05 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2023/01/05 | 1420 | macros/unicodetex/latex/einfart/README.md
+2023/01/05 | 1387 | macros/latex/contrib/jwjournal/jwjournal-demo-cn.tex
+2023/01/05 | 1361 | macros/unicodetex/latex/simplivre/README.md
+2023/01/05 | 1307300 | macros/latex/contrib/curve2e.zip
+2023/01/05 | 12 | macros/latex/contrib/jwjournal/DEPENDS.txt
+2023/01/05 | 12960 | systems/texlive/tlnet/archive/msu-thesis.r65462.tar.xz
+2023/01/05 | 12239 | macros/unicodetex/latex/einfart.zip
+2023/01/05 | 12233 | macros/unicodetex/latex/simplivre.zip
+2023/01/05 | 1181 | macros/luatex/generic/luakeys/luakeys-debug.tex
+2023/01/05 | 113704 | systems/texlive/tlnet/archive/texlive-scripts.r65459.tar.xz
+2023/01/05 | 1044 | macros/luatex/generic/luakeys/luakeys.sty
2023/01/04 | 949356 | systems/texlive/tlnet/archive/tocdata.doc.r65451.tar.xz
2023/01/04 | 884264 | info/kaytannollista-latexia/kaytannollista-latexia.pdf
2023/01/04 | 88330 | info/kaytannollista-latexia/luku-merkintakieli.tex
@@ -6,38 +89,39 @@
2023/01/04 | 8212 | systems/texlive/tlnet/archive/zref-vario.source.r65453.tar.xz
2023/01/04 | 796 | macros/luatex/generic/lua-visual-debug/doc/sample.tex
2023/01/04 | 7860 | systems/texlive/tlnet/archive/dtxdescribe.r65445.tar.xz
+2023/01/04 | 7856 | macros/pdftex/mptopdf/tex/context/base/mkii/syst-tex.mkii
2023/01/04 | 780236 | systems/texlive/tlnet/archive/zref-vario.doc.r65453.tar.xz
2023/01/04 | 7701 | macros/luatex/generic/lua-visual-debug/lua-visual-debug.lua
2023/01/04 | 73328 | macros/luatex/generic/lua-visual-debug/doc/lvdebugdetail1-num.png
-2023/01/04 | 71824 | systems/texlive/tlnet/archive/unimath-plain-xetex.doc.r65455.tar.xz
+2023/01/04 | 732 | macros/pdftex/mptopdf/doc/context/scripts/mkii/mptopdf.man
+2023/01/04 | 7315 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+2023/01/04 | 71627 | macros/pdftex/mptopdf/tex/context/base/mkii/supp-pdf.mkii
2023/01/04 | 7112 | systems/texlive/tlnet/archive/keyfloat.r65446.tar.xz
2023/01/04 | 66060 | systems/texlive/tlnet/archive/siunitx.r65450.tar.xz
+2023/01/04 | 65 | systems/mac/mactex/mactex-MacTeXtras-20230104.zip.md5
2023/01/04 | 6138 | info/kaytannollista-latexia/README.md
-2023/01/04 | 5834387 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2023/01/04 | 5804 | systems/texlive/tlnet/archive/unimath-plain-xetex.r65455.tar.xz
2023/01/04 | 5740 | macros/latex/contrib/projlib/README.md
2023/01/04 | 54928 | systems/texlive/tlnet/archive/zref-clever.source.r65452.tar.xz
+2023/01/04 | 5322 | macros/pdftex/mptopdf/tex/generic/context/mptopdf/mptopdf.tex
2023/01/04 | 52844 | systems/texlive/tlnet/archive/dtk-bibliography.r65444.tar.xz
+2023/01/04 | 527529020 | systems/mac/mactex/mactex-MacTeXtras-20230104.zip
2023/01/04 | 5080 | systems/texlive/tlnet/archive/pyluatex.r65454.tar.xz
2023/01/04 | 503484 | macros/latex/contrib/msu-thesis.zip
+2023/01/04 | 49 | systems/mac/mactex/MacTeXtras.zip.md5
2023/01/04 | 492 | macros/luatex/generic/lua-visual-debug/doc/sample-plain.tex
2023/01/04 | 49220 | macros/luatex/generic/lua-visual-debug/doc/sample-plain.pdf
-2023/01/04 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2023/01/04 | 4608 | macros/pdftex/mptopdf/scripts/context/stubs/mswin/mptopdf.exe
2023/01/04 | 459848 | systems/texlive/tlnet/archive/lwarp.source.r65447.tar.xz
2023/01/04 | 459068 | systems/texlive/tlnet/archive/dtxdescribe.doc.r65445.tar.xz
-2023/01/04 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2023/01/04 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
-2023/01/04 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2023/01/04 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2023/01/04 | 4557 | macros/pdftex/mptopdf/scripts/context/perl/mptopdf.pl
2023/01/04 | 45515 | macros/luatex/generic/lua-visual-debug/doc/sample.pdf
2023/01/04 | 4520 | systems/texlive/tlnet/archive/zref-vario.r65453.tar.xz
-2023/01/04 | 423868 | systems/texlive/tlnet/archive/texlive-scripts.doc.r65443.tar.xz
+2023/01/04 | 42831 | macros/pdftex/mptopdf/tex/context/base/mkii/supp-mpe.mkii
2023/01/04 | 4208 | systems/texlive/tlnet/archive/metalogox.r65448.tar.xz
2023/01/04 | 41204 | macros/latex/contrib/projlib.zip
-2023/01/04 | 4033578 | biblio/ctan-bibdata.zip
2023/01/04 | 383830 | macros/luatex/generic/lua-visual-debug.zip
+2023/01/04 | 38090 | systems/mac/mactex/ExtrasFolder.pdf
2023/01/04 | 380028 | systems/texlive/tlnet/archive/metalogox.doc.r65448.tar.xz
-2023/01/04 | 3639787 | biblio/ctan-bibdata/ctan.pdf
2023/01/04 | 3379 | macros/latex/contrib/projlib/ProjLib.ins
2023/01/04 | 3356 | systems/texlive/tlnet/archive/tocdata.r65451.tar.xz
2023/01/04 | 3255240 | systems/texlive/tlnet/archive/lwarp.doc.r65447.tar.xz
@@ -46,31 +130,23 @@
2023/01/04 | 2994 | info/kaytannollista-latexia/kirjallisuutta.bib
2023/01/04 | 27 | info/kaytannollista-latexia/versio.tex
2023/01/04 | 276036 | systems/texlive/tlnet/archive/dtk-bibliography.doc.r65444.tar.xz
-2023/01/04 | 2759191 | biblio/ctan-bibdata/ctan.bib
2023/01/04 | 27232 | systems/texlive/tlnet/archive/proflycee.r65449.tar.xz
2023/01/04 | 2633 | info/kaytannollista-latexia/luku-esipuhe.tex
-2023/01/04 | 25518503 | systems/texlive/tlnet/install-tl.zip
2023/01/04 | 2532 | macros/luatex/generic/lua-visual-debug/doc/lvdebug-doc.tex
-2023/01/04 | 2440620 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
-2023/01/04 | 24116 | systems/texlive/tlnet/archive/xput.r65456.tar.xz
2023/01/04 | 24048 | systems/texlive/tlnet/archive/dtxdescribe.source.r65445.tar.xz
2023/01/04 | 23632 | systems/texlive/tlnet/archive/zref-clever.r65452.tar.xz
+2023/01/04 | 21474 | macros/pdftex/mptopdf/tex/context/base/mkii/supp-mis.mkii
2023/01/04 | 214354 | macros/latex/contrib/projlib/ProjLib.dtx
2023/01/04 | 212736 | systems/texlive/tlnet/archive/lwarp.r65447.tar.xz
2023/01/04 | 210880 | macros/luatex/generic/lua-visual-debug/doc/lvdebug-doc.pdf
2023/01/04 | 20612 | info/kaytannollista-latexia/luku-erikoiset.tex
2023/01/04 | 20559 | info/kaytannollista-latexia/luku-valmistautuminen.tex
-2023/01/04 | 20434486 | systems/texlive/tlnet/install-tl-windows.exe
2023/01/04 | 19106 | macros/latex/contrib/projlib/LICENSE
-2023/01/04 | 17927638 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
-2023/01/04 | 17244412 | systems/texlive/tlnet/archive/xput.doc.r65456.tar.xz
-2023/01/04 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
+2023/01/04 | 161 | systems/mac/mactex/mactex-MacTeXtras-20230104.zip.sha512
2023/01/04 | 1617292 | systems/texlive/tlnet/archive/proflycee.doc.r65449.tar.xz
+2023/01/04 | 1612 | systems/mac/mactex/Licenses.txt
2023/01/04 | 1561628 | systems/texlive/tlnet/archive/zref-clever.doc.r65452.tar.xz
-2023/01/04 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2023/01/04 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2023/01/04 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2023/01/04 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2023/01/04 | 145 | systems/mac/mactex/MacTeXtras.zip.sha512
2023/01/04 | 14345 | info/kaytannollista-latexia/kaytannollista-latexia.tex
2023/01/04 | 1247992 | systems/texlive/tlnet/archive/siunitx.doc.r65450.tar.xz
2023/01/04 | 12444852 | systems/texlive/tlnet/archive/tlgs.win32.r65457.tar.xz
@@ -78,8 +154,8 @@
2023/01/04 | 12174 | info/kaytannollista-latexia/tavutusvihjeet.tex
2023/01/04 | 12028 | systems/texlive/tlnet/archive/tocdata.source.r65451.tar.xz
2023/01/04 | 117928 | systems/texlive/tlnet/archive/siunitx.source.r65450.tar.xz
+2023/01/04 | 115691230 | macros/context/latest/cont-tmf.zip
2023/01/04 | 11445 | macros/luatex/generic/lua-visual-debug/doc/strut.png
-2023/01/04 | 113676 | systems/texlive/tlnet/archive/texlive-scripts.r65443.tar.xz
2023/01/04 | 1052496 | systems/texlive/tlnet/archive/keyfloat.doc.r65446.tar.xz
2023/01/04 | 1031899 | info/kaytannollista-latexia.zip
2023/01/04 | 100388 | systems/texlive/tlnet/archive/pyluatex.doc.r65454.tar.xz
@@ -608,7 +684,6 @@
2023/01/03 | 854 | info/examples/tlc3/example-sources/11-8-2.ltx
2023/01/03 | 853 | info/examples/tlc3/example-sources/7-5-16.ltx
2023/01/03 | 853 | info/examples/tlc3/example-sources/7-5-12.ltx
-2023/01/03 | 8536 | systems/texlive/tlnet/archive/projlib.doc.r65436.tar.xz
2023/01/03 | 852 | info/examples/tlc3/example-sources/9-3-8.ltx
2023/01/03 | 852 | info/examples/tlc3/example-sources/8-4-2.ltx
2023/01/03 | 852 | info/examples/tlc3/example-sources/6-2-3.ltx
@@ -1089,7 +1164,6 @@
2023/01/03 | 71903 | info/examples/tlc3/book-pdfs/3-4-43.pdf
2023/01/03 | 718 | info/examples/tlc3/example-sources/6-2-7.ltx
2023/01/03 | 71866 | info/examples/tlc3/book-pdfs/6-8-1.pdf
-2023/01/03 | 7184 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2023/01/03 | 717 | macros/luatex/latex/pyluatex/example/readme-example.tex
2023/01/03 | 717 | info/examples/tlc3/example-sources/9-6-26.ltx
2023/01/03 | 717 | info/examples/tlc3/example-sources/3-2-1.ltx
@@ -2338,7 +2412,6 @@
2023/01/03 | 26274 | info/examples/tlc3/book-pdfs/4-2-47.pdf
2023/01/03 | 26271 | info/examples/tlc3/book-pdfs/10-13-3.pdf
2023/01/03 | 26264 | info/examples/tlc3/book-pdfs/4-2-36.pdf
-2023/01/03 | 26252 | systems/texlive/tlnet/archive/projlib.source.r65436.tar.xz
2023/01/03 | 26249 | info/examples/tlc3/book-pdfs/4-3-21.pdf
2023/01/03 | 26238 | info/examples/tlc3/book-pdfs/16-3-29.pdf
2023/01/03 | 26229 | info/examples/tlc3/book-pdfs/12-21-fig.pdf
@@ -2349,7 +2422,6 @@
2023/01/03 | 26178 | info/examples/tlc3/book-pdfs/2-2-12.pdf
2023/01/03 | 26151 | info/examples/tlc3/book-pdfs/3-5-5.pdf
2023/01/03 | 26085 | info/examples/tlc3/book-pdfs/16-7-3.pdf
-2023/01/03 | 26080 | systems/texlive/tlnet/archive/projlib.r65436.tar.xz
2023/01/03 | 26070 | info/examples/tlc3/book-pdfs/3-4-36.pdf
2023/01/03 | 2603 | info/examples/tlc3/example-sources/12-12-fig.ltx
2023/01/03 | 26039 | info/examples/tlc3/book-pdfs/6-1-3.pdf
@@ -3506,8 +3578,6 @@
2023/01/02 | 3338 | macros/latex/contrib/xput/README.md
2023/01/02 | 32654 | macros/unicodetex/latex/fontsetup/doc/fspsample-gfsdidotclassic.pdf
2023/01/02 | 318 | macros/unicodetex/latex/fontsetup/fspebgaramondot.sty
-2023/01/02 | 31509 | macros/unicodetex/latex/simplivre/simplivre.cls
-2023/01/02 | 31505 | macros/unicodetex/latex/einfart/einfart.cls
2023/01/02 | 31224 | macros/unicodetex/latex/fontsetup/doc/fspsample-gfsdidot.pdf
2023/01/02 | 30994 | macros/unicodetex/latex/fontsetup/doc/fspsample-ebgaramond.pdf
2023/01/02 | 307620 | fonts/newcomputermodern/otf/NewCMMono10-Bold.otf
@@ -3540,9 +3610,7 @@
2023/01/02 | 2045 | macros/unicodetex/latex/fontsetup/fspgfsneohellenicot.sty
2023/01/02 | 2014 | macros/unicodetex/latex/fontsetup/fspgfsdidotot.sty
2023/01/02 | 19159 | macros/unicodetex/latex/fontsetup/doc/fontsetup-doc.tex
-2023/01/02 | 19106 | macros/unicodetex/latex/simplivre/LICENSE
2023/01/02 | 19106 | macros/unicodetex/latex/lebhart/LICENSE
-2023/01/02 | 19106 | macros/unicodetex/latex/einfart/LICENSE
2023/01/02 | 19106 | macros/unicodetex/latex/beaulivre/LICENSE
2023/01/02 | 19106 | macros/latex/contrib/xput/LICENSE.txt
2023/01/02 | 19106 | macros/latex/contrib/minimalist/LICENSE
@@ -3556,8 +3624,6 @@
2023/01/02 | 16394 | macros/luatex/latex/beamer-rl/beamer-rl.cls
2023/01/02 | 1591 | macros/latex/contrib/babel-contrib/french/README.md
2023/01/02 | 15340 | systems/texlive/tlnet/archive/witharrows.r65425.tar.xz
-2023/01/02 | 1478 | macros/unicodetex/latex/einfart/README.md
-2023/01/02 | 1475 | macros/unicodetex/latex/simplivre/README.md
2023/01/02 | 14757 | macros/unicodetex/latex/fontsetup/fspolddefault.sty
2023/01/02 | 14712 | macros/unicodetex/latex/fontsetup/fspdefault.sty
2023/01/02 | 1460 | macros/unicodetex/latex/lebhart/README.md
@@ -3571,8 +3637,6 @@
2023/01/02 | 129512 | macros/luatex/latex/beamer-rl/Example-of-use-en.pdf
2023/01/02 | 12725 | macros/latex/contrib/xput/scripts/xput
2023/01/02 | 125432 | macros/latex/contrib/xput/doc/example-graphic.pdf
-2023/01/02 | 12134 | macros/unicodetex/latex/simplivre.zip
-2023/01/02 | 12120 | macros/unicodetex/latex/einfart.zip
2023/01/02 | 12036 | macros/latex/contrib/xput/doc/example-grid.pdf
2023/01/02 | 12008 | macros/unicodetex/latex/beaulivre.zip
2023/01/02 | 11988 | macros/unicodetex/latex/lebhart.zip
@@ -3599,9 +3663,11 @@
2023/01/01 | 8702997 | support/latexindent/bin/windows/latexindent.exe
2023/01/01 | 8462 | support/latexindent/LatexIndent/FileExtension.pm
2023/01/01 | 836 | support/latexindent/LatexIndent/Version.pm
+2023/01/01 | 77532 | macros/latex/contrib/curve2e/curve2e-manual.tex
2023/01/01 | 7329 | support/latexindent/LatexIndent/BackUpFileProcedure.pm
2023/01/01 | 7280 | support/latexindent/LatexIndent/MandatoryArgument.pm
2023/01/01 | 7161 | support/latexindent/documentation/figure-schematic.png
+2023/01/01 | 693186 | macros/latex/contrib/curve2e/curve2e.pdf
2023/01/01 | 6884 | support/latexindent/LatexIndent/TrailingComments.pm
2023/01/01 | 6808 | support/latexindent/LatexIndent/Environment.pm
2023/01/01 | 6694 | support/latexindent/LatexIndent/Item.pm
@@ -3613,6 +3679,7 @@
2023/01/01 | 6163349 | support/latexindent/bin/linux/latexindent
2023/01/01 | 6023 | support/latexindent/LatexIndent/Else.pm
2023/01/01 | 5809 | support/latexindent/LatexIndent/UnNamedGroupingBracesBrackets.pm
+2023/01/01 | 561047 | macros/latex/contrib/curve2e/curve2e-manual.pdf
2023/01/01 | 559421 | macros/generic/witharrows/witharrows.pdf
2023/01/01 | 5454 | support/latexindent/documentation/contributors.bib
2023/01/01 | 54383 | support/latexindent/documentation/latexindent-yaml-schema.json
@@ -3652,6 +3719,7 @@
2023/01/01 | 214477 | support/TeX4ht/source/ChangeLog
2023/01/01 | 20766 | support/latexindent/LatexIndent/Sentence.pm
2023/01/01 | 2006 | support/latexindent/README
+2023/01/01 | 185632 | macros/latex/contrib/curve2e/curve2e.dtx
2023/01/01 | 18522 | support/latexindent/LatexIndent/ModifyLineBreaks.pm
2023/01/01 | 168916 | systems/texlive/tlnet/archive/gfdl.doc.r65415.tar.xz
2023/01/01 | 1672 | systems/texlive/tlnet/archive/collection-publishers.r65415.tar.xz
@@ -4011,551 +4079,3 @@
2022/12/30 | 1119 | fonts/simpleicons/map/simpleicons.map
2022/12/30 | 1078868 | macros/unicodetex/latex/bithesis.zip
2022/12/30 | 1049781 | macros/unicodetex/latex/bithesis/bithesis.pdf
-2022/12/29 | 9 | support/texlab/src/parser/test_data/latex/label/label_reference_simple.txt
-2022/12/29 | 9 | support/texlab/src/parser/test_data/latex/glossary/glossary_entry_reference_simple.txt
-2022/12/29 | 9 | support/texlab/src/parser/test_data/latex/citation/citation_missing_brace.txt
-2022/12/29 | 995 | support/texlab/src/features/definition/string.rs
-2022/12/29 | 993 | support/texlab/src/parser/test_data/bibtex/samples/knuth_1984.txt
-2022/12/29 | 992 | support/texlab/src/features/definition/document.rs
-2022/12/29 | 988 | support/texlab/src/citation/snapshots/texlab__citation__tests__article_rivest_1978.snap
-2022/12/29 | 985 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__citation.snap
-2022/12/29 | 984 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__section_flat.snap
-2022/12/29 | 980 | support/texlab/src/tests/workspace/snapshots/texlab__tests__workspace__symbol__filter_type_item.snap
-2022/12/29 | 979 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@color__color_set_definition_simple.txt.snap
-2022/12/29 | 973012 | systems/texlive/tlnet/archive/postnotes.doc.r65385.tar.xz
-2022/12/29 | 972 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_multiple_entries.snap
-2022/12/29 | 969 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@glossary__glossary_entry_definition_simple.txt.snap
-2022/12/29 | 967 | support/texlab/src/citation/snapshots/texlab__citation__tests__patent_almendro_1998.snap
-2022/12/29 | 961 | support/texlab/src/parser/snapshots/texlab__parser__build_log__tests__parse@004.txt.snap
-2022/12/29 | 9483 | support/texlab/src/util/cursor.rs
-2022/12/29 | 9465 | support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__knuth_1984.txt.snap
-2022/12/29 | 919 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__graphics_include_command.txt.snap
-2022/12/29 | 914 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@glossary__glossary_entry_reference_options.txt.snap
-2022/12/29 | 912 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@environment__environment_definition_optional_arg.txt.snap
-2022/12/29 | 90 | support/texlab/src/parser/test_data/latex/structure/structure_nested.txt
-2022/12/29 | 905 | support/texlab/src/citation.rs
-2022/12/29 | 90097 | macros/latex/contrib/bookcover/bookcover.dtx
-2022/12/29 | 898 | support/texlab/src/parser/test_data/bibtex/samples/kastenholz_2006.txt
-2022/12/29 | 8854 | support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__kastenholz_2006.txt.snap
-2022/12/29 | 8838 | macros/luatex/latex/luagcd/luagcd.sty
-2022/12/29 | 877 | support/texlab/src/features/completion/user_command.rs
-2022/12/29 | 872 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@color__color_set_definition_error1.txt.snap
-2022/12/29 | 872 | support/texlab/src/parser/snapshots/texlab__parser__build_log__tests__parse@005.txt.snap
-2022/12/29 | 869 | support/texlab/benches/bench_main.rs
-2022/12/29 | 8648 | support/texlab/src/tests/text_document/document_symbol.rs
-2022/12/29 | 860 | support/texlab/src/parser/test_data/bibtex/samples/blom_2021.txt
-2022/12/29 | 858 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@group__equation_missing_end.txt.snap
-2022/12/29 | 856 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__biblatex_include_options.txt.snap
-2022/12/29 | 853 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@label__label_reference_incomplete.txt.snap
-2022/12/29 | 852 | support/texlab/src/features/hover/component.rs
-2022/12/29 | 849 | support/texlab/src/features/completion/field.rs
-2022/12/29 | 844 | support/texlab/src/features/completion/acronym_ref.rs
-2022/12/29 | 8394 | support/texlab/src/util/label.rs
-2022/12/29 | 8308808 | info/guide-latex-fr.zip
-2022/12/29 | 82 | support/texlab/src/parser/test_data/bibtex/comment.txt
-2022/12/29 | 823 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@equation_missing_begin.txt.snap
-2022/12/29 | 82337 | macros/latex/contrib/bookcover/bookcover-example2.pdf
-2022/12/29 | 820 | support/texlab/src/distro/texlive.rs
-2022/12/29 | 811 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@glossary__acronym_reference_options.txt.snap
-2022/12/29 | 80 | support/texlab/src/parser/test_data/latex/command_definition/command_definition_with_begin.txt
-2022/12/29 | 80632 | systems/texlive/tlnet/archive/ibrackets.doc.r65383.tar.xz
-2022/12/29 | 800 | support/texlab/src/citation/snapshots/texlab__citation__tests__article_betram_1996.snap
-2022/12/29 | 7 | support/texlab/src/parser/test_data/latex/citation/citation_empty.txt
-2022/12/29 | 7955 | support/texlab/src/syntax/bibtex.rs
-2022/12/29 | 785 | support/texlab/src/features/hover/citation.rs
-2022/12/29 | 776 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@caption__caption_figure.txt.snap
-2022/12/29 | 7762 | support/texlab/src/parser/test_data/build_log/007.txt
-2022/12/29 | 76 | support/texlab/src/parser/test_data/latex/glossary/acronym_definition_options.txt
-2022/12/29 | 7699029 | support/texlab.zip
-2022/12/29 | 768 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@theorem_definition__theorem_definition_full.txt.snap
-2022/12/29 | 765 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__graphics_include_complicated_options.txt.snap
-2022/12/29 | 765 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@command_definition__command_definition_optional.txt.snap
-2022/12/29 | 757 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@glossary__acronym_package.txt.snap
-2022/12/29 | 755 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@glossary__acronym_definition_simple.txt.snap
-2022/12/29 | 7542 | macros/luatex/latex/luagcd/luagcd.tex
-2022/12/29 | 753 | support/texshop/README.txt
-2022/12/29 | 7517 | support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__aksin_2006.txt.snap
-2022/12/29 | 7514 | support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__jain_1999.txt.snap
-2022/12/29 | 746 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@environment__environment_simple.txt.snap
-2022/12/29 | 742 | support/texlab/src/features/inlay_hint/label.rs
-2022/12/29 | 7419 | support/texlab/src/features/formatting/bibtex_internal.rs
-2022/12/29 | 730 | support/texlab/src/features/completion/tikz_library.rs
-2022/12/29 | 7308 | support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__almendro_1998.txt.snap
-2022/12/29 | 729 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@color__color_definition_simple.txt.snap
-2022/12/29 | 720 | support/texlab/src/citation/snapshots/texlab__citation__tests__collection_matuz_1990.snap
-2022/12/29 | 71 | support/texlab/src/tests.rs
-2022/12/29 | 7192 | systems/texlive/tlnet/archive/postnotes.r65385.tar.xz
-2022/12/29 | 717534 | macros/latex/contrib/bookcover/bookcover-example1.pdf
-2022/12/29 | 7143 | support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__combi_2004.txt.snap
-2022/12/29 | 712 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__graphics_include_options.txt.snap
-2022/12/29 | 712 | support/texlab/src/distro/kpsewhich.rs
-2022/12/29 | 711 | support/texlab/src/features/completion/entry_type.rs
-2022/12/29 | 706 | support/texlab/src/parser/test_data/bibtex/samples/almendro_1998.txt
-2022/12/29 | 703 | support/texlab/src/tests/workspace/snapshots/texlab__tests__workspace__symbol__filter_type_math.snap
-2022/12/29 | 702 | support/texlab/src/parser/snapshots/texlab__parser__build_log__tests__parse@001.txt.snap
-2022/12/29 | 6 | support/texlab/src/parser/test_data/latex/group/escaped_brackets.txt
-2022/12/29 | 6970 | support/texlab/src/db/workspace.rs
-2022/12/29 | 6970534 | support/texlab/data/components.json.gz
-2022/12/29 | 6958 | support/texlab/src/db/discovery.rs
-2022/12/29 | 693 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__inkscape_include_options.txt.snap
-2022/12/29 | 693 | support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@issue_809.txt.snap
-2022/12/29 | 6933 | support/texlab/src/citation/field/text.rs
-2022/12/29 | 692 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@structure__structure_siblings.txt.snap
-2022/12/29 | 692 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__svg_include_options.txt.snap
-2022/12/29 | 692 | support/texlab/src/features/completion/component_command.rs
-2022/12/29 | 689 | support/texlab/src/syntax/latex.rs
-2022/12/29 | 6822 | support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__erwin_2007.txt.snap
-2022/12/29 | 681 | support/texlab/src/tests/workspace/snapshots/texlab__tests__workspace__symbol__filter_bibtex.snap
-2022/12/29 | 679 | support/texlab/src/parser/test_data/bibtex/samples/aksin_2006.txt
-2022/12/29 | 674 | support/texlab/src/parser/test_data/bibtex/samples/jain_1999.txt
-2022/12/29 | 674 | support/texlab/src/parser/test_data/bibtex/samples/combi_2004.txt
-2022/12/29 | 674 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@command_definition__command_definition_simple.txt.snap
-2022/12/29 | 67440487 | support/texshop/texshop510.zip
-2022/12/29 | 672 | support/texlab/src/features/hover/label.rs
-2022/12/29 | 668 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@block_comments.txt.snap
-2022/12/29 | 666 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@theorem_definition__theorem_definition_name_with_description_and_counter.txt.snap
-2022/12/29 | 6630 | support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__blom_2021.txt.snap
-2022/12/29 | 661 | support/texlab/src/features/completion/user_environment.rs
-2022/12/29 | 65 | systems/mac/mactex/mactex-MacTeXtras-20221229.zip.md5
-2022/12/29 | 651 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@inline_double_dollar.txt.snap
-2022/12/29 | 64 | support/texlab/src/parser/test_data/latex/glossary/acronym_declaration.txt
-2022/12/29 | 6484 | support/texlab/src/util/line_index.rs
-2022/12/29 | 646 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@caption__caption_default_error.txt.snap
-2022/12/29 | 6458 | support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__rivest_1978.txt.snap
-2022/12/29 | 642 | support/texlab/texlab.1
-2022/12/29 | 641 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@caption__caption_default.txt.snap
-2022/12/29 | 639 | support/texlab/src/features/link/include.rs
-2022/12/29 | 638 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__user_environment.snap
-2022/12/29 | 635 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@environment__environment_asymptote.txt.snap
-2022/12/29 | 635 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@color__color_set_definition_error2.txt.snap
-2022/12/29 | 633 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@inline.txt.snap
-2022/12/29 | 627 | support/texlab/src/server/query.rs
-2022/12/29 | 615 | support/texlab/src/parser/test_data/bibtex/samples/erwin_2007.txt
-2022/12/29 | 613 | support/texlab/src/features/hover/field.rs
-2022/12/29 | 612897 | macros/luatex/latex/piton.zip
-2022/12/29 | 6113 | support/texlab/src/db/diagnostics.rs
-2022/12/29 | 60 | support/texlab/src/parser/test_data/latex/structure/structure_enum_item.txt
-2022/12/29 | 60 | support/texlab/src/citation/field.rs
-2022/12/29 | 6018 | support/texlab/src/util/capabilities.rs
-2022/12/29 | 595 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@citation__citation_prenote_postnote.txt.snap
-2022/12/29 | 595 | support/texlab/src/parser/snapshots/texlab__parser__build_log__tests__parse@003.txt.snap
-2022/12/29 | 585 | support/texlab/src/citation/snapshots/texlab__citation__tests__book_aho_2006.snap
-2022/12/29 | 5850 | support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__betram_1996.txt.snap
-2022/12/29 | 580 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@graphics_path_command.txt.snap
-2022/12/29 | 5792460 | systems/texlive/tlnet/archive/jeuxcartes.doc.r65384.tar.xz
-2022/12/29 | 578 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@label__label_number.txt.snap
-2022/12/29 | 576 | support/texlab/src/features/completion/theorem.rs
-2022/12/29 | 57018 | support/texlab/data/lang_data.json
-2022/12/29 | 5680 | support/texlab/src/tests/text_document/hover.rs
-2022/12/29 | 557 | support/texlab/src/parser/test_data/bibtex/samples/rivest_1978.txt
-2022/12/29 | 5573 | support/texlab/src/db/analysis.rs
-2022/12/29 | 556 | support/texlab/src/parser/test_data/bibtex/samples/betram_1996.txt
-2022/12/29 | 556 | support/texlab/src/features/hover/entry_type.rs
-2022/12/29 | 5543 | support/texlab/src/parser/build_log.rs
-2022/12/29 | 551 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@structure__structure_invalid_nesting.txt.snap
-2022/12/29 | 5482 | support/texlab/src/features/symbol/project_order.rs
-2022/12/29 | 547 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@theorem_definition__theorem_definition_name_with_counter.txt.snap
-2022/12/29 | 536 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_wrap_long_lines.snap
-2022/12/29 | 5358 | support/texlab/src/features/build.rs
-2022/12/29 | 533 | support/texlab/src/features/completion/component_environment.rs
-2022/12/29 | 532133 | macros/luatex/latex/piton/piton.pdf
-2022/12/29 | 5312 | support/texlab/src/features/forward_search.rs
-2022/12/29 | 52 | support/texlab/src/parser/test_data/latex/include/graphics_include_command.txt
-2022/12/29 | 52 | support/texlab/src/parser/test_data/latex/environment/environment_nested_missing_braces.txt
-2022/12/29 | 528 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@color__color_set_definition_error3.txt.snap
-2022/12/29 | 527505128 | systems/mac/mactex/mactex-MacTeXtras-20221229.zip
-2022/12/29 | 523 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@theorem_definition__theorem_definition_name_with_description.txt.snap
-2022/12/29 | 519 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@caption__caption_minimal_error.txt.snap
-2022/12/29 | 517 | support/texlab/src/parser/test_data/bibtex/samples/matuz_1990.txt
-2022/12/29 | 514 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@caption__caption_minimal.txt.snap
-2022/12/29 | 50 | support/texlab/src/parser/test_data/latex/environment/environment_asymptote.txt
-2022/12/29 | 50 | support/texlab/src/parser/test_data/bibtex/issue_809.txt
-2022/12/29 | 509 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@command_definition__command_definition_no_argc.txt.snap
-2022/12/29 | 507 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@label__label_reference_range_simple.txt.snap
-2022/12/29 | 505 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@label__label_reference_range_error.txt.snap
-2022/12/29 | 50578 | support/texlab/Cargo.lock
-2022/12/29 | 5046 | support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__matuz_1990.txt.snap
-2022/12/29 | 502 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@command_definition__math_operator_simple.txt.snap
-2022/12/29 | 500 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@graphics_path_options.txt.snap
-2022/12/29 | 4 | support/texlab/src/parser/test_data/latex/group/unmatched_brackets_with_group.txt
-2022/12/29 | 4 | support/texlab/src/parser/test_data/latex/generic_command_empty.txt
-2022/12/29 | 49 | systems/mac/mactex/MacTeXtras.zip.md5
-2022/12/29 | 499 | support/texlab/src/features/completion/color.rs
-2022/12/29 | 4915 | support/texlab/src/db/document.rs
-2022/12/29 | 48 | support/texlab/src/parser/test_data/latex/block_comments.txt
-2022/12/29 | 485 | support/texlab/src/syntax.rs
-2022/12/29 | 4856 | support/texlab/src/tests/client.rs
-2022/12/29 | 47 | support/texlab/src/parser/test_data/latex/label/label_reference_incomplete.txt
-2022/12/29 | 47 | support/texlab/src/parser/test_data/latex/environment/environment_definition.txt
-2022/12/29 | 479 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__citation_acronym.snap
-2022/12/29 | 477 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__package_include_multiple.txt.snap
-2022/12/29 | 473 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@label__label_definition_line_break.txt.snap
-2022/12/29 | 4727 | support/texlab/src/tests/text_document/references.rs
-2022/12/29 | 469 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__latex_input_path_brackets.txt.snap
-2022/12/29 | 462 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__citation_open_brace_multiple.snap
-2022/12/29 | 459 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@citation__citation_prenote.txt.snap
-2022/12/29 | 4563876 | systems/texlive/tlnet/archive/jeuxcartes.r65384.tar.xz
-2022/12/29 | 455 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__import_simple.txt.snap
-2022/12/29 | 454 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@generic_command_args.txt.snap
-2022/12/29 | 4513 | support/texlab/src/syntax/latex/kind.rs
-2022/12/29 | 450 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@label__label_reference_multiple.txt.snap
-2022/12/29 | 44 | support/texlab/src/parser/test_data/latex/include/class_include_options.txt
-2022/12/29 | 44 | support/texlab/src/parser/test_data/latex/glossary/acronym_definition_simple.txt
-2022/12/29 | 44 | support/texlab/src/parser/test_data/latex/environment/environment_definition_optional_arg.txt
-2022/12/29 | 44 | support/texlab/src/parser/test_data/latex/color/color_set_definition_simple.txt
-2022/12/29 | 440 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@citation__citation_multiple_keys.txt.snap
-2022/12/29 | 43 | support/texlab/src/parser/test_data/latex/environment/environment_nested.txt
-2022/12/29 | 435 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__citation_open_brace.snap
-2022/12/29 | 434 | support/texlab/src/parser/snapshots/texlab__parser__build_log__tests__parse@002.txt.snap
-2022/12/29 | 42 | support/texlab/src/parser/test_data/latex/include/biblatex_include_options.txt
-2022/12/29 | 4277 | support/texlab/src/features/completion/include.rs
-2022/12/29 | 426 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__acronym_ref_simple.snap
-2022/12/29 | 425 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__acronym_ref_open_brace.snap
-2022/12/29 | 421 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__user_command.snap
-2022/12/29 | 421 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__component_environment_command_definition.snap
-2022/12/29 | 421 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__latex_include_equality_sign.txt.snap
-2022/12/29 | 41 | support/texlab/src/parser/test_data/latex/include/package_include_options.txt
-2022/12/29 | 41726 | macros/luatex/latex/piton/piton-french.tex
-2022/12/29 | 4130 | support/texlab/src/parser/test_data/build_log/006.txt
-2022/12/29 | 411 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__glossary_ref_simple.snap
-2022/12/29 | 411 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@command_definition__command_definition_no_impl_error.txt.snap
-2022/12/29 | 410 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__glossary_ref_open_brace.snap
-2022/12/29 | 408 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@theorem_definition__theorem_definition_only_name.txt.snap
-2022/12/29 | 407 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__acronym_ref_empty.snap
-2022/12/29 | 406 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@command_definition__command_definition_no_impl.txt.snap
-2022/12/29 | 404 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__theorem_end.snap
-2022/12/29 | 404 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__component_environment_class.snap
-2022/12/29 | 404 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@label__label_reference_range_incomplete.txt.snap
-2022/12/29 | 403 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@graphics_path.txt.snap
-2022/12/29 | 400 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@command_definition__math_operator_no_impl.txt.snap
-2022/12/29 | 4008 | support/texlab/src/util/lsp_enums.rs
-2022/12/29 | 4006 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@issue_745.txt.snap
-2022/12/29 | 39 | support/texlab/src/parser/test_data/latex/include/graphics_include_options.txt
-2022/12/29 | 39 | support/texlab/src/parser/test_data/latex/include/graphics_include_complicated_options.txt
-2022/12/29 | 39 | support/texlab/src/parser/test_data/latex/glossary/glossary_entry_definition_simple.txt
-2022/12/29 | 39 | support/texlab/src/parser/test_data/latex/color/color_set_definition_error1.txt
-2022/12/29 | 39 | support/texlab/src/parser/test_data/latex/caption/caption_figure.txt
-2022/12/29 | 399 | support/texlab/src/parser/snapshots/texlab__parser__build_log__tests__parse@007.txt.snap
-2022/12/29 | 395 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__theorem_begin.snap
-2022/12/29 | 394 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@group__escaped_brackets.txt.snap
-2022/12/29 | 393 | support/texlab/src/tests/workspace/snapshots/texlab__tests__workspace__symbol__filter_type_figure.snap
-2022/12/29 | 391 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__argument_word.snap
-2022/12/29 | 391 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@citation__citation_redundant_comma.txt.snap
-2022/12/29 | 386 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__entry_type_complete_entry.snap
-2022/12/29 | 3836 | systems/texlive/tlnet/archive/ibrackets.source.r65383.tar.xz
-2022/12/29 | 382 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__tikz_library_import_simple.txt.snap
-2022/12/29 | 382 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__graphics_include_simple.txt.snap
-2022/12/29 | 3824 | support/texlab/README.md
-2022/12/29 | 381 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__biblatex_include_simple.txt.snap
-2022/12/29 | 380 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__verbatim_include_simple.txt.snap
-2022/12/29 | 380 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__pgf_library_import_simple.txt.snap
-2022/12/29 | 38092 | systems/mac/mactex/ExtrasFolder.pdf
-2022/12/29 | 380190 | support/texlab/images/demo.gif
-2022/12/29 | 3786 | support/texlab/src/features/symbol/types.rs
-2022/12/29 | 377 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@equation.txt.snap
-2022/12/29 | 37434 | support/texlab/src/parser/latex.rs
-2022/12/29 | 3742 | support/texlab/src/tests/workspace/symbol.rs
-2022/12/29 | 373 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__acronym_package_ref.snap
-2022/12/29 | 3718 | support/texlab/src/tests/fixture.rs
-2022/12/29 | 370 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__package_include_simple.txt.snap
-2022/12/29 | 369 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__bibtex_include_simple.txt.snap
-2022/12/29 | 3694 | support/texlab/src/db/diagnostics/tex.rs
-2022/12/29 | 368 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@glossary__glossary_entry_reference_simple.txt.snap
-2022/12/29 | 368 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@glossary__acronym_reference_simple.txt.snap
-2022/12/29 | 367 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__class_include_simple.txt.snap
-2022/12/29 | 365 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__component_environment_simple.snap
-2022/12/29 | 3653 | support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__aho_2006.txt.snap
-2022/12/29 | 363 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__entry_type_before_article.snap
-2022/12/29 | 363 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__inkscape_include_simple.txt.snap
-2022/12/29 | 362 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__svg_include_simple.txt.snap
-2022/12/29 | 3621891 | macros/latex/contrib/bookcover.zip
-2022/12/29 | 35 | support/texlab/src/parser/test_data/latex/structure/structure_siblings.txt
-2022/12/29 | 35 | support/texlab/src/parser/test_data/latex/glossary/acronym_package.txt
-2022/12/29 | 359 | support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@preamble.txt.snap
-2022/12/29 | 3590 | support/texlab/src/util/components.rs
-2022/12/29 | 35880 | support/texlab/src/server.rs
-2022/12/29 | 355 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@label__label_reference_equation.txt.snap
-2022/12/29 | 355 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__latex_include_simple.txt.snap
-2022/12/29 | 3547 | support/texlab/src/options.rs
-2022/12/29 | 351 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@label__label_definition_simple.txt.snap
-2022/12/29 | 351 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__import_incomplete.txt.snap
-2022/12/29 | 35149 | support/texlab/LICENSE
-2022/12/29 | 350 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@color__color_reference_simple.txt.snap
-2022/12/29 | 34 | support/texlab/src/parser/test_data/latex/include/svg_include_options.txt
-2022/12/29 | 3444 | support/texlab/src/util/chktex.rs
-2022/12/29 | 343 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@label__label_reference_simple.txt.snap
-2022/12/29 | 343 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@color__color_set_definition_error4.txt.snap
-2022/12/29 | 340 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@group__unmatched_brackets_with_group.txt.snap
-2022/12/29 | 33 | support/texlab/src/parser/test_data/latex/graphics_path_options.txt
-2022/12/29 | 33 | support/texlab/src/parser/test_data/latex/environment/environment_simple.txt
-2022/12/29 | 33 | support/texlab/src/parser/test_data/latex/color/color_definition_simple.txt
-2022/12/29 | 336 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__entry_type_after_preamble.snap
-2022/12/29 | 332 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@citation__citation_missing_brace.txt.snap
-2022/12/29 | 331 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@citation__citation_simple.txt.snap
-2022/12/29 | 32 | support/texlab/src/parser/test_data/latex/graphics_path_command.txt
-2022/12/29 | 32 | support/texlab/src/parser/test_data/latex/glossary/acronym_reference_options.txt
-2022/12/29 | 329 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@citation__citation_star.txt.snap
-2022/12/29 | 327 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__entry_type_before_preamble.snap
-2022/12/29 | 326 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__entry_type_after_string.snap
-2022/12/29 | 3246 | support/texlab/src/tests/text_document/formatting.rs
-2022/12/29 | 3231 | support/texlab/src/citation/entry.rs
-2022/12/29 | 322 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@group__curly_group_missing_end.txt.snap
-2022/12/29 | 3223 | support/texlab/src/features/symbol.rs
-2022/12/29 | 3223 | support/texlab/src/db/diagnostics/bib.rs
-2022/12/29 | 31 | support/texlab/src/parser/test_data/latex/theorem_definition/theorem_definition_full.txt
-2022/12/29 | 31 | support/texlab/src/parser/test_data/latex/command_definition/math_operator_simple.txt
-2022/12/29 | 319 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__entry_type_before_string.snap
-2022/12/29 | 3197 | support/texlab/src/db/analysis/label.rs
-2022/12/29 | 3194 | support/texlab/src/parser/test_data/build_log/001.txt
-2022/12/29 | 318 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__package_include_empty.txt.snap
-2022/12/29 | 318 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@group__curly_group_simple.txt.snap
-2022/12/29 | 315 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__class_include_empty.txt.snap
-2022/12/29 | 314 | support/texlab/src/parser/test_data/bibtex/samples/aho_2006.txt
-2022/12/29 | 3146 | support/texlab/src/client.rs
-2022/12/29 | 30 | support/texlab/src/parser/test_data/latex/include/inkscape_include_options.txt
-2022/12/29 | 30 | support/texlab/src/parser/test_data/latex/color/color_set_definition_error2.txt
-2022/12/29 | 308 | support/texlab/src/features/highlight.rs
-2022/12/29 | 307 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@issue_789.txt.snap
-2022/12/29 | 3057 | support/texlab/src/parser/test_data/build_log/004.txt
-2022/12/29 | 3055 | support/texlab/src/features/completion/label.rs
-2022/12/29 | 302 | support/texlab/src/util.rs
-2022/12/29 | 2 | support/texlab/src/parser/test_data/latex/parameter.txt
-2022/12/29 | 2 | support/texlab/src/parser/test_data/latex/group/unmatched_brackets.txt
-2022/12/29 | 2 | support/texlab/src/parser/test_data/latex/group/unmatched_braces.txt
-2022/12/29 | 2 | support/texlab/src/parser/test_data/latex/generic_command_escape.txt
-2022/12/29 | 29 | support/texlab/src/parser/test_data/latex/include/graphics_include_simple.txt
-2022/12/29 | 29 | support/texlab/src/parser/test_data/latex/command_definition/command_definition_optional.txt
-2022/12/29 | 2942 | support/texlab/src/features/workspace_command.rs
-2022/12/29 | 2931 | support/texlab/src/db/diagnostics/log.rs
-2022/12/29 | 2904 | support/texlab/src/features/rename/label.rs
-2022/12/29 | 28 | support/texlab/src/parser/test_data/latex/include/package_include_multiple.txt
-2022/12/29 | 28 | support/texlab/src/parser/test_data/latex/include/biblatex_include_simple.txt
-2022/12/29 | 28 | support/texlab/src/parser/test_data/latex/group/equation_missing_end.txt
-2022/12/29 | 28 | support/texlab/src/parser/test_data/latex/graphics_path.txt
-2022/12/29 | 28 | support/texlab/src/parser/test_data/latex/equation_missing_begin.txt
-2022/12/29 | 2893 | support/texlab/src/tests/text_document/definition.rs
-2022/12/29 | 2875 | support/texlab/src/lib.rs
-2022/12/29 | 283 | support/texlab/src/features/completion/begin_snippet.rs
-2022/12/29 | 282 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@citation__citation_empty.txt.snap
-2022/12/29 | 27 | support/texlab/src/parser/test_data/latex/structure/structure_invalid_nesting.txt
-2022/12/29 | 27 | support/texlab/src/parser/test_data/latex/include/verbatim_include_simple.txt
-2022/12/29 | 27 | support/texlab/src/parser/test_data/latex/caption/caption_default.txt
-2022/12/29 | 2734 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__label.snap
-2022/12/29 | 2721 | support/texshop/texshop510.html
-2022/12/29 | 271 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__did_change_configuration__invalid_configuration.snap
-2022/12/29 | 271 | support/texlab/src/parser/test_data/latex/issue_745.txt
-2022/12/29 | 26 | support/texlab/src/parser/test_data/latex/theorem_definition/theorem_definition_name_with_description_and_counter.txt
-2022/12/29 | 26 | support/texlab/src/parser/test_data/latex/command_definition/math_operator_no_impl.txt
-2022/12/29 | 26 | support/texlab/src/parser/test_data/latex/caption/caption_default_error.txt
-2022/12/29 | 2648 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__enumerate_nested.snap
-2022/12/29 | 2641 | support/texlab/src/features/symbol/bibtex.rs
-2022/12/29 | 263833 | macros/luatex/latex/piton/piton-french.pdf
-2022/12/29 | 26341 | support/texlab/texlab.pdf
-2022/12/29 | 262 | support/texlab/src/features.rs
-2022/12/29 | 25 | support/texlab/src/parser/test_data/latex/glossary/glossary_entry_reference_options.txt
-2022/12/29 | 25 | support/texlab/src/parser/test_data/latex/color/color_set_definition_error3.txt
-2022/12/29 | 25 | support/texlab/src/parser/test_data/bibtex/preamble.txt
-2022/12/29 | 2586 | support/texlab/texlab.tex
-2022/12/29 | 25487 | support/texlab/src/features/completion/builder.rs
-2022/12/29 | 252 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@group__unmatched_brackets.txt.snap
-2022/12/29 | 2515 | support/texlab/src/parser/test_data/build_log/003.txt
-2022/12/29 | 250 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@group__unmatched_braces.txt.snap
-2022/12/29 | 24 | support/texlab/src/parser/test_data/latex/include/svg_include_simple.txt
-2022/12/29 | 2490 | support/texlab/src/citation/field/date.rs
-2022/12/29 | 2474 | support/texlab/src/distro/miktex.rs
-2022/12/29 | 246 | support/texlab/src/tests/issues.rs
-2022/12/29 | 2455 | support/texlab/src/parser/test_data/build_log/002.txt
-2022/12/29 | 2416 | support/texlab/src/server/dispatch.rs
-2022/12/29 | 23 | support/texlab/src/parser/test_data/latex/include/class_include_simple.txt
-2022/12/29 | 23 | support/texlab/src/parser/test_data/latex/command_definition/command_definition_simple.txt
-2022/12/29 | 23916 | support/texlab/CHANGELOG.md
-2022/12/29 | 230 | support/texlab/src/db.rs
-2022/12/29 | 22 | support/texlab/src/parser/test_data/latex/include/bibtex_include_simple.txt
-2022/12/29 | 22 | support/texlab/src/parser/test_data/latex/command_definition/command_definition_no_argc.txt
-2022/12/29 | 22 | support/texlab/src/parser/test_data/latex/caption/caption_minimal.txt
-2022/12/29 | 228 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@hello_world.txt.snap
-2022/12/29 | 2234 | support/texlab/Cargo.toml
-2022/12/29 | 2223 | support/texlab/src/tests/text_document/folding_range.rs
-2022/12/29 | 22224 | support/texlab/src/citation/driver.rs
-2022/12/29 | 220 | support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@comment.txt.snap
-2022/12/29 | 2205 | support/texlab/src/features/rename/entry.rs
-2022/12/29 | 21 | support/texlab/src/parser/test_data/latex/theorem_definition/theorem_definition_name_with_description.txt
-2022/12/29 | 21 | support/texlab/src/parser/test_data/latex/theorem_definition/theorem_definition_name_with_counter.txt
-2022/12/29 | 21 | support/texlab/src/parser/test_data/latex/label/label_number.txt
-2022/12/29 | 21 | support/texlab/src/parser/test_data/latex/inline_double_dollar.txt
-2022/12/29 | 21 | support/texlab/src/parser/test_data/latex/caption/caption_minimal_error.txt
-2022/12/29 | 216 | support/texlab/src/tests/text_document.rs
-2022/12/29 | 21580 | systems/texlive/tlnet/archive/postnotes.source.r65385.tar.xz
-2022/12/29 | 2115 | support/texlab/src/features/formatting/latexindent.rs
-2022/12/29 | 210 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@generic_command_empty.txt.snap
-2022/12/29 | 20 | support/texlab/src/parser/test_data/latex/label/label_reference_range_simple.txt
-2022/12/29 | 20 | support/texlab/src/parser/test_data/latex/include/tikz_library_import_simple.txt
-2022/12/29 | 20 | support/texlab/src/parser/test_data/latex/include/package_include_simple.txt
-2022/12/29 | 20 | support/texlab/src/parser/test_data/latex/include/latex_input_path_brackets.txt
-2022/12/29 | 20 | support/texlab/src/parser/test_data/latex/include/inkscape_include_simple.txt
-2022/12/29 | 20 | support/texlab/src/parser/test_data/latex/citation/citation_prenote_postnote.txt
-2022/12/29 | 209 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@generic_command_escape.txt.snap
-2022/12/29 | 2065 | support/texlab/src/features/folding.rs
-2022/12/29 | 2050 | support/texlab/src/tests/text_document/inlay_hint.rs
-2022/12/29 | 2049 | support/texlab/src/util/lang_data.rs
-2022/12/29 | 2008 | support/texlab/src/tests/text_document/rename.rs
-2022/12/29 | 1 | support/texlab/src/parser/test_data/latex/parameter_error.txt
-2022/12/29 | 19 | support/texlab/src/parser/test_data/latex/label/label_reference_range_error.txt
-2022/12/29 | 19 | support/texlab/src/parser/test_data/latex/label/label_definition_line_break.txt
-2022/12/29 | 19 | support/texlab/src/parser/test_data/latex/issue_789.txt
-2022/12/29 | 19 | support/texlab/src/parser/test_data/latex/inline.txt
-2022/12/29 | 19 | support/texlab/src/parser/test_data/latex/include/pgf_library_import_simple.txt
-2022/12/29 | 19 | support/texlab/src/parser/test_data/latex/glossary/acronym_reference_simple.txt
-2022/12/29 | 1955 | support/texlab/src/distro.rs
-2022/12/29 | 1917 | support/texlab/src/features/definition.rs
-2022/12/29 | 187 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_join_strings.snap
-2022/12/29 | 1865 | support/texlab/src/main.rs
-2022/12/29 | 1844 | support/texlab/src/features/rename.rs
-2022/12/29 | 183 | support/texlab/CONTRIBUTING.md
-2022/12/29 | 1836 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__theorem_nested.snap
-2022/12/29 | 1816 | support/texlab/src/distro/file_name_db.rs
-2022/12/29 | 1806 | support/texlab/src/features/reference/entry.rs
-2022/12/29 | 17 | support/texlab/src/parser/test_data/latex/include/latex_include_simple.txt
-2022/12/29 | 17 | support/texlab/src/parser/test_data/latex/include/latex_include_equality_sign.txt
-2022/12/29 | 17 | support/texlab/src/parser/test_data/latex/include/import_simple.txt
-2022/12/29 | 17 | support/texlab/src/parser/test_data/latex/command_definition/command_definition_no_impl.txt
-2022/12/29 | 17987 | support/texlab/src/parser/latex/lexer.rs
-2022/12/29 | 1760 | support/texlab/src/citation/output.rs
-2022/12/29 | 1752 | support/texlab/src/features/completion/argument.rs
-2022/12/29 | 1744 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@structure__structure_nested.txt.snap
-2022/12/29 | 173 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_command.snap
-2022/12/29 | 173 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@parameter_error.txt.snap
-2022/12/29 | 171 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_preamble.snap
-2022/12/29 | 1710 | support/texlab/src/features/completion/citation.rs
-2022/12/29 | 1709 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__inlay_hint__label_definition.snap
-2022/12/29 | 1702 | support/texlab/src/features/completion.rs
-2022/12/29 | 16 | support/texlab/src/parser/test_data/latex/theorem_definition/theorem_definition_only_name.txt
-2022/12/29 | 16 | support/texlab/src/parser/test_data/latex/include/class_include_empty.txt
-2022/12/29 | 16 | support/texlab/src/parser/test_data/latex/command_definition/command_definition_no_impl_error.txt
-2022/12/29 | 16999 | support/texlab/src/syntax/latex/cst.rs
-2022/12/29 | 168 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@parameter.txt.snap
-2022/12/29 | 1668 | support/texlab/src/features/build/progress.rs
-2022/12/29 | 1658 | support/texlab/src/parser/snapshots/texlab__parser__build_log__tests__parse@006.txt.snap
-2022/12/29 | 163 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_trailing_comma.snap
-2022/12/29 | 1634 | support/texlab/src/tests/text_document/document_highlight.rs
-2022/12/29 | 1631 | support/texlab/src/citation/field/author.rs
-2022/12/29 | 162 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_insert_braces.snap
-2022/12/29 | 1620 | systems/texlive/tlnet/archive/luacomplex.r65388.tar.xz
-2022/12/29 | 161 | systems/mac/mactex/mactex-MacTeXtras-20221229.zip.sha512
-2022/12/29 | 1612 | systems/mac/mactex/Licenses.txt
-2022/12/29 | 15 | support/texlab/src/parser/test_data/latex/label/label_reference_range_incomplete.txt
-2022/12/29 | 15 | support/texlab/src/parser/test_data/latex/color/color_set_definition_error4.txt
-2022/12/29 | 15 | support/texlab/src/parser/test_data/latex/citation/citation_prenote.txt
-2022/12/29 | 15 | support/texlab/src/parser/test_data/latex/citation/citation_multiple_keys.txt
-2022/12/29 | 1593 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__enumerate_flat.snap
-2022/12/29 | 1572853 | macros/latex/contrib/bookcover/bookcover.pdf
-2022/12/29 | 1567 | support/texlab/src/features/completion/import.rs
-2022/12/29 | 1542 | support/texlab/src/tests/text_document/document_link.rs
-2022/12/29 | 1519 | support/texlab/src/db/parse.rs
-2022/12/29 | 14 | support/texlab/src/parser/test_data/latex/label/label_reference_multiple.txt
-2022/12/29 | 14 | support/texlab/src/parser/test_data/latex/generic_command_args.txt
-2022/12/29 | 149 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_string.snap
-2022/12/29 | 1478 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__section_nested.snap
-2022/12/29 | 147517 | macros/luatex/latex/luagcd/luagcd.pdf
-2022/12/29 | 1462 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@glossary__acronym_declaration.txt.snap
-2022/12/29 | 145 | systems/mac/mactex/MacTeXtras.zip.sha512
-2022/12/29 | 1430 | macros/luatex/latex/piton/piton.ins
-2022/12/29 | 1428 | support/texlab/src/citation/snapshots/texlab__citation__tests__mvbook_nietzsche_1988.snap
-2022/12/29 | 1423 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__import_class_open_brace.snap
-2022/12/29 | 1418 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__import_class_closed_brace.snap
-2022/12/29 | 1411 | support/texlab/src/citation/snapshots/texlab__citation__tests__book_averroes_1998.snap
-2022/12/29 | 1405 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__import_package_closed_brace.snap
-2022/12/29 | 1404 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__import_package_open_brace.snap
-2022/12/29 | 14009 | support/texlab/src/tests/text_document/completion.rs
-2022/12/29 | 14005 | support/texlab/src/features/symbol/latex.rs
-2022/12/29 | 13 | support/texlab/src/parser/test_data/latex/include/package_include_empty.txt
-2022/12/29 | 13 | support/texlab/src/parser/test_data/latex/group/curly_group_simple.txt
-2022/12/29 | 13 | support/texlab/src/parser/test_data/latex/equation.txt
-2022/12/29 | 13 | support/texlab/src/parser/test_data/latex/color/color_reference_simple.txt
-2022/12/29 | 1397 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__float_nested.snap
-2022/12/29 | 138 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_parens.snap
-2022/12/29 | 1387 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__equation_nested.snap
-2022/12/29 | 1385 | support/texlab/src/citation/field/number.rs
-2022/12/29 | 1377 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__project_resolution.snap
-2022/12/29 | 1367 | support/texlab/src/features/reference/string.rs
-2022/12/29 | 136537 | macros/luatex/latex/luagcd.zip
-2022/12/29 | 1356 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@glossary__acronym_definition_options.txt.snap
-2022/12/29 | 13353 | support/texlab/src/parser/test_data/build_log/005.txt
-2022/12/29 | 1330 | support/texlab/src/citation/snapshots/texlab__citation__tests__article_blom_2021.snap
-2022/12/29 | 1326 | support/texlab/src/features/definition/command.rs
-2022/12/29 | 1322 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__field_entry_two_fields_name_closed.snap
-2022/12/29 | 1321 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__field_entry_two_fields_name_open.snap
-2022/12/29 | 1314 | support/texlab/src/citation/snapshots/texlab__citation__tests__article_kastenholz_2006.snap
-2022/12/29 | 1312 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__theorem_flat.snap
-2022/12/29 | 12 | support/texlab/src/tests/workspace.rs
-2022/12/29 | 12 | support/texlab/src/parser/test_data/latex/hello_world.txt
-2022/12/29 | 12 | support/texlab/src/parser/test_data/latex/group/curly_group_missing_end.txt
-2022/12/29 | 12 | support/texlab/src/parser/test_data/latex/citation/citation_redundant_comma.txt
-2022/12/29 | 1299 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@environment__environment_nested_missing_braces.txt.snap
-2022/12/29 | 1296 | support/texlab/src/features/rename/command.rs
-2022/12/29 | 1290 | support/texlab/src/tests/workspace/snapshots/texlab__tests__workspace__symbol__filter_type_section.snap
-2022/12/29 | 1281 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__field_entry_field_name.snap
-2022/12/29 | 1280 | support/texlab/src/util/line_index_ext.rs
-2022/12/29 | 1270 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@structure__structure_enum_item.txt.snap
-2022/12/29 | 125 | support/texlab/src/parser.rs
-2022/12/29 | 1258 | support/texlab/src/features/definition/label.rs
-2022/12/29 | 1257 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__component_command_bibtex.snap
-2022/12/29 | 1256 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__field_empty_entry_closed.snap
-2022/12/29 | 1255 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__field_empty_entry_open.snap
-2022/12/29 | 1240 | macros/luatex/latex/luagcd/README.txt
-2022/12/29 | 1239 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__component_command_simple_package.snap
-2022/12/29 | 1236 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__begin_environment_without_snippet_support.snap
-2022/12/29 | 1236 | support/texlab/src/features/completion/color_model.rs
-2022/12/29 | 1223 | support/texlab/src/citation/snapshots/texlab__citation__tests__book_knuth_1984.snap
-2022/12/29 | 1221 | support/texlab/src/features/completion/glossary_ref.rs
-2022/12/29 | 1215 | support/texlab/src/features/definition/entry.rs
-2022/12/29 | 1212 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__argument_open_brace.snap
-2022/12/29 | 1207 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__entry_type_at_empty.snap
-2022/12/29 | 1202 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__argument_empty.snap
-2022/12/29 | 11 | support/texlab/src/parser/test_data/latex/label/label_reference_equation.txt
-2022/12/29 | 11 | support/texlab/src/parser/test_data/latex/label/label_definition_simple.txt
-2022/12/29 | 11 | support/texlab/src/parser/test_data/latex/include/import_incomplete.txt
-2022/12/29 | 1197 | support/texlab/src/features/hover.rs
-2022/12/29 | 119792 | macros/luatex/latex/piton/piton.dtx
-2022/12/29 | 1192 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@command_definition__command_definition_with_begin.txt.snap
-2022/12/29 | 11874 | support/texlab/src/citation/tests.rs
-2022/12/29 | 1186 | support/texlab/src/features/inlay_hint.rs
-2022/12/29 | 1176 | support/texlab/src/citation/snapshots/texlab__citation__tests__inproceedings_combi_2004.snap
-2022/12/29 | 1175 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__component_environment_simple_end.snap
-2022/12/29 | 1173 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__component_command_simple.snap
-2022/12/29 | 1158 | support/texlab/src/features/hover/string_ref.rs
-2022/12/29 | 115677343 | macros/context/latest/cont-tmf.zip
-2022/12/29 | 1153 | support/texlab/src/features/reference.rs
-2022/12/29 | 114736 | systems/texlive/tlnet/archive/luacomplex.doc.r65388.tar.xz
-2022/12/29 | 11459 | support/texlab/src/parser/bibtex.rs
-2022/12/29 | 1143 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@environment__environment_nested.txt.snap
-2022/12/29 | 1122 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@environment__environment_definition.txt.snap
-2022/12/29 | 1120 | systems/texlive/tlnet/archive/ibrackets.r65383.tar.xz
-2022/12/29 | 1113 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__tikz_library_closed_brace.snap
-2022/12/29 | 1112 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__tikz_library_open_brace.snap
-2022/12/29 | 1112 | support/texlab/src/parser/test_data/bibtex/samples/nietzsche_1998.txt
-2022/12/29 | 1103 | support/texlab/src/tests/snapshots/texlab__tests__issues__issue_707.snap
-2022/12/29 | 11001 | support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__nietzsche_1998.txt.snap
-2022/12/29 | 10 | support/texlab/src/parser/test_data/latex/citation/citation_star.txt
-2022/12/29 | 10 | support/texlab/src/parser/test_data/latex/citation/citation_simple.txt
-2022/12/29 | 1082 | support/texlab/src/features/highlight/label.rs
-2022/12/29 | 1064 | support/texlab/src/citation/snapshots/texlab__citation__tests__article_aksin_2006.snap
-2022/12/29 | 1062 | support/texlab/src/citation/snapshots/texlab__citation__tests__article_jain_1999.snap
-2022/12/29 | 1061 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__package_include_options.txt.snap
-2022/12/29 | 1058 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__class_include_options.txt.snap
-2022/12/29 | 1051 | support/texlab/src/citation/snapshots/texlab__citation__tests__inproceedings_erwin_2007.snap
-2022/12/29 | 1044 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__color_word.snap
-2022/12/29 | 1038 | support/texlab/src/features/link.rs
-2022/12/29 | 10366 | support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__averroes_1998.txt.snap
-2022/12/29 | 1035 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__color_simple.snap
-2022/12/29 | 1034 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__color_open_brace.snap
-2022/12/29 | 1027 | support/texlab/src/features/reference/label.rs
-2022/12/29 | 1019 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__color_model_definition_simple.snap
-2022/12/29 | 1018 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__color_model_definition_open_brace.snap
-2022/12/29 | 1017 | support/texlab/src/features/formatting.rs
-2022/12/29 | 1015 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__color_model_definition_set_simple.snap
-2022/12/29 | 1014 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__color_model_definition_set_open_brace.snap
-2022/12/29 | 1011 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__float_flat.snap
-2022/12/29 | 1008 | support/texlab/src/parser/test_data/bibtex/samples/averroes_1998.txt
-2022/12/29 | 1005 | support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__equation_flat.snap
-2022/12/29 | 1003 | support/texlab/src/tests/text_document/did_change_configuration.rs
diff --git a/biblio/ctan-bibdata/ctan.bib b/biblio/ctan-bibdata/ctan.bib
index 2ac9a74d80..e1679680a2 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 05-01-2023, 02:00:15
+%% created at 06-01-2023, 02:01:50
%%
%% This file is provided under the terms of the LPPL v1.3 or
@@ -16399,8 +16399,8 @@
title = {The \texttt{curve2e} package},
subtitle = {Extensions for package pict2e},
author = {Claudio Beccari},
- date = {2021-01-12},
- version = {2.2.15},
+ date = {2023-01-05},
+ version = {2.2.22},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/latex/contrib/curve2e},
url = {https://ctan.org/pkg/curve2e},
@@ -20923,7 +20923,7 @@
title = {The \texttt{einfart} package},
subtitle = {Write your articles in a simple and clear way},
author = {Jinwen XU},
- date = {2023-01-02},
+ date = {2023-01-05},
version = {},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/unicodetex/latex/einfart},
@@ -35069,6 +35069,17 @@
url = {https://ctan.org/pkg/jvlisting},
}
+@manual{ctan-jwjournal,
+ title = {The \texttt{jwjournal} package},
+ subtitle = {A personal class for writing journals},
+ author = {Jinwen XU},
+ date = {2023-01-05},
+ version = {},
+ license = {lppl1.3c},
+ mirror = {https://mirror.ctan.org/macros/latex/contrib/jwjournal},
+ url = {https://ctan.org/pkg/jwjournal},
+}
+
@manual{ctan-kalendarium,
title = {The \texttt{kalendarium} package},
subtitle = {Print dates according to the classical Latin calendar},
@@ -40902,8 +40913,8 @@
title = {The \texttt{luakeys} package},
subtitle = {A Lua module for parsing key-value options},
author = {Josef Friedrich},
- date = {2022-12-23},
- version = {0.11.0},
+ date = {2023-01-05},
+ version = {0.12.0},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/luatex/generic/luakeys},
url = {https://ctan.org/pkg/luakeys},
@@ -61631,7 +61642,7 @@
title = {The \texttt{simplivre} package},
subtitle = {Write your books in a simple and clear way},
author = {Jinwen XU},
- date = {2023-01-02},
+ date = {2023-01-05},
version = {},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/unicodetex/latex/simplivre},
@@ -72230,7 +72241,7 @@
title = {The \texttt{unimath-plain-xetex} package},
subtitle = {OpenType math support in (plain) XeTeX},
author = {Tingxuan Zhang},
- date = {2023-01-03},
+ date = {2023-01-05},
version = {0.2},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/xetex/plain/unimath-plain-xetex},
diff --git a/biblio/ctan-bibdata/ctan.pdf b/biblio/ctan-bibdata/ctan.pdf
index 893bcda78f..16c682cf0d 100644
--- a/biblio/ctan-bibdata/ctan.pdf
+++ b/biblio/ctan-bibdata/ctan.pdf
Binary files differ
diff --git a/macros/latex/contrib/curve2e/README.txt b/macros/latex/contrib/curve2e/README.txt
index 4fc8d958be..0cf4cac557 100644
--- a/macros/latex/contrib/curve2e/README.txt
+++ b/macros/latex/contrib/curve2e/README.txt
@@ -1,11 +1,11 @@
%%
%% This is file `README.txt',
%%
-%% Copyright (C) 2005--2021 Claudio Beccari all rights reserved.
+%% Copyright (C) 2005--2023 Claudio Beccari all rights reserved.
%% License information appended
%%
File README.txt for package curve2e
- [2021-01-12 v.2.2.15 Extension package for pict2e]
+ [2023-01-01 v.2.2.22 Extension package for pict2e]
The package bundle curve2e is composed of the following files
curve2e.dtx
@@ -35,11 +35,11 @@ pdflatex on curve2e.dtx.
The curve2e-manual file contains the user manual; in this way the long
preliminary descriptive part has been transferred to a shorter dedicated
-file, and the “normal” user should have enough information to use the
+file, where the “normal” user should find enough information to use the
package. The curve2e.pdf file, extracted from the .dtx one, contains the
-code documentation and is intended for the developers, or for the curious
+code documentation and is intended for developers, or for curious
advanced users. For what concerns curve2e-v161.sty, it is a previous
-roll back version of this package; see below why the older version might
+fall back version of this package; see below why the older version might
become necessary to the end user.
README.txt, this file, contains general information.
@@ -58,21 +58,21 @@ the slopes at such nodes; closed paths of any shape can be filled with
color; all coordinates are treated as ordered pairs, i.e. 'complex
numbers'; coordinates may be expressed also in polar form. Coordinates
may be specified with macros, so that editing any drawing is rendered
-much simpler: any point specified with a macro is modified only once in
-its macro definition.
+much simpler: any point specified with a macro may be modified only
+once in its macro definition.
Some of these features have been incorporated in the 2009 version of
pict2e; therefore this package avoids any modification to the original
-pict2e commands. In any case the version of curve2e is compatible with
+pict2e commands. In any case this version of curve2e is compatible with
later versions of pict2e; see below.
-Curve2e now accepts polar coordinates in addition to the usual cartesian
-ones; several macros have been upgraded; a new macro for tracing cubic
-Bezier splines with their control nodes specified in polar form is
-available. The same applies to quadratic Bezier splines. The \multiput
-command has been completely modified in a backwards compatible way; the
-new version allows to manipulate the increment components in a
-configurable way. A new xmultiput command has been defined that is more
-configurable than the original one; both commands multiput and xmultiput
+As said above, curve2e now accepts polar coordinates in addition to the
+usual cartesian ones; several macros have been upgraded; a new macro for
+tracing cubic Bezier splines with their control nodes specified in polar
+form is available. The same applies to quadratic Bezier splines. The
+\multiput command has been completely modified in a backwards compatible
+way; the new version allows to manipulate the increment components in a
+configurable way. A new \xmultiput command has been defined that is more
+configurable than the original one; both commands \multiput and \xmultiput
are backwards compatible with the original picture environment definition.
Curve2e solves a conflict with package eso-pic.
@@ -80,7 +80,14 @@ Curve2e solves a conflict with package eso-pic.
This version of curve2e is almost fully compatible with pict2e dated
2014/01/12 version 0.2z and later; as of today the last pct2e revision
is version 0.4b dated 2020, and curve2e has been tested also with this
-revision confirming that it performs as expected.
+revision confirming that it performs as expected.
+Pay attention, though, that in 2020 also the \LaTeX kernel part dealing
+with the picture environment has been upgraded; since then, the picture
+environment opening and internal commands can handle explicit dimensions
+and accepts dimensional expressions as those that can be processed by the
+eTeX command \dimexpr. Such functionalities should be avoided when using
+curve2e; at least when dealing with coordinates that curve2e assumes to
+be real possibly floating point numbers, not dimensions.
If you specify:
@@ -94,7 +101,7 @@ made available to the LaTeX developers by mid October 2018. Should the
user have an older or a basic/incomplete installation of the TeX system,
such L3 functions might not be available. This is why this
package checks the presence of the developer interface; in case
-such interface is not available it rolls back to the previous version
+such interface is not available it falls back to the previous version
renamed curve2e-v161.sty, which is part of this bundle; this roll-back
file name must not be modified in any way. The compatibility mentioned
above implies that the user macros remain the same, but their
@@ -102,7 +109,7 @@ implementation requires the L3 interface. Some macros and environments
rely totally on the xfp package functionalities, but legacy documents
source files should compile correctly.
-The package has the LPPL status of maintained.
+This package has the LPPL status of maintained.
According to the LPPL licence, you are entitled to modify this package,
as long as you fulfil the few conditions set forth by the Licence.
@@ -121,16 +128,5 @@ Claudio Beccari
claudio dot beccari at gmail dot com
-%%
-%% Distributable under the LaTeX Project Public License,
-%% version 1.3c or higher (your choice). The latest version of
-%% this license is at: http://www.latex-project.org/lppl.txt
-%%
-%% This work is "maintained"
-%%
-%% This work consists of files curve2e.dtx and curve2e-manual.tex,
-%% and the derived files curve2e.sty and curve2e.pdf, curve2e-manual.pdf,
-%% plus the auxiliary files README.txt and curve2e-v161.sty.
-%%
%%
%% End of file `README.txt'.
diff --git a/macros/latex/contrib/curve2e/curve2e-manual.pdf b/macros/latex/contrib/curve2e/curve2e-manual.pdf
index 9b7de7d266..8ad904a665 100644
--- a/macros/latex/contrib/curve2e/curve2e-manual.pdf
+++ b/macros/latex/contrib/curve2e/curve2e-manual.pdf
Binary files differ
diff --git a/macros/latex/contrib/curve2e/curve2e-manual.tex b/macros/latex/contrib/curve2e/curve2e-manual.tex
index e53535f1b9..5b3c08c697 100644
--- a/macros/latex/contrib/curve2e/curve2e-manual.tex
+++ b/macros/latex/contrib/curve2e/curve2e-manual.tex
@@ -1,6 +1,6 @@
% !TEX TS-program = pdflatex
% !TEX encoding = UTF-8 Unicode
-\documentclass[a4paper]{article}
+\documentclass[a4paper]{article}\errorcontextlines=100
\hfuzz 10pt
\usepackage[utf8]{inputenc}
\usepackage{lmodern,textcomp}
@@ -68,11 +68,13 @@
% All definitions and assignments are local
% #1 := Latex font size command or \setfontsize{<size>}
% %2 := \textwidth percentage for the code box; the complement, less the
-% column gap for the result dedicata al codice
+% column gap for the compiled result
+%
% Syntax: \begin{Esempio}[<size command>](<code box percentage width>)
+%
% Warning: No extra space is put before and/or after the display; this
% environment is assumed to be used within a figure environment
-% that already provides its on vertical spaces. Should this
+% that already provides its own vertical spaces. Should this
% environment be used between paragraphs, the user should manually
% provide a convenient amount of space above and below it.
% Remember: This environment sets itself in vertical mode
@@ -121,21 +123,22 @@
\tableofcontents
\end{multicols}
-\begin{abstract}
+\begin{abstract}\setfontsize{9.5}
This file contains the user manual of the \pack{curve2e} extension package to the \pack{pict2e} bundle; the latter was described by Lamport himself in the 1994 second edition of his \LaTeX\ handbook.
Please take notice that on April 2011 a package \pack{pict2e} upgraded version has been released that incorporates some of the commands defined in early versions of this package \pack{curve2e}; apparently there are no conflicts, because this package contains only the advanced features that extend the above package.
-Since this extension redefines some commands and introduces some more drawing facilities (that allow to draw circular arcs and arbitrary curves with the minimum of user intervention) the user needs a user manual that contains several actual examples. The software available to show the code and its result after compilation is incompatible with the usual \LaTeX\ |ltxdoc| class for code documentation, therefore a separate user manual has been made available. If the user wants to explore the \pack{curve2e} code and its documentation s/he has available the |curve2e.pdf| file.
+Since this extension redefines some commands and introduces some more drawing facilities (that allow to draw circular arcs and arbitrary curves with the minimum of user intervention) the user needs a user manual that contains several actual examples; this auxiliary manual is contained in file |curve2e-manual.pdf|. The software available to show the drawing code and its result after compilation is incompatible with the usual
+\LaTeX\ |ltxdoc| class for code documentation, therefore a separate user manual has been made available. If the user wants to explore the \pack{curve2e} code and its documentation s/he has available the |curve2e.pdf| file. Either file is readable by entering in a terminal window the command |texdoc curve2e-manual| or |texdoc curve2e.pdf|; please do not forget the extension when you want to read the code documentation.
\end{abstract}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Installation}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-If \TeX\ system was installed with a \TeX~Live or a MiK\TeX\ complete and updated distribution this packageis already installed; in order to verify open a terminal or command prompt window and use it to enter the \texttt{texdoc curve2e-manual}; as soon as the command is executed a screen window should open displaying this manual. If this does not happen, either you misspelt the command (it happens more often than not), or your installation is not complete and updated.
+If \TeX\ system was installed with a \TeX~Live or a MiK\TeX\ complete and updated distribution this package is already installed; in order to verify open a terminal or command prompt window and use it to enter the \texttt{texdoc curve2e-manual}; as soon as the command is executed a screen window should open displaying this manual. If this does not happen, either you misspelt the command (it happens more often than not), or your installation is not complete and updated.
I suggest you to use your computer installation facilities to install this bundle. Otherwise, download this curve2e.zip package from one of the CTAN (Comprehensive TeX Archive Network) archives, to your downloads folder.
-Before doing anything else verify if you have a personal \texttt{texmf} tree; if not, create one reading you distribution instruction; let us assume that your personal |texmf| archive is in |HOME/texmf| (on Windows change the slash with a backslash) and |HOME| is a path starting from the root of you hard disk and going though several other folders. On Windows~10 it might be |C:\Users\YourName|; on Linux it might simply be |~|; on Mac it would be |~/\Library|, but sometimes the |HOME| might be different, especially o Windows platforms. Create the following subfolders:
+Before doing anything else verify if you have a \emph{personal} \texttt{texmf} tree; if not, create one reading you distribution instruction; let us assume that your personal |texmf| archive is in |HOME/texmf| (on Windows change the slash with a backslash) and |HOME| is a path starting from the root of you hard disk and going though several other folders. On Windows~10 it might be |C:\Users\YourName|; on Linux it might simply be |~|; on Mac it would be |~/\Library|, but sometimes the |HOME| might be different, especially on Windows platforms. Create the following subfolders:
\begin{enumerate}[noitemsep]
\item |HOME/texmf/source/latex/curve2e/|
\item |HOME/texmf/doc/latex/curve2e/|
@@ -150,7 +153,7 @@ Clear the |.../source/latex/curve2e/| folder from the auxiliary files, all those
If your \TeX\ system is correctly set up, your files in your personal tree should be immediately usable; probably you have to create the file-name database with MiK\TeX; in this case read the documentation of your MiK\TeX\ installation to discover how to~do~it.
-Remember to delete all these subfolders if you decide to install a complete updated version of your favourite distribution, and you'd better keep it updated approximately once every 7 or 10 days. This is much simpler than to struggle with these manual operations.
+Remember to delete all these subfolders if you decide to install a complete updated version of your favourite distribution, and you'd better keep it updated approximately once every 7 or 10 days. This is much simpler than to struggle with these manual operations.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Package \pack{pict2e} and this extension \pack{curve2e}}
@@ -271,14 +274,15 @@ Remember to delete all these subfolders if you decide to install a complete upda
user can chose between square or rounded caps; the default is set to
rounded caps; now this feature is directly available with \pack{pict2e}.
%
- \item Commands for specifying the way two lines or curves join to one
- another.
+ \item Commands for specifying the way two straight or curves lines
+ join to one another.
%
\item Originally the |\line| macro was redefined so as to allow large
(up to three digits) integer direction coefficients, but maintaining
the same syntax as in the original \texttt{picture} environment; now
\pack{pict2e} removes the integer number limitations and allows
- fractional values, initially implemented by \pack{curve2e}.
+ fractional values, initially implemented by \pack{curve2e}; direction
+ coefficients may be specified in polar form.
%
\item A new macro |\Line| was originally defined by \pack{curve2e} so
as to avoid the need to specify the horizontal projection of inclined
@@ -318,8 +322,9 @@ Remember to delete all these subfolders if you decide to install a complete upda
analogy with |\LIne|; |\VECTOR| joins two specified points (without
using the |\put| command) with the arrow pointing to the second point.
|\VVECTOR| may be available if used with a sufficiently recent \LaTeX\
- kernel version; is draws a vector, with arrow tips at both ends,
- between two given points
+ kernel version; is draws a vector between two given points, with arrow
+ tips at both ends.
+
%
\item A new macro |\polyline| for drawing polygonal lines is defined
that accepts from two vertices up to an arbitrary (reasonably limited)
@@ -341,13 +346,14 @@ Remember to delete all these subfolders if you decide to install a complete upda
amplitude is specified in sexagesimal degrees, not in radians; a
similar functionality is now achieved with the |\arc| macro of
\pack{pict2e}, which provides also the starred version |\arc*| that
- fills up with the current color the sector generated by circular arc.
+ fills up with the current color the sector generated by a circular arc.
It must be noticed that the syntax is slightly different, so that it's
reasonable that these commands, in spite of producing identical arcs,
might be more comfortable with this or that syntax.
%
- \item Two new macros |\VectorArc| and |\VectorARC| are defined in order
- to draw circular arcs with an arrow at one or both ends.
+ \item Two new macros |\VectorArc| and |\VectorARC| (alias |\VVectorArc|)
+ are defined in order to draw circular arcs with an arrow at one or both
+ ends.
%
\item A new macro |\Curve| is defined so as to draw arbitrary curved
lines by means of cubic Bézier splines; the |\Curve| macro requires
@@ -355,7 +361,7 @@ Remember to delete all these subfolders if you decide to install a complete upda
node. The starred version fills up the interior of the curve with the
current color.
%
- \item the above |\Curve| macro is a recursive macro that can draw an
+ \item The above |\Curve| macro is a recursive macro that can draw an
unlimited (reasonably limited) number of connected Bézier spline arcs
with% continuous tangents except for cusps; these arcs require only the
specification of the tangent direction at the interpolation nodes.
@@ -395,7 +401,7 @@ Remember to delete all these subfolders if you decide to install a complete upda
believed to be more efficient than those defined by the \texttt{trig}
package; in any case the macro names were sufficiently different to
accommodate both definition sets in the same \LaTeX\ run. With the
- progress of the \LaTeX\,3 language, package \pack{xfp} has become
+ progress of the \LaTeX3 language, package \pack{xfp} has become
available, by which any sort of calculations can be done with floating
point decimal numbers; therefore the most common algebraic, irrational
and transcendental functions can be computed in the background with the
@@ -431,13 +437,13 @@ Remember to delete all these subfolders if you decide to install a complete upda
|color| and \pack{pict2e}; it passes to the latter one any possible
option that it can receive; actually the only options that make sense
for \pack{pict2e} are those concerning the arrow tip shapes, either
- \LaTeX\ or PostScript styled, because it is assumed that if this
- package is used, the original \LaTeX\ commands are of no interest: see
- the \pack{pict2e} documentation in order to find the correct options
+ \LaTeX\ (default) or PostScript styled, because it is assumed that if
+ this package is used, the original \LaTeX\ commands are of no interest:
+ see the \pack{pict2e} documentation in order to find the correct options
\pack{pict2e} can receive. If the user wants to use the \pack{xcolor}
package, it has to load it \emph{before} \pack{curve2e}.
%%
-\item Since they are used very much in the following examples, we recall some commands to label certain drawing elements, such as points, lines, arcs, and similar lines, ad to insert legends in some figures. They are \cs{legenda}, \cs{Zbox} and \cs{Pbox}; their syntax is the following:
+\item Since they are used very much in the following examples, we recall some commands to label certain drawing elements, such as points, lines, arcs, and similar lines, and to insert legends in some figures. They are \cs{legenda}, \cs{Zbox} and \cs{Pbox}; their syntax is the following:
\begin{flushleft}\ttfamily\obeylines
|\legenda|\parg{coordinates}\marg{formula}
|\Zbox|\parg{coordinates}\oarg{position}\marg{formula}\oarg{dot diameter}
@@ -496,7 +502,7 @@ They are described in any up to date documentation of package \pack{curve2e}.
$(3+25,4+15)$; the command |\segment(3,4)(28,19)| achieves the same
result without the need of using the |\put| command. Therefore |\LIne|
is just for internal usage, rather than a user command. Now
- \pack{curve2e} has available also the “arc vectors” with the arrow tip
+ \pack{curve2e} has available also the “arc vectors” with the arrow tips
at one or at both ends.
The same applies to the vector commands |\Vector| and |\VECTOR| and
@@ -716,16 +722,17 @@ They are described in any up to date documentation of package \pack{curve2e}.
\item Arcs can be drawn as simple circular arcs, or with one or two
arrows at their ends (curved vectors); the syntax is:
\begin{flushleft}
- \cs{Arc}\parg{center}\parg{starting point}\marg{angle}\\
+ \cs{Arc}\parg{center}\parg{starting point}\marg{angle}\\
\cs{VectorArc}\parg{center}\parg{starting point}\marg{angle}\\
\cs{VectorARC}\parg{center}\parg{starting point}\marg{angle}\\
+\cs{VVectorArc}\parg{center}\parg{starting point}\marg{angle}\\
\end{flushleft}
If the angle is specified numerically it must be enclosed in braces,
while if it is specified with a control sequence the braces (curly
brackets) are not necessary. The above macro |\Arc| draws a simple
circular arc without arrows; |\VectorArc| draws an arc with an arrow
- tip at the ending point; |\VectorARC| draws an arc with arrow tips at
- both ends; see figure~\ref{fig:arcs}.
+ tip at the ending point; |\VectorARC| (alias |\VVectorArc|) draws an
+ arc with arrow tips at both ends; see figure~\ref{fig:arcs}.
\begin{figure}
\begin{Esempio}[\small]%
\unitlength=0.5mm
@@ -736,15 +743,64 @@ They are described in any up to date documentation of package \pack{curve2e}.
\VectorArc(0,20)(15,10){60}
\put(20,20){\makebox(0,0)[l]{$60^\circ$}}
\VectorARC(60,20)(60,0){-180}
+ \VVectorArc(50,20)(60,20){90}
\end{picture}
\end{Esempio}
\caption{Arcs and curved vectors}\label{fig:arcs}
\end{figure}
%%
+ \item The available commands allow to create the drawings necessary to prove some geometrical theorems; for example let us prove the Pitagora's theorem. Figure~\ref{fig:pitagora} displays a right triangle with its hypothenuse laying horizontal; its vertices are labelled \textsf{A}, \textsf{B}, and \textsf{C}, being \textsf{A} the right angle vertex. The height relative to the hypothenuse intersects this side in point \textsf{H}, and divides the whole triangle \textsf{ABC}, in two similar smaller ones \textsf{AHC}, and\textsf{ABH}. Segments \textsf{CH}, and\textsf{HB}, add to the whole hypothenuse length. Figure~\ref{fig:pitagora} displays also the square \textsf{CBDE}, built on the hypothenuse and divided in two rectangles \textsf{CHFE}, and \textsf{HBDF}, where \textsf{HF} is the continuation of the height line.
+
+The lengths of the original right triangle sides are $a, b, c$ as marked on the figure; Point \textsf{H} divides the hypothenuse of length $c$ in two shorter segments of lengths $d, e$, respectively, as marked in the figure
+
+Since the three triangles are similar, we can set up the relationships between their sides:
+\begin{align*}
+d : a = a : c &\Longrightarrow d = a^2/c\\
+e : b = b : c &\Longrightarrow e = b^2/c
+\end{align*}
+
+Therefore rectangle \textsf{CHFE} area equals $ c\cdot d = c\cdot a^2/c = a^2$. Similarly rectangle \textsf{HBDF} area equals $ c\cdot e = c\cdot b^2/c = b^2$. The square built on the hypothenuse has an area equal to $c^2$; therefore it is
+\begin{equation*}
+c^2 = a^2 + b^2
+\end{equation*}
+which proves the Pitagora's theorem.
+
+\begin{figure}
+\centering
+\begin{Esempio}
+\unitlength=1mm
+\begin{picture}(70,80)(-10,-50)
+\AutoGrid
+\thicklines
+\polygon(0,0)(50,0)(18,24)
+\thinlines
+\polyline(0,0)(0,-50)(50,-50)(50,0)
+\Pbox(0,0)[r]{C}[0.75ex]
+\Pbox(18,0)[tr]{H}[0.75ex]
+\Pbox(50,0)[l]{B}[0.75ex]
+\Pbox(18,24)[b]{A}[0.75ex]
+\Pbox(0,-50)[br]{E}[0.75ex]
+\Pbox(50,-50)[bl]{D}[0.75ex]
+\Pbox(18,-50)[br]{F}[0.75ex]
+\Zbox(10,12)[br]{a}[0]
+\Zbox(33,12)[bl]{b}[0]
+\Zbox(25,0)[t]{c}[0]
+\Zbox(9,0)[b]{d}[0]
+\Zbox(30,0)[b]{e}[0]
+\Zbox(50,-25)[r]{c}[0]
+\Zbox(25,-50)[b]{c}[0]
+\Zbox(0,-25)[l]{c}[0]
+\Dashline(18,24)(18,-50){1.5}
+\end{picture}
+\end{Esempio}
+\caption{Geometrical construction to prove Pitagora's theorem}
+\label{fig:pitagora}
+\end{figure}
+
\item A multitude of commands have been defined in order to manage
complex numbers; actually complex numbers are represented as a comma
separated pair of fractional numbers; internally these macros use
- cartesian we use only the cartesian form, and output, unless
+ only the cartesian form, and output, unless
differently specified is also in cartesian form; but input can be in
polar form. They are used to address specific points in the drawing
plane, but also as operators so as to scale and rotate other objects.
@@ -808,7 +864,7 @@ They are described in any up to date documentation of package \pack{curve2e}.
with the current color.
\item \cs{CurveBetween} draws a single cubic Bézier spline between two
- given nodes and with two given directions vectors.
+ given nodes and with two given direction vectors.
\item \cs{CBezierBetween} draws a single cubic Bézier spline between
two given nodes, with two given direction versors along which the
@@ -823,7 +879,7 @@ with the current color.
%\def\y(#1){(13*cos(#1)-5*cos(2*#1)-2*cos(3*#1)-cos(4*#1))/16}
% Varrebbe a penda di provarle con curve2e
%
- \begin{figure}[!htp]
+ \begin{figure}[!htbp]
\begin{Esempio}[\small]%
\unitlength=8mm\relax
\begin{picture}(5,5)
@@ -874,7 +930,7 @@ with the current color.
algorithms are not used, the parameter value appears to mean the
opposite of tension.
A couple of comma separated tension values may be optionally used, they
- are separated with a semicolon form the direction vector,
+ are separated with a semicolon from the direction vector,
and they apply to the arc terminating with the last node; their
specification must precede any possible change of tangent according to
this syntax\footnote{The tension may be specified only for cubic
@@ -979,7 +1035,7 @@ with the current color.
shown in figure~\ref{fig:curva-due-punti}. Notice the effect of
changing the directions at both or a the end nodes of a single cubic
spline. The directions are conveniently expressed with unit vectors
- described by polar coordinates.
+ described by polar coordinates. The |\CurveBetween| macro is built on |\CbezierTp| ; this ltter file is very complicated to describe and its use is reserved to experienced users; its syntax is described in the code documentation file |cureve2e.pdf|; the reader is encouraged to examine it in case s/he is willing to use it.
\begin{figure}\centering\unitlength=0.004\textwidth
\begin{picture}(220,120)(-50,-20)
@@ -1056,8 +1112,8 @@ with the current color.
\CbezierBetween0,0And10,0 WithDirs45:1And-45:1UsingDists12And{1}
\end{picture}
\end{minipage}
-\caption{Comparison between similar arcs drawn with \cs{CurveBetween} (black)
- and \cs{CbezierTo} (red)}
+\caption{Comparison between similar arcs drawn with \cs{CurveBetween} with the default tension values (black)
+ and with several tension values specified (red)}
\label{fig:Cbezier}
\end{figure}
@@ -1069,7 +1125,7 @@ with the current color.
horizontal base line of the frame. Increasing the parameter value
to~4.5, the curved becomes taller and taller, until it wraps itself
displaying an evident loop. We would say that the value of ~2 is a
- reasonable maximum and increasing that value is just to
+ reasonable maximum one and that increasing that value is just to
obtain special effects.
\begin{figure}[!htb]\centering
@@ -1142,7 +1198,7 @@ with the current color.
\label{fig:sinewave}
\end{figure}
- In figure~\ref{fig:quadratic-arcs} some lines drawn are shown; they are
+ In figure~\ref{fig:quadratic-arcs} some lines are shown; they are
drawn with quadratic splines by means of the |\Qurve| macro. In the
left there are some open and closed curves inscribed within a square.
On the right a “real" circle is compared to a quadratic spline circle;
@@ -1225,14 +1281,14 @@ with the current color.
On page~\pageref{pag:multiput} we show the code for the figure shown
there. The red grid is nothing new, except that it displays the
traditional |\multiput| used in this code, shown in a previous example,
- produces exactly the same result. But the for “graphs” on the grid, it
- display an alignment of black dots along the diagonal of the grid
- (again traditional |\multiput| rendered with the new version);
- a number of blue dots along a parabola; another number of magenta
- dots alined along a half sine wave; a number of little green squares
- aligned along a $-15~\circ$ line starting from the center of the grid;
- notice the polar values that are used as polar relative coordinate
- increments.
+ produces exactly the same result. But for what concerns the four
+ “graphs” on the grid, it displays an alignment of black dots along the
+ diagonal of the grid (again traditional |\multiput| rendered with the
+ new version); a number of blue dots along a parabola; another number of
+ magenta coloured dots alined along a half sine wave; a number of little
+ green squares aligned along a $-15~\circ$ sloping line starting from
+ the center of the grid; notice the polar values that are used as polar
+ relative coordinate increments.
\noindent\begin{figure}[!htb]
\begin{minipage}{0.45\linewidth}
@@ -1287,8 +1343,8 @@ with the current color.
A new command |\xmultiput| (not available with the previous versions
of \pack{curve2e}) extended with respect to the original |\multiput| is
defined by using some L3 functions; in particular the cycling
- counter is accessible to the \LaTeX\ commands and it is stepped
- forward from~1 to the value specified in the proper command argument
+ counter is accessible to the \LaTeX\ commands and it is stepped
+ up from~1 to the value specified in the proper command argument
(in the original command it starts from that value and is stepped down
to zero). See the figure on page~\ref{pag:orologio} to inspect its
usage. It is important to notice that if the command|\rotatebox|
@@ -1338,12 +1394,12 @@ with the current color.
documented in the latter package. The syntax of such new commands
is the following
\begin{flushleft}\obeylines
- \cs{fptext}\marg{test}\marg{true}\marg{false}
- \cs{fpdowhile}\meta{test}\meta{operations to be repeated}
- \cs{fpwhiledo}\meta{test}\meta{operations to be repeated}
+ \cs{fptest}\marg{test}\marg{true}\marg{false}
+ \cs{fpdowhile}\marg{test}\marg{operations to be repeated}
+ \cs{fpwhiledo}\marg{test}\marg{operations to be repeated}
\end{flushleft}
The macro |\fptest| requires two further arguments that contain
- what to do if the \meta{test} is true, and what to do of the
+ what to do if the \meta{test} is true, and what to do if the
\meta{test} is false.
The \meta{test} is a logical expressions that connects math relation
expressions, even floating point ones, by means of \emph{logical
@@ -1436,7 +1492,7 @@ y = f_2(t)
\end{flushleft}
where \meta{$P_{\mathrm{out}}$} is a macro that gets
defined with the cartesian coordinates of the computed output
- point. Arguments \meta{in} (the $t$ parameter) and \meta{out} (the computed coordinates) need not be enclosed within braces if they are given as macros; actually the code shown in figure~\ref{fig:lissajous} shows such procedure that renders the input code simpler to read.
+ point. Arguments \meta{in} (the $t$ parameter) and \meta{$P_\mathrm{out}$} (the computed coordinates) need not be enclosed within braces if they are given as macros; actually the code shown in figure~\ref{fig:lissajous} shows such procedure that renders the input code simpler to read.
After this definition the diagram is plotted in
figure~\ref{fig:lissajous}.
@@ -1564,6 +1620,8 @@ y = f_2(t)
Daniele Degiorgi spotted a fault in the kernel definition of
|\linethickness| that heavily influenced also \pack{curve2e}; see in
the code documentation \file{curve2e.pdf} file.
+
+ Many thanks to Domenicus van der Wijst who spotted a sneaky bug in the updated |\Arc| macro; for arcs non wider that $180^\circ$ it worked properly, while for larger angle apertures it produced syntax errors. It was just a typo, but very sneaky.
Thanks also to Jin-Hwan Cho and Juho Lee who suggested a small but
crucial modification in order to have \pack{curve2e} work smoothly
diff --git a/macros/latex/contrib/curve2e/curve2e.dtx b/macros/latex/contrib/curve2e/curve2e.dtx
index 396d8e6000..342761876f 100644
--- a/macros/latex/contrib/curve2e/curve2e.dtx
+++ b/macros/latex/contrib/curve2e/curve2e.dtx
@@ -6,7 +6,7 @@
\keepsilent
\preamble
- Copyright (C) 2005--2021 Claudio Beccari all rights reserved.
+ Copyright (C) 2005--2023 Claudio Beccari all rights reserved.
License information appended
\endpreamble
@@ -46,7 +46,7 @@ README.txt and curve2e-v161.sty.
%<+package>\ProvidesPackage{curve2e}%
%<+readme>File README.txt for package curve2e
%<*package|readme>
- [2021-01-12 v.2.2.15 Extension package for pict2e]
+ [2023-01-01 v.2.2.22 Extension package for pict2e]
%</package|readme>
%<*driver>
\documentclass{ltxdoc}\errorcontextlines=9
@@ -107,16 +107,16 @@ README.txt and curve2e-v161.sty.
\providecommand\setfontsize{}
-\DeclareRobustCommand\setfontsize[2][1.2]{%
-\linespread{#1}\fontsize{#2}{#2}\selectfont}
+\RenewDocumentCommand\setfontsize{O{1.2} m}{%
+\fontsize{#2}{\fpeval{#1*#2}}\selectfont}
\newwrite\example@out
\ProvideDocumentEnvironment{Esempio}{ O{\footnotesize} D(){0.50}}
% All definitions and assignments are local
% #1 := Lates font size command or \setfontsize{<size>}
% %2 := \textwidth percentage for the code box; the complement, less the
-% column gap for the result dedicata al codice
-% Syntax: \begin{Esempio}[<>size command](<code box percentage width>)
+% column gap for the resulting compiled code
+% Syntax: \begin{Esempio}[<size command>](<code box percentage width>)
%
{\par\addvspace{3.0ex plus 0.8ex minus 0.5ex}\vskip -\parskip
%\def\Corpo{#1}
@@ -161,7 +161,7 @@ README.txt and curve2e-v161.sty.
%</driver>
% \fi
%
-% \CheckSum{5584}
+% \CheckSum{5602}
% \begin{abstract}
% This file documents the |curve2e| extension package to the |pict2e|
% bundle implementation; the latter was described by Lamport
@@ -171,7 +171,7 @@ README.txt and curve2e-v161.sty.
% package |pict2e| has been released that incorporates some of the
% commands defined in early versions of this package; apparently there
% are no conflicts, but only the advanced features of |curve2e| remain
-% available for extending the above package.
+% available for extending the above improved package.
%
% This extension redefines some commands and introduces some more
% drawing facilities that allow to draw circular arcs and arbitrary
@@ -188,7 +188,7 @@ README.txt and curve2e-v161.sty.
%
% Package \texttt{pict2e} was announced in issue 15 of \texttt{latexnews}
% around December 2003; it was specified that the new package would
-% replace the dummy one that has been accompanying every release of
+% replace the dummy one that was been accompanying every release of
% \LaTeXe\ since its beginnings in 1994. The dummy package was just
% issuing an info message that simply announced the temporary
% unavailability of the real package.
@@ -251,22 +251,24 @@ README.txt and curve2e-v161.sty.
% This specific extension package |curve2e| adds the following features.
% \begin{enumerate}
% \item Point coordinates my be specified in both cartesian and polar
-% form: internally they are handled as cartesian coordinates, but the
-% user can specify his/her points also in polar form. In order to avoid
+% form: internally they are handled as cartesian coordinates, but
+% users can specify their points also in polar form. In order to avoid
% confusion with other graphic packages, |curve2e| uses the usual comma
% separated couple \meta{$x,y$} of integer or fractional numbers for
-% cartesian coordinates, and the couple \meta{$\theta$}:\meta{$\rho$} for
-% polar coordinates (the angle preceding the radius).
+% cartesian coordinates, and the colon separated pair
+% \meta{$\theta$}:\meta{$\rho$} for polar coordinates (the angle preceding
+% the radius).
% All graphic object commands accept polar or cartesian coordinates at
-% the choice of the user who may use for each object the formalism s/he
+% the choice of users who may use for each object the formalism they
% prefers. Also the |put| and |\multiput| commands have been redefined so
-% as to accept cartesian or polar coordinates.
+% as to accept cartesian or polar coordinates. The same holds true for the
+% low level |pict2e| commands \cs{moveto}, \cs{lineto}, and \cs{curveto}.
%
% Of course the user must pay attention to the meaning of cartesian
-% vs. polar coordinates. Both imply a displacement with respect the
+% vs. polar coordinates. Both imply a displacement with respect to the
% actual origin of the axes. So when a circle is placed at coordinates
-% $a,b$ with a normal |\put| command, the circle is placed exactly in
-% that point; with a normal |\put| command the same happens if
+% $a,b$ with a normal |\put| command, the circle center is placed exactly
+% is that point; with a normal |\put| command the same happens if
% coordinates $\alpha{:}\rho$ are specified.
% But if the |\put| command is nested into another |\put| command, the
% current origin of the axes is displaced — this is obvious and the
@@ -274,7 +276,7 @@ README.txt and curve2e-v161.sty.
% is specified so that its ending point is at a specific distance and in
% specific direction from its starting point, polar coordinates appear to
% be the most convenient to use; in this case, though, the origin of the
-% axes become the stating point of the segment, therefore the segment
+% axes becomes the starting point of the segment, therefore the segment
% might be drawn in a strange way. Attention has been
% paid to avoid such misinterpretation, but maybe some unusual
% situation may not have come to my mind; feedback is very welcome.
@@ -282,7 +284,7 @@ README.txt and curve2e-v161.sty.
%^^A
%\item Most if not all cartesian coordinate pairs and slope pairs are
% treated as \emph{ordered pairs}, that is \emph{complex numbers}; in
-% practice the user does not notice any difference from what s/he was
+% practice users do not notice any difference from what they were
% used to, but all the mathematical treatment to be applied to these
% entities is coded as complex number operations, since complex numbers
% may be viewed non only as ordered pairs, but also as vectors or as
@@ -363,8 +365,9 @@ README.txt and curve2e-v161.sty.
% reasonable that these commands, in spite of producing identical arcs,
% might be more comfortable with this or that syntax.
%^^A
-% \item Two new macros |\VectorArc| and |\VectorARC| are defined in order
-% to draw circular arcs with an arrow at one or both ends.
+% \item Two new macros |\VectorArc| and |\VectorARC| (alias
+% |\VVectorArc|) are defined in order to draw circular arcs with an
+% arrow at one or both ends.
%^^A
% \item A new macro |\Curve| is defined so as to draw arbitrary curved
% lines by means of cubic Bézier splines; the |\Curve| macro requires
@@ -432,10 +435,25 @@ README.txt and curve2e-v161.sty.
% that John Hobby implemented for the \MF\ and \MP\ programs.
%
% For these reasons I suppose that every enhancement should be submitted
-% to Gäßlein, Niepraschk, and Tkadlec who are the prime maintainers of
-% \texttt{pict2e}; they are the only ones who can decide whether or not
-% to incorporate new macros in their package.
-%
+% to Niepraschk, who is the maintainer of \texttt{pict2e}; he is the only
+% one who can decide whether or not to incorporate new macros in the
+% |pict2e| package.
+%
+% \textbf{Warning}\quad In 2020 the \LaTeX\ Project Team upgraded the
+% \LaTeX\ native |picture| environment so that all information concerning
+% lengths (line and vector lengths, coordinates, et cetera) may be
+% expressed with dimension expressions such as |0.71\textwidth|,
+% |\parindent + 5mm|, |\circle{1ex}|, and so on. With such dimensional
+% specifications, the information does not depend anymore on
+% |\unitlength|; therefore such dimensional forms do not scale by
+% changing the value of |\unitlength|.
+% |pict2e| in 2020-09-30 was correspondingly upgraded to version~0.4b.
+% Apparently such upgrades do not have any influence on |curve2e|
+% workings, or, at least, when no explicit dimensions are used; this
+% applies in particular when the |\AutoGrid| or the |GraphGrid| macros
+% are used; also he coordinates processing should be done with real
+% numbers, not with dimensions. Nevertheless feedback is welcome if
+% some corrections are needed.
%
%^^A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \section{Acknowledgements}
@@ -446,13 +464,13 @@ README.txt and curve2e-v161.sty.
% correct them.
%
% Josef Tkadlec and the author collaborated extensively in order to make
-% a better real long division so as to get correctly the quotient
+% a better real long-division so as to get correctly the quotient
% fractional part and to avoid as much as possible any numeric overflow;
% many Josef's ideas are incorporated in the macro that was implemented
% in the previous versions of this package, although the macro used by
% Josef was slightly different. Both versions aim/aimed at a better
% accuracy and at widening the operand ranges. In this version we
-% abandoned our long division macro, and substituted it with the
+% abandoned our long-division macro, and substituted it with the
% floating point division provided by the |xfp| package.
%
% Daniele Degiorgi spotted a fault in the kernel definition of
@@ -468,8 +486,8 @@ README.txt and curve2e-v161.sty.
%
% Some others users spotted other “features” that did not produce the
% desired results; they have been acknowledged by footnotes in
-% correspondence with the corrections that were made tanks their
-% contribution.
+% correspondence with the corrections that were made thanks their
+% feedback.
%
% \StopEventually{%
% \begin{thebibliography}{9}
@@ -499,7 +517,7 @@ README.txt and curve2e-v161.sty.
% Here we load also the |xparse| and |xfp| packages because we use their
% functionalities; but we do load them only if they are not already
% loaded with or without options; nevertheless we warn the user who wants
-% to load them explicitly, to do this action before loading
+% to load them explicitly: do this action before loading
% \texttt{curve2e}.
% The |xfp| package is absolutely required; if this package is not found
% in the \TeX\ system installation, the loading of this new |curve2e| is
@@ -526,12 +544,12 @@ README.txt and curve2e-v161.sty.
\MessageBreak%
***************************************\MessageBreak%
Version 1.61 of curve2e has been loaded\MessageBreak%
- instead of the current version\MessageBreak%
+ instead of the current version \MessageBreak%
***************************************\MessageBreak}%
\endinput
}
% \end{macrocode}
-% Since we already loaded package|xfp| or at least we explicitly load it
+% Since we already loaded package |xfp| or at least we explicitly load it
% in our preamble, we add, if not already defined by the package, three
% new commands that allow to make floating point tests, and two
% “while” cycles\footnote{Thanks to Brian Dunn who spotted a bug in
@@ -541,11 +559,11 @@ README.txt and curve2e-v161.sty.
\ExplSyntaxOn
\AtBeginDocument{%
\ProvideExpandableDocumentCommand\fptest{m m m}{%
- \fp_compare:nTF{#1}{#2}{#3}}
+ \fp_compare:nTF{#1}{#2}{#3}\ignorespaces}
\ProvideExpandableDocumentCommand\fpdowhile{m m}{%
- \fp_do_while:nn{#1}{#2}}
+ \fp_do_while:nn{#1}{#2}\ignorespaces}
\ProvideExpandableDocumentCommand\fpwhiledo{m m}{%
- \fp_while_do:nn{#1}{#2}}
+ \fp_while_do:nn{#1}{#2}\ignorespaces}
}
\ExplSyntaxOff
@@ -593,8 +611,9 @@ README.txt and curve2e-v161.sty.
% line.\footnote{Thanks to Daniele
% Degiorgi \texttt{degiorgi@inf.ethz.ch}).
% This feature should have been eliminated
-% from the \LaTeXe\ <2020.0202> patch level 4
-% update.}
+% from the \LaTeXe\ <2020.02.02> patch level 4
+% update. This glitch has bee eliminated
+% according to the LaTeX Newsletter Nr.~32.}
% \begin{macrocode}
\gdef\linethickness#1{%
\@wholewidth#1\@halfwidth.5\@wholewidth\ignorespaces}%
@@ -846,7 +865,7 @@ README.txt and curve2e-v161.sty.
% but through an optional argument to the macro, it may be set to any
% desired size; remember that 1\,pt is about one third of a millimeter;
% sometimes it might be too small; 1\,mm is a very black dot, therefore
-% the user must pay attention when s/he specifies the dot diameter,
+% users must pay attention when they specify the dot diameter,
% so as not to exaggerate in either direction.
% The syntax is as follows:
%\begin{flushleft}
@@ -1254,7 +1273,7 @@ README.txt and curve2e-v161.sty.
% The next command is handy for debugging while editing one's
% drawing; it draws a red grid with square meshes that are ten drawing
% units apart; there is no graduation along the grid, since it is
-% supposed to be a debugging aid and the user should know what s/he is
+% supposed to be a debugging aid and users should know what they are
% doing; nevertheless it is advisable to displace the grid by means of a
% |\put| command so that its grid lines coincide with graph
% coordinates that are multiples of~10. Missing to do so the readings
@@ -1302,7 +1321,7 @@ README.txt and curve2e-v161.sty.
% in this way it is easier to replace |\GraphGrid| with |\AutoGrid| if
% it is desired to do so. The opposite action, of course is not so simple
% if the |\AutoGrid| command is not followed by one or two arguments
-% as |\GraphGrid| requires. Approximately |\AutoGrid| may be viewed as
+% as |\GraphGrid| requires. Approximately |\AutoGrid| may be viewed as
% a |\GraphGrid| version were both arguments are optional.
% \begin{macrocode}
\def\@picture(#1,#2)(#3,#4){%
@@ -1363,19 +1382,19 @@ README.txt and curve2e-v161.sty.
%
% Some commands such as \cs{legenda} (legend), \cs{Zbox}, and \cs{Pbox}
% have been always used in the documentation of this package and its
-% siblings; but we used them in many other documents; therefore we thought
-% it was useful to have them available with the general user of
+% siblings; but we used them in many other documents; therefore we
+% thought it was useful to have them available with the general user of
% \pack{curve2e}.
%
%Their commands follow the following syntax.
%\begin{flushleft}\ttfamily\obeylines
-%|\Pbox|\parg{coordinates}\oarg{position}\marg{text}\oarg{dot diameter}\meta{\texttt{*}}\aarg{angle}
+%|\Pbox|\parg{coordinates}\oarg{position}\marg{formula}\oarg{dot diameter}\meta{\texttt{*}}\aarg{angle}
%|\Zbox|\parg{coordinates}\oarg{position}\marg{formula}\oarg{dot diameter}
%|\legenda|\parg{coordinates}\marg{formula}
%\end{flushleft}
%
% These commands have similar but different functionalities; the most
-% general one si |\Pbox|, while the others are simplified versions that
+% general one is |\Pbox|, while the others are simplified versions that
% have a simpler syntax, and a subset of the |\Pbox| functionalities.
% While we describe the arguments of |\Pbox| we emphasise the small
% differences with the other two commands.
@@ -1384,20 +1403,23 @@ README.txt and curve2e-v161.sty.
% form) of the reference point of the “label”; for |\legenda| it is the
% lower left corner of the framed legend contents. They are delimited
% with the usual matched parentheses, and their default value is
-% \texttt{(0,0)}, therefore either the user specifies other coordinates,
-% or uses the |\put| command to place the legend where he prefers.
-%%
-%\item[\meta{position}] is the optional position of the “label” contents
-% relative the the reference point; the default is \texttt{cc} so that
+% \texttt{(0,0)}, therefore either users specify other coordinates,
+% or use the |\put| command to place the legend where they prefer.
+%
+%\item[\meta{position}] is the optional position of the reference point
+% relative to the “label” contents: this means that if the “label”
+% should be NE relative to the visible (or invisible) dot it labels,
+% the \meta{position} codes should be \texttt{tr} (top and right); the
+% default \meta{position} is \texttt{cc} so that
% the “label” is vertically and horizontally centred at the reference
-% point; actually these position parameters should always specified if
+% point; actually these position parameters should always be specified if
% the dot diameter is positive (therefore visible), otherwise the
-% “label” and the dot overwrite eachother.
+% “label” and the dot overwrite each other.
%%
-%\item[\meta{text} \textnormal{or} \meta{formula}] may be almost
-% anything; where the argument is called \meta{formula} math mode
-% is the default; otherwise it is plain \meta{text}; in any case
-% it can be replaced by a box or a parbox, so that actually this
+%\item[\meta{formula}] may be almost anything; \meta{formula} means
+% that the argument is typeset in math mode; if some text is desired
+% the argument must be surrounded by a matched couple of dollar signs;
+% in any case it is possible to enter text mode by using a box (for example through a |\hbox| or a |\parbox|) so that actually this
% mandatory argument may contain almost anything.
%%
%\item[\meta{dot diameter}] the dot diameter default value is positive;
@@ -1450,13 +1472,16 @@ README.txt and curve2e-v161.sty.
\providecommand\Zbox{}
\RenewDocumentCommand\Zbox{R(){0,0} O{cc} m O{1}}{%
-\put(#1){\makebox(0,0)[#2]{\fboxrule=0pt\fboxsep=3pt\fbox{$#3$}}\makebox(0,0)[cc]{\circle*{#4}}}\ignorespaces}
+\put(#1){\makebox(0,0)[#2]{\fboxrule=0pt\fboxsep=3pt\fbox{$#3$}}%
+\makebox(0,0)[cc]{\circle*{#4}}}\ignorespaces}
\providecommand\legenda{}
-\RenewDocumentCommand\legenda{ D(){0,0} m}{\put(#1){\setbox3333\hbox{$#2$}%
- \dimen3333\dimexpr\wd3333*\p@/\unitlength +3\p@\relax
- \edef\@tempA{\strip@pt\dimen3333}%
- \framebox(\@tempA,7){\box3333}}\ignorespaces}
+\newbox\legendbox
+\RenewDocumentCommand\legenda{ D(){0,0} m}{\put(#1){%
+ \setbox\legendbox\hbox{$\relax#2\relax$}%
+ \edef\@tempA{\fpeval{(\wd\legendbox + 3\p@)/\unitlength}}%
+ \edef\@tempB{\fpeval{(\ht\legendbox+\dp\legendbox+3\p@)/\unitlength}}%
+ \framebox(\@tempA,\@tempB){\box\legendbox}}\ignorespaces}
% \end{macrocode}
@@ -1768,8 +1793,8 @@ Computations go on, but the results may be meaningless}}{%
%\[
%(x, y) = x + \mathrm{j}y =M \mathrm{e}^{\mathrm{j}\theta}
%\]
-% Even the imaginary unit is indicated with $\mathrm{i}$ by the
-% mathematicians and with $\mathrm{j}$ by the engineers. In spite of
+% Even the imaginary unit is indicated with $\mathrm{i}$ by
+% mathematicians and with $\mathrm{j}$ by engineers. In spite of
% these differences, such objects, the \emph{complex numbers}, are used
% without any problem by both mathematicians and engineers.
%
@@ -1790,7 +1815,7 @@ Computations go on, but the results may be meaningless}}{%
% \]
%
% The magnitude of a vector is determined by taking the positive square
-% root of the sum of the squared real and the imaginary parts (often called \emph{Pitagorean sum}); see further on.
+% root of the sum of the squared real and imaginary parts (often called \emph{Pitagorean sum}); see further on.
%
% It's better to represent each complex number with one control sequence;
% this implies frequent assembling and disassembling the pair of real
@@ -1868,9 +1893,19 @@ Computations go on, but the results may be meaningless}}{%
% difference of two complex numbers; the first input argument is the
% minuend, the second is the subtrahend; the output quantities are the
% third argument containing the magnitude of the difference and the
-% fourth is the direction of the difference.
+% fourth is the direction of the difference. Please notice the difference
+% between |\ModAndDirOfVect| and |\DistanceAndDirOfVect|; the former
+% computes the modulus and the direction of a complex number, that is a
+% vector with its tail in the origin of the axes; the latter measures
+% the length of the difference of two complex numbers; in a way
+% |\ModAndDirOfVect| \meta{vector}| to |\meta{macro}| and |\meta{versor}
+% produces the same result as
+% |\DistanceAndDirOfVect| \meta{vector}| minus {0,0} to |\meta{macro}| and |\meta{versor}.
+% Actually |\DistanceAndDirOfVect| yields the distance of two complex
+% numbers and the direction of their difference.
% The service macro |\SubVect| executes the difference of two complex
-% numbers and is described further on.
+% numbers and is described further on; its code implements just this
+% statement.
% \begin{macrocode}
\def\DistanceAndDirOfVect#1minus#2to#3and#4{%
\SubVect#2from#1to\@tempa
@@ -1943,7 +1978,7 @@ Computations go on, but the results may be meaningless}}{%
% allowed the following two forms:
%\begin{flushleft}\ttfamily
%\cs{MultVect}\meta{first factor} by \meta{second factor} to \meta{output macro}\\
-%\cs{MultVect}\meta{first factor} by $\star*$ \meta{second factor} to \meta{output macro}\\
+%\cs{MultVect}\meta{first factor} by $\star$ \meta{second factor} to \meta{output macro}\\
%\end{flushleft}
%
% With the availability of the |xparse| package and its special argument
@@ -1952,11 +1987,11 @@ Computations go on, but the results may be meaningless}}{%
% \emph{after} and \emph{before}; its syntax allows the following four
% forms:
%\begin{flushleft}
-%\cs{Multvect}\marg{first factor}\marg{second factor}\meta{output macro}
-%\cs{Multvect}\marg{first factor}$\star*$\marg{second factor}\meta{output macro}
-%\cs{Multvect}\marg{first factor}\marg{second factor}$\star*$\meta{output macro}
-%\cs{Multvect}\marg{first factor}$\star*$\marg{second factor}\meta{output macro}
-%\cs{Multvect}\marg{first factor}$\star*$\marg{second factor}$\star*$\meta{output macro}
+%\cs{Multvect}\marg{first factor}\marg{second factor}\meta{output macro}\\
+%\cs{Multvect}\marg{first factor}$\star$\marg{second factor}\meta{output macro}\\
+%\cs{Multvect}\marg{first factor}\marg{second factor}$\star$\meta{output macro}\\
+%\cs{Multvect}\marg{first factor}$\star$\marg{second factor}\meta{output macro}\\
+%\cs{Multvect}\marg{first factor}$\star$\marg{second factor}$\star$\meta{output macro}
%\end{flushleft}
%
% Nevertheless we maintain a sort of interface between the old syntax
@@ -2134,7 +2169,7 @@ Computations go on, but the results may be meaningless}}{%
\Numero\@gradi\@tdA
\SubVect\@pPun from\@Cent to\@V
\AddVect\@V and\@Cent to\@sPun
- \Multvect{\@V}{0,-1.3333333to}\@V
+ \Multvect{\@V}{0,-1.3333333}\@V
\if\Segno-\ScaleVect\@V by-1to\@V\fi
\AddVect\@pPun and\@V to\@pcPun
\AddVect\@sPun and\@V to\@scPun
@@ -2223,11 +2258,12 @@ Computations go on, but the results may be meaningless}}{%
% We exploit much of the above definitions for the |\Arc| macro for
% drawing circular arcs with an arrow at one or both ends; the first
% macro |\VerctorArc| draws an arrow at the ending point of the arc; the
-% second macro |\VectorARC| draws arrows at both ends; the arrows have
-% the same shape as those for vectors; actually they are drawn by putting
-% a vector of zero length at the proper arc end(s), therefore they are
-% styled as traditional \LaTeX\ or PostScript arrows according to the
-% specific option to the \texttt{pict2e} package.
+% second macro |\VectorARC| (alias |\VVectorArc|) draws arrows at both
+% ends; the arrows tips have the same shape as those for vectors;
+% actually they are drawn by putting a vector of zero length at the
+% proper arc end(s), therefore they are styled as traditional \LaTeX\ or
+% PostScript arrows according to the specific option to the
+% \texttt{pict2e} package.
%
% But the arc drawing done here shortens it so as not to overlap on the
% arrow tip(s); the only arrow tip (or both tips) are also lightly tilted in
@@ -2263,6 +2299,7 @@ Computations go on, but the results may be meaningless}}{%
\@VARC(#1)(#2)%
\fi
\endgroup\ignorespaces}%
+\let\VVectorArc\VectorARC
% \end{macrocode}
%
% The single arrow tiped arc is defined with the following long macro where
@@ -2577,10 +2614,10 @@ Computations go on, but the results may be meaningless}}{%
% separated pair of values, that not necessarily indicate a unit vector,
% since the macro provides to normalise it to unity; \meta{$K_0$} and
% \meta{$K_1$} are the distances of the control points from their
-% respective node points; they must be positive integers or fractional
-% numbers. If \meta{$K_1$} is a number, it must be enclosed in curly braces,
-% while if it is a macro name (containing the desired fractional or
-% integer value) there is no need for braces.
+% respective node points; they must be integers or fractional positive
+% numbers. If \meta{$K_1$} is a number, it must be enclosed in curly
+% braces, while if it is a macro name (containing the desired fractional
+% or integer value) there is no need for braces.
%
% This macro uses the input information in order to activate the internal
% |pict2e| macro |\pIIe@curveto| with the proper arguments, and to save
@@ -2668,7 +2705,7 @@ Computations go on, but the results may be meaningless}}{%
%\begin{flushleft}
% \meta{direction\texttt{\upshape;}tension factors}
%\end{flushleft}
-% where \emph{direction} contains a pair of fractional number that not
+% where \emph{direction} contains a pair of fractional numbers that not
% necessarily refer to the components of a unit vector direction, but
% simply to a vector with the desired orientation (polar form is OK); the
% information contained from the semicolon (included) to the rest of the
@@ -2727,10 +2764,10 @@ Computations go on, but the results may be meaningless}}{%
% the end point. Notice that if the directions of two successive nodes are
% identical, it is necessary to draw a line, not a third order
% spline\footnote{Many thanks to John Hillas who spotted this bug, that
-% passed unnoticed fora long time, because it is a very unusual situation.};
+% passed unnoticed for long time, because it is a very unusual situation.};
% therefore it is necessary to make a suitable test that is more
% comfortable to do after the chord has been rotated to be horizontal;
-% in facts, if the two directions are equal, the vertical componente
+% in facts, if the two directions are equal, the vertical components
% of the directions are both vanishing values; probably, instead of
% testing with respect to zero, it might be advisable to test the
% absolute value with respect to a small number such as, for example,
@@ -2847,7 +2884,7 @@ Computations go on, but the results may be meaningless}}{%
\StartCurveAt#1WithDir{#2}%
\@ifnextchar\lp@r\@Curve{%
\PackageWarning{curve2e}{%
- Curve specifications must contain at least two nodes!\Messagebreak
+ Curve specifications must contain at least two nodes!\MessageBreak
Please, control your \string\Curve\space specifications\MessageBreak}}}
\def\@Curve(#1)<#2>{%
\CurveTo#1WithDir{#2}%
@@ -2912,7 +2949,7 @@ Computations go on, but the results may be meaningless}}{%
\@ifnextchar\lp@r\@Qurve{%
\PackageWarning{curve2e}{%
Quadratic curve specifications must contain at least
- two nodes!\Messagebreak
+ two nodes!\MessageBreak
Please, control your Qurve specifications\MessageBreak}}}%
\def\@Qurve(#1)<#2>{\QurveTo#1WithDir{#2}%
@@ -3093,8 +3130,8 @@ Computations go on, but the results may be meaningless}}{%
\ignorespaces}
% \end{macrocode}
%
-% An example of usage is shown at the left in
-% figure~16\footnote{The commands \cs{legenda},
+% An example of usage is shown at the left in figure~16 of the user manual
+% |curve2e-manual.pdf| file\footnote{The commands \cs{legenda},
% \cs{Pall} and \cs{Zbox} are specifically defined in the preamble of
% this document; they must be used within a \texttt{picture} environment.
% \cs{legenda} draws a framed legend made up of a single (short) math
@@ -3133,7 +3170,7 @@ Computations go on, but the results may be meaningless}}{%
% \section{Conclusion}
%^^A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% I believe that the set of new macros provided by this package can
-% really help the user to draw his/her diagrams with more agility; it
+% really help users to draw their diagrams with more agility; it
% will be the accumulated experience to decide if this is true.
%
% As a personal experience I found very comfortable to draw ellipses and
@@ -3141,10 +3178,10 @@ Computations go on, but the results may be meaningless}}{%
% areas, but also to create “legends” with coloured backgrounds and
% borders. But this is just an application of the functionality
% implemented in this package. In 2020 I added to CTAN another
-% specialized package, |euclideangeometry.sty| with its manual
+% specialised package, |euclideangeometry.sty| with its manual
% |euclideangeometry-man.pdf| that uses the facilities of |curve2e|
-% to draw complex diagrams that plot curves and others that solve some
-% geometrical problems dealing with ellipses.
+% to draw complex diagrams that plot curves, and other facilities that
+% solve some geometrical problems dealing with ellipses.
%
%\iffalse
%</package>
@@ -3176,7 +3213,8 @@ README.txt
If you install curve2e without using your TeX system package handler,
Compile curve2e.dtx and curve2e-manual.tex two or three times until
-all labels and citation keys are completely resolved. Then move the primary and derived files as follows:
+all labels and citation keys are completely resolved. Then move the
+primary and derived files as follows:
Move curve2e.dtx and curve2e-manual.tex to ROOT/source/latex/curve2e/
Move curve2e.pdf and curve2e-manual.pdf to ROOT/doc/latex/curve2e/
@@ -4084,7 +4122,7 @@ claudio dot beccari at gmail dot com
\StartCurveAt#1WithDir{#2}%
\@ifnextchar\lp@r\@Curve{%
\PackageWarning{curve2e}{%
- Curve specifications must contain at least two nodes!\Messagebreak
+ Curve specifications must contain at least two nodes!\MessageBreak
Please, control your Curve specifications\MessageBreak}}}
\def\@Curve(#1)<#2>{%
\CurveTo#1WithDir{#2}%
@@ -4099,7 +4137,7 @@ claudio dot beccari at gmail dot com
\@ifnextchar\lp@r\@Qurve{%
\PackageWarning{curve2e}{%
Quadratic curve specifications must contain at least
- two nodes!\Messagebreak
+ two nodes!\MessageBreak
Please, control your Qurve specifications\MessageBreak}}}%
\def\@Qurve(#1)<#2>{\QurveTo#1WithDir{#2}%
\@ifnextchar\lp@r\@Qurve{%
diff --git a/macros/latex/contrib/curve2e/curve2e.pdf b/macros/latex/contrib/curve2e/curve2e.pdf
index 3b408efc47..bbf3b4eb68 100644
--- a/macros/latex/contrib/curve2e/curve2e.pdf
+++ b/macros/latex/contrib/curve2e/curve2e.pdf
Binary files differ
diff --git a/macros/latex/contrib/jwjournal/DEPENDS.txt b/macros/latex/contrib/jwjournal/DEPENDS.txt
new file mode 100644
index 0000000000..42e7133771
--- /dev/null
+++ b/macros/latex/contrib/jwjournal/DEPENDS.txt
@@ -0,0 +1 @@
+hard einfart \ No newline at end of file
diff --git a/macros/latex/contrib/jwjournal/LICENSE b/macros/latex/contrib/jwjournal/LICENSE
new file mode 100644
index 0000000000..2244313901
--- /dev/null
+++ b/macros/latex/contrib/jwjournal/LICENSE
@@ -0,0 +1,416 @@
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3c 2008-05-04
+
+Copyright 1999 2002-2008 LaTeX3 Project
+ Everyone is allowed to distribute verbatim copies of this
+ license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under
+which the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright
+and which you wish to distribute. This license may be particularly
+suitable if your work is TeX-related (such as a LaTeX package), but
+it is written in such a way that you can use it even if your work is
+unrelated to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
+below, gives instructions, examples, and recommendations for authors
+who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed
+and modified, as well as conditions under which modified versions of
+that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of your work
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+that work. If you do not see how to achieve your goal while
+meeting these conditions, then read the document `cfgguide.tex'
+and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+ `Work'
+ Any work being distributed under this License.
+
+ `Derived Work'
+ Any work that under any applicable law is derived from the Work.
+
+ `Modification'
+ Any procedure that produces a Derived Work under any applicable
+ law -- for example, the production of a file containing an
+ original file associated with the Work or a significant portion of
+ such a file, either verbatim or with modifications and/or
+ translated into another language.
+
+ `Modify'
+ To apply any procedure that produces a Derived Work under any
+ applicable law.
+
+ `Distribution'
+ Making copies of the Work available from one person to another, in
+ whole or in part. Distribution includes (but is not limited to)
+ making any electronic components of the Work accessible by
+ file transfer protocols such as FTP or HTTP or by shared file
+ systems such as Sun's Network File System (NFS).
+
+ `Compiled Work'
+ A version of the Work that has been processed into a form where it
+ is directly usable on a computer system. This processing may
+ include using installation facilities provided by the Work,
+ transformations of the Work, copying of components of the Work, or
+ other activities. Note that modification of any installation
+ facilities provided by the Work constitutes modification of the Work.
+
+ `Current Maintainer'
+ A person or persons nominated as such within the Work. If there is
+ no such explicit nomination then it is the `Copyright Holder' under
+ any applicable law.
+
+ `Base Interpreter'
+ A program or process that is normally needed for running or
+ interpreting a part or the whole of the Work.
+
+ A Base Interpreter may depend on external components but these
+ are not considered part of the Base Interpreter provided that each
+ external component clearly identifies itself whenever it is used
+ interactively. Unless explicitly specified when applying the
+ license to the Work, the only applicable Base Interpreter is a
+ `LaTeX-Format' or in the case of files belonging to the
+ `LaTeX-format' a program implementing the `TeX language'.
+
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1. Activities other than distribution and/or modification of the Work
+are not covered by this license; they are outside its scope. In
+particular, the act of running the Work is not restricted and no
+requirements are made concerning any offers of support for the Work.
+
+2. You may distribute a complete, unmodified copy of the Work as you
+received it. Distribution of only part of the Work is considered
+modification of the Work, and no right to distribute such a Derived
+Work may be assumed under the terms of this clause.
+
+3. You may distribute a Compiled Work that has been generated from a
+complete, unmodified copy of the Work as distributed under Clause 2
+above, as long as that Compiled Work is distributed in such a way that
+the recipients may install the Compiled Work on their system exactly
+as it would have been installed if they generated a Compiled Work
+directly from the Work.
+
+4. If you are the Current Maintainer of the Work, you may, without
+restriction, modify the Work, thus creating a Derived Work. You may
+also distribute the Derived Work without restriction, including
+Compiled Works generated from the Derived Work. Derived Works
+distributed in this manner by the Current Maintainer are considered to
+be updated versions of the Work.
+
+5. If you are not the Current Maintainer of the Work, you may modify
+your copy of the Work, thus creating a Derived Work based on the Work,
+and compile this Derived Work, thus creating a Compiled Work based on
+the Derived Work.
+
+6. If you are not the Current Maintainer of the Work, you may
+distribute a Derived Work provided the following conditions are met
+for every component of the Work unless that component clearly states
+in the copyright notice that it is exempt from that condition. Only
+the Current Maintainer is allowed to add such statements of exemption
+to a component of the Work.
+
+ a. If a component of this Derived Work can be a direct replacement
+ for a component of the Work when that component is used with the
+ Base Interpreter, then, wherever this component of the Work
+ identifies itself to the user when used interactively with that
+ Base Interpreter, the replacement component of this Derived Work
+ clearly and unambiguously identifies itself as a modified version
+ of this component to the user when used interactively with that
+ Base Interpreter.
+
+ b. Every component of the Derived Work contains prominent notices
+ detailing the nature of the changes to that component, or a
+ prominent reference to another file that is distributed as part
+ of the Derived Work and that contains a complete and accurate log
+ of the changes.
+
+ c. No information in the Derived Work implies that any persons,
+ including (but not limited to) the authors of the original version
+ of the Work, provide any support, including (but not limited to)
+ the reporting and handling of errors, to recipients of the
+ Derived Work unless those persons have stated explicitly that
+ they do provide such support for the Derived Work.
+
+ d. You distribute at least one of the following with the Derived Work:
+
+ 1. A complete, unmodified copy of the Work;
+ if your distribution of a modified component is made by
+ offering access to copy the modified component from a
+ designated place, then offering equivalent access to copy
+ the Work from the same or some similar place meets this
+ condition, even though third parties are not compelled to
+ copy the Work along with the modified component;
+
+ 2. Information that is sufficient to obtain a complete,
+ unmodified copy of the Work.
+
+7. If you are not the Current Maintainer of the Work, you may
+distribute a Compiled Work generated from a Derived Work, as long as
+the Derived Work is distributed to all recipients of the Compiled
+Work, and as long as the conditions of Clause 6, above, are met with
+regard to the Derived Work.
+
+8. The conditions above are not intended to prohibit, and hence do not
+apply to, the modification, by any method, of any component so that it
+becomes identical to an updated version of that component of the Work as
+it is distributed by the Current Maintainer under Clause 4, above.
+
+9. Distribution of the Work or any Derived Work in an alternative
+format, where the Work or that Derived Work (in whole or in part) is
+then produced by applying some process to that format, does not relax or
+nullify any sections of this license as they pertain to the results of
+applying that process.
+
+10. a. A Derived Work may be distributed under a different license
+ provided that license itself honors the conditions listed in
+ Clause 6 above, in regard to the Work, though it does not have
+ to honor the rest of the conditions in this license.
+
+ b. If a Derived Work is distributed under a different license, that
+ Derived Work must provide sufficient documentation as part of
+ itself to allow each recipient of that Derived Work to honor the
+ restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to
+the Work, nor does this license place any restrictions on aggregating
+such works with the Work by any means.
+
+12. Nothing in this license is intended to, or may be used to, prevent
+complete compliance by all parties with all applicable laws.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work. Except when otherwise stated in
+writing, the Copyright Holder provides the Work `as is', without
+warranty of any kind, either expressed or implied, including, but not
+limited to, the implied warranties of merchantability and fitness for a
+particular purpose. The entire risk as to the quality and performance
+of the Work is with you. Should the Work prove defective, you assume
+the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will The Copyright Holder, or any author named in the components of the
+Work, or any other party who may distribute and/or modify the Work as
+permitted above, be liable to you for damages, including any general,
+special, incidental or consequential damages arising out of any use of
+the Work or out of inability to use the Work (including, but not limited
+to, loss of data, data being rendered inaccurate, or losses sustained by
+anyone as a result of any failure of the Work to operate with any other
+programs), even if the Copyright Holder or said author or said other
+party has been advised of the possibility of such damages.
+
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder
+explicitly and prominently states near the primary copyright notice in
+the Work that the Work can only be maintained by the Copyright Holder
+or simply that it is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer
+who has indicated in the Work that they are willing to receive error
+reports for the Work (for example, by supplying a valid e-mail
+address). It is not required for the Current Maintainer to acknowledge
+or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there
+is no Current Maintainer, or the person stated to be Current
+Maintainer of the work cannot be reached through the indicated means
+of communication for a period of six months, and there are no other
+significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with
+any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of
+the Work through the following steps:
+
+ 1. Make a reasonable attempt to trace the Current Maintainer (and
+ the Copyright Holder, if the two differ) through the means of
+ an Internet or similar search.
+
+ 2. If this search is successful, then enquire whether the Work
+ is still maintained.
+
+ a. If it is being maintained, then ask the Current Maintainer
+ to update their communication data within one month.
+
+ b. If the search is unsuccessful or no action to resume active
+ maintenance is taken by the Current Maintainer, then announce
+ within the pertinent community your intention to take over
+ maintenance. (If the Work is a LaTeX work, this could be
+ done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass
+ maintenance of the Work to you, then this takes effect
+ immediately upon announcement.
+
+ b. If the Current Maintainer is not reachable and the Copyright
+ Holder agrees that maintenance of the Work be passed to you,
+ then this takes effect immediately upon announcement.
+
+ 4. If you make an `intention announcement' as described in 2b. above
+ and after three months your intention is challenged neither by
+ the Current Maintainer nor by the Copyright Holder nor by other
+ people, then you may arrange for the Work to be changed so as
+ to name you as the (new) Current Maintainer.
+
+ 5. If the previously unreachable Current Maintainer becomes
+ reachable once more within three months of a change completed
+ under the terms of 3b) or 4), then that Current Maintainer must
+ become or remain the Current Maintainer upon request provided
+ they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact
+that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should
+immediately provide, within the Work, a prominent and unambiguous
+statement of your status as Current Maintainer. You should also
+announce your new status to the same pertinent community as
+in 2b) above.
+
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+works under this license. These authors are addressed as `you' in
+this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution*
+conditions that differ significantly from those in this license, then
+do not refer to this license anywhere in your work but, instead,
+distribute your work under a different license. You may use the text
+of this license as a model for your own license, but your license
+should not refer to the LPPL or otherwise give the impression that
+your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains
+the motivation behind the conditions of this license. It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate. Even if your work is
+unrelated to LaTeX, the discussion in `modguide.tex' may still be
+relevant, and authors intending to distribute their works under any
+license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own
+personal use, without also meeting the above conditions for
+distributing the modified component. While you might intend that such
+modifications will never be distributed, often this will happen by
+accident -- you may forget that you have modified that component; or
+it may not occur to you when allowing others to access the modified
+version that you are thus distributing it and violating the conditions
+of this license in ways that could have legal implications and, worse,
+cause problems for the community. It is therefore usually in your
+best interest to keep your copy of the Work identical with the public
+one. Many works provide ways to control the behavior of that work
+without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both
+an explicit copyright notice including your name and the year the work
+was authored and/or last substantially modified. Include also a
+statement that the distribution and/or modification of that
+component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+ %% pig.dtx
+ %% Copyright 2005 M. Y. Name
+ %
+ % This work may be distributed and/or modified under the
+ % conditions of the LaTeX Project Public License, either version 1.3
+ % of this license or (at your option) any later version.
+ % The latest version of this license is in
+ % http://www.latex-project.org/lppl.txt
+ % and version 1.3 or later is part of all distributions of LaTeX
+ % version 2005/12/01 or later.
+ %
+ % This work has the LPPL maintenance status `maintained'.
+ %
+ % The Current Maintainer of this work is M. Y. Name.
+ %
+ % This work consists of the files pig.dtx and pig.ins
+ % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions
+given in this license document would apply, with the `Work' referring
+to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
+generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
+referring to any `LaTeX-Format', and both `Copyright Holder' and
+`Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your
+Work, change `maintained' above into `author-maintained'.
+However, we recommend that you use `maintained', as the Maintenance
+section was added in order to ensure that your Work remains useful to
+the community even when you can no longer maintain and support it
+yourself.
+
+Derived Works That Are Not Replacements
+---------------------------------------
+
+Several clauses of the LPPL specify means to provide reliability and
+stability for the user community. They therefore concern themselves
+with the case that a Derived Work is intended to be used as a
+(compatible or incompatible) replacement of the original Work. If
+this is not the case (e.g., if a few lines of code are reused for a
+completely different task), then clauses 6b and 6d shall not apply.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes the Work
+
+ The LPPL requires that distributions of the Work contain all the
+ files of the Work. It is therefore important that you provide a
+ way for the licensee to determine which files constitute the Work.
+ This could, for example, be achieved by explicitly listing all the
+ files of the Work near the copyright notice of each file or by
+ using a line such as:
+
+ % This work consists of all files listed in manifest.txt.
+
+ in that place. In the absence of an unequivocal list it might be
+ impossible for the licensee to determine what is considered by you
+ to comprise the Work and, in such a case, the licensee would be
+ entitled to make reasonable conjectures as to which files comprise
+ the Work.
+
diff --git a/macros/latex/contrib/jwjournal/README.md b/macros/latex/contrib/jwjournal/README.md
new file mode 100644
index 0000000000..dac0d68bfb
--- /dev/null
+++ b/macros/latex/contrib/jwjournal/README.md
@@ -0,0 +1,113 @@
+<!-- Copyright (C) 2023 by Jinwen XU -->
+
+# `jwjournal`, a personal LaTeX class for writing journals
+
+## Introduction
+
+A typical journal entry produced by `jwjournal` looks like this:
+![image](https://github.com/Jinwen-XU/jwjournal/raw/main/screenshots/demo1.png)
+
+Codewise, it is as simple as below:
+```
+2023-01-01 Sunny --- Botanical Garden
+
+ Today I visited the botanical garden!
+
+ [Food] And had ice-cream for lunch!
+```
+
+Every day of the week has its unique color, like this:
+![image](https://github.com/Jinwen-XU/jwjournal/raw/main/screenshots/demo2.png)
+
+By the way, the conversion from plain date string like `2023-01-01` to natural language like `January 1, 2023 | Sunday` is done automatically by `jwjournal` and has multilingual support. Thus, for example (with `\UseLanguage{...}`):
+- Chinese: ![image](https://github.com/Jinwen-XU/jwjournal/raw/main/screenshots/demo3-cn.png)
+- French: ![image](https://github.com/Jinwen-XU/jwjournal/raw/main/screenshots/demo3-fr.png)
+- German: ![image](https://github.com/Jinwen-XU/jwjournal/raw/main/screenshots/demo3-de.png)
+- Japanese: ![image](https://github.com/Jinwen-XU/jwjournal/raw/main/screenshots/demo3-jp.png)
+- Spanish: ![image](https://github.com/Jinwen-XU/jwjournal/raw/main/screenshots/demo3-es.png)
+- ... and more...
+
+## Usage
+
+The structure of the document is very simple:
+```latex
+\documentclass[11pt, paperstyle=light yellow, color entry]{jwjournal}
+\begin{document}
+
+% Your journal
+
+\end{document}
+```
+The options are:
+- `paperstyle = ...` adjusts the paper color, options include: lightyellow、yellow、parchment、green、lightgray、gray、nord、dark...
+- `color entry` adds more color to the title of each entry
+- `scroll` turns on the scroll mode and can generate a single-page pdf similar to a long screenshot
+
+And there are only three syntaxes for the main text:
+1) Title
+ - Any line begins with date like `2023-01-01` would be regard as the Title line.
+ - You may write the weather and/or location after the date.
+ - Example:
+ ```
+ 2023-01-01 Sunny --- Apartment
+ ```
+2) Note
+ - Any line begins with something like `[Note]` would be regard as the Note line.
+ - Example:
+ ```
+ [Note] In hindsight, it was the right decision.
+ ```
+3) `+++`
+ - In some rare case, if a single sentence or a few words fall to the next page, you may write a `+++` to enlarge the current page by one line.
+
+> You may also refer to the demo documents to see their behaviors in action.
+
+Indentations are not important, but paragraphs need to be separated by a blank line. For the sake of readability, it is recommended to organize your text as follows:
+```
+2023-01-01 Sunny
+
+ ......
+ ......
+
+
+
+2023-01-02 Cloudy
+
+ ......
+ ......
+
+
+
+2023-01-03 Rainy
+
+ ......
+ ......
+```
+
+## TeXnical details
+
+### Engines and base classes
+- With pdfLaTeX, the base class is `minimart`.
+- With XeLaTeX or LuaLaTeX, the base class is `einfart`.
+
+### Colors
+The colors from Monday to Sunday have the internal names `jwjournal-color-1`, ..., `jwjournal-color-7`. Currently they are defined as:
+```latex
+\colorlet { jwjournal-color-1 } { yellow!50!green }
+\colorlet { jwjournal-color-2 } { yellow!70!orange }
+\colorlet { jwjournal-color-3 } { cyan!70!blue }
+\colorlet { jwjournal-color-4 } { violet }
+\colorlet { jwjournal-color-5 } { yellow!40!cyan }
+\colorlet { jwjournal-color-6 } { yellow!20!orange }
+\colorlet { jwjournal-color-7 } { red!20!orange }
+```
+
+### Functionality
+The main features are achieved with the power of LaTeX3's regex functionality. It scans the content paragraph by paragraph and converts recognized patterns into corresponding TeX commands. Thus, `2023-01-01 Weather` becomes `\JWJournalEntry{2023-01-01}{Weather}`, `[Note] ...` becomes `\item[Note] ...` inside a `description` environment, and `+++` is essentially `\enlargethispage*{\baselineskip}`. However, this comes with a price: in order to scan the content, it is firstly stored in a macro `\g_jwjournal_content_tl`, and that means that you cannot use commands like `\verb` in your main text.
+
+### Scroll mode
+The scroll mode is achieved by directly accessing `\pdfpageheight` (pdfTeX and XeTeX) or `\pageheight` (LuaTeX). The minimal page height is set to be `10in`. It is worth noting that in order to calculate the height needed, the entire content are put into a single box, which puts a limitation on the length of your document (but this usually wouldn't be a problem).
+
+# License
+
+This work is released under the LaTeX Project Public License, v1.3c or later.
diff --git a/macros/latex/contrib/jwjournal/jwjournal-demo-cn.pdf b/macros/latex/contrib/jwjournal/jwjournal-demo-cn.pdf
new file mode 100644
index 0000000000..ec262d7e2a
--- /dev/null
+++ b/macros/latex/contrib/jwjournal/jwjournal-demo-cn.pdf
Binary files differ
diff --git a/macros/latex/contrib/jwjournal/jwjournal-demo-cn.tex b/macros/latex/contrib/jwjournal/jwjournal-demo-cn.tex
new file mode 100644
index 0000000000..4e0732a709
--- /dev/null
+++ b/macros/latex/contrib/jwjournal/jwjournal-demo-cn.tex
@@ -0,0 +1,71 @@
+\documentclass[11pt, paperstyle=light yellow, color entry]{jwjournal}
+% paperstyle = ... 用于调节纸张颜色,可选项包括:lightyellow、yellow、parchment、green、lightgray、gray、nord、dark
+% color entry 可以为每个条目的标题增添更多色彩
+% scroll 可以开启卷轴模式,生成类似于长截图的单页 pdf
+
+\UseLanguage { Chinese }
+
+\begin{document}
+
+
+2023-01-01 晴 —— 公寓
+
+ 在文中出现的日期和标注不会被识别: 2022-02-02、[标注],放心使用
+
+ [体育] 一些关于体育赛事的事情
+
+ [学习] 一些关于学习的事情
+
+
+
+2023-01-02
+不明(天气也可以写在第二行,看你的喜好)
+
+ 标签的颜色会根据日期改变:
+
+ [学习] 今天没有学习,但我写了很多很多很多很多很多很多很多很多很多很多很多很多很多很多很多很多代码。
+
+
+
+2023-01-03
+
+ [注] 如果只写了日期,那么后面就不会有第二个分隔符。
+
+
++++
+2023-01-04 多云
+
+ 三个加号 \texttt{+++} 可以将当前页面显示的文字多出一行左右,有时候单独的一句话或者几个字落到了下一页,这时可以用它来改善一下显示的效果。
+
+
+
+2023-01-05 多云
+
+ ...
+
+
+
+2023-01-06 多云
+
+ ...
+
+
+
+2023-01-07 多云
+
+ ...
+
+
+
+2023-01-08 多云
+
+ 一周之后,又会回到之前的颜色
+
+
+
+2023-01-09 多云
+
+ ...
+
+
+\end{document}
diff --git a/macros/latex/contrib/jwjournal/jwjournal-demo-en.pdf b/macros/latex/contrib/jwjournal/jwjournal-demo-en.pdf
new file mode 100644
index 0000000000..feeffd829c
--- /dev/null
+++ b/macros/latex/contrib/jwjournal/jwjournal-demo-en.pdf
Binary files differ
diff --git a/macros/latex/contrib/jwjournal/jwjournal-demo-en.tex b/macros/latex/contrib/jwjournal/jwjournal-demo-en.tex
new file mode 100644
index 0000000000..217c8decf4
--- /dev/null
+++ b/macros/latex/contrib/jwjournal/jwjournal-demo-en.tex
@@ -0,0 +1,69 @@
+\documentclass[11pt, paperstyle=light yellow, color entry]{jwjournal}
+% "paperstyle = ..." adjusts the paper color, options include: lightyellow、yellow、parchment、green、lightgray、gray、nord、dark
+% "color entry" adds more color to the title of each entry
+% "scroll" turns on the scroll mode and can generate a single-page pdf similar to a long screenshot
+
+\begin{document}
+
+
+2023-01-01 Sunny --- Apartment
+
+ Dates and annotations appearing in the text will not be recognized: 2022-02-02, [Annotation], so feel free to write them
+
+ [Sports] something about sporting events
+
+ [Learning] something about learning
+
+
+
+2023-01-02
+Unknown (the weather can also be written on the second line, depending on your preference)
+
+ The color of the labels will change according to the date.
+
+ [Note] I didn't study today, but I wrote many many many many many many many many many many many many code.
+
+
+
+2023-01-03
+
+ [Note] If only the date is written, then there would be no second separator after it.
+
+
++++
+2023-01-04 Cloudy
+
+ Three plus signs \texttt{+++} can enlarge the current page by about one line. Sometimes a single sentence or a few words fall to the next page --- in such cases, you may use it to improve the display effect.
+
+
+
+2023-01-05 Cloudy
+
+ ...
+
+
+
+2023-01-06 Cloudy
+
+ ...
+
+
+
+2023-01-07 Cloudy
+
+ ...
+
+
+
+2023-01-08 Cloudy
+
+ A week later, the color goes back to the earlier one.
+
+
+
+2023-01-09 Cloudy
+
+ ...
+
+
+\end{document}
diff --git a/macros/latex/contrib/jwjournal/jwjournal-demo-fr.pdf b/macros/latex/contrib/jwjournal/jwjournal-demo-fr.pdf
new file mode 100644
index 0000000000..4ac98e9417
--- /dev/null
+++ b/macros/latex/contrib/jwjournal/jwjournal-demo-fr.pdf
Binary files differ
diff --git a/macros/latex/contrib/jwjournal/jwjournal-demo-fr.tex b/macros/latex/contrib/jwjournal/jwjournal-demo-fr.tex
new file mode 100644
index 0000000000..c9c1cd20cc
--- /dev/null
+++ b/macros/latex/contrib/jwjournal/jwjournal-demo-fr.tex
@@ -0,0 +1,71 @@
+\documentclass[11pt, paperstyle=light yellow, color entry]{jwjournal}
+% "paperstyle = ..." ajuste la couleur du papier, les options incluent : lightyellow、yellow、parchment、green、lightgray、gray、nord、dark
+% "color entry" ajoute plus de couleur au titre de chaque entrée
+% "scroll" active le mode de défilement et peut générer un pdf d'une seule page similaire à une longue capture d'écran
+
+\UseLanguage { French }
+
+\begin{document}
+
+
+2023-01-01 Ensoleillé --- Appartement
+
+ Les dates et annotations apparaissant dans le texte ne seront pas reconnues : 2022-02-02, [Annotation], alors n'hésitez pas à les écrire.
+
+ [Sports] quelque chose sur les événements sportifs
+
+ [Apprendre] quelque chose sur l'apprentissage
+
+
+
+2023-01-02
+Inconnu (la météo peut aussi être écrite sur la deuxième ligne, selon votre préférence)
+
+ La couleur des étiquettes changera en fonction de la date.
+
+ [Note] Je n'ai pas étudié aujourd'hui, mais j'ai écrit beaucoup beaucoup beaucoup beaucoup beaucoup beaucoup beaucoup beaucoup beaucoup de code.
+
+
+
+2023-01-03
+
+ [Note] Si seule la date est écrite, il n'y aura pas de deuxième séparateur après celle-ci.
+
+
++++
+2023-01-04 Nuageux
+
+ Trois signes plus \texttt{+++} peuvent agrandir la page courante d'environ une ligne. Parfois, une seule phrase ou quelques mots tombent sur la page suivante --- dans de tels cas, vous pouvez l'utiliser pour améliorer l'effet d'affichage.
+
+
+
+2023-01-05 Nuageux
+
+ ...
+
+
+
+2023-01-06 Nuageux
+
+ ...
+
+
+
+2023-01-07 Nuageux
+
+ ...
+
+
+
+2023-01-08 Nuageux
+
+ Une semaine plus tard, la couleur revient à la précédente...
+
+
+
+2023-01-09 Nuageux
+
+ ...
+
+
+\end{document}
diff --git a/macros/latex/contrib/jwjournal/jwjournal.cls b/macros/latex/contrib/jwjournal/jwjournal.cls
new file mode 100644
index 0000000000..5d0b6754dc
--- /dev/null
+++ b/macros/latex/contrib/jwjournal/jwjournal.cls
@@ -0,0 +1,214 @@
+%%
+%% Copyright (C) 2023 by Jinwen XU
+%% -------------------------------
+%%
+%% This file may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License, either version 1.3c of this license
+%% or (at your option) any later version. The latest version of this
+%% license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+\NeedsTeXFormat{LaTeX2e}[2022-06-01]
+\ProvidesExplClass
+ {jwjournal}
+ {2023/01/05} {}
+ {JW's journal class}
+
+\keys_define:nn { jwjournal }
+ {
+ , scroll .bool_set:N = \l__jwjournal_scroll_bool
+ , scroll .initial:n = { false }
+ , color entry .bool_set:N = \l__jwjournal_color_entry_bool
+ , color entry .initial:n = { false }
+ , color~entry .bool_set:N = \l__jwjournal_color_entry_bool
+ , color-entry .bool_set:N = \l__jwjournal_color_entry_bool
+ , unknown .code:n = {
+ \PassOptionsToClass { \CurrentOption } { minimart }
+ \PassOptionsToClass { \CurrentOption } { einfart }
+ \PassOptionsToPackage { \CurrentOption } { ProjLib }
+ }
+ }
+\ProcessKeyOptions [ jwjournal ]
+
+\sys_if_engine_pdftex:TF
+ {
+ \PassOptionsToClass { use indent = false } { minimart }
+ \LoadClass { minimart }
+ }
+ {
+ \PassOptionsToClass { use indent = false } { einfart }
+ \LoadClass { einfart }
+ }
+
+\RequirePackage { ProjLib }
+
+\PassOptionsToPackage { many } { tcolorbox }
+\RequirePackage { tcolorbox }
+\RequirePackage { needspace }
+
+\colorlet { jwjournal-color-1 } { yellow!50!green }
+\colorlet { jwjournal-color-2 } { yellow!70!orange }
+\colorlet { jwjournal-color-3 } { cyan!70!blue }
+\colorlet { jwjournal-color-4 } { violet }
+\colorlet { jwjournal-color-5 } { yellow!40!cyan }
+\colorlet { jwjournal-color-6 } { yellow!20!orange }
+\colorlet { jwjournal-color-7 } { red!20!orange }
+
+\NewDocumentCommand \JWJournalEntry { m m }
+ {
+ \skip_vertical:n { .5 \baselineskip }
+ \needspace { 2 \baselineskip }
+ \projlib_datetime_calculate_week_according_to_format:n { #1 }
+ \colorlet { jwjournal-entry } { jwjournal-color- \int_use:N \l__projlib_datetime_day_of_week_result_int }
+ \bool_if:NTF \l__jwjournal_color_entry_bool
+ {
+ \colorlet { jwjournal-entry-background } { jwjournal-entry!10!paper }
+ }
+ {
+ \colorlet { jwjournal-entry-background } { paper }
+ }
+ \begin{tcolorbox}[enhanced~jigsaw, breakable, enlarge~left~by=-3.5mm, width=\textwidth+3.5mm, colback=jwjournal-entry-background, boxrule=0pt, top=2pt, bottom=2pt, left=2.5mm, borderline~west={1.5mm}{0mm}{jwjournal-entry!90!main-text}, frame~hidden]
+ \sffamily \bfseries
+ \bool_if:NT \l__jwjournal_color_entry_bool
+ {
+ \color {jwjournal-entry!30!main-text}
+ }
+ \ProjLibDate {#1}
+ \enspace
+ \tikz [x=.75ex,y=.75ex,line~width=.2ex,line~join=round,baseline=-.3ex] \draw [jwjournal-entry!60!main-text] (0,.5) -- (.5,1) -- (1,.5) -- (.5,0) -- (0,.5) -- cycle;
+ \enspace
+ \projlib_datetime_display_week:n { #1 }
+ \tl_if_blank:eF { #2 }
+ {
+ \enspace
+ \tikz [x=.75ex,y=.75ex,line~width=.2ex,line~join=round,baseline=-.3ex] \draw [jwjournal-entry!60!main-text] (0,.5) -- (.5,1) -- (1,.5) -- (.5,0) -- (0,.5) -- cycle;
+ \enspace
+ #2
+ }
+ \end{tcolorbox}
+ \nopagebreak
+ }
+
+\RequirePackage { enumitem }
+\setlist [ description ] { font = \normalfont\sffamily, leftmargin = 3em}
+\RenewDocumentCommand \descriptionlabel { m }
+ {
+ \skip_horizontal:n { \labelsep }
+ \makebox[\maxof{\width}{2.5em}]{
+ \tcbox[enhanced~jigsaw, breakable, oversize,
+ on~line, arc = .12em, outer~arc = .1em,
+ colframe = jwjournal-entry, colupper=main-text, opacityback = 0,
+ boxsep = .1em, boxrule = .125em,
+ left = .1em, right = .1em, top = .05em, bottom = .05em] { #1 }
+ }
+ }
+\NewDocumentCommand \JWJournalItem { m }
+ {
+ \begin{description}
+ \item #1
+ \end{description}
+ }
+
+\tl_new:N \g_jwjournal_content_tl
+\NewDocumentEnvironment { jwjournal } { +b }
+ {
+ \tl_gset:Nn \g_jwjournal_content_tl { #1 }
+ \jwjournal_parse_content:N \g_jwjournal_content_tl
+ \tl_use:N \g_jwjournal_content_tl
+ }
+ {}
+
+\seq_new:N \l_jwjournal_tmp_seq
+\cs_generate_variant:Nn \regex_split:nnN { nVN }
+\cs_new:Nn \jwjournal_parse_content:N
+ {
+ \regex_split:nVN { \c{par} } #1 \l_jwjournal_tmp_seq
+ \tl_set:Nn \g_jwjournal_content_tl {}
+ \seq_map_inline:Nn \l_jwjournal_tmp_seq
+ {
+ \tl_set:Nn \l_tmpa_tl { ❄️ ##1 }
+ \regex_match:nVTF { ❄️ +++ (.*) } \l_tmpa_tl
+ {
+ \bool_set_true:N \l_tmpa_bool
+ \regex_replace_all:nnN
+ { ❄️ +++ (.*) }
+ { ❄️ \1 }
+ \l_tmpa_tl
+ }
+ {
+ \bool_set_false:N \l_tmpa_bool
+ }
+ \regex_replace_all:nnN
+ { ❄️ (\ *)? (\d{4}-\d{1,2}-\d{1,2}) (\ *)? (.*) }
+ { \c{JWJournalEntry} {\2} {\4} }
+ \l_tmpa_tl
+ \regex_replace_all:nnN
+ { ❄️ (\[.*\] .*) }
+ { \c{JWJournalItem} {\1} }
+ \l_tmpa_tl
+ \regex_replace_all:nnN { ❄️ } { } \l_tmpa_tl
+ \bool_if:NT \l_tmpa_bool
+ {
+ \tl_gput_right:Nn \g_jwjournal_content_tl { \g_jwjournal_enlarge_page_by_one_line_tl }
+ }
+ \tl_gput_right:NV \g_jwjournal_content_tl \l_tmpa_tl
+ \tl_gput_right:Nn \g_jwjournal_content_tl { \par }
+ }
+ }
+
+\bool_if:NTF \l__jwjournal_scroll_bool
+ {
+ \tl_const:Nn \g_jwjournal_enlarge_page_by_one_line_tl {}
+ \geometry{
+ papersize={7in,\maxdimen},
+ top=.75in,bottom=.75in,
+ left=.75in,right=.66in,
+ marginparsep=.75em,
+ marginparwidth=.75in,
+ footnotesep=2em plus 2pt minus 2pt,
+ }
+ \hook_gput_code:nnn { begindocument } { jwjournal }
+ {
+ \setbox0=\vbox
+ \bgroup
+ \begin { jwjournal }
+ }
+ \providecommand{\pdfpageheight}{\pageheight}
+ \hook_gput_code:nnn { enddocument } { jwjournal }
+ {
+ \end { jwjournal }
+ \egroup
+ \dimen0=\dp0
+ \pdfpageheight=\dimexpr\ht0+1.5in\relax
+ \ifdim\pdfpageheight<10in
+ \pdfpageheight=10in
+ \fi
+ \unvbox0\kern-\dimen0
+ }
+ }
+ {
+ \tl_const:Nn \g_jwjournal_enlarge_page_by_one_line_tl { \enlargethispage*{\baselineskip} }
+ \geometry{
+ papersize={7in,10in},
+ top=.75in,bottom=.75in,
+ left=.75in,right=.66in,
+ marginparsep=.75em,
+ marginparwidth=.75in,
+ footnotesep=2em plus 2pt minus 2pt,
+ }
+ \hook_gput_code:nnn { begindocument } { jwjournal }
+ {
+ \begin { jwjournal }
+ }
+ \hook_gput_code:nnn { enddocument } { jwjournal }
+ {
+ \end { jwjournal }
+ }
+ }
+
+\pagestyle { empty }
+
+\endinput
+%%
+%% End of file `jwjournal.cls'.
diff --git a/macros/luatex/generic/luakeys/README.md b/macros/luatex/generic/luakeys/README.md
index 2779de92e8..b4a0ddb8a8 100644
--- a/macros/luatex/generic/luakeys/README.md
+++ b/macros/luatex/generic/luakeys/README.md
@@ -14,7 +14,7 @@ mechanism should be pretty robust.
## License
-Copyright 2021-2022 Josef Friedrich
+Copyright 2021-2023 Josef Friedrich
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either version 1.3c
@@ -48,11 +48,16 @@ local defs = {
-- Only values listed in the array table are allowed.
choices = { 'one', 'two', 'three' },
- -- Possible data types: boolean, dimension, integer, number, string
+ -- Possible data types:
+ -- any, boolean, dimension, integer, number, string, list
data_type = 'string',
+ -- To provide a default value for each naked key individually.
default = true,
+ -- Can serve as a comment.
+ description = 'Describe your key-value pair.',
+
-- The key belongs to a mutually exclusive group of keys.
exclusive_group = 'name',
@@ -64,11 +69,27 @@ local defs = {
-- The name of the key, can be omitted
name = 'key',
+
+ -- Convert opposite (naked) keys
+ -- into a boolean value and store this boolean under a target key:
+ -- show -> opposite_keys = true
+ -- hide -> opposite_keys = false
+ -- Short form: opposite_keys = { 'show', 'hide' }
opposite_keys = { [true] = 'show', [false] = 'hide' },
+
+ -- Pick a value by its data type:
+ -- 'any', 'string', 'number', 'dimension', 'integer', 'boolean'.
+ pick = false, -- ’false’ disables the picking.
+
+ -- A function whose return value is passed to the key.
process = function(value, input, result, unknown)
return value
end,
+
+ -- To enforce that a key must be specified.
required = true,
+
+ -- To build nested key-value pair definitions.
sub_keys = { key_level_2 = { } },
}
}
@@ -78,6 +99,9 @@ local defs = {
```lua
local opts = {
+ -- Result table that is filled with each call of the parse function.
+ accumulated_result = accumulated_result,
+
-- Configure the delimiter that assigns a value to a key.
assignment_operator = '=',
@@ -176,9 +200,6 @@ local result = luakeys.parse('one,two,three', opts)
[Lua](https://marketplace.visualstudio.com/items?itemName=sumneko.lua)
extension in Visual Studio Code. This extension understands the modified
[EmmyLua annotations](https://github.com/sumneko/lua-language-server/wiki/Annotations).
-The Lua source code documentation is generated with
-[LDoc](https://stevedonovan.github.io/ldoc/manual/doc.md.html).
-
The Lua code is automatically formatted with the help of the
[LuaFormatter](https://github.com/Koihik/LuaFormatter).
@@ -212,7 +233,7 @@ This project uses [semantic versioning](https://semver.org).
Update version in:
-* luakeys-doc.tex
+* documentation.tex
* luakeys-debug.sty
* luakeys.sty
* luakeys.lua
diff --git a/macros/luatex/generic/luakeys/luakeys-doc.tex b/macros/luatex/generic/luakeys/documentation.tex
index 90041ec581..42da7c1acc 100644
--- a/macros/luatex/generic/luakeys/luakeys-doc.tex
+++ b/macros/luatex/generic/luakeys/documentation.tex
@@ -13,9 +13,9 @@
\usepackage{syntax}
\usepackage{graphicx}
+\definecolor{bg}{rgb}{0.95,0.95,0.95}
+
\usemintedstyle{friendly}
-\BeforeBeginEnvironment{minted}{\begin{mdframed}}
-\AfterEndEnvironment{minted}{\end{mdframed}}
\setminted{
breaklines=true,
fontsize=\footnotesize,
@@ -25,15 +25,19 @@
\def\latex#1{\mintinline{latex}|#1|}
\NewDocumentCommand { \InputLatex } { O{} m } {
- \begin{mdframed}
- \inputminted[linenos=false,#1]{latex}{examples/#2}
- \end{mdframed}
+ \inputminted[
+ linenos=false,
+ bgcolor=bg,
+ #1
+ ]{latex}{examples/#2}
}
\NewDocumentCommand { \InputLua } { O{} m } {
- \begin{mdframed}
- \inputminted[linenos=false,#1]{lua}{examples/#2}
- \end{mdframed}
+ \inputminted[
+ linenos=false,
+ bgcolor=bg,
+ #1
+ ]{lua}{examples/#2}
}
\catcode`_=12
@@ -60,7 +64,7 @@ The default value of the option “\texttt{#1}” is:
\href{https://github.com/Josef-Friedrich/luakeys}
{github.com/Josef-Friedrich/luakeys}%
}
-\date{0.11.0 from 2022/12/23}
+\date{v0.12.0 from 2023/01/05}
\maketitle
@@ -103,7 +107,7 @@ Result:
\noindent
% |luakeys| ist ein Lua-Modul / Lua\TeX package, das wie die Pakete ...
% Schlüssel-Wert-Optionen analysieren kann.
-|luakeys| is a Lua module / Lua\TeX package that can parse key-value
+|luakeys| is a Lua module / Lua\TeX{} package that can parse key-value
options like the \TeX{} packages
\href{https://www.ctan.org/pkg/keyval}{keyval},
\href{https://www.ctan.org/pkg/kvsetkeys}{kvsetkeys},
@@ -137,6 +141,18 @@ The TUGboat article
{“Implementing key–value input: An introduction” (Volume 30 (2009), No.
1)} by \emph{Joseph Wright} and \emph{Christian Feuersänger} gives a
good overview of the available key-value packages.
+%
+% Dieser Artikel geht auf eine auf tex.stackexchange.com von Will
+% Robertson: gestellte Frage zurück.
+This article is based on a question asked on tex.stackexchange.com by
+Will Robertson:
+\href{https://tex.stackexchange.com/questions/26771}
+{A big list of every keyval package}.
+%
+% CTAN stellt auch eine Übersichtsseite zum Thema bereit.
+CTAN also provides an overview page on the subject of
+\href{https://www.ctan.org/topic/keyval}
+{Key-Val: packages with key-value argument systems}.
% Dieses Paket wäre ohne den Artikel
% \href{https://tug.org/TUGboat/tb40-2/tb125menke-lpeg.pdf}
@@ -154,9 +170,8 @@ No. 2)}.
% context) analysiert werden.
\item Key-value pairs can be parsed independently of the macro
collection (\LaTeX{} or Con\TeX{}t).
-
-% \item Sogar in Plain LuaTex können Schlüssel analysiert werden
-\item Even in plain Lua\TeX{} keys can be parsed.
+% Sogar in Plain LuaTex können Schlüssel analysiert werden
+Even in plain Lua\TeX{} keys can be parsed.
% \item |luakeys| kann mit ineinander verschachtelten listen an
% Schlüssel-Wert-Paaren umgehen, d. h. es kann mit einer rekursiven
@@ -222,18 +237,10 @@ wrapper files.
Probably MiK\TeX{} is searching for an occurrence of the \LaTeX{} macro
“\latex{\usepackage{luakeys}}”.
%
-% Die mitgelieferte Lua\LaTeX{}-Datei ist recht klein:
-The supplied Lua\LaTeX{} file is quite small:
-
-\begin{minted}{latex}
-\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{luakeys}
-\directlua{luakeys = require('luakeys')}
-\end{minted}
-
-\noindent
-% Es lädt das Lua-Modul in die globale Variable \texttt{luakeys}.
-It loads the Lua module into the global variable \texttt{luakeys}.
+% Die Datei \texttt{luakeys.sty} lädt das Lua-Modul in die globale
+% Variable \texttt{luakeys}.
+The \texttt{luakeys.sty} file loads the Lua module into the global
+variable \texttt{luakeys}.
\InputLatex{loading/tex-latex.tex}
@@ -245,22 +252,13 @@ It loads the Lua module into the global variable \texttt{luakeys}.
% \texttt{luakeys.tex}}
\subsection{Using the plain Lua\TeX{} wrapper \texttt{luakeys.tex}}
-% Noch kleiner ist die Datei \texttt{luakeys.tex}.
-Even smaller is the file \texttt{luakeys.tex}.
-%
-% Sie besteht aus nur einer Zeile:
-It consists of only one line:
-
-\begin{minted}{latex}
-\directlua{luakeys = require('luakeys')}
-\end{minted}
-
\noindent
% Es macht dasselbe wie das Lua\LaTeX{}-Hüllpacket und lädt das
% Lua-Modul \texttt{luakeys.lua} in die globale Variable
% \texttt{luakeys}.
-It does the same as the Lua\LaTeX{} wrapper and loads the Lua module
-\texttt{luakeys.lua} into the global variable \texttt{luakeys}.
+The file \texttt{luakeys.tex} does the same as the Lua\LaTeX{} wrapper
+and loads the Lua module \texttt{luakeys.lua} into the global variable
+\texttt{luakeys}.
\InputLatex{loading/tex-plain.tex}
@@ -270,27 +268,15 @@ It does the same as the Lua\LaTeX{} wrapper and loads the Lua module
\section{Lua interface / API}
+% Luakeys exportiert nur eine Funktion, die aufgerufen werden muss, um auf
+% die öffentliche API zuzugreifen
+Luakeys exports only one function that must be called to access the
+public API.
+%
% Das Lua-Modul exportiert diese Funktionen und Tabellen:
The Lua module exports this functions and tables:
-\InputLua[firstline=3,lastline=15]{export.lua}
-
-\noindent
-% Diese Dokumentation stellt nur die öffentlichen Funktionen und
-% Tabellen vor.
-This documentation presents only the public functions and tables.
-%
-% Um mehr über die privaten, nicht exportierten Funktionen zu erfahren,
-% lesen Sie bitte die
-% \href{https://josef-friedrich.github.io/luakeys/}{Quellcode
-% Dokumentation}, die mit
-% \href{http://stevedonovan.github.io/ldoc/}{LDoc} erstellt wurde.
-To learn more about the private, not exported functions, please
-read the \href{https://josef-friedrich.github.io/luakeys/}{source code
-documentation}, which was created with
-\href{http://stevedonovan.github.io/ldoc/}{LDoc}.
-
-\subsection{Lua indentifier names}
+\InputLua[firstline=3,lastline=16]{export.lua}
% Das Projekt verwendet einige wenige Abkürzungen für Variablennamen,
% die hoffentlich für externe Leser eindeutig und bekannt sind.
@@ -334,34 +320,6 @@ The raw result of the Lpeg grammar parser. \\
%
%%
-\subsection{Function “\texttt{get_private_instance(): table}”}
-\label{function:get-private-instance}
-
-% Über die Tabelle \lua{opts} können die Standardoptionen global
-% geändert werden.
-The default options can be changed globally via the \lua{opts} table
-(\ref{table-opts}).
-% Um zu verhindern, dass andere Module die Standardeinstellungen
-% ändern, kann mit Hilfe der Funktion \lua{get_private_instance()} eine neue
-% Instanz des Moduls \lua{luakeys} erzeugt werden.
-To prevent another modules from changing the default settings, a new
-instance of the \lua{luakeys} module can be created using the
-\lua{get_private_instance()} function.
-
-\InputLua[firstline=3,lastline=4]{functions/get-private-instance.lua}
-
-\noindent
-% Die Funktion \lua{require()} gibt standardmäßig beim mehrmaligen
-% Aufruf immer die gleiche Tabelle zurück.
-The \lua{require()} function always returns the same table
-when called multiple times.
-
-\InputLua[firstline=14,lastline=17]{functions/get-private-instance.lua}
-
-%%
-%
-%%
-
\subsection{Function “\texttt{parse(kv_string, opts): result, unknown,
raw}”}
\label{parse}
@@ -391,7 +349,7 @@ The \lua{parse} function can be called with an options table.
This options are supported: \catcode`_=12
\directlua{luakeys.print_names('opts')}
-\InputLua[firstline=5,lastline=94]{opts/all-opts.lua}
+\InputLua[firstline=7,lastline=99]{opts/all-opts.lua}
\subsection{Table “\texttt{opts}”}
\label{table-opts}
@@ -419,6 +377,23 @@ set the options globally, it is recommended to use the
%
%%
+\subsubsection{Option “\texttt{accumulated_result}”}
+
+% Streng genommen handelt es sich hier um keine Option
+Strictly speaking, this is not an option.
+%
+% Mit der Option \lua{accumulated_result} kann eine Ergebnistabelle
+% angegeben werden, die bei jedem Aufruf der \lua{parse}-Funktion weiter
+% befüllt wird.
+The \lua{accumulated_result} “option” can be used to specify a result
+table that is filled with each call of the \lua{parse} function.
+
+\InputLua[firstline=5,lastline=14]{opts/accumulated-result.lua}
+
+%%
+%
+%%
+
\subsubsection{Option “\texttt{assignment_operator}”}
\label{option:assignment-operator}
\label{options-delimiter}
@@ -486,7 +461,7 @@ tex.print(number.todimen(tex.sp('1cm'), 'cm', '%0.0F%s'))
% Wenn die Option \lua{debug} auf true gesetzt ist, wird die
% Ergebnistabelle in der Konsole ausgegeben.
-If the option \lua{debug} is set to ture, the result table is printed to
+If the option \lua{debug} is set to true, the result table is printed to
the console.
\InputLatex{opts/debug-latex.tex}
@@ -969,7 +944,7 @@ These attributes are allowed:
The code example below lists all the attributes that can be used to
define key-value pairs.
-\InputLua[firstline=5,lastline=46]{defs/all-attrs.lua}
+\InputLua[firstline=5,lastline=62]{defs/all-attrs.lua}
%%
%
@@ -1034,8 +1009,8 @@ choices:
\subsubsection{Attribute “\texttt{data_type}”}
% source: Python argparse documentation.
-The \lua{data_type} attribute allows type-checking and type conversions to
-be performed.
+The \lua{data_type} attribute allows type-checking and type conversions
+to be performed.
%
% Folgende Datentypen werden unterstützt:
The following data types are supported:
@@ -1043,7 +1018,8 @@ The following data types are supported:
\lua{'dimension'},
\lua{'integer'},
\lua{'number'},
-\lua{'string'}.
+\lua{'string'},
+\lua{'list'}.
%
% Bei den drei Datentypen integer, number, dimension kann eine
% Typenumwandlung scheitern.
@@ -1080,6 +1056,17 @@ value can be specified for all naked keys.
%
%%
+\subsubsection{Attribute “\texttt{description}”}
+
+% Dieses Attribut wird momentan nicht weiterverarbeitet.
+This attribute is currently not processed further.
+% Es kann als Kommentar dienen.
+It can serve as a comment.
+
+%%
+%
+%%
+
\subsubsection{Attribute “\texttt{exclusive_group}”}
% Alle Schlüssel, die der gleichen ausschließenden Gruppe angehören,
@@ -1108,48 +1095,6 @@ thrown.
%
%%
-\subsubsection{Attribute “\texttt{opposite_keys}”}
-
-% Die Option \lua{opposite_keys} ermöglicht es, gegensätzliche (nackte)
-% Schlüssel in Wahrheitswerte umzuwandeln und diesen Wahrheitswert unter
-% einem Zielschlüssel zu speichern.
-The \lua{opposite_keys} attribute allows to convert opposite (naked) keys
-into a boolean value and store this boolean under a target key.
-%
-% Lua erlaubt es in Tabellen Wahrheitswerte als Schlüssel zu verwenden.
-% Es müssen jedoch eckige Klammern verwendet werden.
-Lua allows boolean values to be used as keys in tables.
-%
-% Die Wahrheitswerte müssen jedoch in eckige Klammern geschrieben werden.
-However, the boolean values must be written in square brackets, e. g.
-\lua{{ opposite_keys = { [true] = 'show', [false] = 'hide' } }}.
-%
-% Beispiele für gegensätzliche Schlüssel sind:
-Examples of opposing keys are: \lua{show} and \lua{hide}, \lua{dark} and
-\lua{light}, \lua{question} and \lua{solution}.
-%
-% Das untenstehende Beispiel verwendet als gegensätzliches Schlüsselpaar
-% die Schlüssel \lua{show} und \lua{hide}.
-The example below uses the \lua{show} and \lua{hide} keys as the
-opposite key pair.
-%
-% Wird der Schlüssel \lua{show} von der Funktion \lua{parse} gelesen,
-% dann erhält der Zielschlüssel \lua{visibility} den Wert \lua{true}.
-If the key \lua{show} is parsed by the \lua{parse} function, then the
-target key \lua{visibility} receives the value \lua{true}.
-
-\InputLua[firstline=4,lastline=7]{defs/attrs/opposite-keys.lua}
-
-% Wird der Schlüssel \lua{hide} gelesen, dann \lua{falsch}.
-\noindent
-If the key \lua{hide} is parsed, then \lua{false}.
-
-\InputLua[firstline=13,lastline=13]{defs/attrs/opposite-keys.lua}
-
-%%
-%
-%%
-
\subsubsection{Attribute “\texttt{macro}”}
The attribute \texttt{macro} stores the value in a \TeX{} macro.
@@ -1251,6 +1196,59 @@ Instead of ...
%
%%
+\subsubsection{Attribute “\texttt{opposite_keys}”}
+
+% Die Option \lua{opposite_keys} ermöglicht es, gegensätzliche (nackte)
+% Schlüssel in Wahrheitswerte umzuwandeln und diesen Wahrheitswert unter
+% einem Zielschlüssel zu speichern.
+The \lua{opposite_keys} attribute allows to convert opposite (naked)
+keys into a boolean value and store this boolean under a target key.
+%
+% Lua erlaubt es in Tabellen Wahrheitswerte als Schlüssel zu verwenden.
+% Es müssen jedoch eckige Klammern verwendet werden.
+Lua allows boolean values to be used as keys in tables.
+%
+% Die Wahrheitswerte müssen jedoch in eckige Klammern geschrieben werden.
+However, the boolean values must be written in square brackets, e. g.
+\lua{{ opposite_keys = { [true] = 'show', [false] = 'hide' } }}.
+%
+% Beispiele für gegensätzliche Schlüssel sind:
+Examples of opposing keys are: \lua{show} and \lua{hide}, \lua{dark} and
+\lua{light}, \lua{question} and \lua{solution}.
+%
+% Das untenstehende Beispiel verwendet als gegensätzliches Schlüsselpaar
+% die Schlüssel \lua{show} und \lua{hide}.
+The example below uses the \lua{show} and \lua{hide} keys as the
+opposite key pair.
+%
+% Wird der Schlüssel \lua{show} von der Funktion \lua{parse} gelesen,
+% dann erhält der Zielschlüssel \lua{visibility} den Wert \lua{true}.
+If the key \lua{show} is parsed by the \lua{parse} function, then the
+target key \lua{visibility} receives the value \lua{true}.
+
+\InputLua[firstline=4,lastline=7]{defs/attrs/opposite-keys.lua}
+
+% Wird der Schlüssel \lua{hide} gelesen, dann \lua{falsch}.
+\noindent
+If the key \lua{hide} is parsed, then \lua{false}.
+
+\InputLua[firstline=13,lastline=13]{defs/attrs/opposite-keys.lua}
+
+\noindent
+% Gegensätzliche Schlüsselpaare können in einer Kurzschreibweise
+% angegeben werden, nämlich als Liste
+Opposing key pairs can be specified in a short form, namely as a list:
+% Der gegensätzliche Schlüssel, der den Wahrwert repräsentiert, muss in
+% dieser Liste zuerst angegeben werden, dann folgt der Falschwert.
+The opposite key, which represents the true value, must be specified
+first in this list, followed by the false value.
+
+\InputLua[firstline=19,lastline=21]{defs/attrs/opposite-keys.lua}
+
+%%
+%
+%%
+
\subsubsection{Attribute “\texttt{pick}”}
% Das Attribut \lua{pick} sucht nach einem Wert, der keinem Schlüssel
@@ -1278,13 +1276,7 @@ The search for values is activated when the attribute \lua{pick} is set
to a data type.
% Mit diesen Datentypen kann nach Werten gesucht werden
These data types can be used to search for values:
-\directlua{
- local types = {}
- for t, fn in pairs(luakeys.is) do
- table.insert(types, t)
- end
- tex.print(table.concat(types, ', '))
-}.
+string, number, dimension, integer, boolean, any.
% Verwendet den Datentyp any um jeden beliebigen Wert zu akzeptieren.
Use the data type “any” to accept any value.
% Wird einem Schlüssel bereits bei der Eingabe ein Wert zugewiesen, dann
@@ -1488,9 +1480,9 @@ result store.
In the table \lua{is} some functions are summarized, which check whether
an input corresponds to a certain data type.
%
-% Alle Funktionen akzeptieren nicht nur die entsprechenden Lua-Datentypen,
-% sondern auch Eingaben als Zeichenketten.
-All functions accept not only the corresponding Lua data types, but also
+% Einige Funktionen akzeptieren nicht nur die entsprechenden
+% Lua-Datentypen, sondern auch Eingaben als Zeichenketten.
+Some functions accept not only the corresponding Lua data types, but also
input as strings.
%
% Beispielsweise wird die Zeichenkette \lua{'true'} von der
@@ -1513,6 +1505,9 @@ For example, the string \lua{'true'} is recognized by the
\subsubsection{Function “\texttt{is.string(value): boolean}”}
\InputLua[firstline=6,lastline=12]{functions/is/string.lua}
+\subsubsection{Function “\texttt{is.list(value): boolean}”}
+\InputLua[firstline=6,lastline=16]{functions/is/list.lua}
+
\subsubsection{Function “\texttt{is.any(value): boolean}”}
% Die Funktion \lua{is.any(value)} gibt immer wahr zurück und
@@ -1526,6 +1521,44 @@ therefore accepts any data type.
\subsection{Table “\texttt{utils}”}
+% In der Tabelle \lua{utils} sind einige Hilfsfunktionen gebündelt.
+The \lua{utils} table bundles some auxiliary functions.
+
+\InputLua[firstline=3,lastline=34]{utils/all.lua}
+
+%%
+%
+%%
+
+\subsubsection{Function “\texttt{utils.merge_tables(target, source, overwrite): table}”}
+
+% Die Funktion \lua{merge_tables} führt zwei Tabellen in die erste
+% angegebene Tabelle zusammen. Sie kopiert Schlüssel aus der
+% `source` Tabelle in die `target`-Tabelle. Sie gibt die geänderte
+% Zieltabelle zurück.
+The function \lua{merge_tables} merges two tables into the first
+specified table. It copies keys from the `source` table into the
+`target` table. It returns the target table.
+
+% Wird der Parameter \lua{overwrite} auf wahr gesetzten, so werden Werte
+% in der Zieltabelle überschrieben
+If the \lua{overwrite} parameter is set to \lua{true}, values in the
+target table are overwritten.
+
+\InputLua[firstline=4,lastline=8]{utils/merge-tables.lua}
+
+\noindent
+% Geben sie dem Parameter \lua{overwrite} den Wert \lua{false}, um Werte
+% in der Zieltabelle zu überschreiben.
+Give the parameter \lua{overwrite} the value \lua{false} to overwrite
+values in the target table.
+
+\InputLua[firstline=14,lastline=18]{utils/merge-tables.lua}
+
+%%
+%
+%%
+
\subsubsection{Function “\texttt{utils.scan_oarg(initial_delimiter?, end_delimiter?): string}”}
% Plain \TeX{} kennt keine optionalen Argumente (oarg).
@@ -1848,7 +1881,7 @@ In Lua an array is a table with numeric indexes (The first index is 1).
\InputLatex[firstline=5,lastline=12]{luakeysdebug/naked-keys-latex.tex}
\noindent
-% VAlle erkannten Datentypen können als eigenständige Werte verwendet
+% Alle erkannten Datentypen können als eigenständige Werte verwendet
% werden.
All recognized data types can be used as standalone values.
@@ -1883,31 +1916,40 @@ between 0 and 1 is allowed and converted into
\subsection{Process document class options}
% Auf die Optionen einer \LaTeX{} Dokumentenklasse kann über das Macro
-% \latex{\@classoptionslist} zu gegriffen werden.
+% \latex{\LuakeysGetClassOptions} zu gegriffen werden.
The options of a \LaTeX{} document class can be accessed via the
-\latex{\@classoptionslist} macro.
-%
-% Die Zeichenkette des Makros \latex{\@classoptionslist} ist bereits
-% expandiert und normalisiert.
-The string of the macro \latex{\@classoptionslist} is already expanded
-and normalized.
+\latex{\LuakeysGetClassOptions} macro.
%
-% Neben Leerzeichen werden auch die geschweiften Klammern entfernt.
-In addition to spaces, the curly brackets are also removed.
-% Es ist deshalb nicht möglich, in einander geschachtelte hierarische
-% Schlüssel-Wert-Paare über die Option zu verarbeiten.
-It is therefore not possible to process nested hierarchical key-value
-pairs via the option.
+% \latex{\LuakeysGetClassOptions} ist ein anderer Name für
+\latex{\LuakeysGetClassOptions} is an alias for
+
+\begin{center}
+\latex{\luaescapestring{\@raw@classoptionslist}}.
+\end{center}
\InputLatex{class-options/test-class.cls}
\InputLatex{class-options/use-test-class-latex.tex}
-\begin{minted}{lua}
-{
- [1] = '12pt',
- [2] = 'landscape',
-}
-\end{minted}
+%%
+%
+%%
+
+\subsection{Process package options}
+
+\noindent
+% Auf die Optionen eines \LaTeX{}-Pakets kann über das Macro
+% \latex{\LuakeysGetPackageOptions} zu gegriffen werden.
+The options of a \LaTeX{} package can be accessed via the
+\latex{\LuakeysGetPackageOptions} macro.
+% \latex{\LuakeysGetPackageOptions} ist ein anderer Name für
+\latex{\LuakeysGetPackageOptions} is an alias for
+
+\begin{center}
+\latex{\luaescapestring{\@ptionlist{\@currname.\@currext}}}.
+\end{center}
+
+\InputLatex{package-options/test-package.sty}
+\InputLatex{package-options/use-test-package-latex.tex}
%-----------------------------------------------------------------------
%
@@ -2027,30 +2069,30 @@ An example of how to use the command in \LaTeX:
\inputminted[linenos=true]{latex}{luakeys-debug.sty}
-\changes{0.1.0}{2021/01/18}{Inital release}
-\changes{0.2.0}{2021/09/19}{
+\changes{v0.1.0}{2021/01/18}{Inital release}
+\changes{v0.2.0}{2021/09/19}{
* Allow all recognized data types as keys.
* Allow TeX macros in the values.
* New public Lua functions: save(identifier, result), get(identifier).
}
-\changes{0.3.0}{2021/11/05}{
+\changes{v0.3.0}{2021/11/05}{
* Add a LuaLaTeX wrapper “luakeys.sty”.
* Add a plain LuaTeX wrapper “luakeys.tex”.
* Rename the previous documentation file “luakeys.tex” to luakeys-doc.tex”.
}
-\changes{0.4.0}{2021/12/31}{
+\changes{v0.4.0}{2021/12/31}{
* Parser: Add support for nested tables (for example {{'a', 'b'}}).
* Parser: Allow only strings and numbers as keys.
* Parser: Remove support from Lua numbers with exponents (for example '5e+20').
* Switch the Lua testing framework to busted.
}
-\changes{0.5.0}{2022/04/04}{
+\changes{v0.5.0}{2022/04/04}{
* Add possibility to change options globally.
* New option: standalone_as_true.
* Add a recursive converter callback / hook to process the parse tree.
* New option: case_insensitive_keys.
}
-\changes{0.6.0}{2022/06/09}{
+\changes{v0.6.0}{2022/06/09}{
* New feature: keys now can be defined using the function
“define(defs, opts)” or “define(kv_string, { defs = { key = { ... } } })”
* Rename the global options table from “default_options” to “opts”.
@@ -2063,7 +2105,7 @@ An example of how to use the command in \LaTeX:
produce the previous effect.
* The function “print()” is now called “debug()”.
}
-\changes{0.7.0}{2022/07/06}{
+\changes{v0.7.0}{2022/07/06}{
* The project now uses semantic versioning.
* New definition attribute “pick” to pick standalone values and assign
them to a key.
@@ -2071,13 +2113,13 @@ An example of how to use the command in \LaTeX:
that means scan for tokens that are enclosed in square brackets.
* Extend and improve the documentation.
}
-\changes{0.8.0}{2022/11/17}{
+\changes{v0.8.0}{2022/11/17}{
* Add 6 new options to change the delimiters: “assignment_operator”,
“group_begin”, “group_end”, “list_separator”, “quotation_begin”,
“quotation_end”.
* Extend the documentation about the option “format_keys”.
}
-\changes{0.9.0}{2022/11/21}{
+\changes{v0.9.0}{2022/11/21}{
* The definition attibute “pick” accepts a new data type: “any”.
* The attribute value “true” for the attribute “pick” is deprecated.
* The attribute “pick” accepts now multiple data types specified in
@@ -2085,15 +2127,32 @@ An example of how to use the command in \LaTeX:
* Add a new function called “any(value)” in the “is” table that accepts
any data type.
}
-\changes{0.10.0}{2022/12/16}{
+\changes{v0.10.0}{2022/12/16}{
* Add support for an invert flat that flips the value of naked keys.
* Add new options to specify which strings are recognized as Boolean
values.
}
-\changes{0.11.0}{2022/12/23}{
+\changes{v0.11.0}{2022/12/23}{
* Add a new function called “get_private_instance()” to load a private
version of the luakeys module.
}
+\changes{v0.12.0}{2023/01/05}{
+Added
+* Macros \cmd{\LuakeysGetPackageOptions}, \cmd{\LuakeysGetClassOptions}.
+* Option “accumulated_result”.
+* Data type “list” to the attribute “data_type”.
+* Attribute “description”.
+* Tables “utils.log” and “utils.ansi_color”.
+* Table “errors_message” to set custom messages.
+* Short form syntax for the definition attribute “opposite_keys”.
+Changed
+* Breaking change! luakeys exports now a function instead of a table.
+ Use “require('luakeys')()” or “luakeys.new()” instead of
+ “require('luakeys')”.
+* Breaking change! “luakeys.parse()”, “luakeys.define()”, “luakeys.save()”
+ and “luakeys.get()” can’t be used anymore from the global variable luakeys.
+* New name for the function “new()” instead of “get_private_instance()".
+}
\pagebreak
\PrintChanges
diff --git a/macros/luatex/generic/luakeys/luakeys-debug.sty b/macros/luatex/generic/luakeys/luakeys-debug.sty
index ceefd6d0e2..aa82ed78be 100644
--- a/macros/luatex/generic/luakeys/luakeys-debug.sty
+++ b/macros/luatex/generic/luakeys/luakeys-debug.sty
@@ -1,5 +1,5 @@
%% luakeys-debug.sty
-%% Copyright 2021-2022 Josef Friedrich
+%% Copyright 2021-2023 Josef Friedrich
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
@@ -17,6 +17,6 @@
% luakeys-debug.sty and luakeys-debug.tex.
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{luakeys-debug}[2022/12/23 0.11.0 Debug package for luakeys.]
+\ProvidesPackage{luakeys-debug}[2023/01/05 v0.12.0 Debug package for luakeys.]
\input luakeys-debug.tex
diff --git a/macros/luatex/generic/luakeys/luakeys-debug.tex b/macros/luatex/generic/luakeys/luakeys-debug.tex
index b78951779b..0b4830f779 100644
--- a/macros/luatex/generic/luakeys/luakeys-debug.tex
+++ b/macros/luatex/generic/luakeys/luakeys-debug.tex
@@ -1,5 +1,5 @@
%% luakeys-debug.tex
-%% Copyright 2021-2022 Josef Friedrich
+%% Copyright 2021-2023 Josef Friedrich
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
@@ -18,7 +18,7 @@
\directlua
{
- luakeys = require('luakeys')
+ luakeys = require('luakeys')()
}
\def\luakeysdebug%
diff --git a/macros/luatex/generic/luakeys/luakeys-doc.pdf b/macros/luatex/generic/luakeys/luakeys-doc.pdf
deleted file mode 100644
index ff012a46c6..0000000000
--- a/macros/luatex/generic/luakeys/luakeys-doc.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/luatex/generic/luakeys/luakeys.lua b/macros/luatex/generic/luakeys/luakeys.lua
index 7e86d729cd..c3da56e716 100644
--- a/macros/luatex/generic/luakeys/luakeys.lua
+++ b/macros/luatex/generic/luakeys/luakeys.lua
@@ -1,110 +1,126 @@
--- luakeys.lua
--- Copyright 2021-2022 Josef Friedrich
---
--- 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
--- http://www.latex-project.org/lppl.txt
--- and version 1.3c or later is part of all distributions of LaTeX
--- version 2008/05/04 or later.
---
--- This work has the LPPL maintenance status `maintained'.
---
--- The Current Maintainer of this work is Josef Friedrich.
---
--- This work consists of the files luakeys.lua, luakeys.sty, luakeys.tex
--- luakeys-debug.sty and luakeys-debug.tex.
---- A key-value parser written with Lpeg.
---
--- @module luakeys
+---luakeys.lua
+---Copyright 2021-2023 Josef Friedrich
+---
+---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
+---http://www.latex-project.org/lppl.txt
+---and version 1.3c or later is part of all distributions of LaTeX
+---version 2008/05/04 or later.
+---
+---This work has the LPPL maintenance status `maintained'.
+---
+---The Current Maintainer of this work is Josef Friedrich.
+---
+---This work consists of the files luakeys.lua, luakeys.sty, luakeys.tex
+---luakeys-debug.sty and luakeys-debug.tex.
+----A key-value parser written with Lpeg.
+---
+---@module luakeys
local lpeg = require('lpeg')
if not tex then
+ ---Dummy functions for the tests.
tex = {
- -- Dummy function for the tests.
sp = function(input)
return 1234567
end,
}
-end
-if not token then
token = {
set_macro = function(csname, content, global)
end,
}
end
---- Merge two tables in the first specified table.
---- The `merge_tables` function copies all keys from the `source` table
---- to a target table. It returns the modified target table.
----
----@see https://stackoverflow.com/a/1283608/10193818
----
----@param target table
----@param source table
----
----@return table target The modified target table.
-local function merge_tables(target, source)
- for key, value in pairs(source) do
- if type(value) == 'table' then
- if type(target[key] or false) == 'table' then
- merge_tables(target[key] or {}, source[key] or {})
- elseif target[key] == nil then
+local utils = (function()
+ ---
+ ---Merge two tables into the first specified table.
+ ---The `merge_tables` function copies keys from the `source` table
+ ---to the `target` table. It returns the target table.
+ ---
+ ---https://stackoverflow.com/a/1283608/10193818
+ ---
+ ---@param target table # The target table where all values are copied.
+ ---@param source table # The source table from which all values are copied.
+ ---@param overwrite? boolean # Overwrite the values in the target table if they are present (default true).
+ ---
+ ---@return table target The modified target table.
+ local function merge_tables(target, source, overwrite)
+ if overwrite == nil then
+ overwrite = true
+ end
+ for key, value in pairs(source) do
+ if type(value) == 'table' and type(target[key] or false) ==
+ 'table' then
+ merge_tables(target[key] or {}, source[key] or {}, overwrite)
+ elseif (not overwrite and target[key] == nil) or
+ (overwrite and target[key] ~= value) then
target[key] = value
end
- elseif target[key] == nil then
- target[key] = value
end
+ return target
end
- return target
-end
----Clone a table.
----
----@see http://lua-users.org/wiki/CopyTable
----
----@param orig table
----
----@return table
-local function clone_table(orig)
- local orig_type = type(orig)
- local copy
- if orig_type == 'table' then
- copy = {}
- for orig_key, orig_value in next, orig, nil do
- copy[clone_table(orig_key)] = clone_table(orig_value)
+ ---
+ ---Clone a table, i.e. make a deep copy of the source table.
+ ---
+ ---http://lua-users.org/wiki/CopyTable
+ ---
+ ---@param source table # The source table to be cloned.
+ ---
+ ---@return table # A deep copy of the source table.
+ local function clone_table(source)
+ local copy
+ if type(source) == 'table' then
+ copy = {}
+ for orig_key, orig_value in next, source, nil do
+ copy[clone_table(orig_key)] = clone_table(orig_value)
+ end
+ setmetatable(copy, clone_table(getmetatable(source)))
+ else ---number, string, boolean, etc
+ copy = source
end
- setmetatable(copy, clone_table(getmetatable(orig)))
- else -- number, string, boolean, etc
- copy = orig
+ return copy
end
- return copy
-end
-local utils = {
- --- Get the size of an array like table `{ 'one', 'two', 'three' }` = 3.
---
- ---@param value table # A table or any input.
+ ---Remove an element from a table.
---
- ---@return number # The size of the array like table. 0 if the input is no table or the table is empty.
- get_array_size = function(value)
- local count = 0
- if type(value) == 'table' then
- for _ in ipairs(value) do
- count = count + 1
+ ---@param source table
+ ---@param value any
+ ---
+ ---@return any|nil
+ local function remove_from_table(source, value)
+ for index, v in pairs(source) do
+ if value == v then
+ source[index] = nil
+ return value
end
end
- return count
- end,
+ end
+
+ ---
+ ---@param source table
+ ---
+ ---@return table # An array table with the sorted key names.
+ local function get_table_keys(source)
+ local keys = {}
+ for key in pairs(source) do
+ table.insert(keys, key)
+ end
+ table.sort(keys)
+ return keys
+ end
+ ---
---Get the size of a table `{ one = 'one', 'two', 'three' }` = 3.
---
- ---@param value table|any # A table or any input.
+ ---@param value any # A table or any input.
---
---@return number # The size of the array like table. 0 if the input is no table or the table is empty.
- get_table_size = function(value)
+ local function get_table_size(value)
local count = 0
if type(value) == 'table' then
for _ in pairs(value) do
@@ -112,28 +128,34 @@ local utils = {
end
end
return count
- end,
-
- merge_tables = merge_tables,
-
- clone_table = clone_table,
+ end
- remove_from_array = function(array, element)
- for index, value in pairs(array) do
- if element == value then
- array[index] = nil
- return value
+ ---
+ ---Get the size of an array like table, for example `{ 'one', 'two',
+ ---'three' }` = 3.
+ ---
+ ---@param value any # A table or any input.
+ ---
+ ---@return number # The size of the array like table. 0 if the input is no table or the table is empty.
+ local function get_array_size(value)
+ local count = 0
+ if type(value) == 'table' then
+ for _ in ipairs(value) do
+ count = count + 1
end
end
- end,
+ return count
+ end
+ ---
---Scan for an optional argument.
---
---@param initial_delimiter? string # The character that marks the beginning of an optional argument (by default `[`).
---@param end_delimiter? string # The character that marks the end of an optional argument (by default `]`).
---
---@return string|nil # The string that was enclosed by the delimiters. The delimiters themselves are not returned.
- scan_oarg = function(initial_delimiter, end_delimiter)
+ local function scan_oarg(initial_delimiter,
+ end_delimiter)
if initial_delimiter == nil then
initial_delimiter = '['
end
@@ -167,11 +189,603 @@ local utils = {
else
token.put_next(t)
end
- end,
-}
+ end
+
+ ---
+ ---Throw a single error message.
+ ---
+ ---@param message string
+ ---@param help? table
+ local function throw_error_message(message, help)
+ if type(tex.error) == 'function' then
+ tex.error(message, help)
+ else
+ error(message)
+ end
+ end
+
+ ---
+ ---Throw an error by specifying an error code.
+ ---
+ ---@param error_messages table
+ ---@param error_code string
+ ---@param args? table
+ local function throw_error_code(error_messages,
+ error_code,
+ args)
+ local template = error_messages[error_code]
+
+ ---
+ ---@param message string
+ ---@param a table
+ ---
+ ---@return string
+ local function replace_args(message, a)
+ for key, value in pairs(a) do
+ if type(value) == 'table' then
+ value = table.concat(value, ', ')
+ end
+ message = message:gsub('@' .. key,
+ '“' .. tostring(value) .. '”')
+ end
+ return message
+ end
+
+ ---
+ ---@param list table
+ ---@param a table
+ ---
+ ---@return table
+ local function replace_args_in_list(list, a)
+ for index, message in ipairs(list) do
+ list[index] = replace_args(message, a)
+ end
+ return list
+ end
+
+ ---
+ ---@type string
+ local message
+ ---@type table
+ local help = {}
+
+ if type(template) == 'table' then
+ message = template[1]
+ if args ~= nil then
+ help = replace_args_in_list(template[2], args)
+ else
+ help = template[2]
+ end
+ else
+ message = template
+ end
+
+ if args ~= nil then
+ message = replace_args(message, args)
+ end
+
+ message = 'luakeys error [' .. error_code .. ']: ' .. message
+
+ for _, help_message in ipairs({
+ 'You may be able to find more help in the documentation:',
+ 'http://mirrors.ctan.org/macros/luatex/generic/luakeys/luakeys-doc.pdf',
+ 'Or ask a question in the issue tracker on Github:',
+ 'https://github.com/Josef-Friedrich/luakeys/issues',
+ }) do
+ table.insert(help, help_message)
+ end
+
+ throw_error_message(message, help)
+ end
+
+ local function visit_tree(tree, callback_func)
+ if type(tree) ~= 'table' then
+ throw_error_message(
+ 'Parameter “tree” has to be a table, got: ' ..
+ tostring(tree))
+ end
+ local function visit_tree_recursive(tree,
+ current,
+ result,
+ depth,
+ callback_func)
+ for key, value in pairs(current) do
+ if type(value) == 'table' then
+ value = visit_tree_recursive(tree, value, {}, depth + 1,
+ callback_func)
+ end
+
+ key, value = callback_func(key, value, depth, current, tree)
+
+ if key ~= nil and value ~= nil then
+ result[key] = value
+ end
+ end
+ if next(result) ~= nil then
+ return result
+ end
+ end
+
+ local result =
+ visit_tree_recursive(tree, tree, {}, 1, callback_func)
+
+ if result == nil then
+ return {}
+ end
+ return result
+ end
+
+ ---@alias ColorName 'black'|'red'|'green'|'yellow'|'blue'|'magenta'|'cyan'|'white'|'reset'
+ ---@alias ColorMode 'bright'|'dim'
+
+ ---
+ ---Small library to surround strings with ANSI color codes.
+ --
+ ---[SGR (Select Graphic Rendition) Parameters](https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_(Select_Graphic_Rendition)_parameters)
+ ---
+ ---__attributes__
+ ---
+ ---| color |code|
+ ---|------------|----|
+ ---| reset | 0 |
+ ---| clear | 0 |
+ ---| bright | 1 |
+ ---| dim | 2 |
+ ---| underscore | 4 |
+ ---| blink | 5 |
+ ---| reverse | 7 |
+ ---| hidden | 8 |
+ ---
+ ---__foreground__
+ ---
+ ---| color |code|
+ ---|------------|----|
+ ---| black | 30 |
+ ---| red | 31 |
+ ---| green | 32 |
+ ---| yellow | 33 |
+ ---| blue | 34 |
+ ---| magenta | 35 |
+ ---| cyan | 36 |
+ ---| white | 37 |
+ ---
+ ---__background__
+ ---
+ ---| color |code|
+ ---|------------|----|
+ ---| onblack | 40 |
+ ---| onred | 41 |
+ ---| ongreen | 42 |
+ ---| onyellow | 43 |
+ ---| onblue | 44 |
+ ---| onmagenta | 45 |
+ ---| oncyan | 46 |
+ ---| onwhite | 47 |
+ local ansi_color = (function()
+
+ ---
+ ---@param code integer
+ ---
+ ---@return string
+ local function format_color_code(code)
+ return string.char(27) .. '[' .. tostring(code) .. 'm'
+ end
+
+ ---
+ ---@private
+ ---
+ ---@param color ColorName # A color name.
+ ---@param mode? ColorMode
+ ---@param background? boolean # Colorize the background not the text.
+ ---
+ ---@return string
+ local function get_color_code(color, mode, background)
+ local output = ''
+ local code
+
+ if mode == 'bright' then
+ output = format_color_code(1)
+ elseif mode == 'dim' then
+ output = format_color_code(2)
+ end
+
+ if not background then
+ if color == 'reset' then
+ code = 0
+ elseif color == 'black' then
+ code = 30
+ elseif color == 'red' then
+ code = 31
+ elseif color == 'green' then
+ code = 32
+ elseif color == 'yellow' then
+ code = 33
+ elseif color == 'blue' then
+ code = 34
+ elseif color == 'magenta' then
+ code = 35
+ elseif color == 'cyan' then
+ code = 36
+ elseif color == 'white' then
+ code = 37
+ else
+ code = 37
+ end
+ else
+ if color == 'black' then
+ code = 40
+ elseif color == 'red' then
+ code = 41
+ elseif color == 'green' then
+ code = 42
+ elseif color == 'yellow' then
+ code = 43
+ elseif color == 'blue' then
+ code = 44
+ elseif color == 'magenta' then
+ code = 45
+ elseif color == 'cyan' then
+ code = 46
+ elseif color == 'white' then
+ code = 47
+ else
+ code = 40
+ end
+ end
+ return output .. format_color_code(code)
+ end
+
+ ---
+ ---@param text any
+ ---@param color ColorName # A color name.
+ ---@param mode? ColorMode
+ ---@param background? boolean # Colorize the background not the text.
+ ---
+ ---@return string
+ local function colorize(text, color, mode, background)
+ return string.format('%s%s%s',
+ get_color_code(color, mode, background), text,
+ get_color_code('reset'))
+ end
+
+ return {
+ colorize = colorize,
+
+ ---
+ ---@param text any
+ ---
+ ---@return string
+ red = function(text)
+ return colorize(text, 'red')
+ end,
+
+ ---
+ ---@param text any
+ ---
+ ---@return string
+ green = function(text)
+ return colorize(text, 'green')
+ end,
+
+ ---@return string
+ yellow = function(text)
+ return colorize(text, 'yellow')
+ end,
+
+ ---
+ ---@param text any
+ ---
+ ---@return string
+ blue = function(text)
+ return colorize(text, 'blue')
+ end,
+
+ ---
+ ---@param text any
+ ---
+ ---@return string
+ magenta = function(text)
+ return colorize(text, 'magenta')
+ end,
+
+ ---
+ ---@param text any
+ ---
+ ---@return string
+ cyan = function(text)
+ return colorize(text, 'cyan')
+ end,
+ }
+ end)()
+
+ ---
+ ---A small logging library.
+ ---
+ ---Log levels:
+ ---
+ ---* 0: silent
+ ---* 1: error
+ ---* 2: warn
+ ---* 3: info
+ ---* 4: verbose
+ ---* 5: debug
+ ---
+ local log = (function()
+ ---@private
+ local opts = { level = 0 }
+
+ ---@private
+ local function print_message(message, ...)
+ print(string.format(message, ...))
+ end
+
+ ---
+ ---Set the log level.
+ ---
+ ---@param level 0|'silent'|1|'error'|2|'warn'|3|'info'|4|'verbose'|5|'debug'
+ local function set_log_level(level)
+ if type(level) == 'string' then
+ if level == 'silent' then
+ opts.level = 0
+ elseif level == 'error' then
+ opts.level = 1
+ elseif level == 'warn' then
+ opts.level = 2
+ elseif level == 'info' then
+ opts.level = 3
+ elseif level == 'verbose' then
+ opts.level = 4
+ elseif level == 'debug' then
+ opts.level = 5
+ else
+ throw_error_message(string.format('Unknown log level: %s',
+ level))
+ end
+ else
+ if level > 5 or level < 0 then
+ throw_error_message(string.format(
+ 'Log level out of range 0-5: %s', level))
+ end
+ opts.level = level
+ end
+
+ end
+
+ ---
+ ---Log at level 1 (error).
+ ---
+ ---The other log levels are: 0 (silent), 1 (error), 2 (warn), 3 (info), 4 (verbose), 5 (debug).
+ ---
+ ---@param message string
+ ---@param ... any
+ local function error(message, ...)
+ if opts.level >= 1 then
+ print_message(message, ...)
+ end
+ end
+
+ ---
+ ---Log at level 2 (warn).
+ ---
+ ---The other log levels are: 0 (silent), 1 (error), 2 (warn), 3 (info), 4 (verbose), 5 (debug).
+ ---
+ ---@param message string
+ ---@param ... any
+ local function warn(message, ...)
+ if opts.level >= 2 then
+ print_message(message, ...)
+ end
+ end
+
+ ---
+ ---Log at level 3 (info).
+ ---
+ ---The other log levels are: 0 (silent), 1 (error), 2 (warn), 3 (info), 4 (verbose), 5 (debug).
+ ---
+ ---@param message string
+ ---@param ... any
+ local function info(message, ...)
+ if opts.level >= 3 then
+ print_message(message, ...)
+ end
+ end
+
+ ---
+ ---Log at level 4 (verbose).
+ ---
+ ---The other log levels are: 0 (silent), 1 (error), 2 (warn), 3 (info), 4 (verbose), 5 (debug).
+ ---
+ ---@param message string
+ ---@param ... any
+ local function verbose(message, ...)
+ if opts.level >= 4 then
+ print_message(message, ...)
+ end
+ end
+
+ ---
+ ---Log at level 5 (debug).
+ ---
+ ---The other log levels are: 0 (silent), 1 (error), 2 (warn), 3 (info), 4 (verbose), 5 (debug).
+ ---
+ ---@param message string
+ ---@param ... any
+ local function debug(message, ...)
+ if opts.level >= 5 then
+ print_message(message, ...)
+ end
+ end
+
+ return {
+ set_log_level = set_log_level,
+ error = error,
+ warn = warn,
+ info = info,
+ verbose = verbose,
+ debug = debug,
+ }
+ end)()
+
+ return {
+ merge_tables = merge_tables,
+ clone_table = clone_table,
+ remove_from_table = remove_from_table,
+ get_table_keys = get_table_keys,
+ get_table_size = get_table_size,
+ get_array_size = get_array_size,
+ visit_tree = visit_tree,
+ scan_oarg = scan_oarg,
+ throw_error_message = throw_error_message,
+ throw_error_code = throw_error_code,
+ log = log,
+ ansi_color = ansi_color,
+ }
+end)()
+
+---
+---Convert back to strings
+---@section
+local visualizers = (function()
+
+ ---
+ ---The function `render(tbl)` reverses the function
+ ---`parse(kv_string)`. It takes a Lua table and converts this table
+ ---into a key-value string. The resulting string usually has a
+ ---different order as the input table. In Lua only tables with
+ ---1-based consecutive integer keys (a.k.a. array tables) can be
+ ---parsed in order.
+ ---
+ ---@param result table # A table to be converted into a key-value string.
+ ---
+ ---@return string # A key-value string that can be passed to a TeX macro.
+ local function render(result)
+ local function render_inner(result)
+ local output = {}
+ local function add(text)
+ table.insert(output, text)
+ end
+ for key, value in pairs(result) do
+ if (key and type(key) == 'string') then
+ if (type(value) == 'table') then
+ if (next(value)) then
+ add(key .. '={')
+ add(render_inner(value))
+ add('},')
+ else
+ add(key .. '={},')
+ end
+ else
+ add(key .. '=' .. tostring(value) .. ',')
+ end
+ else
+ add(tostring(value) .. ',')
+ end
+ end
+ return table.concat(output)
+ end
+ return render_inner(result)
+ end
+
+ ---
+ ---The function `stringify(tbl, for_tex)` converts a Lua table into a
+ ---printable string. Stringify a table means to convert the table into
+ ---a string. This function is used to realize the `debug` function.
+ ---`stringify(tbl, true)` (`for_tex = true`) generates a string which
+ ---can be embeded into TeX documents. The macro `\luakeysdebug{}` uses
+ ---this option. `stringify(tbl, false)` or `stringify(tbl)` generate a
+ ---string suitable for the terminal.
+ ---
+ ---@see https://stackoverflow.com/a/54593224/10193818
+ ---
+ ---@param result table # A table to stringify.
+ ---@param for_tex? boolean # Stringify the table into a text string that can be embeded inside a TeX document via tex.print(). Curly braces and whites spaces are escaped.
+ ---
+ ---@return string
+ local function stringify(result, for_tex)
+ local line_break, start_bracket, end_bracket, indent
+
+ if for_tex then
+ line_break = '\\par'
+ start_bracket = '$\\{$'
+ end_bracket = '$\\}$'
+ indent = '\\ \\ '
+ else
+ line_break = '\n'
+ start_bracket = '{'
+ end_bracket = '}'
+ indent = ' '
+ end
+
+ local function stringify_inner(input, depth)
+ local output = {}
+ depth = depth or 0
+
+ local function add(depth, text)
+ table.insert(output, string.rep(indent, depth) .. text)
+ end
+
+ local function format_key(key)
+ if (type(key) == 'number') then
+ return string.format('[%s]', key)
+ else
+ return string.format('[\'%s\']', key)
+ end
+ end
+
+ if type(input) ~= 'table' then
+ return tostring(input)
+ end
+
+ for key, value in pairs(input) do
+ if (key and type(key) == 'number' or type(key) == 'string') then
+ key = format_key(key)
+
+ if (type(value) == 'table') then
+ if (next(value)) then
+ add(depth, key .. ' = ' .. start_bracket)
+ add(0, stringify_inner(value, depth + 1))
+ add(depth, end_bracket .. ',');
+ else
+ add(depth,
+ key .. ' = ' .. start_bracket .. end_bracket .. ',')
+ end
+ else
+ if (type(value) == 'string') then
+ value = string.format('\'%s\'', value)
+ else
+ value = tostring(value)
+ end
+
+ add(depth, key .. ' = ' .. value .. ',')
+ end
+ end
+ end
+
+ return table.concat(output, line_break)
+ end
+
+ return start_bracket .. line_break .. stringify_inner(result, 1) ..
+ line_break .. end_bracket
+ end
+
+ ---
+ ---The function `debug(result)` pretty prints a Lua table to standard
+ ---output (stdout). It is a utility function that can be used to
+ ---debug and inspect the resulting Lua table of the function
+ ---`parse`. You have to compile your TeX document in a console to
+ ---see the terminal output.
+ ---
+ ---@param result table # A table to be printed to standard output for debugging purposes.
+ local function debug(result)
+ print('\n' .. stringify(result, false))
+ end
+
+ return { render = render, stringify = stringify, debug = debug }
+end)()
local namespace = {
opts = {
+ accumulated_result = false,
assignment_operator = '=',
convert_dimensions = false,
debug = false,
@@ -209,6 +823,7 @@ local namespace = {
choices = true,
data_type = true,
default = true,
+ description = true,
exclusive_group = true,
l3_tl_set = true,
macro = true,
@@ -220,1151 +835,1116 @@ local namespace = {
required = true,
sub_keys = true,
},
-}
-
---- The default options.
-local default_options = clone_table(namespace.opts)
-local function throw_error(message)
- if type(tex.error) == 'function' then
- tex.error(message)
- else
- error(message)
- end
-end
+ error_messages = {
+ E001 = {
+ 'Unknown parse option: @unknown!',
+ { 'The available options are:', '@opt_names' },
+ },
+ E002 = {
+ 'Unknown hook: @unknown!',
+ { 'The available hooks are:', '@hook_names' },
+ },
+ E003 = 'Duplicate aliases @alias1 and @alias2 for key @key!',
+ E004 = 'The value @value does not exist in the choices: @choices',
+ E005 = 'Unknown data type: @unknown',
+ E006 = 'The value @value of the key @key could not be converted into the data type @data_type!',
+ E007 = 'The key @key belongs to the mutually exclusive group @exclusive_group and another key of the group named @another_key is already present!',
+ E008 = 'def.match has to be a string',
+ E009 = 'The value @value of the key @key does not match @match!',
+
+ E011 = 'Wrong data type in the “pick” attribute: @unknown. Allowed are: @data_types.',
+ E012 = 'Missing required key @key!',
+ E013 = 'The key definition must be a table! Got @data_type for key @key.',
+ E014 = {
+ 'Unknown definition attribute: @unknown',
+ { 'The available attributes are:', '@attr_names' },
+ },
+ E015 = 'Key name couldn’t be detected!',
+ E017 = 'Unknown style to format keys: @unknown! Allowed styles are: @styles',
+ E018 = 'The option “format_keys” has to be a table not @data_type',
+ E019 = 'Unknown keys: @unknown',
+
+ ---Input / parsing error
+ E021 = 'Opposite key was specified more than once: @key!',
+ E020 = 'Both opposite keys were given: @true and @false!',
+ ---Config error (wrong configuration of luakeys)
+ E010 = 'Usage: opposite_keys = { "true_key", "false_key" } or { [true] = "true_key", [false] = "false_key" } ',
+ E023 = {
+ 'Don’t use this function from the global luakeys table. Create a new instance using e. g.: local lk = luakeys.new()',
+ {
+ 'This functions should not be used from the global luakeys table:',
+ 'parse()',
+ 'save()',
+ 'get()',
+ },
+ },
+ },
+}
---- Normalize the parse options.
----
----@param opts? table # Options in a raw format. The table may be empty or some keys are not set.
---
----@return table
-local function normalize_opts(opts)
- if type(opts) ~= 'table' then
- opts = {}
- end
- for key, _ in pairs(opts) do
- if namespace.opts[key] == nil then
- throw_error('Unknown parse option: ' .. tostring(key) .. '!')
- end
- end
- local old_opts = opts
- opts = {}
- for name, _ in pairs(namespace.opts) do
- if old_opts[name] ~= nil then
- opts[name] = old_opts[name]
- else
- opts[name] = default_options[name]
- end
- end
+---@return table # The public interface of the module.
+local function main()
- for hook in pairs(opts.hooks) do
- if namespace.hooks[hook] == nil then
- throw_error('Unknown hook: ' .. tostring(hook) .. '!')
- end
- end
- return opts
-end
+ ---The default options.
+ local default_opts = utils.clone_table(namespace.opts)
-local l3_code_cctab = 10
+ local error_messages = utils.clone_table(namespace.error_messages)
---- Convert back to strings
--- @section
+ ---
+ ---@param error_code string
+ ---@param args? table
+ local function throw_error(error_code, args)
+ utils.throw_error_code(error_messages, error_code, args)
+ end
---- The function `render(tbl)` reverses the function
---- `parse(kv_string)`. It takes a Lua table and converts this table
---- into a key-value string. The resulting string usually has a
---- different order as the input table. In Lua only tables with
---- 1-based consecutive integer keys (a.k.a. array tables) can be
---- parsed in order.
----
----@param result table # A table to be converted into a key-value string.
----
----@return string # A key-value string that can be passed to a TeX macro.
-local function render(result)
- local function render_inner(result)
- local output = {}
- local function add(text)
- table.insert(output, text)
+ ---
+ ---Normalize the parse options.
+ ---
+ ---@param opts? table # Options in a raw format. The table may be empty or some keys are not set.
+ ---
+ ---@return table
+ local function normalize_opts(opts)
+ if type(opts) ~= 'table' then
+ opts = {}
end
- for key, value in pairs(result) do
- if (key and type(key) == 'string') then
- if (type(value) == 'table') then
- if (next(value)) then
- add(key .. '={')
- add(render_inner(value))
- add('},')
- else
- add(key .. '={},')
- end
- else
- add(key .. '=' .. tostring(value) .. ',')
- end
+ for key, _ in pairs(opts) do
+ if namespace.opts[key] == nil then
+ throw_error('E001', {
+ unknown = key,
+ opt_names = utils.get_table_keys(namespace.opts),
+ })
+ end
+ end
+ local old_opts = opts
+ opts = {}
+ for name, _ in pairs(namespace.opts) do
+ if old_opts[name] ~= nil then
+ opts[name] = old_opts[name]
else
- add(tostring(value) .. ',')
+ opts[name] = default_opts[name]
end
end
- return table.concat(output)
- end
- return render_inner(result)
-end
---- The function `stringify(tbl, for_tex)` converts a Lua table into a
---- printable string. Stringify a table means to convert the table into
---- a string. This function is used to realize the `debug` function.
---- `stringify(tbl, true)` (`for_tex = true`) generates a string which
---- can be embeded into TeX documents. The macro `\luakeysdebug{}` uses
---- this option. `stringify(tbl, false)` or `stringify(tbl)` generate a
---- string suitable for the terminal.
----
----@see https://stackoverflow.com/a/54593224/10193818
----
----@param result table # A table to stringify.
----@param for_tex? boolean # Stringify the table into a text string that can be embeded inside a TeX document via tex.print(). Curly braces and whites spaces are escaped.
----
----@return string
-local function stringify(result, for_tex)
- local line_break, start_bracket, end_bracket, indent
-
- if for_tex then
- line_break = '\\par'
- start_bracket = '$\\{$'
- end_bracket = '$\\}$'
- indent = '\\ \\ '
- else
- line_break = '\n'
- start_bracket = '{'
- end_bracket = '}'
- indent = ' '
+ for hook in pairs(opts.hooks) do
+ if namespace.hooks[hook] == nil then
+ throw_error('E002', {
+ unknown = hook,
+ hook_names = utils.get_table_keys(namespace.hooks),
+ })
+ end
+ end
+ return opts
end
- local function stringify_inner(input, depth)
- local output = {}
- depth = depth or 0
+ local l3_code_cctab = 10
- local function add(depth, text)
- table.insert(output, string.rep(indent, depth) .. text)
- end
+ ---
+ ---Parser / Lpeg related
+ ---@section
- local function format_key(key)
- if (type(key) == 'number') then
- return string.format('[%s]', key)
- else
- return string.format('[\'%s\']', key)
- end
+ ---Generate the PEG parser using Lpeg.
+ ---
+ ---Explanations of some LPeg notation forms:
+ ---
+ ---* `patt ^ 0` = `expression *`
+ ---* `patt ^ 1` = `expression +`
+ ---* `patt ^ -1` = `expression ?`
+ ---* `patt1 * patt2` = `expression1 expression2`: Sequence
+ ---* `patt1 + patt2` = `expression1 / expression2`: Ordered choice
+ ---
+ ---* [TUGboat article: Parsing complex data formats in LuaTEX with LPEG](https://tug.or-g/TUGboat/tb40-2/tb125menke-Patterndf)
+ ---
+ ---@param initial_rule string # The name of the first rule of the grammar table passed to the `lpeg.P(attern)` function (e. g. `list`, `number`).
+ ---@param opts? table # Whether the dimensions should be converted to scaled points (by default `false`).
+ ---
+ ---@return userdata # The parser.
+ local function generate_parser(initial_rule, opts)
+ if type(opts) ~= 'table' then
+ opts = normalize_opts(opts)
end
- if type(input) ~= 'table' then
- return tostring(input)
+ local Variable = lpeg.V
+ local Pattern = lpeg.P
+ local Set = lpeg.S
+ local Range = lpeg.R
+ local CaptureGroup = lpeg.Cg
+ local CaptureFolding = lpeg.Cf
+ local CaptureTable = lpeg.Ct
+ local CaptureConstant = lpeg.Cc
+ local CaptureSimple = lpeg.C
+
+ ---Optional whitespace
+ local white_space = Set(' \t\n\r')
+
+ ---Match literal string surrounded by whitespace
+ local ws = function(match)
+ return white_space ^ 0 * Pattern(match) * white_space ^ 0
end
- for key, value in pairs(input) do
- if (key and type(key) == 'number' or type(key) == 'string') then
- key = format_key(key)
-
- if (type(value) == 'table') then
- if (next(value)) then
- add(depth, key .. ' = ' .. start_bracket)
- add(0, stringify_inner(value, depth + 1))
- add(depth, end_bracket .. ',');
- else
- add(depth,
- key .. ' = ' .. start_bracket .. end_bracket .. ',')
- end
+ local line_up_pattern = function(patterns)
+ local result
+ for _, pattern in ipairs(patterns) do
+ if result == nil then
+ result = Pattern(pattern)
else
- if (type(value) == 'string') then
- value = string.format('\'%s\'', value)
- else
- value = tostring(value)
- end
-
- add(depth, key .. ' = ' .. value .. ',')
+ result = result + Pattern(pattern)
end
end
+ return result
end
- return table.concat(output, line_break)
- end
-
- return start_bracket .. line_break .. stringify_inner(result, 1) ..
- line_break .. end_bracket
-end
-
---- The function `debug(result)` pretty prints a Lua table to standard
--- output (stdout). It is a utility function that can be used to
--- debug and inspect the resulting Lua table of the function
--- `parse`. You have to compile your TeX document in a console to
--- see the terminal output.
---
----@param result table # A table to be printed to standard output for debugging purposes.
-local function debug(result)
- print('\n' .. stringify(result, false))
-end
-
---- Parser / Lpeg related
--- @section
-
---- Generate the PEG parser using Lpeg.
----
---- Explanations of some LPeg notation forms:
----
---- * `patt ^ 0` = `expression *`
---- * `patt ^ 1` = `expression +`
---- * `patt ^ -1` = `expression ?`
---- * `patt1 * patt2` = `expression1 expression2`: Sequence
---- * `patt1 + patt2` = `expression1 / expression2`: Ordered choice
----
---- * [TUGboat article: Parsing complex data formats in LuaTEX with LPEG](https://tug.or-g/TUGboat/tb40-2/tb125menke-Patterndf)
----
----@param initial_rule string # The name of the first rule of the grammar table passed to the `lpeg.P(attern)` function (e. g. `list`, `number`).
----@param opts? table # Whether the dimensions should be converted to scaled points (by default `false`).
----
----@return userdata # The parser.
-local function generate_parser(initial_rule, opts)
- if type(opts) ~= 'table' then
- opts = normalize_opts(opts)
- end
-
- local Variable = lpeg.V
- local Pattern = lpeg.P
- local Set = lpeg.S
- local Range = lpeg.R
- local CaptureGroup = lpeg.Cg
- local CaptureFolding = lpeg.Cf
- local CaptureTable = lpeg.Ct
- local CaptureConstant = lpeg.Cc
- local CaptureSimple = lpeg.C
-
- -- Optional whitespace
- local white_space = Set(' \t\n\r')
-
- --- Match literal string surrounded by whitespace
- local ws = function(match)
- return white_space ^ 0 * Pattern(match) * white_space ^ 0
- end
-
- local line_up_pattern = function(patterns)
- local result
- for _, pattern in ipairs(patterns) do
- if result == nil then
- result = Pattern(pattern)
+ ---
+ ---Convert a dimension to an normalized dimension string or an
+ ---integer in the scaled points format.
+ ---
+ ---@param input string
+ ---
+ ---@return integer|string # A dimension as an integer or a dimension string.
+ local capture_dimension = function(input)
+ ---Remove all whitespaces
+ input = input:gsub('%s+', '')
+ ---Convert the unit string into lowercase.
+ input = input:lower()
+ if opts.convert_dimensions then
+ return tex.sp(input)
else
- result = result + Pattern(pattern)
+ return input
end
end
- return result
- end
- --- Convert a dimension to an normalized dimension string or an
- --- integer in the scaled points format.
- ---
- ---@param input string
- ---
- ---@return integer|string # A dimension as an integer or a dimension string.
- local capture_dimension = function(input)
- -- Remove all whitespaces
- input = input:gsub('%s+', '')
- -- Convert the unit string into lowercase.
- input = input:lower()
- if opts.convert_dimensions then
- return tex.sp(input)
- else
- return input
+ ---
+ ---Add values to a table in two modes:
+ ---
+ ---Key-value pair:
+ ---
+ ---If `arg1` and `arg2` are not nil, then `arg1` is the key and `arg2` is the
+ ---value of a new table entry.
+ ---
+ ---Indexed value:
+ ---
+ ---If `arg2` is nil, then `arg1` is the value and is added as an indexed
+ ---(by an integer) value.
+ ---
+ ---@param result table # The result table to which an additional key-value pair or value should to be added
+ ---@param arg1 any # The key or the value.
+ ---@param arg2? any # Always the value.
+ ---
+ ---@return table # The result table to which an additional key-value pair or value has been added.
+ local add_to_table = function(result, arg1, arg2)
+ if arg2 == nil then
+ local index = #result + 1
+ return rawset(result, index, arg1)
+ else
+ return rawset(result, arg1, arg2)
+ end
end
- end
- --- Add values to a table in two modes:
- --
- -- Key-value pair:
- --
- -- If `arg1` and `arg2` are not nil, then `arg1` is the key and `arg2` is the
- -- value of a new table entry.
- --
- -- Indexed value:
- --
- -- If `arg2` is nil, then `arg1` is the value and is added as an indexed
- -- (by an integer) value.
- --
- ---@param result table # The result table to which an additional key-value pair or value should to be added
- ---@param arg1 any # The key or the value.
- ---@param arg2? any # Always the value.
- ---
- ---@return table # The result table to which an additional key-value pair or value has been added.
- local add_to_table = function(result, arg1, arg2)
- if arg2 == nil then
- local index = #result + 1
- return rawset(result, index, arg1)
- else
- return rawset(result, arg1, arg2)
- end
- end
+ -- LuaFormatter off
+ return Pattern({
+ [1] = initial_rule,
- -- LuaFormatter off
- return Pattern({
- [1] = initial_rule,
-
- -- list_item*
- list = CaptureFolding(
- CaptureTable('') * Variable('list_item')^0,
- add_to_table
- ),
-
- -- '{' list '}'
- list_container =
- ws(opts.group_begin) * Variable('list') * ws(opts.group_end),
-
- -- ( list_container / key_value_pair / value ) ','?
- list_item =
- CaptureGroup(
- Variable('list_container') +
- Variable('key_value_pair') +
- Variable('value')
- ) * ws(opts.list_separator)^-1,
-
- -- key '=' (list_container / value)
- key_value_pair =
- (Variable('key') * ws(opts.assignment_operator)) * (Variable('list_container') + Variable('value')),
-
- -- number / string_quoted / string_unquoted
- key =
- Variable('number') +
- Variable('string_quoted') +
- Variable('string_unquoted'),
-
- -- boolean !value / dimension !value / number !value / string_quoted !value / string_unquoted
- -- !value -> Not-predicate -> * -Variable('value')
- value =
- Variable('boolean') * -Variable('value') +
- Variable('dimension') * -Variable('value') +
- Variable('number') * -Variable('value') +
- Variable('string_quoted') * -Variable('value') +
- Variable('string_unquoted'),
-
- -- for is.boolean()
- boolean_only = Variable('boolean') * -1,
-
- -- boolean_true / boolean_false
- boolean =
- (
- Variable('boolean_true') * CaptureConstant(true) +
- Variable('boolean_false') * CaptureConstant(false)
+ ---list_item*
+ list = CaptureFolding(
+ CaptureTable('') * Variable('list_item')^0,
+ add_to_table
),
- boolean_true = line_up_pattern(opts.true_aliases),
-
- boolean_false = line_up_pattern(opts.false_aliases),
-
- -- for is.dimension()
- dimension_only = Variable('dimension') * -1,
-
- dimension = (
- Variable('tex_number') * white_space^0 *
- Variable('unit')
- ) / capture_dimension,
-
- -- for is.number()
- number_only = Variable('number') * -1,
-
- -- capture number
- number = Variable('tex_number') / tonumber,
-
- -- sign? white_space? (integer+ fractional? / fractional)
- tex_number =
- Variable('sign')^0 * white_space^0 *
- (Variable('integer')^1 * Variable('fractional')^0) +
- Variable('fractional'),
-
- sign = Set('-+'),
-
- fractional = Pattern('.') * Variable('integer')^1,
-
- integer = Range('09')^1,
-
- -- 'bp' / 'BP' / 'cc' / etc.
- -- https://raw.githubusercontent.com/latex3/lualibs/master/lualibs-util-dim.lua
- -- https://github.com/TeX-Live/luatex/blob/51db1985f5500dafd2393aa2e403fefa57d3cb76/source/texk/web2c/luatexdir/lua/ltexlib.c#L434-L625
- unit =
- Pattern('bp') + Pattern('BP') +
- Pattern('cc') + Pattern('CC') +
- Pattern('cm') + Pattern('CM') +
- Pattern('dd') + Pattern('DD') +
- Pattern('em') + Pattern('EM') +
- Pattern('ex') + Pattern('EX') +
- Pattern('in') + Pattern('IN') +
- Pattern('mm') + Pattern('MM') +
- Pattern('mu') + Pattern('MU') +
- Pattern('nc') + Pattern('NC') +
- Pattern('nd') + Pattern('ND') +
- Pattern('pc') + Pattern('PC') +
- Pattern('pt') + Pattern('PT') +
- Pattern('px') + Pattern('PX') +
- Pattern('sp') + Pattern('SP'),
-
- -- '"' ('\"' / !'"')* '"'
- string_quoted =
- white_space^0 * Pattern(opts.quotation_begin) *
- CaptureSimple((Pattern('\\' .. opts.quotation_end) + 1 - Pattern(opts.quotation_end))^0) *
- Pattern(opts.quotation_end) * white_space^0,
-
- string_unquoted =
- white_space^0 *
- CaptureSimple(
- Variable('word_unquoted')^1 *
- (Set(' \t')^1 * Variable('word_unquoted')^1)^0) *
- white_space^0,
-
- word_unquoted = (1 - white_space - Set(
- opts.group_begin ..
- opts.group_end ..
- opts.assignment_operator ..
- opts.list_separator))^1
- })
+ ---'{' list '}'
+ list_container =
+ ws(opts.group_begin) * Variable('list') * ws(opts.group_end),
+
+ ---( list_container / key_value_pair / value ) ','?
+ list_item =
+ CaptureGroup(
+ Variable('list_container') +
+ Variable('key_value_pair') +
+ Variable('value')
+ ) * ws(opts.list_separator)^-1,
+
+ ---key '=' (list_container / value)
+ key_value_pair =
+ (Variable('key') * ws(opts.assignment_operator)) * (Variable('list_container') + Variable('value')),
+
+ ---number / string_quoted / string_unquoted
+ key =
+ Variable('number') +
+ Variable('string_quoted') +
+ Variable('string_unquoted'),
+
+ ---boolean !value / dimension !value / number !value / string_quoted !value / string_unquoted
+ ---!value -> Not-predicate -> * -Variable('value')
+ value =
+ Variable('boolean') * -Variable('value') +
+ Variable('dimension') * -Variable('value') +
+ Variable('number') * -Variable('value') +
+ Variable('string_quoted') * -Variable('value') +
+ Variable('string_unquoted'),
+
+ ---for is.boolean()
+ boolean_only = Variable('boolean') * -1,
+
+ ---boolean_true / boolean_false
+ boolean =
+ (
+ Variable('boolean_true') * CaptureConstant(true) +
+ Variable('boolean_false') * CaptureConstant(false)
+ ),
+
+ boolean_true = line_up_pattern(opts.true_aliases),
+
+ boolean_false = line_up_pattern(opts.false_aliases),
+
+ ---for is.dimension()
+ dimension_only = Variable('dimension') * -1,
+
+ dimension = (
+ Variable('tex_number') * white_space^0 *
+ Variable('unit')
+ ) / capture_dimension,
+
+ ---for is.number()
+ number_only = Variable('number') * -1,
+
+ ---capture number
+ number = Variable('tex_number') / tonumber,
+
+ ---sign? white_space? (integer+ fractional? / fractional)
+ tex_number =
+ Variable('sign')^0 * white_space^0 *
+ (Variable('integer')^1 * Variable('fractional')^0) +
+ Variable('fractional'),
+
+ sign = Set('-+'),
+
+ fractional = Pattern('.') * Variable('integer')^1,
+
+ integer = Range('09')^1,
+
+ ---'bp' / 'BP' / 'cc' / etc.
+ ---https://raw.githubusercontent.com/latex3/lualibs/master/lualibs-util-dim.lua
+ ---https://github.com/TeX-Live/luatex/blob/51db1985f5500dafd2393aa2e403fefa57d3cb76/source/texk/web2c/luatexdir/lua/ltexlib.c#L434-L625
+ unit =
+ Pattern('bp') + Pattern('BP') +
+ Pattern('cc') + Pattern('CC') +
+ Pattern('cm') + Pattern('CM') +
+ Pattern('dd') + Pattern('DD') +
+ Pattern('em') + Pattern('EM') +
+ Pattern('ex') + Pattern('EX') +
+ Pattern('in') + Pattern('IN') +
+ Pattern('mm') + Pattern('MM') +
+ Pattern('mu') + Pattern('MU') +
+ Pattern('nc') + Pattern('NC') +
+ Pattern('nd') + Pattern('ND') +
+ Pattern('pc') + Pattern('PC') +
+ Pattern('pt') + Pattern('PT') +
+ Pattern('px') + Pattern('PX') +
+ Pattern('sp') + Pattern('SP'),
+
+ ---'"' ('\"' / !'"')* '"'
+ string_quoted =
+ white_space^0 * Pattern(opts.quotation_begin) *
+ CaptureSimple((Pattern('\\' .. opts.quotation_end) + 1 - Pattern(opts.quotation_end))^0) *
+ Pattern(opts.quotation_end) * white_space^0,
+
+ string_unquoted =
+ white_space^0 *
+ CaptureSimple(
+ Variable('word_unquoted')^1 *
+ (Set(' \t')^1 * Variable('word_unquoted')^1)^0) *
+ white_space^0,
+
+ word_unquoted = (1 - white_space - Set(
+ opts.group_begin ..
+ opts.group_end ..
+ opts.assignment_operator ..
+ opts.list_separator))^1
+ })
-- LuaFormatter on
-end
-
-local function visit_tree(tree, callback_func)
- if type(tree) ~= 'table' then
- throw_error('Parameter “tree” has to be a table, got: ' ..
- tostring(tree))
end
- local function visit_tree_recursive(tree,
- current,
- result,
- depth,
- callback_func)
- for key, value in pairs(current) do
- if type(value) == 'table' then
- value = visit_tree_recursive(tree, value, {}, depth + 1,
- callback_func)
+
+ local is = {
+ boolean = function(value)
+ if value == nil then
+ return false
end
+ if type(value) == 'boolean' then
+ return true
+ end
+ local parser = generate_parser('boolean_only')
+ local result = parser:match(tostring(value))
+ return result ~= nil
+ end,
- key, value = callback_func(key, value, depth, current, tree)
+ dimension = function(value)
+ if value == nil then
+ return false
+ end
+ local parser = generate_parser('dimension_only')
+ local result = parser:match(tostring(value))
+ return result ~= nil
+ end,
- if key ~= nil and value ~= nil then
- result[key] = value
+ integer = function(value)
+ local n = tonumber(value)
+ if n == nil then
+ return false
end
- end
- if next(result) ~= nil then
- return result
- end
- end
+ return n == math.floor(n)
+ end,
- local result = visit_tree_recursive(tree, tree, {}, 1, callback_func)
+ number = function(value)
+ if value == nil then
+ return false
+ end
+ if type(value) == 'number' then
+ return true
+ end
+ local parser = generate_parser('number_only')
+ local result = parser:match(tostring(value))
+ return result ~= nil
+ end,
- if result == nil then
- return {}
- end
- return result
-end
+ string = function(value)
+ return type(value) == 'string'
+ end,
-local is = {
- boolean = function(value)
- if value == nil then
- return false
- end
- if type(value) == 'boolean' then
- return true
- end
- local parser = generate_parser('boolean_only')
- local result = parser:match(tostring(value))
- return result ~= nil
- end,
-
- dimension = function(value)
- if value == nil then
- return false
- end
- local parser = generate_parser('dimension_only')
- local result = parser:match(tostring(value))
- return result ~= nil
- end,
-
- integer = function(value)
- local n = tonumber(value)
- if n == nil then
- return false
- end
- return n == math.floor(n)
- end,
+ list = function(value)
+ if type(value) ~= 'table' then
+ return false
+ end
- number = function(value)
- if value == nil then
- return false
- end
- if type(value) == 'number' then
+ for k, _ in pairs(value) do
+ if type(k) ~= 'number' then
+ return false
+ end
+ end
return true
- end
- local parser = generate_parser('number_only')
- local result = parser:match(tostring(value))
- return result ~= nil
- end,
-
- string = function(value)
- return type(value) == 'string'
- end,
-
- any = function(value)
- return true
- end,
-}
-
---- Apply the key-value-pair definitions (defs) on an input table in a
---- recursive fashion.
----
----@param defs table # A table containing all definitions.
----@param opts table # The parse options table.
----@param input table # The current input table.
----@param output table # The current output table.
----@param unknown table # Always the root unknown table.
----@param key_path table # An array of key names leading to the current
----@param input_root table # The root input table input and output table.
-local function apply_definitions(defs,
- opts,
- input,
- output,
- unknown,
- key_path,
- input_root)
- local exclusive_groups = {}
-
- local function add_to_key_path(key_path, key)
- local new_key_path = {}
-
- for index, value in ipairs(key_path) do
- new_key_path[index] = value
- end
+ end,
- table.insert(new_key_path, key)
- return new_key_path
- end
+ any = function(value)
+ return true
+ end,
+ }
- local function get_default_value(def)
- if def.default ~= nil then
- return def.default
- elseif opts ~= nil and opts.default ~= nil then
- return opts.default
- end
- return true
- end
+ ---
+ ---Apply the key-value-pair definitions (defs) on an input table in a
+ ---recursive fashion.
+ ---
+ ---@param defs table # A table containing all definitions.
+ ---@param opts table # The parse options table.
+ ---@param input table # The current input table.
+ ---@param output table # The current output table.
+ ---@param unknown table # Always the root unknown table.
+ ---@param key_path table # An array of key names leading to the current
+ ---@param input_root table # The root input table input and output table.
+ local function apply_definitions(defs,
+ opts,
+ input,
+ output,
+ unknown,
+ key_path,
+ input_root)
+ local exclusive_groups = {}
+
+ local function add_to_key_path(key_path, key)
+ local new_key_path = {}
+
+ for index, value in ipairs(key_path) do
+ new_key_path[index] = value
+ end
- local function find_value(search_key, def)
- if input[search_key] ~= nil then
- local value = input[search_key]
- input[search_key] = nil
- return value
- -- naked keys: values with integer keys
- elseif utils.remove_from_array(input, search_key) ~= nil then
- return get_default_value(def)
+ table.insert(new_key_path, key)
+ return new_key_path
end
- end
- local apply = {
- alias = function(value, key, def)
- if type(def.alias) == 'string' then
- def.alias = { def.alias }
- end
- local alias_value
- local used_alias_key
- -- To get an error if the key and an alias is present
- if value ~= nil then
- alias_value = value
- used_alias_key = key
- end
- for _, alias in ipairs(def.alias) do
- local v = find_value(alias, def)
- if v ~= nil then
- if alias_value ~= nil then
- throw_error(string.format(
- 'Duplicate aliases “%s” and “%s” for key “%s”!',
- used_alias_key, alias, key))
- end
- used_alias_key = alias
- alias_value = v
- end
- end
- if alias_value ~= nil then
- return alias_value
+ local function get_default_value(def)
+ if def.default ~= nil then
+ return def.default
+ elseif opts ~= nil and opts.default ~= nil then
+ return opts.default
end
- end,
+ return true
+ end
- always_present = function(value, key, def)
- if value == nil and def.always_present then
+ local function find_value(search_key, def)
+ if input[search_key] ~= nil then
+ local value = input[search_key]
+ input[search_key] = nil
+ return value
+ ---naked keys: values with integer keys
+ elseif utils.remove_from_table(input, search_key) ~= nil then
return get_default_value(def)
end
- end,
+ end
- choices = function(value, key, def)
- if value == nil then
- return
- end
- if def.choices ~= nil and type(def.choices) == 'table' then
- local is_in_choices = false
- for _, choice in ipairs(def.choices) do
- if value == choice then
- is_in_choices = true
+ local apply = {
+ alias = function(value, key, def)
+ if type(def.alias) == 'string' then
+ def.alias = { def.alias }
+ end
+ local alias_value
+ local used_alias_key
+ ---To get an error if the key and an alias is present
+ if value ~= nil then
+ alias_value = value
+ used_alias_key = key
+ end
+ for _, alias in ipairs(def.alias) do
+ local v = find_value(alias, def)
+ if v ~= nil then
+ if alias_value ~= nil then
+ throw_error('E003', {
+ alias1 = used_alias_key,
+ alias2 = alias,
+ key = key,
+ })
+ end
+ used_alias_key = alias
+ alias_value = v
end
end
- if not is_in_choices then
- throw_error('The value “' .. value ..
- '” does not exist in the choices: ' ..
- table.concat(def.choices, ', ') .. '!')
+ if alias_value ~= nil then
+ return alias_value
end
- end
- end,
+ end,
- data_type = function(value, key, def)
- if value == nil then
- return
- end
- if def.data_type ~= nil then
- local converted
- -- boolean
- if def.data_type == 'boolean' then
- if value == 0 or value == '' or not value then
- converted = false
- else
- converted = true
+ always_present = function(value, key, def)
+ if value == nil and def.always_present then
+ return get_default_value(def)
+ end
+ end,
+
+ choices = function(value, key, def)
+ if value == nil then
+ return
+ end
+ if def.choices ~= nil and type(def.choices) == 'table' then
+ local is_in_choices = false
+ for _, choice in ipairs(def.choices) do
+ if value == choice then
+ is_in_choices = true
+ end
end
- -- dimension
- elseif def.data_type == 'dimension' then
- if is.dimension(value) then
- converted = value
+ if not is_in_choices then
+ throw_error('E004', { value = value, choices = def.choices })
end
- -- integer
- elseif def.data_type == 'integer' then
- if is.number(value) then
- local n = tonumber(value)
- if type(n) == 'number' and n ~= nil then
- converted = math.floor(n)
+ end
+ end,
+
+ data_type = function(value, key, def)
+ if value == nil then
+ return
+ end
+ if def.data_type ~= nil then
+ local converted
+ ---boolean
+ if def.data_type == 'boolean' then
+ if value == 0 or value == '' or not value then
+ converted = false
+ else
+ converted = true
+ end
+ ---dimension
+ elseif def.data_type == 'dimension' then
+ if is.dimension(value) then
+ converted = value
+ end
+ ---integer
+ elseif def.data_type == 'integer' then
+ if is.number(value) then
+ local n = tonumber(value)
+ if type(n) == 'number' and n ~= nil then
+ converted = math.floor(n)
+ end
+ end
+ ---number
+ elseif def.data_type == 'number' then
+ if is.number(value) then
+ converted = tonumber(value)
+ end
+ ---string
+ elseif def.data_type == 'string' then
+ converted = tostring(value)
+ ---list
+ elseif def.data_type == 'list' then
+ if is.list(value) then
+ converted = value
end
+ else
+ throw_error('E005', { data_type = def.data_type })
end
- -- number
- elseif def.data_type == 'number' then
- if is.number(value) then
- converted = tonumber(value)
+ if converted == nil then
+ throw_error('E006', {
+ value = value,
+ key = key,
+ data_type = def.data_type,
+ })
+ else
+ return converted
end
- -- string
- elseif def.data_type == 'string' then
- converted = tostring(value)
- else
- throw_error('Unknown data type: ' .. def.data_type)
- end
- if converted == nil then
- throw_error(
- 'The value “' .. value .. '” of the key “' .. key ..
- '” could not be converted into the data type “' ..
- def.data_type .. '”!')
- else
- return converted
end
- end
- end,
+ end,
- exclusive_group = function(value, key, def)
- if value == nil then
- return
- end
- if def.exclusive_group ~= nil then
- if exclusive_groups[def.exclusive_group] ~= nil then
- throw_error('The key “' .. key ..
- '” belongs to a mutually exclusive group “' ..
- def.exclusive_group .. '” and the key “' ..
- exclusive_groups[def.exclusive_group] ..
- '” is already present!')
- else
- exclusive_groups[def.exclusive_group] = key
+ exclusive_group = function(value, key, def)
+ if value == nil then
+ return
end
- end
- end,
-
- l3_tl_set = function(value, key, def)
- if value == nil then
- return
- end
- if def.l3_tl_set ~= nil then
- tex.print(l3_code_cctab,
- '\\tl_set:Nn \\g_' .. def.l3_tl_set .. '_tl')
- tex.print('{' .. value .. '}')
- end
- end,
+ if def.exclusive_group ~= nil then
+ if exclusive_groups[def.exclusive_group] ~= nil then
+ throw_error('E007', {
+ key = key,
+ exclusive_group = def.exclusive_group,
+ another_key = exclusive_groups[def.exclusive_group],
+ })
+ else
+ exclusive_groups[def.exclusive_group] = key
+ end
+ end
+ end,
- macro = function(value, key, def)
- if value == nil then
- return
- end
- if def.macro ~= nil then
- token.set_macro(def.macro, value, 'global')
- end
- end,
+ l3_tl_set = function(value, key, def)
+ if value == nil then
+ return
+ end
+ if def.l3_tl_set ~= nil then
+ tex.print(l3_code_cctab,
+ '\\tl_set:Nn \\g_' .. def.l3_tl_set .. '_tl')
+ tex.print('{' .. value .. '}')
+ end
+ end,
- match = function(value, key, def)
- if value == nil then
- return
- end
- if def.match ~= nil then
- if type(def.match) ~= 'string' then
- throw_error('def.match has to be a string')
+ macro = function(value, key, def)
+ if value == nil then
+ return
end
- local match = string.match(value, def.match)
- if match == nil then
- throw_error(
- 'The value “' .. value .. '” of the key “' .. key ..
- '” does not match “' .. def.match .. '”!')
- else
- return match
+ if def.macro ~= nil then
+ token.set_macro(def.macro, value, 'global')
end
- end
- end,
+ end,
- opposite_keys = function(value, key, def)
- if def.opposite_keys ~= nil then
- local true_value = def.opposite_keys[true]
- local false_value = def.opposite_keys[false]
- if true_value == nil or false_value == nil then
- throw_error(
- 'Usage opposite_keys = { [true] = "...", [false] = "..." }')
+ match = function(value, key, def)
+ if value == nil then
+ return
end
- if utils.remove_from_array(input, true_value) ~= nil then
- return true
- elseif utils.remove_from_array(input, false_value) ~= nil then
- return false
+ if def.match ~= nil then
+ if type(def.match) ~= 'string' then
+ throw_error('E008')
+ end
+ local match = string.match(value, def.match)
+ if match == nil then
+ throw_error('E009', {
+ value = value,
+ key = key,
+ match = def.match:gsub('%%', '%%%%'),
+ })
+ else
+ return match
+ end
end
- end
- end,
+ end,
- process = function(value, key, def)
- if value == nil then
- return
- end
- if def.process ~= nil and type(def.process) == 'function' then
- return def.process(value, input_root, output, unknown)
- end
- end,
+ opposite_keys = function(value, key, def)
+ if def.opposite_keys ~= nil then
+ local function get_value(key1, key2)
+ local opposite_name
+ if def.opposite_keys[key1] ~= nil then
+ opposite_name = def.opposite_keys[key1]
+ elseif def.opposite_keys[key2] ~= nil then
+ opposite_name = def.opposite_keys[key2]
+ end
+ return opposite_name
+ end
+ local true_key = get_value(true, 1)
+ local false_key = get_value(false, 2)
+ if true_key == nil or false_key == nil then
+ throw_error('E010')
+ end
- pick = function(value, key, def)
- if def.pick then
- local pick_types
+ ---@param value string
+ local function remove_values(value)
+ local count = 0
+ while utils.remove_from_table(input, value) do
+ count = count + 1
+ end
+ return count
+ end
- -- Allow old deprecated attribut pick = true
- if def.pick == true then
- pick_types = { 'any' }
- elseif type(def.pick) == 'table' then
- pick_types = def.pick
- else
- pick_types = { def.pick }
- end
+ local true_count = remove_values(true_key)
+ local false_count = remove_values(false_key)
+
+ if true_count > 1 then
+ throw_error('E021', { key = true_key })
+ end
+
+ if false_count > 1 then
+ throw_error('E021', { key = false_key })
+ end
- -- Check if the pick attribute is valid
- for _, pick_type in ipairs(pick_types) do
- if type(pick_type) == 'string' and is[pick_type] == nil then
- throw_error(
- 'Wrong data type in the “pick” attribute: ' ..
- tostring(pick_type) ..
- '. Allowed are: any, boolean, dimension, integer, number, string.')
+ if true_count > 0 and false_count > 0 then
+ throw_error('E020',
+ { ['true'] = true_key, ['false'] = false_key })
end
+
+ return true_count == 1 or false_count == 0
end
+ end,
- -- The key has already a value. We leave the function at this
- -- point to be able to check the pick attribute for errors
- -- beforehand.
- if value ~= nil then
- return value
+ process = function(value, key, def)
+ if value == nil then
+ return
end
+ if def.process ~= nil and type(def.process) == 'function' then
+ return def.process(value, input_root, output, unknown)
+ end
+ end,
- for _, pick_type in ipairs(pick_types) do
- for i, v in pairs(input) do
- -- We can not use ipairs here. `ipairs(t)` iterates up to the
- -- first absent index. Values are deleted from the `input`
- -- table.
- if type(i) == 'number' then
- local picked_value = nil
- if is[pick_type](v) then
- picked_value = v
- end
+ pick = function(value, key, def)
+ if def.pick then
+ local pick_types
- if picked_value ~= nil then
- input[i] = nil
- return picked_value
- end
+ ---Allow old deprecated attribut pick = true
+ if def.pick == true then
+ pick_types = { 'any' }
+ elseif type(def.pick) == 'table' then
+ pick_types = def.pick
+ else
+ pick_types = { def.pick }
+ end
+
+ ---Check if the pick attribute is valid
+ for _, pick_type in ipairs(pick_types) do
+ if type(pick_type) == 'string' and is[pick_type] == nil then
+ throw_error('E011', {
+ unknown = tostring(pick_type),
+ data_types = {
+ 'any',
+ 'boolean',
+ 'dimension',
+ 'integer',
+ 'number',
+ 'string',
+ },
+ })
end
end
- end
- end
- end,
- required = function(value, key, def)
- if def.required ~= nil and def.required and value == nil then
- throw_error(string.format('Missing required key “%s”!', key))
- end
- end,
+ ---The key has already a value. We leave the function at this
+ ---point to be able to check the pick attribute for errors
+ ---beforehand.
+ if value ~= nil then
+ return value
+ end
- sub_keys = function(value, key, def)
- if def.sub_keys ~= nil then
- local v
- -- To get keys defined with always_present
- if value == nil then
- v = {}
- elseif type(value) == 'string' then
- v = { value }
- elseif type(value) == 'table' then
- v = value
+ for _, pick_type in ipairs(pick_types) do
+ for i, v in pairs(input) do
+ ---We can not use ipairs here. `ipairs(t)` iterates up to the
+ ---first absent index. Values are deleted from the `input`
+ ---table.
+ if type(i) == 'number' then
+ local picked_value = nil
+ if is[pick_type](v) then
+ picked_value = v
+ end
+
+ if picked_value ~= nil then
+ input[i] = nil
+ return picked_value
+ end
+ end
+ end
+ end
end
- v = apply_definitions(def.sub_keys, opts, v, output[key],
- unknown, add_to_key_path(key_path, key), input_root)
- if utils.get_table_size(v) > 0 then
- return v
+ end,
+
+ required = function(value, key, def)
+ if def.required ~= nil and def.required and value == nil then
+ throw_error('E012', { key = key })
end
- end
- end,
- }
+ end,
- --- standalone values are removed.
- -- For some callbacks and the third return value of parse, we
- -- need an unchanged raw result from the parse function.
- input = clone_table(input)
- if output == nil then
- output = {}
- end
- if unknown == nil then
- unknown = {}
- end
- if key_path == nil then
- key_path = {}
- end
+ sub_keys = function(value, key, def)
+ if def.sub_keys ~= nil then
+ local v
+ ---To get keys defined with always_present
+ if value == nil then
+ v = {}
+ elseif type(value) == 'string' then
+ v = { value }
+ elseif type(value) == 'table' then
+ v = value
+ end
+ v = apply_definitions(def.sub_keys, opts, v, output[key],
+ unknown, add_to_key_path(key_path, key), input_root)
+ if utils.get_table_size(v) > 0 then
+ return v
+ end
+ end
+ end,
+ }
- for index, def in pairs(defs) do
- -- Find key and def
- local key
- -- `{ key1 = { }, key2 = { } }`
- if type(def) == 'table' and def.name == nil and type(index) ==
- 'string' then
- key = index
- -- `{ { name = 'key1' }, { name = 'key2' } }`
- elseif type(def) == 'table' and def.name ~= nil then
- key = def.name
- -- Definitions as strings in an array: `{ 'key1', 'key2' }`
- elseif type(index) == 'number' and type(def) == 'string' then
- key = def
- def = { default = get_default_value({}) }
+ ---standalone values are removed.
+ ---For some callbacks and the third return value of parse, we
+ ---need an unchanged raw result from the parse function.
+ input = utils.clone_table(input)
+ if output == nil then
+ output = {}
end
-
- if type(def) ~= 'table' then
- throw_error('Key definition must be a table!')
+ if unknown == nil then
+ unknown = {}
+ end
+ if key_path == nil then
+ key_path = {}
end
- for attr, _ in pairs(def) do
- if namespace.attrs[attr] == nil then
- throw_error('Unknown definition attribute: ' .. tostring(attr))
+ for index, def in pairs(defs) do
+ ---Find key and def
+ local key
+ ---`{ key1 = { }, key2 = { } }`
+ if type(def) == 'table' and def.name == nil and type(index) ==
+ 'string' then
+ key = index
+ ---`{ { name = 'key1' }, { name = 'key2' } }`
+ elseif type(def) == 'table' and def.name ~= nil then
+ key = def.name
+ ---Definitions as strings in an array: `{ 'key1', 'key2' }`
+ elseif type(index) == 'number' and type(def) == 'string' then
+ key = def
+ def = { default = get_default_value({}) }
end
- end
- if key == nil then
- throw_error('Key name couldn’t be detected!')
- end
+ if type(def) ~= 'table' then
+ throw_error('E013', { data_type = tostring(def), key = index }) ---key is nil
+ end
- local value = find_value(key, def)
-
- for _, def_opt in ipairs({
- 'alias',
- 'opposite_keys',
- 'pick',
- 'always_present',
- 'required',
- 'data_type',
- 'choices',
- 'match',
- 'exclusive_group',
- 'macro',
- 'l3_tl_set',
- 'process',
- 'sub_keys',
- }) do
- if def[def_opt] ~= nil then
- local tmp_value = apply[def_opt](value, key, def)
- if tmp_value ~= nil then
- value = tmp_value
+ for attr, _ in pairs(def) do
+ if namespace.attrs[attr] == nil then
+ throw_error('E014', {
+ unknown = attr,
+ attr_names = utils.get_table_keys(namespace.attrs),
+ })
end
end
- end
- output[key] = value
- end
+ if key == nil then
+ throw_error('E015')
+ end
- if utils.get_table_size(input) > 0 then
- -- Move to the current unknown table.
- local current_unknown = unknown
- for _, key in ipairs(key_path) do
- if current_unknown[key] == nil then
- current_unknown[key] = {}
+ local value = find_value(key, def)
+
+ for _, def_opt in ipairs({
+ 'alias',
+ 'opposite_keys',
+ 'pick',
+ 'always_present',
+ 'required',
+ 'data_type',
+ 'choices',
+ 'match',
+ 'exclusive_group',
+ 'macro',
+ 'l3_tl_set',
+ 'process',
+ 'sub_keys',
+ }) do
+ if def[def_opt] ~= nil then
+ local tmp_value = apply[def_opt](value, key, def)
+ if tmp_value ~= nil then
+ value = tmp_value
+ end
+ end
end
- current_unknown = current_unknown[key]
+
+ output[key] = value
end
- -- Copy all unknown key-value-pairs to the current unknown table.
- for key, value in pairs(input) do
- current_unknown[key] = value
+ if utils.get_table_size(input) > 0 then
+ ---Move to the current unknown table.
+ local current_unknown = unknown
+ for _, key in ipairs(key_path) do
+ if current_unknown[key] == nil then
+ current_unknown[key] = {}
+ end
+ current_unknown = current_unknown[key]
+ end
+
+ ---Copy all unknown key-value-pairs to the current unknown table.
+ for key, value in pairs(input) do
+ current_unknown[key] = value
+ end
end
+
+ return output, unknown
end
- return output, unknown
-end
+ ---
+ ---Parse a LaTeX/TeX style key-value string into a Lua table.
+ ---
+ ---@param kv_string string # A string in the TeX/LaTeX style key-value format as described above.
+ ---@param opts? table # A table containing options.
+ ---
+ ---@return table result # The final result of all individual parsing and normalization steps.
+ ---@return table unknown # A table with unknown, undefinied key-value pairs.
+ ---@return table raw # The unprocessed, raw result of the LPeg parser.
+ local function parse(kv_string, opts)
+ if kv_string == nil then
+ return {}, {}, {}
+ end
---- Parse a LaTeX/TeX style key-value string into a Lua table.
----
----@param kv_string string # A string in the TeX/LaTeX style key-value format as described above.
----@param opts? table # A table containing the settings:
---- `convert_dimensions`, `unpack`, `naked_as_value`, `converter`,
---- `debug`, `preprocess`, `postprocess`.
---
----@return table result # The final result of all individual parsing and normalization steps.
----@return table unknown # A table with unknown, undefinied key-value pairs.
----@return table raw # The unprocessed, raw result of the LPeg parser.
-local function parse(kv_string, opts)
- if kv_string == nil then
- return {}, {}, {}
- end
+ opts = normalize_opts(opts)
- opts = normalize_opts(opts)
+ if type(opts.hooks.kv_string) == 'function' then
+ kv_string = opts.hooks.kv_string(kv_string)
+ end
- if type(opts.hooks.kv_string) == 'function' then
- kv_string = opts.hooks.kv_string(kv_string)
- end
+ local result = generate_parser('list', opts):match(kv_string)
+ local raw = utils.clone_table(result)
- local result = generate_parser('list', opts):match(kv_string)
- local raw = clone_table(result)
+ local function apply_hook(name)
+ if type(opts.hooks[name]) == 'function' then
+ if name:match('^keys') then
+ result = utils.visit_tree(result, opts.hooks[name])
+ else
+ opts.hooks[name](result)
+ end
- local function apply_hook(name)
- if type(opts.hooks[name]) == 'function' then
- if name:match('^keys') then
- result = visit_tree(result, opts.hooks[name])
- else
- opts.hooks[name](result)
+ if opts.debug then
+ print('After the execution of the hook: ' .. name)
+ visualizers.debug(result)
+ end
end
+ end
- if opts.debug then
- print('After the execution of the hook: ' .. name)
- debug(result)
+ local function apply_hooks(at)
+ if at ~= nil then
+ at = '_' .. at
+ else
+ at = ''
end
+ apply_hook('keys' .. at)
+ apply_hook('result' .. at)
end
- end
- local function apply_hooks(at)
- if at ~= nil then
- at = '_' .. at
- else
- at = ''
- end
- apply_hook('keys' .. at)
- apply_hook('result' .. at)
- end
+ apply_hooks('before_opts')
+
+ ---
+ ---Normalize the result table of the LPeg parser. This normalization
+ ---tasks are performed on the raw input table coming directly from
+ ---the PEG parser:
+ --
+ ---@param result table # The raw input table coming directly from the PEG parser
+ ---@param opts table # Some options.
+ local function apply_opts(result, opts)
+ local callbacks = {
+ unpack = function(key, value)
+ if type(value) == 'table' and utils.get_array_size(value) == 1 and
+ utils.get_table_size(value) == 1 and type(value[1]) ~=
+ 'table' then
+ return key, value[1]
+ end
+ return key, value
+ end,
- apply_hooks('before_opts')
+ process_naked = function(key, value)
+ if type(key) == 'number' and type(value) == 'string' then
+ return value, opts.default
+ end
+ return key, value
+ end,
+
+ format_key = function(key, value)
+ if type(key) == 'string' then
+ for _, style in ipairs(opts.format_keys) do
+ if style == 'lower' then
+ key = key:lower()
+ elseif style == 'snake' then
+ key = key:gsub('[^%w]+', '_')
+ elseif style == 'upper' then
+ key = key:upper()
+ else
+ throw_error('E017', {
+ unknown = style,
+ styles = { 'lower', 'snake', 'upper' },
+ })
+ end
+ end
+ end
+ return key, value
+ end,
- --- Normalize the result table of the LPeg parser. This normalization
- -- tasks are performed on the raw input table coming directly from
- -- the PEG parser:
- --
- ---@param result table # The raw input table coming directly from the PEG parser
- ---@param opts table # Some options.
- local function apply_opts(result, opts)
- local callbacks = {
- unpack = function(key, value)
- if type(value) == 'table' and utils.get_array_size(value) == 1 and
- utils.get_table_size(value) == 1 and type(value[1]) ~= 'table' then
- return key, value[1]
- end
- return key, value
- end,
+ apply_invert_flag = function(key, value)
+ if type(key) == 'string' and key:find(opts.invert_flag) then
+ return key:gsub(opts.invert_flag, ''), not value
+ end
+ return key, value
+ end,
+ }
- process_naked = function(key, value)
- if type(key) == 'number' and type(value) == 'string' then
- return value, opts.default
- end
- return key, value
- end,
+ if opts.unpack then
+ result = utils.visit_tree(result, callbacks.unpack)
+ end
- format_key = function(key, value)
- if type(key) == 'string' then
- for _, style in ipairs(opts.format_keys) do
- if style == 'lower' then
- key = key:lower()
- elseif style == 'snake' then
- key = key:gsub('[^%w]+', '_')
- elseif style == 'upper' then
- key = key:upper()
- else
- throw_error('Unknown style to format keys: ' ..
- tostring(style) ..
- ' Allowed styles are: lower, snake, upper')
- end
- end
- end
- return key, value
- end,
+ if not opts.naked_as_value and opts.defs == false then
+ result = utils.visit_tree(result, callbacks.process_naked)
+ end
- apply_invert_flag = function(key, value)
- if type(key) == 'string' and key:find(opts.invert_flag) then
- return key:gsub(opts.invert_flag, ''), not value
+ if opts.format_keys then
+ if type(opts.format_keys) ~= 'table' then
+ throw_error('E018', { data_type = type(opts.format_keys) })
end
- return key, value
- end,
- }
+ result = utils.visit_tree(result, callbacks.format_key)
+ end
+
+ if opts.invert_flag then
+ result = utils.visit_tree(result, callbacks.apply_invert_flag)
+ end
- if opts.unpack then
- result = visit_tree(result, callbacks.unpack)
+ return result
end
+ result = apply_opts(result, opts)
+
+ ---All unknown keys are stored in this table
+ local unknown = nil
+ if type(opts.defs) == 'table' then
+ apply_hooks('before_defs')
+ result, unknown = apply_definitions(opts.defs, opts, result, {},
+ {}, {}, utils.clone_table(result))
+ end
+
+ apply_hooks()
- if not opts.naked_as_value and opts.defs == false then
- result = visit_tree(result, callbacks.process_naked)
+ if opts.defaults ~= nil and type(opts.defaults) == 'table' then
+ utils.merge_tables(result, opts.defaults, false)
end
- if opts.format_keys then
- if type(opts.format_keys) ~= 'table' then
- throw_error(
- 'The option “format_keys” has to be a table not ' ..
- type(opts.format_keys))
- end
- result = visit_tree(result, callbacks.format_key)
+ if opts.debug then
+ visualizers.debug(result)
end
- if opts.invert_flag then
- result = visit_tree(result, callbacks.apply_invert_flag)
+ if opts.accumulated_result ~= nil and type(opts.accumulated_result) ==
+ 'table' then
+ utils.merge_tables(opts.accumulated_result, result, true)
end
- return result
- end
- result = apply_opts(result, opts)
-
- -- All unknown keys are stored in this table
- local unknown = nil
- if type(opts.defs) == 'table' then
- apply_hooks('before_defs')
- result, unknown = apply_definitions(opts.defs, opts, result, {}, {},
- {}, clone_table(result))
+ ---no_error
+ if not opts.no_error and type(unknown) == 'table' and
+ utils.get_table_size(unknown) > 0 then
+ throw_error('E019', { unknown = visualizers.render(unknown) })
+ end
+ return result, unknown, raw
end
- apply_hooks()
-
- if opts.defaults ~= nil and type(opts.defaults) == 'table' then
- merge_tables(result, opts.defaults)
- end
+ ---
+ ---A table to store parsed key-value results.
+ local result_store = {}
- if opts.debug then
- debug(result)
- end
+ return {
+ new = main,
- -- no_error
- if not opts.no_error and type(unknown) == 'table' and
- utils.get_table_size(unknown) > 0 then
- throw_error('Unknown keys: ' .. render(unknown))
- end
- return result, unknown, raw
-end
+ version = { 0, 12, 0 },
---- Store results
--- @section
+ ---@see parse
+ parse = parse,
---- A table to store parsed key-value results.
-local result_store = {}
+ define = function(defs, opts)
+ return function(kv_string, inner_opts)
+ local options
---- Exports
--- @section
+ if inner_opts ~= nil and opts ~= nil then
+ options = utils.merge_tables(opts, inner_opts)
+ elseif inner_opts ~= nil then
+ options = inner_opts
+ elseif opts ~= nil then
+ options = opts
+ end
-local export = {
- version = { 0, 11, 0 },
+ if options == nil then
+ options = {}
+ end
- ---Get a new instance of the luakeys module.
- ---
- ---@return table # A new instance of the luakeys module.
- get_private_instance = function()
- package.loaded.luakeys = nil
- local luakeys = require('luakeys')
- package.loaded.luakeys = nil
- return luakeys
- end,
+ options.defs = defs
- namespace = namespace,
+ return parse(kv_string, options)
+ end
+ end,
- ---This function is used in the documentation.
- ---
- ---@param from string # A key in the namespace table, either `opts`, `hook` or `attrs`.
- print_names = function(from)
- local names = {}
- for name in pairs(namespace[from]) do
- table.insert(names, name)
- end
- table.sort(names)
- tex.print(table.concat(names, ', '))
- end,
+ ---@see default_opts
+ opts = default_opts,
- print_default = function(from, name)
- tex.print(tostring(namespace[from][name]))
- end,
+ error_messages = error_messages,
- --- @see default_options
- opts = default_options,
+ ---@see visualizers.render
+ render = visualizers.render,
- --- @see stringify
- stringify = stringify,
+ ---@see visualizers.stringify
+ stringify = visualizers.stringify,
- --- @see parse
- parse = parse,
+ ---@see visualizers.debug
+ debug = visualizers.debug,
- define = function(defs, opts)
- return function(kv_string, inner_opts)
- local options
+ ---
+ ---The function `save(identifier, result): void` saves a result (a
+ ---table from a previous run of `parse`) under an identifier.
+ ---Therefore, it is not necessary to pollute the global namespace to
+ ---store results for the later usage.
+ ---
+ ---@param identifier string # The identifier under which the result is saved.
+ ---
+ ---@param result table # A result to be stored and that was created by the key-value parser.
+ save = function(identifier, result)
+ result_store[identifier] = result
+ end,
- if inner_opts ~= nil and opts ~= nil then
- options = merge_tables(opts, inner_opts)
- elseif inner_opts ~= nil then
- options = inner_opts
- elseif opts ~= nil then
- options = opts
- end
+ ---The function `get(identifier): table` retrieves a saved result
+ ---from the result store.
+ ---
+ ---@param identifier string # The identifier under which the result was saved.
+ ---
+ ---@return table
+ get = function(identifier)
+ ---if result_store[identifier] == nil then
+ --- throw_error('No stored result was found for the identifier \'' .. identifier .. '\'')
+ ---end
+ return result_store[identifier]
+ end,
- if options == nil then
- options = {}
- end
+ is = is,
- options.defs = defs
+ utils = utils,
- return parse(kv_string, options)
- end
- end,
+ ---
+ ---Exported but intentionally undocumented functions
+ ---
- --- @see render
- render = render,
+ namespace = utils.clone_table(namespace),
- --- @see debug
- debug = debug,
+ ---
+ ---This function is used in the documentation.
+ ---
+ ---@param from string # A key in the namespace table, either `opts`, `hook` or `attrs`.
+ print_names = function(from)
+ local names = utils.get_table_keys(namespace[from])
+ tex.print(table.concat(names, ', '))
+ end,
- --- The function `save(identifier, result): void` saves a result (a
- -- table from a previous run of `parse`) under an identifier.
- -- Therefore, it is not necessary to pollute the global namespace to
- -- store results for the later usage.
- --
- ---@param identifier string # The identifier under which the result is saved.
- --
- ---@param result table # A result to be stored and that was created by the key-value parser.
- save = function(identifier, result)
- result_store[identifier] = result
- end,
+ print_default = function(from, name)
+ tex.print(tostring(namespace[from][name]))
+ end,
- --- The function `get(identifier): table` retrieves a saved result
- -- from the result store.
- --
- ---@param identifier string # The identifier under which the result was saved.
- ---
- ---@return table
- get = function(identifier)
- -- if result_store[identifier] == nil then
- -- throw_error('No stored result was found for the identifier \'' .. identifier .. '\'')
- -- end
- return result_store[identifier]
- end,
+ ---
+ ---@param exported_table table
+ depublish_functions = function(exported_table)
+ local function warn_global_import()
+ throw_error('E023')
+ end
- is = is,
+ exported_table.parse = warn_global_import
+ exported_table.define = warn_global_import
+ exported_table.save = warn_global_import
+ exported_table.get = warn_global_import
+ end,
+ }
- utils = utils,
-}
+end
-return export
+return main
diff --git a/macros/luatex/generic/luakeys/luakeys.pdf b/macros/luatex/generic/luakeys/luakeys.pdf
new file mode 100644
index 0000000000..5d53f1a31a
--- /dev/null
+++ b/macros/luatex/generic/luakeys/luakeys.pdf
Binary files differ
diff --git a/macros/luatex/generic/luakeys/luakeys.sty b/macros/luatex/generic/luakeys/luakeys.sty
index 8cb59cf5ef..4b5432faa3 100644
--- a/macros/luatex/generic/luakeys/luakeys.sty
+++ b/macros/luatex/generic/luakeys/luakeys.sty
@@ -1,5 +1,5 @@
%% luakeys.sty
-%% Copyright 2021-2022 Josef Friedrich
+%% Copyright 2021-2023 Josef Friedrich
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
@@ -17,5 +17,14 @@
% luakeys-debug.sty and luakeys-debug.tex.
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{luakeys}[2022/12/23 0.11.0 Parsing key-value options using Lua.]
-\directlua{luakeys = require('luakeys')}
+\ProvidesPackage{luakeys}[2023/01/05 v0.12.0 Parsing key-value options using Lua.]
+\directlua{
+ if luakeys == nil then
+ luakeys = require('luakeys')()
+ luakeys.depublish_functions(luakeys)
+ end
+}
+
+\def\LuakeysGetPackageOptions{\luaescapestring{\@ptionlist{\@currname.\@currext}}}
+
+\def\LuakeysGetClassOptions{\luaescapestring{\@raw@classoptionslist}}
diff --git a/macros/luatex/generic/luakeys/luakeys.tex b/macros/luatex/generic/luakeys/luakeys.tex
index c3c69a0ba3..f993e7c83f 100644
--- a/macros/luatex/generic/luakeys/luakeys.tex
+++ b/macros/luatex/generic/luakeys/luakeys.tex
@@ -1,5 +1,5 @@
%% luakeys.tex
-%% Copyright 2021-2022 Josef Friedrich
+%% Copyright 2021-2023 Josef Friedrich
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
@@ -16,4 +16,9 @@
% This work consists of the files luakeys.lua, luakeys.sty, luakeys.tex
% luakeys-debug.sty and luakeys-debug.tex.
-\directlua{luakeys = require('luakeys')}
+\directlua{
+ if luakeys == nil then
+ luakeys = require('luakeys')()
+ luakeys.depublish_functions(luakeys)
+ end
+}
diff --git a/macros/pdftex/mptopdf/doc/context/scripts/mkii/mptopdf.man b/macros/pdftex/mptopdf/doc/context/scripts/mkii/mptopdf.man
index c11ab07300..1820658983 100644
--- a/macros/pdftex/mptopdf/doc/context/scripts/mkii/mptopdf.man
+++ b/macros/pdftex/mptopdf/doc/context/scripts/mkii/mptopdf.man
@@ -1,4 +1,4 @@
-.TH "mptopdf" "1" "01-01-2022" "version 1.4.1" "convert MetaPost figures to PDF"
+.TH "mptopdf" "1" "01-01-2023" "version 1.4.1" "convert MetaPost figures to PDF"
.SH NAME
mptopdf - convert MetaPost figures to PDF
.SH SYNOPSIS
diff --git a/macros/unicodetex/latex/einfart/DEPENDS.txt b/macros/unicodetex/latex/einfart/DEPENDS.txt
new file mode 100644
index 0000000000..0b83e85a46
--- /dev/null
+++ b/macros/unicodetex/latex/einfart/DEPENDS.txt
@@ -0,0 +1 @@
+hard minimalist \ No newline at end of file
diff --git a/macros/unicodetex/latex/einfart/README.md b/macros/unicodetex/latex/einfart/README.md
index 51bf0b5605..4f72b8b80c 100644
--- a/macros/unicodetex/latex/einfart/README.md
+++ b/macros/unicodetex/latex/einfart/README.md
@@ -1,16 +1,12 @@
-<!-- Copyright (C) 2021-2022 by Jinwen XU -->
+<!-- Copyright (C) 2021-2023 by Jinwen XU -->
# `einfart` : write you articles in a simple and clear way
-**The current document class have been rewritten with `expl3`. Please note that the documentations are not yet up-to-date. The syntax of some commands have been changed since the last version, especially the declaration of theorem-like environments by `\CreateTheorem`. For the moment, you can refer to the documentation of the package `create-theorem`.**
+> **New documentations are being written and are expected to be completed by the end of 2023. In the meantime, only the core code would be included in TeX Live 2023 coming this April (old documentations have been removed from the distribution).**
-`einfart` is a LaTeX class for typesetting articles, which has a simple and
-clear design.
+`einfart` is a LaTeX class for typesetting articles, which has a simple and clear design.
-Currently, it has native support to Chinese (simplified and traditional),
-English, French, German, Italian, Japanese, Portuguese (European and Brazilian),
-Russian and Spanish typesetting. And it may compile with either XeLaTeX or
-LuaLaTeX.
+Currently, it has native support to Chinese (simplified and traditional), English, French, German, Italian, Japanese, Portuguese (European and Brazilian), Russian and Spanish typesetting. And it may compile with either XeLaTeX or LuaLaTeX.
This is part of the `minimalist` class series.
@@ -18,13 +14,12 @@ This is part of the `minimalist` class series.
Compared with usual document classes, it has the following features:
-- Native multi-language support: Chinese (simplified and traditional), English,
- French, German, Italian, Japanese, Portuguese (European and Brazilian),
- Russian and Spanish
- > In particular, for simplified Chinese, traditional Chinese and Japanese,
- > the fonts of the corresponding glyphs can be automatically switched
-- Ready-to-use theorem-like environments, also with multi-language support
+- Several carefully designed styles
+- Native multi-language support: Chinese (simplified and traditional), English, French, German, Italian, Japanese, Portuguese (European and Brazilian), Russian and Spanish
+ > In particular, for simplified Chinese, traditional Chinese and Japanese, the fonts of the corresponding glyphs can be automatically switched
+- Ready-to-use theorem-like environments, with clever referencing support
- Support both the standard and the AMS writing fashion
+- ... and so much more...
# License
diff --git a/macros/unicodetex/latex/einfart/einfart.cls b/macros/unicodetex/latex/einfart/einfart.cls
index 33b3e64129..bc5d8039c2 100644
--- a/macros/unicodetex/latex/einfart/einfart.cls
+++ b/macros/unicodetex/latex/einfart/einfart.cls
@@ -2,7 +2,7 @@
%% This is file `einfart/einfart.cls',
%% generated with the docstrip utility.
%%
-%% Copyright (C) 2021-2022 by Jinwen XU
+%% Copyright (C) 2021-2023 by Jinwen XU
%%
%% This is part of the minimalist class series.
%%
@@ -18,7 +18,7 @@
\NeedsTeXFormat{LaTeX2e}[2022-06-01]
\ProvidesExplClass
{einfart}
- {2023/01/02} {}
+ {2023/01/05} {}
{A simple and clear article style}
\tl_const:Nn \l__minimclass_base_class_tl { article }
diff --git a/macros/unicodetex/latex/simplivre/DEPENDS.txt b/macros/unicodetex/latex/simplivre/DEPENDS.txt
new file mode 100644
index 0000000000..0b83e85a46
--- /dev/null
+++ b/macros/unicodetex/latex/simplivre/DEPENDS.txt
@@ -0,0 +1 @@
+hard minimalist \ No newline at end of file
diff --git a/macros/unicodetex/latex/simplivre/README.md b/macros/unicodetex/latex/simplivre/README.md
index 3d0c3a872c..99d73b7547 100644
--- a/macros/unicodetex/latex/simplivre/README.md
+++ b/macros/unicodetex/latex/simplivre/README.md
@@ -1,16 +1,12 @@
-<!-- Copyright (C) 2021-2022 by Jinwen XU -->
+<!-- Copyright (C) 2021-2023 by Jinwen XU -->
# `simplivre` : write you books in a simple and clear way
-**The current document class have been rewritten with `expl3`. Please note that the documentations are not yet up-to-date. The syntax of some commands have been changed since the last version, especially the declaration of theorem-like environments by `\CreateTheorem`. For the moment, you can refer to the documentation of the package `create-theorem`.**
+> **New documentations are being written and are expected to be completed by the end of 2023. In the meantime, only the core code would be included in TeX Live 2023 coming this April (old documentations have been removed from the distribution).**
-`simplivre` is a LaTeX class for typesetting books, which has a simple and clear
-design.
+`simplivre` is a LaTeX class for typesetting books, which has a simple and clear design.
-Currently, it has native support to Chinese (simplified and traditional),
-English, French, German, Italian, Japanese, Portuguese (European and Brazilian),
-Russian and Spanish typesetting. And it may compile with either XeLaTeX or
-LuaLaTeX.
+Currently, it has native support to Chinese (simplified and traditional), English, French, German, Italian, Japanese, Portuguese (European and Brazilian), Russian and Spanish typesetting. And it may compile with either XeLaTeX or LuaLaTeX.
This is part of the `minimalist` class series.
@@ -18,13 +14,11 @@ This is part of the `minimalist` class series.
Compared with usual document classes, it has the following features:
-- Native multi-language support: Chinese (simplified and traditional), English,
- French, German, Italian, Japanese, Portuguese (European and Brazilian),
- Russian and Spanish
- > In particular, for simplified Chinese, traditional Chinese and Japanese,
- > the fonts of the corresponding glyphs can be automatically switched
-- Ready-to-use theorem-like environments, also with multi-language support
-- Support both the standard and the AMS writing fashion
+- Several carefully designed styles
+- Native multi-language support: Chinese (simplified and traditional), English, French, German, Italian, Japanese, Portuguese (European and Brazilian), Russian and Spanish
+ > In particular, for simplified Chinese, traditional Chinese and Japanese, the fonts of the corresponding glyphs can be automatically switched
+- Ready-to-use theorem-like environments, with clever referencing support
+- ... and so much more...
# License
diff --git a/macros/unicodetex/latex/simplivre/simplivre.cls b/macros/unicodetex/latex/simplivre/simplivre.cls
index 63a861edea..b49f3d82e9 100644
--- a/macros/unicodetex/latex/simplivre/simplivre.cls
+++ b/macros/unicodetex/latex/simplivre/simplivre.cls
@@ -2,7 +2,7 @@
%% This is file `simplivre/simplivre.cls',
%% generated with the docstrip utility.
%%
-%% Copyright (C) 2021-2022 by Jinwen XU
+%% Copyright (C) 2021-2023 by Jinwen XU
%%
%% This is part of the minimalist class series.
%%
@@ -18,7 +18,7 @@
\NeedsTeXFormat{LaTeX2e}[2022-06-01]
\ProvidesExplClass
{simplivre}
- {2023/01/02} {}
+ {2023/01/05} {}
{A simple and clear book style}
\tl_const:Nn \l__minimclass_base_class_tl { book }
diff --git a/systems/mac/mactex/ExtrasFolder.pdf b/systems/mac/mactex/ExtrasFolder.pdf
index 2d1e69e7e8..4587aeefc8 100644
--- a/systems/mac/mactex/ExtrasFolder.pdf
+++ b/systems/mac/mactex/ExtrasFolder.pdf
Binary files differ
diff --git a/systems/mac/mactex/Licenses.txt b/systems/mac/mactex/Licenses.txt
index ef1d9cf11b..14d76ba879 100644
--- a/systems/mac/mactex/Licenses.txt
+++ b/systems/mac/mactex/Licenses.txt
@@ -1,10 +1,10 @@
$Id: Licenses.txt,v 1.14 2007/02/28 14:23:19 herbs Exp $
-Brief summary of the licensing of the various applications included as of 2022/12/29
+Brief summary of the licensing of the various applications included as of 2023/01/04
Aquamacs Emacs (Intel) - 3.6 - gpl - http://aquamacs.org/
Aquatkbibtex - 1.3 - gpl - http://aquatkbibtex.sourceforge.net/
-BibDesk (10.9+) - 1.8.14 - bsd - http://bibdesk.sourceforge.net/
+BibDesk (10.9+) - 1.8.15 - bsd - http://bibdesk.sourceforge.net/
BBEdit LaTeX Glossary - 3.03 - free? - from http://www.barebones.com/index.shtml
BBEdit TeX Scripts - - free? - from http://msneep.home.xs4all.nl/latex/
CocoAspell (10.11+) - 2.5 - free? - http://people.ict.usc.edu/~leuski/cocoaspell/
diff --git a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
index e9dbd358d3..875cb770e2 100644
--- a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+++ b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
@@ -46,7 +46,6 @@ $mirrors = {
'https://cran.asia/tex/' => 1,
'https://ftp.kaist.ac.kr/pub/tex-archive/' => 1,
'https://lab.uklee.pe.kr/tex-archive/' => 1,
- 'https://mirror.kakao.com/CTAN/' => 1,
'https://mirror.navercorp.com/CTAN/' => 1,
},
'Philippines' => {
@@ -71,6 +70,7 @@ $mirrors = {
'https://mirror.datacenter.by/pub/mirrors/CTAN/' => 1,
},
'Czech Republic' => {
+ 'http://ftp.cvut.cz/tex-archive/' => 1,
'https://mirrors.nic.cz/tex-archive/' => 1,
},
'Denmark' => {
@@ -139,13 +139,16 @@ $mirrors = {
},
'Portugal' => {
'https://ftp.eq.uc.pt/software/TeX/' => 1,
+ 'https://mirrors.up.pt/pub/CTAN/' => 1,
},
'Romania' => {
'https://mirrors.nxthost.com/ctan/' => 1,
},
'Russia' => {
+ 'https://ctan.altspu.ru/' => 1,
'https://mirror.macomnet.net/pub/CTAN/' => 1,
'https://mirror.truenetwork.ru/CTAN/' => 1,
+ 'https://mirrors.mi-ras.ru/CTAN/' => 1,
},
'Slovenia' => {
'https://ctan.ijs.si/tex-archive/' => 1,
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
index dd77da9c51..0fbcb95051 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
@@ -26,11 +26,11 @@ depend container_split_src_files/1
depend frozen/0
depend minrelease/2016
depend release/2022
-depend revision/65457
+depend revision/65465
name 00texlive.image
category TLCore
-revision 65441
+revision 65465
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
@@ -4689,7 +4689,7 @@ depend setting_available_architectures:aarch64-linux amd64-freebsd amd64-netbsd
name 00texlive.installer
category TLCore
-revision 65443
+revision 65459
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
@@ -164000,7 +164000,7 @@ catalogue-topics numbers
name kaytannollista-latexia
category Package
-revision 64278
+revision 65461
shortdesc Practical manual for LaTeX (Finnish)
relocated 1
longdesc "Kaytannollista Latexia" is a practical manual for LaTeX
@@ -164008,10 +164008,10 @@ longdesc written in the Finnish language. The manual covers most of the
longdesc topics that a typical document author needs. So it can be a
longdesc useful guide for beginners as well as a reference manual for
longdesc advanced users.
-containersize 572
-containerchecksum 14d0f65290b60ac0f4f2c3989893d70bbf74b4a35a38de4e313d76ee21a427348bc988b01252b9aa17d0db4a6387630e3840e01ad6e851020ee2d2a30977074c
-doccontainersize 998912
-doccontainerchecksum e61f5c448431f4171bb09f31f22ec36877718c9a8de3ff0cc763cc8d2643d0550a982979f9e20b2d9ac846c6e6b29932d8be054d6d9b32fbadd35b9ee0743833
+containersize 568
+containerchecksum dd0c2543cb40e8b1f36f29f2be3675874ce4a51538cf54584af0393e74a0acb9674a40433256d8629ceb68acb4d2d8641e97c5f19a3a0709843837a1279a10cb
+doccontainersize 998428
+doccontainerchecksum 35056d4df46d7a935d600ee6e670a3a3221524c8e4ed1ac6da638c0fe645bd6b2786dbc2d512558c65e6675f0c5e7ca27dd3dd83eca81ca8a1d4d8cc1a18dfca
docfiles size=371
RELOC/doc/latex/kaytannollista-latexia/README.md details="Readme"
RELOC/doc/latex/kaytannollista-latexia/kaytannollista-latexia.pdf details="The document itself" language="fi"
@@ -164030,7 +164030,7 @@ catalogue-contact-repository https://github.com/tlikonen/latex-opas
catalogue-ctan /info/kaytannollista-latexia
catalogue-license cc-by-sa-4
catalogue-topics tut-latex finnish-doc
-catalogue-version 2022.9
+catalogue-version 2023
name kblocks
category Package
@@ -193754,16 +193754,16 @@ catalogue-version 0.4.1
name lua-visual-debug
category Package
-revision 57349
+revision 65464
shortdesc Visual debugging with LuaLaTeX
relocated 1
longdesc The package uses lua code to provide visible indications of
longdesc boxes, glues, kerns and penalties in the PDF output. The
longdesc package is known to work in LaTeX and Plain TeX documents.
-containersize 3476
-containerchecksum f98f686ab3d03e48e377ebec624297f858be03097ed66b6448e82869942ce87f8d1699e4dffa9fc3294a3a8a79a2f547efe0e006eb132ba77eabb714e31d8b40
-doccontainersize 289376
-doccontainerchecksum dc1deb6a514397c745001c5635d5205f03b44cefb43d6618f83a2314453928141ed9591b5ad8539db96998901981f20ffc80f89b4b7d5532abf736cb9ae0bdb3
+containersize 3500
+containerchecksum 4d75ff11873d88b0914545e2233b7f49e6caca18a73aa71b74844ff516e41399c99c1fbb7f3bfcf420bcdb91bdfd10e42f4e8f7bfee05af284cea78e25718343
+doccontainersize 289572
+doccontainerchecksum 99736a1b08c2eba032d749686d30df9384fec22ae65878162436105ff9edc4c781bee5d6407612edb53edad73cf38aa84c870c612663c5b8e2262b191c526f76
docfiles size=102
RELOC/doc/luatex/lua-visual-debug/README.md details="Readme"
RELOC/doc/luatex/lua-visual-debug/lvdebug-doc.pdf details="Package documentation"
@@ -193781,7 +193781,7 @@ catalogue-contact-repository https://github.com/pgundlach/lvdebug
catalogue-ctan /macros/luatex/generic/lua-visual-debug
catalogue-license mit
catalogue-topics debug-supp luatex macro-gen
-catalogue-version 0.8
+catalogue-version 0.9
name lua-widow-control
category Package
@@ -217987,7 +217987,7 @@ catalogue-topics psychology journalpub bibtex-sty apa
name msu-thesis
category Package
-revision 65282
+revision 65462
shortdesc Class for Michigan State University Master's and PhD theses
relocated 1
longdesc This is a class file for producing dissertations and theses
@@ -217997,10 +217997,10 @@ longdesc Dissertations. The class should meet all current requirements
longdesc and is updated whenever the university guidelines change. The
longdesc class is based on the memoir document class, and inherits the
longdesc functionality of that class.
-containersize 12928
-containerchecksum 0423da62d1da9b79e79c075f50f8d03dff086ddd4c9d71a23ee767c9b2bc2e36ed5113a9ed880f9f5c12fc1b7c39614a8b6a216f95491df18b20fab0f1d7d543
-doccontainersize 480696
-doccontainerchecksum e066b37ca5405f20d080b6336b32fe915c1b0a5f9d48dc0155dff4b8009c5b455c29ba2cd8e14a83e0a704578aaf79a92af5d6d930ea4c1bf7682f38247d63db
+containersize 12960
+containerchecksum 918bfbcc2bec35581fc50bdd6e7ef10e5b8fd3f47d9eec896b5a0d18aaf5a953da0e46b20d0d19e03fd2a979a950e34f6956af85b19db2a6de74d1f9d91575d4
+doccontainersize 481040
+doccontainerchecksum a58f8c2103da08dbd04ee8310ae349d88fbe86a7126a0dc6bdcf44d2c91c7bb2aa453ea3830d737fb21c99de888453d83e24ba108a8f0fc17f2ec5aaede1d7ea
docfiles size=141
RELOC/doc/latex/msu-thesis/README.md details="Readme"
RELOC/doc/latex/msu-thesis/docs/msu-thesis.tex
@@ -218024,7 +218024,7 @@ catalogue-contact-repository https://github.com/amunn/msu-thesis
catalogue-ctan /macros/latex/contrib/msu-thesis
catalogue-license lppl1.3
catalogue-topics class dissertation doc-templ std-conform
-catalogue-version 4.0
+catalogue-version 4.0b
name mtgreek
category Package
@@ -256672,7 +256672,7 @@ catalogue-version 1.0b~4
name projlib
category Package
-revision 65436
+revision 65463
shortdesc A series of tools to simplify your workflow
relocated 1
longdesc ProjLib is a collection of tools to help you write LaTeX
@@ -256680,15 +256680,15 @@ longdesc documents. With the main package ProjLib loaded, you no longer
longdesc need to set up the theorem-like environments, nor to manually
longdesc configure the appropriate multilingual settings. In addition, a
longdesc series of auxiliary functionalities are introduced.
-containersize 26080
-containerchecksum b6a95e856a8582f01c96d065550adb6784664c2b6121635660c7ff31af90015d0ea5779bec84d760ac20a4746628c8d0a55a59adeb0a5b4db87768ae985acefc
-doccontainersize 8536
-doccontainerchecksum def1e18ac0677656d781710ec9e96a22e415f0f60534f3806c593e162d72b79ba54820dfb5a65d34ae18e6f885a80c3f16cb4b42014bc437ee50676a2d62a54d
+containersize 26060
+containerchecksum 6f080820207fbd46591149d2a64fdb17d785ea3a9328610710d713dc8fdb2ab4ed31823529694a6d197c7b38ad3607a13e7f0573fa666314f594731435cbc039
+doccontainersize 8636
+doccontainerchecksum a4631107e553cbf45dc1ade4a2129f2a7c6dd891008d022254860dc0dae4fdc94cb4f9a1cb86a334fab9b82069e0da0c43db04fb03a372e9b98fc52a5ddd23a6
docfiles size=7
RELOC/doc/latex/projlib/LICENSE
RELOC/doc/latex/projlib/README.md details="Readme"
srccontainersize 26252
-srccontainerchecksum 0ff45030d0c934157908b5da0633868ba439be71c72008c9c943709d29de4b350b65b481f7020e4eb9cabf1caee6f53d622b878ebd6a805a6225fe78f573ea36
+srccontainerchecksum f2654c13c074c66f29479e64033322ca5a127af8af419ec60d25aa41d3c356702680c75844019152f3abc0f5cfa0e102db0e90afaad23c3e099ce82282448e68
srcfiles size=54
RELOC/source/latex/projlib/ProjLib.dtx
RELOC/source/latex/projlib/ProjLib.ins
@@ -311311,7 +311311,7 @@ catalogue-version 0.1
name texinfo
category Package
-revision 65323
+revision 65459
shortdesc Texinfo documentation system
relocated 1
longdesc Texinfo is the preferred format for documentation in the GNU
@@ -311322,8 +311322,8 @@ longdesc distribution offer online interactive use (with hypertext
longdesc linkages in some cases). The latest release of the texinfo.tex
longdesc macros and texi2dvi script may be found in the texinfo-latest
longdesc package, which are usually newer than the last full release.
-containersize 97472
-containerchecksum 297bd20b82af019511e3b602b8cff1ea9ded9ebbb5c1ea3f6abf1cc446f312d078e5b69d8f7c618a9ed6c139e37c68ec1a69ac0dc53d9ed9bf8e77afe230c0be
+containersize 97300
+containerchecksum 56031830eefadc9b87af3a769526fe1cc477967472d258f0806c88727feeddf3ebb6a971c3f8d316be45cdab9056cd67096dab2021db44a1cf44cb054df35677
runfiles size=109
RELOC/tex/texinfo/texinfo.ini
RELOC/tex/texinfo/texinfo.tex
@@ -311659,7 +311659,7 @@ docfiles size=376
name texlive-scripts
category TLCore
-revision 65443
+revision 65459
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.
@@ -311667,10 +311667,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 113676
-containerchecksum 34caf7e198439864d8d42784f45703ca3a6a9b6f7497228ddc65d2838cc33de0de975933827197ae329975058e73a777e54947ad5c14848112adfd35e7c97195
-doccontainersize 423868
-doccontainerchecksum d0b56f5c5218db73557e27e656acaae7efc1f7ac9216f9dc2301913de093b34c05ba1bcc6c7d2370ad67dfd9a0f2b7289138ab1a39819743f75cb1bdc4641722
+containersize 113704
+containerchecksum 73abb59e85a348f32743e62fd01d084390eb333e0f096b7a946548f54d5c77a7331d6ec986aa57d511de9db0e4d663a1920465e391aebce79983c081065705a5
+doccontainersize 423864
+doccontainerchecksum 6a6d34bc9288a0dbf9da0bb35e8bb3b41575e79215da5177efcc2b35694414b067f90080d59d1a166af7fa1f48ca1869b5b03086b4c9d75b7dfb50ca62d578f7
docfiles size=532
doc.html
texmf-dist/doc/man/man1/fmtutil-sys.1
@@ -335173,49 +335173,49 @@ catalogue-version 1.00
name unimath-plain-xetex
category Package
-revision 65455
+revision 65460
shortdesc OpenType math support in (plain) XeTeX
relocated 1
longdesc This package provides OpenType math font support in plain TeX
longdesc format. It only works with the XeTeX engine.
-containersize 5804
-containerchecksum 516af2eeea85ba43c65b7be5b14e3fcfd4035bb1c0a43517725fa908df574c8d9aa71a7618e11a472d29d1cffcb3830cfe9d467039bf34fb595824e0df4e3161
-doccontainersize 71824
-doccontainerchecksum 3d00b30b31b840e3864e326bf98a494429f06e848f14b9fe70b910eaf144b70b4cda142fbe80ce336b6934635181e39716d6efba5c5220a28d623497b451f8b7
-docfiles size=50
+containersize 15952
+containerchecksum 515a68b849636178438cc169aa9fd5db05441043fec3749fd5e8bf1d2779db04fe753e6047a202dc5e055c839a260dbcb4bf829b69c9b49a5028f30e81ee6118
+doccontainersize 61724
+doccontainerchecksum 27ceee38d4bce113bf2691f6e42a3f88d3d0690a6d79509319a3f6dad93fea90f307c4d9b024634b8e3c31009237a21e6902f58b1377c55d5d6f4be3a843d739
+docfiles size=22
RELOC/doc/xetex/unimath-plain-xetex/README.md details="Readme"
- RELOC/doc/xetex/unimath-plain-xetex/fonts/unimath-bb.map
- RELOC/doc/xetex/unimath-plain-xetex/fonts/unimath-bb.tec
- RELOC/doc/xetex/unimath-plain-xetex/fonts/unimath-bbit.map
- RELOC/doc/xetex/unimath-plain-xetex/fonts/unimath-bbit.tec
- RELOC/doc/xetex/unimath-plain-xetex/fonts/unimath-bf.map
- RELOC/doc/xetex/unimath-plain-xetex/fonts/unimath-bf.tec
- RELOC/doc/xetex/unimath-plain-xetex/fonts/unimath-bfit.map
- RELOC/doc/xetex/unimath-plain-xetex/fonts/unimath-bfit.tec
- RELOC/doc/xetex/unimath-plain-xetex/fonts/unimath-frak.map
- RELOC/doc/xetex/unimath-plain-xetex/fonts/unimath-frak.tec
- RELOC/doc/xetex/unimath-plain-xetex/fonts/unimath-frakbf.map
- RELOC/doc/xetex/unimath-plain-xetex/fonts/unimath-frakbf.tec
- RELOC/doc/xetex/unimath-plain-xetex/fonts/unimath-it.map
- RELOC/doc/xetex/unimath-plain-xetex/fonts/unimath-it.tec
- RELOC/doc/xetex/unimath-plain-xetex/fonts/unimath-scr.map
- RELOC/doc/xetex/unimath-plain-xetex/fonts/unimath-scr.tec
- RELOC/doc/xetex/unimath-plain-xetex/fonts/unimath-scrbf.map
- RELOC/doc/xetex/unimath-plain-xetex/fonts/unimath-scrbf.tec
- RELOC/doc/xetex/unimath-plain-xetex/fonts/unimath-sf.map
- RELOC/doc/xetex/unimath-plain-xetex/fonts/unimath-sf.tec
- RELOC/doc/xetex/unimath-plain-xetex/fonts/unimath-sfbf.map
- RELOC/doc/xetex/unimath-plain-xetex/fonts/unimath-sfbf.tec
- RELOC/doc/xetex/unimath-plain-xetex/fonts/unimath-sfbfit.map
- RELOC/doc/xetex/unimath-plain-xetex/fonts/unimath-sfbfit.tec
- RELOC/doc/xetex/unimath-plain-xetex/fonts/unimath-sfit.map
- RELOC/doc/xetex/unimath-plain-xetex/fonts/unimath-sfit.tec
- RELOC/doc/xetex/unimath-plain-xetex/fonts/unimath-tt.map
- RELOC/doc/xetex/unimath-plain-xetex/fonts/unimath-tt.tec
RELOC/doc/xetex/unimath-plain-xetex/unimath-plain-genmap.lua
RELOC/doc/xetex/unimath-plain-xetex/unimath-plain-xetex-doc.pdf details="Package documentation"
RELOC/doc/xetex/unimath-plain-xetex/unimath-plain-xetex-doc.tex
-runfiles size=8
+runfiles size=36
+ RELOC/fonts/misc/xetex/fontmapping/unimath-plain-xetex/unimath-bb.map
+ RELOC/fonts/misc/xetex/fontmapping/unimath-plain-xetex/unimath-bb.tec
+ RELOC/fonts/misc/xetex/fontmapping/unimath-plain-xetex/unimath-bbit.map
+ RELOC/fonts/misc/xetex/fontmapping/unimath-plain-xetex/unimath-bbit.tec
+ RELOC/fonts/misc/xetex/fontmapping/unimath-plain-xetex/unimath-bf.map
+ RELOC/fonts/misc/xetex/fontmapping/unimath-plain-xetex/unimath-bf.tec
+ RELOC/fonts/misc/xetex/fontmapping/unimath-plain-xetex/unimath-bfit.map
+ RELOC/fonts/misc/xetex/fontmapping/unimath-plain-xetex/unimath-bfit.tec
+ RELOC/fonts/misc/xetex/fontmapping/unimath-plain-xetex/unimath-frak.map
+ RELOC/fonts/misc/xetex/fontmapping/unimath-plain-xetex/unimath-frak.tec
+ RELOC/fonts/misc/xetex/fontmapping/unimath-plain-xetex/unimath-frakbf.map
+ RELOC/fonts/misc/xetex/fontmapping/unimath-plain-xetex/unimath-frakbf.tec
+ RELOC/fonts/misc/xetex/fontmapping/unimath-plain-xetex/unimath-it.map
+ RELOC/fonts/misc/xetex/fontmapping/unimath-plain-xetex/unimath-it.tec
+ RELOC/fonts/misc/xetex/fontmapping/unimath-plain-xetex/unimath-scr.map
+ RELOC/fonts/misc/xetex/fontmapping/unimath-plain-xetex/unimath-scr.tec
+ RELOC/fonts/misc/xetex/fontmapping/unimath-plain-xetex/unimath-scrbf.map
+ RELOC/fonts/misc/xetex/fontmapping/unimath-plain-xetex/unimath-scrbf.tec
+ RELOC/fonts/misc/xetex/fontmapping/unimath-plain-xetex/unimath-sf.map
+ RELOC/fonts/misc/xetex/fontmapping/unimath-plain-xetex/unimath-sf.tec
+ RELOC/fonts/misc/xetex/fontmapping/unimath-plain-xetex/unimath-sfbf.map
+ RELOC/fonts/misc/xetex/fontmapping/unimath-plain-xetex/unimath-sfbf.tec
+ RELOC/fonts/misc/xetex/fontmapping/unimath-plain-xetex/unimath-sfbfit.map
+ RELOC/fonts/misc/xetex/fontmapping/unimath-plain-xetex/unimath-sfbfit.tec
+ RELOC/fonts/misc/xetex/fontmapping/unimath-plain-xetex/unimath-sfit.map
+ RELOC/fonts/misc/xetex/fontmapping/unimath-plain-xetex/unimath-sfit.tec
+ RELOC/fonts/misc/xetex/fontmapping/unimath-plain-xetex/unimath-tt.map
+ RELOC/fonts/misc/xetex/fontmapping/unimath-plain-xetex/unimath-tt.tec
RELOC/tex/xetex/unimath-plain-xetex/unimath-plain-xetex.tex
catalogue-contact-bugs https://github.com/AlphaZTX/unimath-plain-xetex/issues
catalogue-contact-development https://github.com/AlphaZTX
@@ -352900,7 +352900,7 @@ catalogue-version 1.0
name xput
category Package
-revision 65456
+revision 65465
shortdesc Declarative Desktop Publishing with LaTeX
longdesc This LaTeX class provides a collection of macros that wrap the
longdesc macro \put to offer a more desktop-publishing-like experience
@@ -352915,9 +352915,9 @@ longdesc hood Xput uses the TikZ and tcolorbox packages, ImageMagick and
longdesc Inkscape.
depend xput.ARCH
containersize 24116
-containerchecksum 83c4f32e96ed5645bc18854b6deb34dd0192e8bc8fd97a1a3b51f1f02fe0cd37bca05b1fa8291673a05ec8829346608f2f0566ccad1cb28390653a4390ad3251
+containerchecksum e9f33df4e11a4280aa7918ef819fd05f9ba98d518ce7540897c29de5ee56a9f680911006a6f7ec6064145654d77c9b052f10e2d8e1749e3f663c058b0289b669
doccontainersize 17244412
-doccontainerchecksum aded2be143f32940af76b232a1d2c88827b564522ee1424e3d47ea0ff52441d0463ac77a0310b0b1c7e5653e69491690a730bc380bebe8288160e7b7742eb2ae
+doccontainerchecksum 2b98be7131d7fd78f24be0716b7f05211a3c68e5b77acbb79f6f14269f33b7b520e3e93325eac9d93495f64cd7407b12f6d40f7e9ee48cb02b95ffdaebdbdc3b
docfiles size=4461
texmf-dist/doc/latex/xput/1x1.pdf
texmf-dist/doc/latex/xput/2x1.pdf
@@ -352955,137 +352955,152 @@ catalogue-version 1.0.2
name xput.aarch64-linux
category Package
-revision 65325
+revision 65465
shortdesc aarch64-linux files of xput
-containersize 336
-containerchecksum b04b6a1d5bae9279b79cad7dc5db7fbe147b390f6990452925802ce6b4b745403bfa34e693b7812d564da18f9ff253b5cdc7ec7aedb604da4e78e38fce43e9a7
-binfiles arch=aarch64-linux size=1
+containersize 364
+containerchecksum 952e08764ebe2648d81fe985b765af4a2f95d06a13956bf99dc25d6e01347efa0093568e7985262c5f10512d88ac51b3736594efabda9b2e05e39146a1f9f54c
+binfiles arch=aarch64-linux size=2
+ bin/aarch64-linux/xput
bin/aarch64-linux/xputserver
name xput.amd64-freebsd
category Package
-revision 65325
+revision 65465
shortdesc amd64-freebsd files of xput
-containersize 340
-containerchecksum ff80afc99b803e185edc78fa68895eedd3ce84ac3160c66a3da5e0f77f5a635f62456be35a5464989c6370f6d8b1137620553f9e42e820b92d47dadbba8d9d16
-binfiles arch=amd64-freebsd size=1
+containersize 364
+containerchecksum 4fac7fd62202ffdaa91368d4f5965feb40f33fc1035fa3220e0c027138f1b7fdd0a2e42dcde556bf7ad43cdee0b61f6a5e724f51783cd63bd7a63cfb7e8943e2
+binfiles arch=amd64-freebsd size=2
+ bin/amd64-freebsd/xput
bin/amd64-freebsd/xputserver
name xput.amd64-netbsd
category Package
-revision 65325
+revision 65465
shortdesc amd64-netbsd files of xput
-containersize 340
-containerchecksum 46e76ca70016353e0101cc7b9d53918c076978dd135b8da9267f3dc44b56e8ec0f0b0a4b8f8b45605dd552a442298adaa1e12287667a4b2a171ac0dac26323c3
-binfiles arch=amd64-netbsd size=1
+containersize 364
+containerchecksum 49a59cc997f96319967c3640e5fdac6470383cff23a40df935d53b168f655dda308345b1b41e30c9120afc70d5d4a791869acd02153e3407f5ba715f014042e9
+binfiles arch=amd64-netbsd size=2
+ bin/amd64-netbsd/xput
bin/amd64-netbsd/xputserver
name xput.armhf-linux
category Package
-revision 65325
+revision 65465
shortdesc armhf-linux files of xput
-containersize 336
-containerchecksum 95773556bb969d7437762aebac3ef0460ec0c11ef6508390176a6c6df52ea4a667162bb58a6be79d01e4151083ceea8aa67cceef67a75b45f35de005c51671c3
-binfiles arch=armhf-linux size=1
+containersize 364
+containerchecksum 11303ff606745cdef2c4909e5d1c3a8b888e499b4a4027fe0d27acc9a15f24d175294c23e6575b617ade27936d9df8610e277576379dd05f9e4ccdc3dd07d831
+binfiles arch=armhf-linux size=2
+ bin/armhf-linux/xput
bin/armhf-linux/xputserver
name xput.i386-cygwin
category Package
-revision 65325
+revision 65465
shortdesc i386-cygwin files of xput
-containersize 336
-containerchecksum c5fc14e8b35b962d5c0e826fa452c052f65685c0b44f712e7237699fd54e10c936ba849f4c76ebe7ba823662f4147a459d77c4549f4be6eb3683bdd7f7a36dbd
-binfiles arch=i386-cygwin size=1
+containersize 360
+containerchecksum 22ffd029807c71c5798a44dcec5facd8a99c185acc8f3d8ef0fce6547dd3c9928a3ddc961f2e061c717512641e383c55a66a4566eb247a56deb1e6f79d51e383
+binfiles arch=i386-cygwin size=2
+ bin/i386-cygwin/xput
bin/i386-cygwin/xputserver
name xput.i386-freebsd
category Package
-revision 65325
+revision 65465
shortdesc i386-freebsd files of xput
-containersize 340
-containerchecksum 647cc18fc68909f4fef6a77a14892e4aef78db45e51fb037305875c57093230875710b4b7e2615893bd086469d16a8eac6a6a2963fed7e6c24077977d1249aa7
-binfiles arch=i386-freebsd size=1
+containersize 364
+containerchecksum 1fcec343b18acc845dceee8674d298f69784fa2bc98aa1baf62de6752219aa107fa3f2e2502db5655578c8d2679b0108037de22ba8e5a9a083167178133e7b09
+binfiles arch=i386-freebsd size=2
+ bin/i386-freebsd/xput
bin/i386-freebsd/xputserver
name xput.i386-linux
category Package
-revision 65325
+revision 65465
shortdesc i386-linux files of xput
-containersize 340
-containerchecksum 1028fd8d1afd126ab625fa623f68371ab3883f7f7d98ce109aa21a4302c8dd4cbde77ccf4f617f8827bd90df1d66dd6731adc29caff675a8c9bd3002fd9c6f7f
-binfiles arch=i386-linux size=1
+containersize 364
+containerchecksum a227ef3460cdf551e85c28911c280c22b569aa792c6a1cdcf441031a8ba1b19fa3bc8192bcd30bff403d931398fd07062f0b7e2e91a934e6c5d3b6e8b66a2bd7
+binfiles arch=i386-linux size=2
+ bin/i386-linux/xput
bin/i386-linux/xputserver
name xput.i386-netbsd
category Package
-revision 65325
+revision 65465
shortdesc i386-netbsd files of xput
-containersize 336
-containerchecksum f293653473cf21f1508151548b162bfde859f0650e526df57528f363c51d09d221ea695a9e12ba9d2a8e955de31e6bb72a60e04b54e05d7c6f64d31cdc7e685d
-binfiles arch=i386-netbsd size=1
+containersize 364
+containerchecksum a781d8cbffc6949855cc52eeae336e89fba93c3913edf635b238d4e347db412b375e514f7bf5b7db751f5266f27347b3867645bc1cf4e9855cc986b2c31b9dcf
+binfiles arch=i386-netbsd size=2
+ bin/i386-netbsd/xput
bin/i386-netbsd/xputserver
name xput.i386-solaris
category Package
-revision 65325
+revision 65465
shortdesc i386-solaris files of xput
-containersize 336
-containerchecksum 1e211c3bce933de75c9f9ccce24a26428deb0d72e5f2704f29961389c4686bc71b7a673e544a29ce1ade83bb239f37de679a12c4ea8745f6967d473ca1104fcf
-binfiles arch=i386-solaris size=1
+containersize 360
+containerchecksum 14b3989a1a0116450bcb430bef61284d7dd39f2455f0fd2a825c411dc40a6bd2840e143ecb4b304f3156d9a0bbe110d63d1eca0c510b07b214890b3619848c69
+binfiles arch=i386-solaris size=2
+ bin/i386-solaris/xput
bin/i386-solaris/xputserver
name xput.universal-darwin
category Package
-revision 65325
+revision 65465
shortdesc universal-darwin files of xput
-containersize 340
-containerchecksum e62fc579df5083a591016280bff37e25146d6d301bde452a1f2f7d98ce9534120660f35ede56319de1c3cad9d0a2d9a37ec5185bc6a9dba38b0760d61baee03e
-binfiles arch=universal-darwin size=1
+containersize 364
+containerchecksum 0af67fabc9445e10c9a7a0d5cdd136fad7dd8a7e2256e9eea070b8ed382a1b314f3e4b4748a0e51a5430c424854170c89d225107d339448f2974508904310947
+binfiles arch=universal-darwin size=2
+ bin/universal-darwin/xput
bin/universal-darwin/xputserver
name xput.x86_64-cygwin
category Package
-revision 65325
+revision 65465
shortdesc x86_64-cygwin files of xput
-containersize 340
-containerchecksum b5f401ef8740508166d5f2a09ea8b5777633de45b1f6105b464f3e6b06627b4d5a6ea3d2d1db6c5fd24835819d81e8e4f51a6fb7bc40c9df926e66482facad17
-binfiles arch=x86_64-cygwin size=1
+containersize 364
+containerchecksum fe24b4cc03bc52101f4e0b53724b850339f41dbdf84d09637254396c124f2a10e77cc8cb6d9a93008e24a464e8449631452d8bee6eed5b92a457d8b93eb4d394
+binfiles arch=x86_64-cygwin size=2
+ bin/x86_64-cygwin/xput
bin/x86_64-cygwin/xputserver
name xput.x86_64-darwinlegacy
category Package
-revision 65325
+revision 65465
shortdesc x86_64-darwinlegacy files of xput
-containersize 344
-containerchecksum dfc72df6038a8ac2b42dc24a0452c88301d55c1b4c2dd7be25a21af4f460f09d991e0ea2e8c58e68afa90e50021e4924d8e626bff9342981ce5209e57eee6312
-binfiles arch=x86_64-darwinlegacy size=1
+containersize 372
+containerchecksum 61541764872e15cbd630555763e9728c9e9829756a4680cdc3ea6168297e12614a103c6551ae6b83e3e785caa2d7e39d63e6e7c20a7b0c686ad24169fd6d9efc
+binfiles arch=x86_64-darwinlegacy size=2
+ bin/x86_64-darwinlegacy/xput
bin/x86_64-darwinlegacy/xputserver
name xput.x86_64-linux
category Package
-revision 65325
+revision 65465
shortdesc x86_64-linux files of xput
-containersize 340
-containerchecksum d4aae848a6326039217a5b1b2f6b087f551777817d1cee3e1cb825603377359173f5c1f17fdcaeff214f50ccf2f9378ce5f65b2f4d9a5d6783f91e84f6440854
-binfiles arch=x86_64-linux size=1
+containersize 364
+containerchecksum c89a575384355c80a6c47d5fe4bb87508a6e0cd9c84293ba421f5ec964395114f737494014d50acae6e3b801791291c91e7380313c4c4ad4d6cbb6c204c3737d
+binfiles arch=x86_64-linux size=2
+ bin/x86_64-linux/xput
bin/x86_64-linux/xputserver
name xput.x86_64-linuxmusl
category Package
-revision 65325
+revision 65465
shortdesc x86_64-linuxmusl files of xput
-containersize 344
-containerchecksum 6b4bf5552586b80283142f0cd606f6fbe4a31da90d4f5ac71a3d448560c27a6fd31ea12be001bc7ff63f880c271a5a15298ee73e17ff1e57598597f36e577aca
-binfiles arch=x86_64-linuxmusl size=1
+containersize 368
+containerchecksum 51333bbb89b42b90eeaf074f74c22a948a7c02ad76f0a222d08ceecc4adcb03703fb70e4c2a8f1aeb8a4a40ede14bb4c90f5a0c3768044f6456305bad3c5cb61
+binfiles arch=x86_64-linuxmusl size=2
+ bin/x86_64-linuxmusl/xput
bin/x86_64-linuxmusl/xputserver
name xput.x86_64-solaris
category Package
-revision 65325
+revision 65465
shortdesc x86_64-solaris files of xput
-containersize 340
-containerchecksum ffcec8ce30a9c155292d55fe5b8c618fb700f8b6aeae614a9ca1d90fb8ec6aeabfd23826c54a9ec75dfaa2a01fa6d11ab38d4b52d7b502e680c37e9d7e0a3c18
-binfiles arch=x86_64-solaris size=1
+containersize 364
+containerchecksum 9f0fa5b57a0b6f4e52c984837d7ad7f3e4602a93b1f738b3ecaa794ed75b04c02818badcc8668aa092956384ce0faad8ef3f9d57f87958b3bcd2a188cde9d819
+binfiles arch=x86_64-solaris size=2
+ bin/x86_64-solaris/xput
bin/x86_64-solaris/xputserver
name xq
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
index eea5114337..729299b2a7 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
@@ -1 +1 @@
-c9739ac4ab652406d3408fe825e49d2d texlive.tlpdb
+77e7f476d3c993f80211fa0b90d50c18 texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
index ae1ba0b673..f5ae2dcdc6 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
@@ -1 +1 @@
-6b33ec7cce3bada95340ec70301211e9569d534a124e494f8888de93cea0bccfdd1824bcf0b6d86b4fe1fbe2fc7a0ee6563e61c844b189625696273ac2e8898e texlive.tlpdb
+dc9826186d47f306126c56180b2652b79257707047c47dddbe53abbecbeafea5741b981ccb46bb6bf64a2312bb0d59126f39fdd8e72b6987c1b23ffd45801aaf texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
index 62bfd3f68e..3917e92c68 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
@@ -1,10 +1,10 @@
-----BEGIN PGP SIGNATURE-----
-iQEcBAEBCgAGBQJjtM6WAAoJEEzhh34ZQ4xwb4AH/iKbdy0tr6/59vLjSMj3ULjN
-2m1596bP0aq69x/vNnpGFmJrzHTJ3mzfs7eNQ31dj1egpouVwcwkCnqhlXiSTrK3
-SlpCARCfcEzQ7IwCEsU2kUl1ha1XGRMIaLk2ah2WZZ473F8C4kq4jAWDbQXkWXZc
-sBG7U0foR1jnOhye9V5i3/OGrWOEGeLs4qb0SEjkiAbfyBHTQdiS7K1dFHToajLo
-TmiUkv81HDtDXN7moWwMontHRty9x4q4MDb1PmooUecBU18VD8706akecNufcbZ8
-Q2t/tsh9Fo77JsOz9+d2W4njsVlxEfzzrD1rybjO087MQseYK8Mkzrn8RP6BuAE=
-=Xydw
+iQEcBAEBCgAGBQJjth/WAAoJEEzhh34ZQ4xwJWYIALIFEAjecwincCn71WgTzZI8
+3mcp0KCgFCfn5Bp8SPcJ/eWjlSoe10bQxj4G2aawGsNQrkO3AOh+qCmYy2YnGoxs
+aSzvpVOATX8hdhTMO29Pj8dzGpBj0bftjpkiazEPFrQ7wzjxUo4hSYPjC+ySItJe
+nYTjKKDOSeJ40zOjJyzNLkQX7d8UFk8LaUsp8jFoX7EYCTrHQABV7XxyQaJTW9QA
+MJLTOZm/kErYNnl10eXnE4EYqhxrRcfulpR4o8XMWfN9kW8HjPURZg9AgKrqnIoQ
+l6RICN6POfgjn4iTt+JZb8hEswud2vuXTSkDVCj5SJXnaNokoJ5V0NfyY1ACBsE=
+=7Wd5
-----END PGP SIGNATURE-----
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
index c82fd683f8..c0da357d66 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 93c37cb3c3..032bbad2c6 100644
--- a/timestamp
+++ b/timestamp
@@ -2,4 +2,4 @@
# The source CTAN of this site's material:
dante.ctan.org
# The year-month-day-hour-minute of this site's material:
-2023-01-05-02-02
+2023-01-06-02-02