summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FILES.byname943
-rw-r--r--FILES.byname.gzbin2311119 -> 2311344 bytes
-rw-r--r--FILES.last07days980
-rw-r--r--biblio/bibtex/contrib/vancouver/vancouver.bib58
-rw-r--r--biblio/bibtex/contrib/vancouver/vancouver.bst9
-rw-r--r--biblio/bibtex/contrib/vancouver/vancouver.pdfbin120699 -> 121265 bytes
-rw-r--r--macros/latex/contrib/bnumexpr/README.md9
-rw-r--r--macros/latex/contrib/bnumexpr/bnumexpr.dtx277
-rw-r--r--macros/latex/contrib/bnumexpr/bnumexpr.pdfbin88616 -> 96634 bytes
-rw-r--r--macros/latex/contrib/changes/changes.drv2
-rw-r--r--macros/latex/contrib/changes/changes.dtx5
-rw-r--r--macros/latex/contrib/changes/changes.english.pdfbin368902 -> 368904 bytes
-rw-r--r--macros/latex/contrib/changes/changes.english.withcode.pdfbin453200 -> 452979 bytes
-rw-r--r--macros/latex/contrib/changes/changes.ins4
-rw-r--r--macros/latex/contrib/changes/changes.ngerman.pdfbin376311 -> 376315 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.addedmarkup.bf.pdfbin85486 -> 85486 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.addedmarkup.colored.pdfbin82295 -> 82295 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.addedmarkup.dashuline.pdfbin82935 -> 82935 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.addedmarkup.dotuline.pdfbin82553 -> 82553 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.addedmarkup.em.pdfbin83749 -> 83749 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.addedmarkup.it.pdfbin83749 -> 83749 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.addedmarkup.sl.pdfbin84735 -> 84735 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.addedmarkup.uline.pdfbin82746 -> 82746 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.addedmarkup.uuline.pdfbin85371 -> 85371 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.addedmarkup.uwave.pdfbin84759 -> 84759 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.addedmarkup.wrong.pdfbin82295 -> 82295 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.authormarkup.brackets.pdfbin74370 -> 74370 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.authormarkup.footnote.pdfbin99663 -> 99663 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.authormarkup.none.pdfbin73913 -> 73913 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.authormarkup.subscript.pdfbin82294 -> 82294 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.authormarkup.superscript.pdfbin82295 -> 82295 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.authormarkup.wrong.pdfbin82295 -> 82295 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.authormarkupposition.left.pdfbin82295 -> 82295 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.authormarkupposition.right.pdfbin82295 -> 82295 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.authormarkupposition.wrong.pdfbin82295 -> 82295 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.authormarkuptext.id.pdfbin82295 -> 82295 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.authormarkuptext.name.pdfbin83846 -> 83846 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.authormarkuptext.wrong.pdfbin82295 -> 82295 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.commandnameprefix.always.pdfbin82295 -> 82295 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.commandnameprefix.ifneeded.pdfbin82295 -> 82295 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.commandnameprefix.none.pdfbin82295 -> 82295 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.commandnameprefix.wrong.pdfbin82295 -> 82295 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.commentmarkup.footnote.pdfbin110514 -> 110514 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.commentmarkup.margin.pdfbin78953 -> 78953 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.commentmarkup.todo.pdfbin82295 -> 82295 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.commentmarkup.uwave.pdfbin81965 -> 81965 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.defaultcolor.pdfbin82299 -> 82299 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.deletedmarkup.bf.pdfbin84982 -> 84982 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.deletedmarkup.colored.pdfbin81125 -> 81125 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.deletedmarkup.dashuline.pdfbin82590 -> 82590 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.deletedmarkup.dotuline.pdfbin81687 -> 81687 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.deletedmarkup.em.pdfbin82891 -> 82891 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.deletedmarkup.it.pdfbin82891 -> 82891 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.deletedmarkup.sl.pdfbin85110 -> 85110 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.deletedmarkup.sout.pdfbin82295 -> 82295 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.deletedmarkup.uline.pdfbin82291 -> 82291 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.deletedmarkup.uuline.pdfbin88402 -> 88402 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.deletedmarkup.uwave.pdfbin83877 -> 83877 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.deletedmarkup.wrong.pdfbin82295 -> 82295 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.deletedmarkup.xout.pdfbin81521 -> 81521 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.draft.pdfbin82295 -> 82295 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.final.pdfbin68141 -> 68141 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.highlightmarkup.background.pdfbin82295 -> 82295 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.highlightmarkup.uuline.pdfbin82970 -> 82970 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.highlightmarkup.uwave.pdfbin84357 -> 84357 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.listofchanges.all.pdfbin88820 -> 88820 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.listofchanges.compactsummary.pdfbin86749 -> 86749 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.listofchanges.list.pdfbin84993 -> 84993 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.listofchanges.show.pdfbin89121 -> 89121 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.listofchanges.summary.pdfbin97975 -> 97975 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.listofchanges.title.pdfbin88388 -> 88388 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.listofchanges.wrong.pdfbin84993 -> 84993 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.markup.bfit.pdfbin86058 -> 86058 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.markup.default.pdfbin82295 -> 82295 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.markup.nocolor.pdfbin84681 -> 84681 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.markup.underlined.pdfbin84812 -> 84812 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.markup.wrong.pdfbin82295 -> 82295 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.packageoptions.todonotes.pdfbin104166 -> 104166 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.packageoptions.truncate.pdfbin83517 -> 83517 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.packageoptions.ulem.pdfbin75270 -> 75270 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.packageoptions.xcolor.pdfbin84182 -> 84182 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.screenshot.pdfbin143191 -> 143191 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.setaddedmarkup.pdfbin94860 -> 94860 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.setauthormarkup.pdfbin85414 -> 85414 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.setauthormarkupposition.pdfbin93585 -> 93585 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.setauthormarkuptext.pdfbin94839 -> 94839 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.setcommentmarkup.pdfbin94058 -> 94058 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.setdeletedmarkup.pdfbin94091 -> 94091 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.sethighlightmarkup.pdfbin93929 -> 93929 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.setsocextension.pdfbin82295 -> 82295 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.setsummarytowidth.pdfbin98926 -> 98926 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.setsummarywidth.pdfbin97786 -> 97786 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.settruncatewidth.pdfbin96371 -> 96371 bytes
-rw-r--r--macros/latex/contrib/changes/examples/changes.example.simple.pdfbin92919 -> 92919 bytes
-rw-r--r--macros/latex/contrib/changes/regression.dtx187
-rw-r--r--macros/latex/contrib/huawei/README.md10
-rw-r--r--macros/latex/contrib/huawei/huawei.cls250
-rw-r--r--macros/latex/contrib/huawei/huawei.pdfbin362777 -> 362961 bytes
-rw-r--r--macros/latex/contrib/huawei/huawei.tex4
-rw-r--r--macros/latex/contrib/tabularray/README4
-rw-r--r--macros/latex/contrib/tabularray/tabularray.pdfbin0 -> 379316 bytes
-rw-r--r--macros/latex/contrib/tabularray/tabularray.sty3897
-rw-r--r--macros/latex/contrib/tabularray/tabularray.tex751
-rw-r--r--macros/luatex/optex/pdfextra/LICENSE12
-rw-r--r--macros/luatex/optex/pdfextra/README.md35
-rw-r--r--macros/luatex/optex/pdfextra/examples/pdfextra-example-part.prcbin0 -> 58592 bytes
-rw-r--r--macros/luatex/optex/pdfextra/examples/pdfextra-example.pdfbin0 -> 385845 bytes
-rw-r--r--macros/luatex/optex/pdfextra/examples/pdfextra-example.tex341
-rw-r--r--macros/luatex/optex/pdfextra/pdfextra-doc.pdfbin0 -> 230095 bytes
-rw-r--r--macros/luatex/optex/pdfextra/pdfextra-doc.tex684
-rw-r--r--macros/luatex/optex/pdfextra/pdfextra.opm1702
-rw-r--r--macros/musixtex/README2
-rw-r--r--macros/musixtex/doc/ChangeLog-132.txt6
-rw-r--r--macros/musixtex/doc/musixdoc.pdfbin1374931 -> 1396006 bytes
-rw-r--r--macros/musixtex/doc/musixdoc/beams.tex5
-rw-r--r--macros/musixtex/doc/musixdoc/extensions.tex34
-rw-r--r--macros/musixtex/doc/musixdoc/frontmatter.tex4
-rw-r--r--macros/musixtex/doc/musixdoc/miscellaneous.tex6
-rw-r--r--macros/musixtex/doc/musixdoc/musixdoc.sty1
-rw-r--r--macros/musixtex/doc/scripts/musixflx.pdfbin4074 -> 9286 bytes
-rw-r--r--macros/musixtex/tex/musixtex.tex13
-rw-r--r--macros/musixtex/tex/musixvbm.tex211
-rw-r--r--systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl6
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb217
-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.xzbin2301360 -> 2304488 bytes
-rw-r--r--systems/win32/miktex/tm/packages/next/pr.ini8
-rw-r--r--systems/win32/miktex/tm/packages/pr.ini8
-rw-r--r--systems/win32/w32tex/ChangeLog10
-rw-r--r--timestamp2
132 files changed, 9377 insertions, 1338 deletions
diff --git a/FILES.byname b/FILES.byname
index 40fe37b54a..c5ba61a4ec 100644
--- a/FILES.byname
+++ b/FILES.byname
@@ -981,14 +981,14 @@
2011/07/04 | 46165 | biblio/bibtex/contrib/vak/test.zip
2011/07/04 | 28692 | biblio/bibtex/contrib/vak/vak.bst
2011/07/04 | 96457 | biblio/bibtex/contrib/vak.zip
-2021/05/12 | 1517 | biblio/bibtex/contrib/vancouver/FAQ
-2021/05/12 | 19106 | biblio/bibtex/contrib/vancouver/LICENSE
-2021/05/12 | 1959 | biblio/bibtex/contrib/vancouver/README
-2021/05/12 | 15576 | biblio/bibtex/contrib/vancouver/vancouver.bib
-2021/05/12 | 40586 | biblio/bibtex/contrib/vancouver/vancouver.bst
-2021/05/12 | 120699 | biblio/bibtex/contrib/vancouver/vancouver.pdf
-2021/05/12 | 14056 | biblio/bibtex/contrib/vancouver/vancouver.tex
-2021/05/12 | 149134 | biblio/bibtex/contrib/vancouver.zip
+2021/05/13 | 1517 | biblio/bibtex/contrib/vancouver/FAQ
+2021/05/13 | 19106 | biblio/bibtex/contrib/vancouver/LICENSE
+2021/05/13 | 1959 | biblio/bibtex/contrib/vancouver/README
+2021/05/13 | 15649 | biblio/bibtex/contrib/vancouver/vancouver.bib
+2021/05/13 | 40624 | biblio/bibtex/contrib/vancouver/vancouver.bst
+2021/05/13 | 121265 | biblio/bibtex/contrib/vancouver/vancouver.pdf
+2021/05/13 | 14056 | biblio/bibtex/contrib/vancouver/vancouver.tex
+2021/05/13 | 149732 | biblio/bibtex/contrib/vancouver.zip
2019/03/26 | 292 | biblio/bibtex/contrib/zootaxa-bst/CHANGES.md
2019/03/26 | 114795 | biblio/bibtex/contrib/zootaxa-bst/example.pdf
2019/03/26 | 34489 | biblio/bibtex/contrib/zootaxa-bst/example-refs.bib
@@ -5087,7 +5087,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
-2021/05/12 | 110494 | FILES.last07days
+2021/05/13 | 111104 | FILES.last07days
2020/08/14 | 104065 | fonts/academicons/academicons.pdf
2020/08/14 | 17247 | fonts/academicons/academicons.sty
2020/08/14 | 6546 | fonts/academicons/academicons.tex
@@ -149543,9 +149543,9 @@
2019/12/12 | 3088 | info/biblio/texnique.ltx
1999/02/20 | 312 | info/biblio/tugbib2.ltx
1999/02/20 | 315 | info/biblio/tugbib.ltx
-2020/10/19 | 3682102 | info/biblio/tugboat.bib
+2021/05/12 | 3711647 | info/biblio/tugboat.bib
2020/08/07 | 136241 | info/biblio/tugboat.def
-2020/10/19 | 3581 | info/biblio/tugboat.ltx
+2021/05/12 | 3573 | info/biblio/tugboat.ltx
2014/08/12 | 20186 | info/biblio/type.bib
2019/12/12 | 2025 | info/biblio/type.ltx
2021/03/18 | 1159806 | info/biblio/typeset.bib
@@ -173058,7 +173058,7 @@
2020/10/04 | 211400 | install/macros/luatex/latex/lualatex-math.tds.zip
2010/12/14 | 322044 | install/macros/luatex/latex/luatextra.tds.zip
2018/04/25 | 5009580 | install/macros/luatex/latex/novel.tds.zip
-2021/01/07 | 2431861 | install/macros/musixtex.tds.zip
+2021/05/13 | 2440587 | install/macros/musixtex.tds.zip
2013/07/02 | 153964 | install/macros/plain/contrib/plstmary.tds.zip
2008/05/18 | 22279 | install/macros/plain/plnfss.tds.zip
2020/02/21 | 1370731 | install/macros/unicodetex/latex/fontspec.tds.zip
@@ -193535,10 +193535,10 @@
2018/01/04 | 229251 | macros/latex/contrib/blowup/blowup.pdf
2018/01/04 | 312 | macros/latex/contrib/blowup/README.md
2018/01/04 | 377299 | macros/latex/contrib/blowup.zip
-2021/05/12 | 47892 | macros/latex/contrib/bnumexpr/bnumexpr.dtx
-2021/05/12 | 88616 | macros/latex/contrib/bnumexpr/bnumexpr.pdf
-2021/05/12 | 3418 | macros/latex/contrib/bnumexpr/README.md
-2021/05/12 | 102806 | macros/latex/contrib/bnumexpr.zip
+2021/05/13 | 52252 | macros/latex/contrib/bnumexpr/bnumexpr.dtx
+2021/05/13 | 96634 | macros/latex/contrib/bnumexpr/bnumexpr.pdf
+2021/05/13 | 3037 | macros/latex/contrib/bnumexpr/README.md
+2021/05/13 | 111908 | macros/latex/contrib/bnumexpr.zip
2015/06/24 | 421323 | macros/latex/contrib/bohr/bohr_en.pdf
2015/06/24 | 8543 | macros/latex/contrib/bohr/bohr_en.tex
2015/06/24 | 14794 | macros/latex/contrib/bohr/bohr.sty
@@ -194425,172 +194425,173 @@
2009/10/20 | 19377 | macros/latex/contrib/changepage/changepage.tex
2009/10/20 | 2818 | macros/latex/contrib/changepage/README
2009/10/20 | 288034 | macros/latex/contrib/changepage.zip
-2021/05/09 | 4932 | macros/latex/contrib/changes/changes.drv
-2021/05/09 | 58707 | macros/latex/contrib/changes/changes.dtx
-2021/05/09 | 368902 | macros/latex/contrib/changes/changes.english.pdf
-2021/05/09 | 453200 | macros/latex/contrib/changes/changes.english.withcode.pdf
-2021/05/09 | 10120 | macros/latex/contrib/changes/changes.ins
-2021/05/09 | 376311 | macros/latex/contrib/changes/changes.ngerman.pdf
-2021/05/09 | 85486 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.bf.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.colored.pdf
-2021/05/09 | 82935 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.dashuline.pdf
-2021/05/09 | 82553 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.dotuline.pdf
-2021/05/09 | 83749 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.em.pdf
-2021/05/09 | 83749 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.it.pdf
-2021/05/09 | 84735 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.sl.pdf
-2021/05/09 | 82746 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.uline.pdf
-2021/05/09 | 85371 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.uuline.pdf
-2021/05/09 | 84759 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.uwave.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.wrong.pdf
-2021/05/09 | 74370 | macros/latex/contrib/changes/examples/changes.example.authormarkup.brackets.pdf
-2021/05/09 | 99663 | macros/latex/contrib/changes/examples/changes.example.authormarkup.footnote.pdf
-2021/05/09 | 73913 | macros/latex/contrib/changes/examples/changes.example.authormarkup.none.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.authormarkupposition.left.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.authormarkupposition.right.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.authormarkupposition.wrong.pdf
-2021/05/09 | 82294 | macros/latex/contrib/changes/examples/changes.example.authormarkup.subscript.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.authormarkup.superscript.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.authormarkuptext.id.pdf
-2021/05/09 | 83846 | macros/latex/contrib/changes/examples/changes.example.authormarkuptext.name.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.authormarkuptext.wrong.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.authormarkup.wrong.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.commandnameprefix.always.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.commandnameprefix.ifneeded.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.commandnameprefix.none.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.commandnameprefix.wrong.pdf
-2021/05/09 | 110514 | macros/latex/contrib/changes/examples/changes.example.commentmarkup.footnote.pdf
-2021/05/09 | 78953 | macros/latex/contrib/changes/examples/changes.example.commentmarkup.margin.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.commentmarkup.todo.pdf
-2021/05/09 | 81965 | macros/latex/contrib/changes/examples/changes.example.commentmarkup.uwave.pdf
-2021/05/09 | 82299 | macros/latex/contrib/changes/examples/changes.example.defaultcolor.pdf
-2021/05/09 | 84982 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.bf.pdf
-2021/05/09 | 81125 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.colored.pdf
-2021/05/09 | 82590 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.dashuline.pdf
-2021/05/09 | 81687 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.dotuline.pdf
-2021/05/09 | 82891 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.em.pdf
-2021/05/09 | 82891 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.it.pdf
-2021/05/09 | 85110 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.sl.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.sout.pdf
-2021/05/09 | 82291 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.uline.pdf
-2021/05/09 | 88402 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.uuline.pdf
-2021/05/09 | 83877 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.uwave.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.wrong.pdf
-2021/05/09 | 81521 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.xout.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.draft.pdf
-2021/05/09 | 68141 | macros/latex/contrib/changes/examples/changes.example.final.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.highlightmarkup.background.pdf
-2021/05/09 | 82970 | macros/latex/contrib/changes/examples/changes.example.highlightmarkup.uuline.pdf
-2021/05/09 | 84357 | macros/latex/contrib/changes/examples/changes.example.highlightmarkup.uwave.pdf
-2021/05/09 | 88820 | macros/latex/contrib/changes/examples/changes.example.listofchanges.all.pdf
-2021/05/09 | 86749 | macros/latex/contrib/changes/examples/changes.example.listofchanges.compactsummary.pdf
-2021/05/09 | 84993 | macros/latex/contrib/changes/examples/changes.example.listofchanges.list.pdf
-2021/05/09 | 89121 | macros/latex/contrib/changes/examples/changes.example.listofchanges.show.pdf
-2021/05/09 | 97975 | macros/latex/contrib/changes/examples/changes.example.listofchanges.summary.pdf
-2021/05/09 | 88388 | macros/latex/contrib/changes/examples/changes.example.listofchanges.title.pdf
-2021/05/09 | 84993 | macros/latex/contrib/changes/examples/changes.example.listofchanges.wrong.pdf
-2021/05/09 | 86058 | macros/latex/contrib/changes/examples/changes.example.markup.bfit.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.markup.default.pdf
-2021/05/09 | 84681 | macros/latex/contrib/changes/examples/changes.example.markup.nocolor.pdf
-2021/05/09 | 84812 | macros/latex/contrib/changes/examples/changes.example.markup.underlined.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.markup.wrong.pdf
-2021/05/09 | 104166 | macros/latex/contrib/changes/examples/changes.example.packageoptions.todonotes.pdf
-2021/05/09 | 83517 | macros/latex/contrib/changes/examples/changes.example.packageoptions.truncate.pdf
-2021/05/09 | 75270 | macros/latex/contrib/changes/examples/changes.example.packageoptions.ulem.pdf
-2021/05/09 | 84182 | macros/latex/contrib/changes/examples/changes.example.packageoptions.xcolor.pdf
-2021/05/09 | 143191 | macros/latex/contrib/changes/examples/changes.example.screenshot.pdf
-2021/05/09 | 94860 | macros/latex/contrib/changes/examples/changes.example.setaddedmarkup.pdf
-2021/05/09 | 85414 | macros/latex/contrib/changes/examples/changes.example.setauthormarkup.pdf
-2021/05/09 | 93585 | macros/latex/contrib/changes/examples/changes.example.setauthormarkupposition.pdf
-2021/05/09 | 94839 | macros/latex/contrib/changes/examples/changes.example.setauthormarkuptext.pdf
-2021/05/09 | 94058 | macros/latex/contrib/changes/examples/changes.example.setcommentmarkup.pdf
-2021/05/09 | 94091 | macros/latex/contrib/changes/examples/changes.example.setdeletedmarkup.pdf
-2021/05/09 | 93929 | macros/latex/contrib/changes/examples/changes.example.sethighlightmarkup.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.setsocextension.pdf
-2021/05/09 | 98926 | macros/latex/contrib/changes/examples/changes.example.setsummarytowidth.pdf
-2021/05/09 | 97786 | macros/latex/contrib/changes/examples/changes.example.setsummarywidth.pdf
-2021/05/09 | 96371 | macros/latex/contrib/changes/examples/changes.example.settruncatewidth.pdf
-2021/05/09 | 92919 | macros/latex/contrib/changes/examples/changes.example.simple.pdf
-2021/05/09 | 5030 | macros/latex/contrib/changes/example-screenshot.dtx
-2021/05/09 | 16628 | macros/latex/contrib/changes/examples.dtx
-2021/05/09 | 11043 | macros/latex/contrib/changes/pyMergeChanges.py
-2021/05/09 | 1326 | macros/latex/contrib/changes/README
-2021/05/09 | 182 | macros/latex/contrib/changes/userdoc/added_ex.tex
-2021/05/09 | 47 | macros/latex/contrib/changes/userdoc/added_in.tex
-2021/05/09 | 42081 | macros/latex/contrib/changes/userdoc/changes.de.tex
-2021/05/09 | 38432 | macros/latex/contrib/changes/userdoc/changes.en.tex
-2021/05/09 | 91 | macros/latex/contrib/changes/userdoc/comment_ex.tex
-2021/05/09 | 29 | macros/latex/contrib/changes/userdoc/comment_in.tex
-2021/05/09 | 174 | macros/latex/contrib/changes/userdoc/definechangesauthor_ex.tex
-2021/05/09 | 55 | macros/latex/contrib/changes/userdoc/definechangesauthor_in.tex
-2021/05/09 | 177 | macros/latex/contrib/changes/userdoc/deleted_ex.tex
-2021/05/09 | 49 | macros/latex/contrib/changes/userdoc/deleted_in.tex
-2021/05/09 | 223 | macros/latex/contrib/changes/userdoc/highlight_ex.tex
-2021/05/09 | 47 | macros/latex/contrib/changes/userdoc/highlight_in.tex
-2021/05/09 | 254 | macros/latex/contrib/changes/userdoc/listofchanges_ex.tex
-2021/05/09 | 58 | macros/latex/contrib/changes/userdoc/listofchanges_in.tex
-2021/05/09 | 38 | macros/latex/contrib/changes/userdoc/path_doc_examples_in.tex
-2021/05/09 | 27 | macros/latex/contrib/changes/userdoc/path_script_in.tex
-2021/05/09 | 224 | macros/latex/contrib/changes/userdoc/replaced_ex.tex
-2021/05/09 | 62 | macros/latex/contrib/changes/userdoc/replaced_in.tex
-2021/05/09 | 25 | macros/latex/contrib/changes/userdoc/script_pymergechanges_empty.tex
-2021/05/09 | 229 | macros/latex/contrib/changes/userdoc/script_pymergechanges.tex
-2021/05/09 | 52 | macros/latex/contrib/changes/userdoc/setaddedmarkup_ex.tex
-2021/05/09 | 30 | macros/latex/contrib/changes/userdoc/setaddedmarkup_in.tex
-2021/05/09 | 83 | macros/latex/contrib/changes/userdoc/setauthormarkup_ex.tex
-2021/05/09 | 31 | macros/latex/contrib/changes/userdoc/setauthormarkup_in.tex
-2021/05/09 | 63 | macros/latex/contrib/changes/userdoc/setauthormarkupposition_ex.tex
-2021/05/09 | 49 | macros/latex/contrib/changes/userdoc/setauthormarkupposition_in.tex
-2021/05/09 | 52 | macros/latex/contrib/changes/userdoc/setauthormarkuptext_ex.tex
-2021/05/09 | 41 | macros/latex/contrib/changes/userdoc/setauthormarkuptext_in.tex
-2021/05/09 | 196 | macros/latex/contrib/changes/userdoc/setcommentmarkup_ex.tex
-2021/05/09 | 32 | macros/latex/contrib/changes/userdoc/setcommentmarkup_in.tex
-2021/05/09 | 56 | macros/latex/contrib/changes/userdoc/setdeletedmarkup_ex.tex
-2021/05/09 | 32 | macros/latex/contrib/changes/userdoc/setdeletedmarkup_in.tex
-2021/05/09 | 96 | macros/latex/contrib/changes/userdoc/sethighlightmarkup_ex.tex
-2021/05/09 | 34 | macros/latex/contrib/changes/userdoc/sethighlightmarkup_in.tex
-2021/05/09 | 56 | macros/latex/contrib/changes/userdoc/setlocextension_ex.tex
-2021/05/09 | 30 | macros/latex/contrib/changes/userdoc/setlocextension_in.tex
-2021/05/09 | 48 | macros/latex/contrib/changes/userdoc/setsocextension_ex.tex
-2021/05/09 | 30 | macros/latex/contrib/changes/userdoc/setsocextension_in.tex
-2021/05/09 | 104 | macros/latex/contrib/changes/userdoc/setsummarytowidth_ex.tex
-2021/05/09 | 27 | macros/latex/contrib/changes/userdoc/setsummarytowidth_in.tex
-2021/05/09 | 53 | macros/latex/contrib/changes/userdoc/setsummarywidth_ex.tex
-2021/05/09 | 26 | macros/latex/contrib/changes/userdoc/setsummarywidth_in.tex
-2021/05/09 | 55 | macros/latex/contrib/changes/userdoc/settruncatewidth_ex.tex
-2021/05/09 | 27 | macros/latex/contrib/changes/userdoc/settruncatewidth_in.tex
-2021/05/09 | 142 | macros/latex/contrib/changes/userdoc/usepackage_addedmarkup_changes_ex.tex
-2021/05/09 | 48 | macros/latex/contrib/changes/userdoc/usepackage_addedmarkup_changes_in.tex
-2021/05/09 | 154 | macros/latex/contrib/changes/userdoc/usepackage_authormarkup_changes_ex.tex
-2021/05/09 | 50 | macros/latex/contrib/changes/userdoc/usepackage_authormarkup_changes_in.tex
-2021/05/09 | 120 | macros/latex/contrib/changes/userdoc/usepackage_authormarkupposition_changes_ex.tex
-2021/05/09 | 66 | macros/latex/contrib/changes/userdoc/usepackage_authormarkupposition_changes_in.tex
-2021/05/09 | 109 | macros/latex/contrib/changes/userdoc/usepackage_authormarkuptext_changes_ex.tex
-2021/05/09 | 58 | macros/latex/contrib/changes/userdoc/usepackage_authormarkuptext_changes_in.tex
-2021/05/09 | 21 | macros/latex/contrib/changes/userdoc/usepackage_changes_in.tex
-2021/05/09 | 164 | macros/latex/contrib/changes/userdoc/usepackage_commandnameprefix_changes_ex.tex
-2021/05/09 | 51 | macros/latex/contrib/changes/userdoc/usepackage_commandnameprefix_changes_in.tex
-2021/05/09 | 151 | macros/latex/contrib/changes/userdoc/usepackage_commentmarkup_changes_ex.tex
-2021/05/09 | 52 | macros/latex/contrib/changes/userdoc/usepackage_commentmarkup_changes_in.tex
-2021/05/09 | 106 | macros/latex/contrib/changes/userdoc/usepackage_defaultcolor_changes_ex.tex
-2021/05/09 | 43 | macros/latex/contrib/changes/userdoc/usepackage_defaultcolor_changes_in.tex
-2021/05/09 | 147 | macros/latex/contrib/changes/userdoc/usepackage_deletedmarkup_changes_ex.tex
-2021/05/09 | 52 | macros/latex/contrib/changes/userdoc/usepackage_deletedmarkup_changes_in.tex
-2021/05/09 | 51 | macros/latex/contrib/changes/userdoc/usepackage_draft_changes_in.tex
-2021/05/09 | 28 | macros/latex/contrib/changes/userdoc/usepackage_final_changes_in.tex
-2021/05/09 | 117 | macros/latex/contrib/changes/userdoc/usepackage_highlightmarkup_changes_ex.tex
-2021/05/09 | 56 | macros/latex/contrib/changes/userdoc/usepackage_highlightmarkup_changes_in.tex
-2021/05/09 | 171 | macros/latex/contrib/changes/userdoc/usepackage_markup_changes_ex.tex
-2021/05/09 | 38 | macros/latex/contrib/changes/userdoc/usepackage_markup_changes_in.tex
-2021/05/09 | 32 | macros/latex/contrib/changes/userdoc/usepackage_options_changes_in.tex
-2021/05/09 | 48 | macros/latex/contrib/changes/userdoc/usepackage_todonotes_changes_ex.tex
-2021/05/09 | 42 | macros/latex/contrib/changes/userdoc/usepackage_todonotes_changes_in.tex
-2021/05/09 | 41 | macros/latex/contrib/changes/userdoc/usepackage_truncate_changes_ex.tex
-2021/05/09 | 41 | macros/latex/contrib/changes/userdoc/usepackage_truncate_changes_in.tex
-2021/05/09 | 82 | macros/latex/contrib/changes/userdoc/usepackage_ulem_changes_ex.tex
-2021/05/09 | 37 | macros/latex/contrib/changes/userdoc/usepackage_ulem_changes_in.tex
-2021/05/09 | 79 | macros/latex/contrib/changes/userdoc/usepackage_xcolor_changes_ex.tex
-2021/05/09 | 39 | macros/latex/contrib/changes/userdoc/usepackage_xcolor_changes_in.tex
-2021/05/09 | 7903723 | macros/latex/contrib/changes.zip
+2021/05/13 | 4932 | macros/latex/contrib/changes/changes.drv
+2021/05/13 | 58808 | macros/latex/contrib/changes/changes.dtx
+2021/05/13 | 368904 | macros/latex/contrib/changes/changes.english.pdf
+2021/05/13 | 452979 | macros/latex/contrib/changes/changes.english.withcode.pdf
+2021/05/13 | 10119 | macros/latex/contrib/changes/changes.ins
+2021/05/13 | 376315 | macros/latex/contrib/changes/changes.ngerman.pdf
+2021/05/13 | 85486 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.bf.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.colored.pdf
+2021/05/13 | 82935 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.dashuline.pdf
+2021/05/13 | 82553 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.dotuline.pdf
+2021/05/13 | 83749 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.em.pdf
+2021/05/13 | 83749 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.it.pdf
+2021/05/13 | 84735 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.sl.pdf
+2021/05/13 | 82746 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.uline.pdf
+2021/05/13 | 85371 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.uuline.pdf
+2021/05/13 | 84759 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.uwave.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.wrong.pdf
+2021/05/13 | 74370 | macros/latex/contrib/changes/examples/changes.example.authormarkup.brackets.pdf
+2021/05/13 | 99663 | macros/latex/contrib/changes/examples/changes.example.authormarkup.footnote.pdf
+2021/05/13 | 73913 | macros/latex/contrib/changes/examples/changes.example.authormarkup.none.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.authormarkupposition.left.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.authormarkupposition.right.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.authormarkupposition.wrong.pdf
+2021/05/13 | 82294 | macros/latex/contrib/changes/examples/changes.example.authormarkup.subscript.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.authormarkup.superscript.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.authormarkuptext.id.pdf
+2021/05/13 | 83846 | macros/latex/contrib/changes/examples/changes.example.authormarkuptext.name.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.authormarkuptext.wrong.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.authormarkup.wrong.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.commandnameprefix.always.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.commandnameprefix.ifneeded.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.commandnameprefix.none.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.commandnameprefix.wrong.pdf
+2021/05/13 | 110514 | macros/latex/contrib/changes/examples/changes.example.commentmarkup.footnote.pdf
+2021/05/13 | 78953 | macros/latex/contrib/changes/examples/changes.example.commentmarkup.margin.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.commentmarkup.todo.pdf
+2021/05/13 | 81965 | macros/latex/contrib/changes/examples/changes.example.commentmarkup.uwave.pdf
+2021/05/13 | 82299 | macros/latex/contrib/changes/examples/changes.example.defaultcolor.pdf
+2021/05/13 | 84982 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.bf.pdf
+2021/05/13 | 81125 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.colored.pdf
+2021/05/13 | 82590 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.dashuline.pdf
+2021/05/13 | 81687 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.dotuline.pdf
+2021/05/13 | 82891 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.em.pdf
+2021/05/13 | 82891 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.it.pdf
+2021/05/13 | 85110 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.sl.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.sout.pdf
+2021/05/13 | 82291 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.uline.pdf
+2021/05/13 | 88402 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.uuline.pdf
+2021/05/13 | 83877 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.uwave.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.wrong.pdf
+2021/05/13 | 81521 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.xout.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.draft.pdf
+2021/05/13 | 68141 | macros/latex/contrib/changes/examples/changes.example.final.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.highlightmarkup.background.pdf
+2021/05/13 | 82970 | macros/latex/contrib/changes/examples/changes.example.highlightmarkup.uuline.pdf
+2021/05/13 | 84357 | macros/latex/contrib/changes/examples/changes.example.highlightmarkup.uwave.pdf
+2021/05/13 | 88820 | macros/latex/contrib/changes/examples/changes.example.listofchanges.all.pdf
+2021/05/13 | 86749 | macros/latex/contrib/changes/examples/changes.example.listofchanges.compactsummary.pdf
+2021/05/13 | 84993 | macros/latex/contrib/changes/examples/changes.example.listofchanges.list.pdf
+2021/05/13 | 89121 | macros/latex/contrib/changes/examples/changes.example.listofchanges.show.pdf
+2021/05/13 | 97975 | macros/latex/contrib/changes/examples/changes.example.listofchanges.summary.pdf
+2021/05/13 | 88388 | macros/latex/contrib/changes/examples/changes.example.listofchanges.title.pdf
+2021/05/13 | 84993 | macros/latex/contrib/changes/examples/changes.example.listofchanges.wrong.pdf
+2021/05/13 | 86058 | macros/latex/contrib/changes/examples/changes.example.markup.bfit.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.markup.default.pdf
+2021/05/13 | 84681 | macros/latex/contrib/changes/examples/changes.example.markup.nocolor.pdf
+2021/05/13 | 84812 | macros/latex/contrib/changes/examples/changes.example.markup.underlined.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.markup.wrong.pdf
+2021/05/13 | 104166 | macros/latex/contrib/changes/examples/changes.example.packageoptions.todonotes.pdf
+2021/05/13 | 83517 | macros/latex/contrib/changes/examples/changes.example.packageoptions.truncate.pdf
+2021/05/13 | 75270 | macros/latex/contrib/changes/examples/changes.example.packageoptions.ulem.pdf
+2021/05/13 | 84182 | macros/latex/contrib/changes/examples/changes.example.packageoptions.xcolor.pdf
+2021/05/13 | 143191 | macros/latex/contrib/changes/examples/changes.example.screenshot.pdf
+2021/05/13 | 94860 | macros/latex/contrib/changes/examples/changes.example.setaddedmarkup.pdf
+2021/05/13 | 85414 | macros/latex/contrib/changes/examples/changes.example.setauthormarkup.pdf
+2021/05/13 | 93585 | macros/latex/contrib/changes/examples/changes.example.setauthormarkupposition.pdf
+2021/05/13 | 94839 | macros/latex/contrib/changes/examples/changes.example.setauthormarkuptext.pdf
+2021/05/13 | 94058 | macros/latex/contrib/changes/examples/changes.example.setcommentmarkup.pdf
+2021/05/13 | 94091 | macros/latex/contrib/changes/examples/changes.example.setdeletedmarkup.pdf
+2021/05/13 | 93929 | macros/latex/contrib/changes/examples/changes.example.sethighlightmarkup.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.setsocextension.pdf
+2021/05/13 | 98926 | macros/latex/contrib/changes/examples/changes.example.setsummarytowidth.pdf
+2021/05/13 | 97786 | macros/latex/contrib/changes/examples/changes.example.setsummarywidth.pdf
+2021/05/13 | 96371 | macros/latex/contrib/changes/examples/changes.example.settruncatewidth.pdf
+2021/05/13 | 92919 | macros/latex/contrib/changes/examples/changes.example.simple.pdf
+2021/05/13 | 5030 | macros/latex/contrib/changes/example-screenshot.dtx
+2021/05/13 | 16628 | macros/latex/contrib/changes/examples.dtx
+2021/05/13 | 11043 | macros/latex/contrib/changes/pyMergeChanges.py
+2021/05/13 | 1326 | macros/latex/contrib/changes/README
+2021/05/13 | 5264 | macros/latex/contrib/changes/regression.dtx
+2021/05/13 | 182 | macros/latex/contrib/changes/userdoc/added_ex.tex
+2021/05/13 | 47 | macros/latex/contrib/changes/userdoc/added_in.tex
+2021/05/13 | 42081 | macros/latex/contrib/changes/userdoc/changes.de.tex
+2021/05/13 | 38432 | macros/latex/contrib/changes/userdoc/changes.en.tex
+2021/05/13 | 91 | macros/latex/contrib/changes/userdoc/comment_ex.tex
+2021/05/13 | 29 | macros/latex/contrib/changes/userdoc/comment_in.tex
+2021/05/13 | 174 | macros/latex/contrib/changes/userdoc/definechangesauthor_ex.tex
+2021/05/13 | 55 | macros/latex/contrib/changes/userdoc/definechangesauthor_in.tex
+2021/05/13 | 177 | macros/latex/contrib/changes/userdoc/deleted_ex.tex
+2021/05/13 | 49 | macros/latex/contrib/changes/userdoc/deleted_in.tex
+2021/05/13 | 223 | macros/latex/contrib/changes/userdoc/highlight_ex.tex
+2021/05/13 | 47 | macros/latex/contrib/changes/userdoc/highlight_in.tex
+2021/05/13 | 254 | macros/latex/contrib/changes/userdoc/listofchanges_ex.tex
+2021/05/13 | 58 | macros/latex/contrib/changes/userdoc/listofchanges_in.tex
+2021/05/13 | 38 | macros/latex/contrib/changes/userdoc/path_doc_examples_in.tex
+2021/05/13 | 27 | macros/latex/contrib/changes/userdoc/path_script_in.tex
+2021/05/13 | 224 | macros/latex/contrib/changes/userdoc/replaced_ex.tex
+2021/05/13 | 62 | macros/latex/contrib/changes/userdoc/replaced_in.tex
+2021/05/13 | 25 | macros/latex/contrib/changes/userdoc/script_pymergechanges_empty.tex
+2021/05/13 | 229 | macros/latex/contrib/changes/userdoc/script_pymergechanges.tex
+2021/05/13 | 52 | macros/latex/contrib/changes/userdoc/setaddedmarkup_ex.tex
+2021/05/13 | 30 | macros/latex/contrib/changes/userdoc/setaddedmarkup_in.tex
+2021/05/13 | 83 | macros/latex/contrib/changes/userdoc/setauthormarkup_ex.tex
+2021/05/13 | 31 | macros/latex/contrib/changes/userdoc/setauthormarkup_in.tex
+2021/05/13 | 63 | macros/latex/contrib/changes/userdoc/setauthormarkupposition_ex.tex
+2021/05/13 | 49 | macros/latex/contrib/changes/userdoc/setauthormarkupposition_in.tex
+2021/05/13 | 52 | macros/latex/contrib/changes/userdoc/setauthormarkuptext_ex.tex
+2021/05/13 | 41 | macros/latex/contrib/changes/userdoc/setauthormarkuptext_in.tex
+2021/05/13 | 196 | macros/latex/contrib/changes/userdoc/setcommentmarkup_ex.tex
+2021/05/13 | 32 | macros/latex/contrib/changes/userdoc/setcommentmarkup_in.tex
+2021/05/13 | 56 | macros/latex/contrib/changes/userdoc/setdeletedmarkup_ex.tex
+2021/05/13 | 32 | macros/latex/contrib/changes/userdoc/setdeletedmarkup_in.tex
+2021/05/13 | 96 | macros/latex/contrib/changes/userdoc/sethighlightmarkup_ex.tex
+2021/05/13 | 34 | macros/latex/contrib/changes/userdoc/sethighlightmarkup_in.tex
+2021/05/13 | 56 | macros/latex/contrib/changes/userdoc/setlocextension_ex.tex
+2021/05/13 | 30 | macros/latex/contrib/changes/userdoc/setlocextension_in.tex
+2021/05/13 | 48 | macros/latex/contrib/changes/userdoc/setsocextension_ex.tex
+2021/05/13 | 30 | macros/latex/contrib/changes/userdoc/setsocextension_in.tex
+2021/05/13 | 104 | macros/latex/contrib/changes/userdoc/setsummarytowidth_ex.tex
+2021/05/13 | 27 | macros/latex/contrib/changes/userdoc/setsummarytowidth_in.tex
+2021/05/13 | 53 | macros/latex/contrib/changes/userdoc/setsummarywidth_ex.tex
+2021/05/13 | 26 | macros/latex/contrib/changes/userdoc/setsummarywidth_in.tex
+2021/05/13 | 55 | macros/latex/contrib/changes/userdoc/settruncatewidth_ex.tex
+2021/05/13 | 27 | macros/latex/contrib/changes/userdoc/settruncatewidth_in.tex
+2021/05/13 | 142 | macros/latex/contrib/changes/userdoc/usepackage_addedmarkup_changes_ex.tex
+2021/05/13 | 48 | macros/latex/contrib/changes/userdoc/usepackage_addedmarkup_changes_in.tex
+2021/05/13 | 154 | macros/latex/contrib/changes/userdoc/usepackage_authormarkup_changes_ex.tex
+2021/05/13 | 50 | macros/latex/contrib/changes/userdoc/usepackage_authormarkup_changes_in.tex
+2021/05/13 | 120 | macros/latex/contrib/changes/userdoc/usepackage_authormarkupposition_changes_ex.tex
+2021/05/13 | 66 | macros/latex/contrib/changes/userdoc/usepackage_authormarkupposition_changes_in.tex
+2021/05/13 | 109 | macros/latex/contrib/changes/userdoc/usepackage_authormarkuptext_changes_ex.tex
+2021/05/13 | 58 | macros/latex/contrib/changes/userdoc/usepackage_authormarkuptext_changes_in.tex
+2021/05/13 | 21 | macros/latex/contrib/changes/userdoc/usepackage_changes_in.tex
+2021/05/13 | 164 | macros/latex/contrib/changes/userdoc/usepackage_commandnameprefix_changes_ex.tex
+2021/05/13 | 51 | macros/latex/contrib/changes/userdoc/usepackage_commandnameprefix_changes_in.tex
+2021/05/13 | 151 | macros/latex/contrib/changes/userdoc/usepackage_commentmarkup_changes_ex.tex
+2021/05/13 | 52 | macros/latex/contrib/changes/userdoc/usepackage_commentmarkup_changes_in.tex
+2021/05/13 | 106 | macros/latex/contrib/changes/userdoc/usepackage_defaultcolor_changes_ex.tex
+2021/05/13 | 43 | macros/latex/contrib/changes/userdoc/usepackage_defaultcolor_changes_in.tex
+2021/05/13 | 147 | macros/latex/contrib/changes/userdoc/usepackage_deletedmarkup_changes_ex.tex
+2021/05/13 | 52 | macros/latex/contrib/changes/userdoc/usepackage_deletedmarkup_changes_in.tex
+2021/05/13 | 51 | macros/latex/contrib/changes/userdoc/usepackage_draft_changes_in.tex
+2021/05/13 | 28 | macros/latex/contrib/changes/userdoc/usepackage_final_changes_in.tex
+2021/05/13 | 117 | macros/latex/contrib/changes/userdoc/usepackage_highlightmarkup_changes_ex.tex
+2021/05/13 | 56 | macros/latex/contrib/changes/userdoc/usepackage_highlightmarkup_changes_in.tex
+2021/05/13 | 171 | macros/latex/contrib/changes/userdoc/usepackage_markup_changes_ex.tex
+2021/05/13 | 38 | macros/latex/contrib/changes/userdoc/usepackage_markup_changes_in.tex
+2021/05/13 | 32 | macros/latex/contrib/changes/userdoc/usepackage_options_changes_in.tex
+2021/05/13 | 48 | macros/latex/contrib/changes/userdoc/usepackage_todonotes_changes_ex.tex
+2021/05/13 | 42 | macros/latex/contrib/changes/userdoc/usepackage_todonotes_changes_in.tex
+2021/05/13 | 41 | macros/latex/contrib/changes/userdoc/usepackage_truncate_changes_ex.tex
+2021/05/13 | 41 | macros/latex/contrib/changes/userdoc/usepackage_truncate_changes_in.tex
+2021/05/13 | 82 | macros/latex/contrib/changes/userdoc/usepackage_ulem_changes_ex.tex
+2021/05/13 | 37 | macros/latex/contrib/changes/userdoc/usepackage_ulem_changes_in.tex
+2021/05/13 | 79 | macros/latex/contrib/changes/userdoc/usepackage_xcolor_changes_ex.tex
+2021/05/13 | 39 | macros/latex/contrib/changes/userdoc/usepackage_xcolor_changes_in.tex
+2021/05/13 | 7905248 | macros/latex/contrib/changes.zip
2006/05/09 | 17353 | macros/latex/contrib/chappg/chappg.dtx
2006/04/24 | 582 | macros/latex/contrib/chappg/chappg.ins
2006/05/09 | 205179 | macros/latex/contrib/chappg/chappg.pdf
@@ -201857,11 +201858,11 @@
2011/04/29 | 319943 | macros/latex/contrib/hrefhide/hrefhide.pdf
2011/04/29 | 4295 | macros/latex/contrib/hrefhide/README
2011/04/29 | 441688 | macros/latex/contrib/hrefhide.zip
-2021/04/17 | 15831 | macros/latex/contrib/huawei/huawei.cls
-2021/04/17 | 362777 | macros/latex/contrib/huawei/huawei.pdf
-2021/04/17 | 6717 | macros/latex/contrib/huawei/huawei.tex
-2021/04/17 | 1112 | macros/latex/contrib/huawei/README.md
-2021/04/18 | 371932 | macros/latex/contrib/huawei.zip
+2021/05/13 | 16393 | macros/latex/contrib/huawei/huawei.cls
+2021/05/13 | 362961 | macros/latex/contrib/huawei/huawei.pdf
+2021/05/13 | 6749 | macros/latex/contrib/huawei/huawei.tex
+2021/05/13 | 1208 | macros/latex/contrib/huawei/README.md
+2021/05/13 | 372353 | macros/latex/contrib/huawei.zip
2020/11/03 | 174943 | macros/latex/contrib/hulipsum/hulipsum.dtx
2020/11/01 | 1704 | macros/latex/contrib/hulipsum/hulipsum.ins
2020/11/03 | 145394 | macros/latex/contrib/hulipsum/hulipsum.pdf
@@ -213176,6 +213177,11 @@
2009/05/20 | 159 | macros/latex/contrib/tabularew/tabularew.ins
2009/06/01 | 170381 | macros/latex/contrib/tabularew/tabularew.pdf
2009/06/01 | 150930 | macros/latex/contrib/tabularew.zip
+2021/03/29 | 179 | macros/latex/contrib/tabularray/README
+2021/05/13 | 379316 | macros/latex/contrib/tabularray/tabularray.pdf
+2021/05/13 | 134990 | macros/latex/contrib/tabularray/tabularray.sty
+2021/05/13 | 21526 | macros/latex/contrib/tabularray/tabularray.tex
+2021/05/13 | 351179 | macros/latex/contrib/tabularray.zip
2005/10/21 | 169 | macros/latex/contrib/tabulary/README
2014/06/21 | 29652 | macros/latex/contrib/tabulary/tabulary.dtx
2003/11/26 | 156 | macros/latex/contrib/tabulary/tabulary.ins
@@ -223497,6 +223503,15 @@
2017/10/17 | 704910 | macros/luatex/latex/wallcalendar/wallcalendar-layouts.png
2017/10/17 | 2896302 | macros/luatex/latex/wallcalendar/wallcalendar.pdf
2017/10/21 | 9209120 | macros/luatex/latex/wallcalendar.zip
+2021/05/13 | 58592 | macros/luatex/optex/pdfextra/examples/pdfextra-example-part.prc
+2021/05/13 | 385845 | macros/luatex/optex/pdfextra/examples/pdfextra-example.pdf
+2021/05/13 | 9443 | macros/luatex/optex/pdfextra/examples/pdfextra-example.tex
+2021/05/13 | 662 | macros/luatex/optex/pdfextra/LICENSE
+2021/05/13 | 230095 | macros/luatex/optex/pdfextra/pdfextra-doc.pdf
+2021/05/13 | 30555 | macros/luatex/optex/pdfextra/pdfextra-doc.tex
+2021/05/13 | 68210 | macros/luatex/optex/pdfextra/pdfextra.opm
+2021/05/13 | 868 | macros/luatex/optex/pdfextra/README.md
+2021/05/13 | 692076 | macros/luatex/optex/pdfextra.zip
1993/02/12 | 2330 | macros/mathematica/CHANGES
1993/02/12 | 7699 | macros/mathematica/README
1993/02/12 | 40574 | macros/mathematica/tex-mma-j.ps.gz
@@ -223607,6 +223622,7 @@
2018/08/04 | 159 | macros/musixtex/doc/ChangeLog-129.txt
2020/03/20 | 111 | macros/musixtex/doc/ChangeLog-130.txt
2021/01/07 | 82 | macros/musixtex/doc/ChangeLog-131.txt
+2021/05/13 | 190 | macros/musixtex/doc/ChangeLog-132.txt
2017/07/25 | 861 | macros/musixtex/doc/ChangeLog-musixdoc.txt
2017/07/25 | 16264 | macros/musixtex/doc/examples/adagio.tex
2017/07/25 | 25036 | macros/musixtex/doc/examples/albinoni.tex
@@ -223690,25 +223706,25 @@
2017/07/25 | 3193 | macros/musixtex/doc/musixdoc/accidentals.tex
2020/10/12 | 10421 | macros/musixtex/doc/musixdoc/barlines.tex
2017/07/25 | 4562 | macros/musixtex/doc/musixdoc/barnumbering.tex
-2020/01/27 | 22693 | macros/musixtex/doc/musixdoc/beams.tex
+2021/05/13 | 22962 | macros/musixtex/doc/musixdoc/beams.tex
2017/07/25 | 19225 | macros/musixtex/doc/musixdoc/changing.tex
2017/07/25 | 9512 | macros/musixtex/doc/musixdoc/embedding.tex
2017/07/25 | 5752 | macros/musixtex/doc/musixdoc/examples.tex
-2017/07/25 | 66865 | macros/musixtex/doc/musixdoc/extensions.tex
+2021/05/13 | 67938 | macros/musixtex/doc/musixdoc/extensions.tex
2017/07/25 | 4087 | macros/musixtex/doc/musixdoc/extracting.tex
2017/07/25 | 11619 | macros/musixtex/doc/musixdoc/fonts.tex
-2021/01/07 | 5450 | macros/musixtex/doc/musixdoc/frontmatter.tex
+2021/05/13 | 5450 | macros/musixtex/doc/musixdoc/frontmatter.tex
2017/07/25 | 274 | macros/musixtex/doc/musixdoc/index.tex
2017/07/25 | 36757 | macros/musixtex/doc/musixdoc/introduction.tex
2020/10/13 | 9181 | macros/musixtex/doc/musixdoc/layout.tex
2017/07/25 | 17525 | macros/musixtex/doc/musixdoc/lyrics.tex
-2019/07/01 | 36040 | macros/musixtex/doc/musixdoc/miscellaneous.tex
-2019/05/21 | 1978 | macros/musixtex/doc/musixdoc/musixdoc.ltx
-2020/02/12 | 4778 | macros/musixtex/doc/musixdoc/musixdoc.sty
+2021/02/23 | 35996 | macros/musixtex/doc/musixdoc/miscellaneous.tex
+2021/05/13 | 1978 | macros/musixtex/doc/musixdoc/musixdoc.ltx
+2021/05/13 | 4828 | macros/musixtex/doc/musixdoc/musixdoc.sty
2019/05/01 | 10935 | macros/musixtex/doc/musixdoc/parameters.tex
-2021/01/07 | 1374931 | macros/musixtex/doc/musixdoc.pdf
+2021/05/13 | 1396006 | macros/musixtex/doc/musixdoc.pdf
2017/12/25 | 12902 | macros/musixtex/doc/musixdoc/preparing.tex
-2020/10/12 | 8283 | macros/musixtex/doc/musixdoc/repeats.tex
+2021/01/20 | 8283 | macros/musixtex/doc/musixdoc/repeats.tex
2020/04/17 | 7254 | macros/musixtex/doc/musixdoc/restsdoc.tex
2018/05/21 | 15269 | macros/musixtex/doc/musixdoc/settingup.tex
2018/07/09 | 22657 | macros/musixtex/doc/musixdoc/slurstiesfont.tex
@@ -223738,7 +223754,7 @@
2017/07/25 | 1964 | macros/musixtex/doc/psslurs/slurs.tex
2017/07/25 | 85655 | macros/musixtex/doc/reference/musixre1.pdf
2018/06/16 | 1157 | macros/musixtex/doc/scripts/musixflx.1
-2017/06/13 | 4074 | macros/musixtex/doc/scripts/musixflx.pdf
+2021/04/25 | 9286 | macros/musixtex/doc/scripts/musixflx.pdf
2020/05/21 | 4590 | macros/musixtex/doc/scripts/musixtex.1
2020/05/21 | 23518 | macros/musixtex/doc/scripts/musixtex.pdf
2017/07/25 | 7434 | macros/musixtex/dvips/psslurs.pro
@@ -223747,7 +223763,7 @@
2017/07/25 | 30 | macros/musixtex/latex/musixfll.sty
2017/07/25 | 1199 | macros/musixtex/latex/musixltx.tex
2017/07/25 | 42 | macros/musixtex/latex/musixtex.sty
-2021/01/07 | 3067 | macros/musixtex/README
+2021/05/13 | 3067 | macros/musixtex/README
2019/05/19 | 34855 | macros/musixtex/scripts/musixflx.lua
2020/08/14 | 19915 | macros/musixtex/scripts/musixtex.lua
2017/07/25 | 863 | macros/musixtex/source/doc.tex
@@ -223794,13 +223810,14 @@
2017/07/25 | 621 | macros/musixtex/tex/musixstf.tex
2017/07/25 | 1505 | macros/musixtex/tex/musixstr.tex
2019/01/15 | 13876 | macros/musixtex/tex/musixsty.tex
-2021/01/07 | 188901 | macros/musixtex/tex/musixtex.tex
+2021/05/13 | 189067 | macros/musixtex/tex/musixtex.tex
2017/07/25 | 5379 | macros/musixtex/tex/musixtmr.tex
2017/07/25 | 2071 | macros/musixtex/tex/musixtri.tex
+2021/05/13 | 5963 | macros/musixtex/tex/musixvbm.tex
2017/07/25 | 946 | macros/musixtex/tex/tuplet.tex
2017/07/25 | 254 | macros/musixtex/windows/musixflx.bat
2020/03/20 | 265 | macros/musixtex/windows/musixtex.bat
-2021/01/07 | 2416042 | macros/musixtex.zip
+2021/05/13 | 2424633 | macros/musixtex.zip
2016/01/31 | 1043 | macros/musixtnt/doc/msxlint.1
2016/01/31 | 4148 | macros/musixtnt/doc/msxlint.pdf
2016/01/31 | 3604 | macros/musixtnt/doc/TransformNotes.3
@@ -267051,6 +267068,8 @@
2019/07/13 | 4596 | systems/texlive/tlnet/archive/codeanatomy.source.r51627.tar.xz
2019/02/28 | 377460 | systems/texlive/tlnet/archive/codedoc.doc.r17630.tar.xz
2019/02/28 | 10108 | systems/texlive/tlnet/archive/codedoc.r17630.tar.xz
+2021/05/13 | 84052 | systems/texlive/tlnet/archive/codehigh.doc.r59173.tar.xz
+2021/05/13 | 5128 | systems/texlive/tlnet/archive/codehigh.r59173.tar.xz
2019/06/29 | 257084 | systems/texlive/tlnet/archive/codepage.doc.r51502.tar.xz
2019/06/29 | 10952 | systems/texlive/tlnet/archive/codepage.r51502.tar.xz
2019/06/29 | 24136 | systems/texlive/tlnet/archive/codepage.source.r51502.tar.xz
@@ -267097,7 +267116,7 @@
2020/03/04 | 408 | systems/texlive/tlnet/archive/collection-langpolish.r54074.tar.xz
2020/03/04 | 392 | systems/texlive/tlnet/archive/collection-langportuguese.r54074.tar.xz
2020/03/07 | 380 | systems/texlive/tlnet/archive/collection-langspanish.r54141.tar.xz
-2021/04/28 | 6332 | systems/texlive/tlnet/archive/collection-latexextra.r59009.tar.xz
+2021/05/13 | 6344 | systems/texlive/tlnet/archive/collection-latexextra.r59173.tar.xz
2020/12/03 | 696 | systems/texlive/tlnet/archive/collection-latex.r57048.tar.xz
2021/02/24 | 772 | systems/texlive/tlnet/archive/collection-latexrecommended.r57862.tar.xz
2021/03/05 | 716 | systems/texlive/tlnet/archive/collection-luatex.r58124.tar.xz
@@ -268425,9 +268444,9 @@
2021/01/25 | 1828 | systems/texlive/tlnet/archive/ean13isbn.r57514.tar.xz
2019/02/28 | 948 | systems/texlive/tlnet/archive/ean.doc.r20851.tar.xz
2019/02/28 | 3148 | systems/texlive/tlnet/archive/ean.r20851.tar.xz
-2021/05/12 | 305016 | systems/texlive/tlnet/archive/easybook.doc.r59166.tar.xz
-2021/05/12 | 12924 | systems/texlive/tlnet/archive/easybook.r59166.tar.xz
-2021/05/12 | 28488 | systems/texlive/tlnet/archive/easybook.source.r59166.tar.xz
+2021/05/13 | 307908 | systems/texlive/tlnet/archive/easybook.doc.r59174.tar.xz
+2021/05/13 | 13360 | systems/texlive/tlnet/archive/easybook.r59174.tar.xz
+2021/05/13 | 29248 | systems/texlive/tlnet/archive/easybook.source.r59174.tar.xz
2019/02/28 | 4540 | systems/texlive/tlnet/archive/easy.doc.r19440.tar.xz
2020/09/08 | 175976 | systems/texlive/tlnet/archive/easyfig.doc.r56291.tar.xz
2020/09/08 | 1936 | systems/texlive/tlnet/archive/easyfig.r56291.tar.xz
@@ -268600,8 +268619,8 @@
2020/11/25 | 807964 | systems/texlive/tlnet/archive/elsarticle.doc.r56999.tar.xz
2020/11/25 | 18868 | systems/texlive/tlnet/archive/elsarticle.r56999.tar.xz
2020/11/25 | 10880 | systems/texlive/tlnet/archive/elsarticle.source.r56999.tar.xz
-2020/03/15 | 547260 | systems/texlive/tlnet/archive/els-cas-templates.doc.r54317.tar.xz
-2020/03/15 | 20152 | systems/texlive/tlnet/archive/els-cas-templates.r54317.tar.xz
+2021/05/13 | 367564 | systems/texlive/tlnet/archive/els-cas-templates.doc.r59170.tar.xz
+2021/05/13 | 21152 | systems/texlive/tlnet/archive/els-cas-templates.r59170.tar.xz
2020/07/25 | 951476 | systems/texlive/tlnet/archive/elteikthesis.doc.r55928.tar.xz
2020/07/25 | 5624 | systems/texlive/tlnet/archive/elteikthesis.r55928.tar.xz
2019/02/28 | 176308 | systems/texlive/tlnet/archive/eltex.doc.r15878.tar.xz
@@ -271953,9 +271972,9 @@
2019/02/28 | 5636 | systems/texlive/tlnet/archive/manuscript.source.r36110.tar.xz
2019/02/28 | 157580 | systems/texlive/tlnet/archive/manyind.doc.r49874.tar.xz
2019/02/28 | 2900 | systems/texlive/tlnet/archive/manyind.r49874.tar.xz
-2021/04/06 | 189576 | systems/texlive/tlnet/archive/marathi.doc.r58760.tar.xz
-2021/04/06 | 5244 | systems/texlive/tlnet/archive/marathi.r58760.tar.xz
-2021/04/06 | 17656 | systems/texlive/tlnet/archive/marathi.source.r58760.tar.xz
+2021/05/13 | 150336 | systems/texlive/tlnet/archive/marathi.doc.r59172.tar.xz
+2021/05/13 | 5268 | systems/texlive/tlnet/archive/marathi.r59172.tar.xz
+2021/05/13 | 17760 | systems/texlive/tlnet/archive/marathi.source.r59172.tar.xz
2020/08/02 | 19864 | systems/texlive/tlnet/archive/marcellus.doc.r56016.tar.xz
2020/08/02 | 178120 | systems/texlive/tlnet/archive/marcellus.r56016.tar.xz
2019/02/28 | 188416 | systems/texlive/tlnet/archive/margbib.doc.r15878.tar.xz
@@ -276012,7 +276031,7 @@
2020/05/17 | 592 | systems/texlive/tlnet/archive/texlive-scripts.amd64-freebsd.r55172.tar.xz
2020/05/17 | 588 | systems/texlive/tlnet/archive/texlive-scripts.amd64-netbsd.r55172.tar.xz
2020/05/17 | 592 | systems/texlive/tlnet/archive/texlive-scripts.armhf-linux.r55172.tar.xz
-2021/05/12 | 396960 | systems/texlive/tlnet/archive/texlive-scripts.doc.r59164.tar.xz
+2021/05/13 | 396960 | systems/texlive/tlnet/archive/texlive-scripts.doc.r59168.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
@@ -276036,7 +276055,7 @@
2020/05/17 | 588 | systems/texlive/tlnet/archive/texlive-scripts.i386-linux.r55172.tar.xz
2020/05/17 | 592 | systems/texlive/tlnet/archive/texlive-scripts.i386-netbsd.r55172.tar.xz
2020/05/17 | 588 | systems/texlive/tlnet/archive/texlive-scripts.i386-solaris.r55172.tar.xz
-2021/05/12 | 107992 | systems/texlive/tlnet/archive/texlive-scripts.r59164.tar.xz
+2021/05/13 | 107980 | systems/texlive/tlnet/archive/texlive-scripts.r59168.tar.xz
2021/02/25 | 572 | systems/texlive/tlnet/archive/texlive-scripts.universal-darwin.r57908.tar.xz
2021/04/12 | 36308 | systems/texlive/tlnet/archive/texlive-scripts.win32.r58829.tar.xz
2020/05/17 | 588 | systems/texlive/tlnet/archive/texlive-scripts.x86_64-cygwin.r55172.tar.xz
@@ -276922,9 +276941,9 @@
2019/02/28 | 2836 | systems/texlive/tlnet/archive/uni-wtal-lin.r31409.tar.xz
2019/07/16 | 31784 | systems/texlive/tlnet/archive/unizgklasa.doc.r51647.tar.xz
2019/07/16 | 2028 | systems/texlive/tlnet/archive/unizgklasa.r51647.tar.xz
-2019/11/17 | 683816 | systems/texlive/tlnet/archive/unravel.doc.r52822.tar.xz
-2019/11/17 | 28380 | systems/texlive/tlnet/archive/unravel.r52822.tar.xz
-2019/11/17 | 51652 | systems/texlive/tlnet/archive/unravel.source.r52822.tar.xz
+2021/05/13 | 845060 | systems/texlive/tlnet/archive/unravel.doc.r59175.tar.xz
+2021/05/13 | 29924 | systems/texlive/tlnet/archive/unravel.r59175.tar.xz
+2021/05/13 | 53380 | systems/texlive/tlnet/archive/unravel.source.r59175.tar.xz
2019/02/28 | 119528 | systems/texlive/tlnet/archive/unswcover.doc.r29476.tar.xz
2019/02/28 | 2664 | systems/texlive/tlnet/archive/unswcover.r29476.tar.xz
2019/02/28 | 608984 | systems/texlive/tlnet/archive/uothesis.doc.r25355.tar.xz
@@ -277290,8 +277309,8 @@
2019/02/28 | 6324 | systems/texlive/tlnet/archive/wordlike.source.r15878.tar.xz
2019/02/28 | 96080 | systems/texlive/tlnet/archive/worksheet.doc.r48423.tar.xz
2019/02/28 | 3812 | systems/texlive/tlnet/archive/worksheet.r48423.tar.xz
-2021/04/30 | 2141572 | systems/texlive/tlnet/archive/worldflags.doc.r59021.tar.xz
-2021/04/30 | 1230772 | systems/texlive/tlnet/archive/worldflags.r59021.tar.xz
+2021/05/13 | 2539560 | systems/texlive/tlnet/archive/worldflags.doc.r59171.tar.xz
+2021/05/13 | 1497060 | systems/texlive/tlnet/archive/worldflags.r59171.tar.xz
2019/02/28 | 337900 | systems/texlive/tlnet/archive/wrapfig.doc.r22048.tar.xz
2019/02/28 | 9360 | systems/texlive/tlnet/archive/wrapfig.r22048.tar.xz
2019/02/28 | 401712 | systems/texlive/tlnet/archive/wsemclassic.doc.r31532.tar.xz
@@ -277736,16 +277755,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
2021/05/02 | 105152 | systems/texlive/tlnet/install-tl
-2021/05/12 | 6810974 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2021/05/12 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2021/05/12 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2021/05/13 | 6810826 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2021/05/13 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2021/05/13 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2021/04/11 | 4945 | systems/texlive/tlnet/install-tl-windows.bat
-2021/05/12 | 20809713 | systems/texlive/tlnet/install-tl-windows.exe
-2021/05/12 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2021/05/12 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2021/05/12 | 25582728 | systems/texlive/tlnet/install-tl.zip
-2021/05/12 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2021/05/12 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2021/05/13 | 20808508 | systems/texlive/tlnet/install-tl-windows.exe
+2021/05/13 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2021/05/13 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2021/05/13 | 25582711 | systems/texlive/tlnet/install-tl.zip
+2021/05/13 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2021/05/13 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
2021/04/01 | 1229 | systems/texlive/tlnet/README.md
2021/04/01 | 0 | systems/texlive/tlnet/TEXLIVE_2021
2021/03/15 | 6571 | systems/texlive/tlnet/tlpkg/gpg/pubring.gpg
@@ -277755,7 +277774,7 @@
2021/03/15 | 1280 | systems/texlive/tlnet/tlpkg/gpg/trustdb.gpg
2021/05/07 | 49598 | systems/texlive/tlnet/tlpkg/installer/config.guess
2010/11/11 | 11651 | systems/texlive/tlnet/tlpkg/installer/COPYING.MinGW-runtime.txt
-2021/05/11 | 6889 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+2021/05/12 | 6807 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2020/04/15 | 223687 | 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
@@ -277797,12 +277816,12 @@
2021/05/02 | 20361 | systems/texlive/tlnet/tlpkg/TeXLive/TLCrypto.pm
2021/02/20 | 5400 | systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm
2020/09/22 | 27563 | systems/texlive/tlnet/tlpkg/TeXLive/TLPaper.pm
-2021/05/12 | 17221193 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
-2021/05/12 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2021/05/13 | 17225173 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2021/05/13 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
2021/05/06 | 86490 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm
-2021/05/12 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
-2021/05/12 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2021/05/12 | 2303924 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2021/05/13 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2021/05/13 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2021/05/13 | 2301360 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
2021/05/06 | 58771 | systems/texlive/tlnet/tlpkg/TeXLive/TLPOBJ.pm
2021/03/17 | 42077 | systems/texlive/tlnet/tlpkg/TeXLive/TLPSRC.pm
2020/05/11 | 15010 | systems/texlive/tlnet/tlpkg/TeXLive/TLTREE.pm
@@ -282490,7 +282509,7 @@
2020/10/03 | 318630 | systems/win32/miktex/tm/packages/filehook.tar.lzma
2012/12/04 | 924573 | systems/win32/miktex/tm/packages/fileinfo.tar.lzma
2011/09/21 | 281409 | systems/win32/miktex/tm/packages/filemod.tar.lzma
-2021/05/12 | 574020 | systems/win32/miktex/tm/packages/files.csv.lzma
+2021/05/13 | 574020 | systems/win32/miktex/tm/packages/files.csv.lzma
2001/05/14 | 5617 | systems/win32/miktex/tm/packages/finbib.tar.lzma
2015/10/20 | 44379 | systems/win32/miktex/tm/packages/findhyph.tar.lzma
2011/10/21 | 89323 | systems/win32/miktex/tm/packages/fink.tar.lzma
@@ -283691,9 +283710,9 @@
2018/01/12 | 157226 | systems/win32/miktex/tm/packages/miktex-zip-bin-x64.tar.lzma
2021/03/15 | 39247 | systems/win32/miktex/tm/packages/miktex-zlib-bin-2.9.tar.lzma
2021/03/15 | 43386 | systems/win32/miktex/tm/packages/miktex-zlib-bin-x64-2.9.tar.lzma
-2021/05/12 | 209342 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
-2021/05/12 | 1269614 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
-2021/05/12 | 1185859 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2021/05/13 | 209371 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2021/05/13 | 1269260 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2021/05/13 | 1186595 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
2021/03/15 | 13447 | systems/win32/miktex/tm/packages/miktex-zzip-bin-2.9.tar.lzma
2021/03/15 | 14320 | systems/win32/miktex/tm/packages/miktex-zzip-bin-x64-2.9.tar.lzma
2016/07/15 | 35914 | systems/win32/miktex/tm/packages/mil3.tar.lzma
@@ -283854,190 +283873,190 @@
2018/04/09 | 400132 | systems/win32/miktex/tm/packages/newunicodechar.tar.lzma
2011/09/19 | 101312 | systems/win32/miktex/tm/packages/newvbtm.tar.lzma
2021/03/17 | 232249 | systems/win32/miktex/tm/packages/newverbs.tar.lzma
-2021/05/12 | 574966 | systems/win32/miktex/tm/packages/next/files.csv.lzma
-2021/05/12 | 50847 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
-2021/05/12 | 56457 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
-2021/05/12 | 968697 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
-2021/05/12 | 1078878 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
-2021/05/12 | 29053 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
-2021/05/12 | 31344 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
-2021/05/12 | 29869 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
-2021/05/12 | 34634 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
-2021/05/12 | 49971 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
-2021/05/12 | 57598 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
-2021/05/12 | 84774 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
-2021/05/12 | 94738 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
-2021/05/12 | 67679 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
-2021/05/12 | 75419 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
-2021/05/12 | 27183 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
-2021/05/12 | 30886 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
-2021/05/12 | 330233 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
-2021/05/12 | 392597 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
-2021/05/12 | 32744 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
-2021/05/12 | 36679 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
-2021/05/12 | 51431 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
-2021/05/12 | 56716 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
-2021/05/12 | 4708 | systems/win32/miktex/tm/packages/next/miktex-config-2.9.tar.lzma
-2021/05/12 | 239476 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
-2021/05/12 | 261962 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
-2021/05/12 | 179379 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
-2021/05/12 | 195664 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
-2021/05/12 | 52476 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
-2021/05/12 | 59146 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
-2021/05/12 | 21130 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
-2021/05/12 | 23290 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
-2021/05/12 | 461400 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
-2021/05/12 | 45647 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
-2021/05/12 | 51158 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
-2021/05/12 | 282104 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
-2021/05/12 | 321894 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
-2021/05/12 | 41102 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
-2021/05/12 | 45279 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
-2021/05/12 | 116931 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
-2021/05/12 | 131490 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
-2021/05/12 | 1281103 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
-2021/05/12 | 1425982 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
-2021/05/12 | 87638 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
-2021/05/12 | 99605 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
-2021/05/12 | 43057 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
-2021/05/12 | 47877 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
-2021/05/12 | 25154 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
-2021/05/12 | 28008 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
-2021/05/12 | 55822 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
-2021/05/12 | 62801 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
-2021/05/12 | 135005 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
-2021/05/12 | 152762 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
-2021/05/12 | 73181 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
-2021/05/12 | 77859 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
-2021/05/12 | 71569 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
-2021/05/12 | 80661 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
-2021/05/12 | 258665 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
-2021/05/12 | 295554 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
-2021/05/12 | 22039 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
-2021/05/12 | 25001 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
-2021/05/12 | 97490 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
-2021/05/12 | 112253 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
-2021/05/12 | 63835 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
-2021/05/12 | 72861 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
-2021/05/12 | 96146 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
-2021/05/12 | 115469 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
-2021/05/12 | 38070 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
-2021/05/12 | 42627 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
-2021/05/12 | 484055 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
-2021/05/12 | 567628 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
-2021/05/12 | 147140 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
-2021/05/12 | 159968 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
-2021/05/12 | 94801 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
-2021/05/12 | 109272 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
-2021/05/12 | 16326 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
-2021/05/12 | 17957 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
-2021/05/12 | 28119 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
-2021/05/12 | 30037 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
-2021/05/12 | 625280 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
-2021/05/12 | 680049 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
-2021/05/12 | 532040 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
-2021/05/12 | 594870 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
-2021/05/12 | 475932 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
-2021/05/12 | 511634 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
-2021/05/12 | 94268 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
-2021/05/12 | 103323 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
-2021/05/12 | 1725545 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
-2021/05/12 | 2009489 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
-2021/05/12 | 67650 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
-2021/05/12 | 74163 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
-2021/05/12 | 27362 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
-2021/05/12 | 31594 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
-2021/05/12 | 7746 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
-2021/05/12 | 8774 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
-2021/05/12 | 195566 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
-2021/05/12 | 214103 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
-2021/05/12 | 250212 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
-2021/05/12 | 283979 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
-2021/05/12 | 97133 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
-2021/05/12 | 101761 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
-2021/05/12 | 60552 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
-2021/05/12 | 67930 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
-2021/05/12 | 124971 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
-2021/05/12 | 136427 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
-2021/05/12 | 147153 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
-2021/05/12 | 163656 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
-2021/05/12 | 199702 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
-2021/05/12 | 180048 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
-2021/05/12 | 67451 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
-2021/05/12 | 77486 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
-2021/05/12 | 31191 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
-2021/05/12 | 35064 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
-2021/05/12 | 38065 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
-2021/05/12 | 42574 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
-2021/05/12 | 42925 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
-2021/05/12 | 47008 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
-2021/05/12 | 45938 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
-2021/05/12 | 52455 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
-2021/05/12 | 193717 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
-2021/05/12 | 211053 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
-2021/05/12 | 35462 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
-2021/05/12 | 39691 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
-2021/05/12 | 748363 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
-2021/05/12 | 816073 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
-2021/05/12 | 198130 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
-2021/05/12 | 202556 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
-2021/05/12 | 208181 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
-2021/05/12 | 243479 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
-2021/05/12 | 78746 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
-2021/05/12 | 87703 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
-2021/05/12 | 1171728 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
-2021/05/12 | 1307724 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
-2021/05/12 | 20120 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
-2021/05/12 | 23882 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
-2021/05/12 | 31543 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
-2021/05/12 | 37244 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
-2021/05/12 | 64016 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
-2021/05/12 | 72150 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
-2021/05/12 | 43678 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
-2021/05/12 | 51976 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
-2021/05/12 | 1295412 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
-2021/05/12 | 1424811 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
-2021/05/12 | 42386 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
-2021/05/12 | 51797 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
-2021/05/12 | 56223 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
-2021/05/12 | 59830 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
-2021/05/12 | 25341 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
-2021/05/12 | 27274 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
-2021/05/12 | 16114 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
-2021/05/12 | 18096 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
-2021/05/12 | 63673 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
-2021/05/12 | 70109 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
-2021/05/12 | 153890 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
-2021/05/12 | 167905 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
-2021/05/12 | 56908 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
-2021/05/12 | 65322 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
-2021/05/12 | 98519 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
-2021/05/12 | 104624 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
-2021/05/12 | 2499400 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
-2021/05/12 | 2616931 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
-2021/05/12 | 55217 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
-2021/05/12 | 62226 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
-2021/05/12 | 33441 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
-2021/05/12 | 37293 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
-2021/05/12 | 27196 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
-2021/05/12 | 33152 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
-2021/05/12 | 65732 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
-2021/05/12 | 70324 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
-2021/05/12 | 311191 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
-2021/05/12 | 345368 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
-2021/05/12 | 55563 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma
-2021/05/12 | 57067 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
-2021/05/12 | 583627 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
-2021/05/12 | 618763 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
-2021/05/12 | 39563 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
-2021/05/12 | 43390 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
-2021/05/12 | 209283 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
-2021/05/12 | 1270504 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
-2021/05/12 | 1185751 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
-2021/05/12 | 13470 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
-2021/05/12 | 14353 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
+2021/05/13 | 574966 | systems/win32/miktex/tm/packages/next/files.csv.lzma
+2021/05/13 | 50847 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
+2021/05/13 | 56457 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
+2021/05/13 | 968693 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
+2021/05/13 | 1078876 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2021/05/13 | 29055 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
+2021/05/13 | 31345 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
+2021/05/13 | 29868 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
+2021/05/13 | 34635 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2021/05/13 | 49971 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
+2021/05/13 | 57600 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
+2021/05/13 | 84774 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
+2021/05/13 | 94740 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
+2021/05/13 | 67679 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
+2021/05/13 | 75419 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
+2021/05/13 | 27183 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
+2021/05/13 | 30885 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2021/05/13 | 330235 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
+2021/05/13 | 392596 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
+2021/05/13 | 32746 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
+2021/05/13 | 36680 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
+2021/05/13 | 51433 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
+2021/05/13 | 56717 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
+2021/05/13 | 4709 | systems/win32/miktex/tm/packages/next/miktex-config-2.9.tar.lzma
+2021/05/13 | 239479 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
+2021/05/13 | 261962 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
+2021/05/13 | 179380 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
+2021/05/13 | 195666 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2021/05/13 | 52475 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
+2021/05/13 | 59145 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2021/05/13 | 21130 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
+2021/05/13 | 23292 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
+2021/05/13 | 461400 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
+2021/05/13 | 45650 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
+2021/05/13 | 51160 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
+2021/05/13 | 282107 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
+2021/05/13 | 321894 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
+2021/05/13 | 41103 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
+2021/05/13 | 45278 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
+2021/05/13 | 116931 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
+2021/05/13 | 131489 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
+2021/05/13 | 1281106 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
+2021/05/13 | 1425981 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2021/05/13 | 87637 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
+2021/05/13 | 99605 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2021/05/13 | 43059 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
+2021/05/13 | 47878 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
+2021/05/13 | 25155 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
+2021/05/13 | 28009 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
+2021/05/13 | 55823 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
+2021/05/13 | 62802 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2021/05/13 | 135004 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
+2021/05/13 | 152763 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
+2021/05/13 | 73181 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
+2021/05/13 | 77859 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
+2021/05/13 | 71570 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
+2021/05/13 | 80660 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2021/05/13 | 258666 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
+2021/05/13 | 295555 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
+2021/05/13 | 22039 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
+2021/05/13 | 25002 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
+2021/05/13 | 97490 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
+2021/05/13 | 112252 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
+2021/05/13 | 63836 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
+2021/05/13 | 72860 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
+2021/05/13 | 96145 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
+2021/05/13 | 115469 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2021/05/13 | 38070 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
+2021/05/13 | 42627 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
+2021/05/13 | 484056 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
+2021/05/13 | 567628 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
+2021/05/13 | 147140 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
+2021/05/13 | 159968 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
+2021/05/13 | 94802 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
+2021/05/13 | 109276 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2021/05/13 | 16327 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
+2021/05/13 | 17958 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2021/05/13 | 28119 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
+2021/05/13 | 30037 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2021/05/13 | 625282 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
+2021/05/13 | 680052 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
+2021/05/13 | 532041 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
+2021/05/13 | 594868 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2021/05/13 | 475935 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
+2021/05/13 | 511635 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
+2021/05/13 | 94269 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
+2021/05/13 | 103323 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
+2021/05/13 | 1725547 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
+2021/05/13 | 2009490 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
+2021/05/13 | 67650 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
+2021/05/13 | 74164 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2021/05/13 | 27363 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
+2021/05/13 | 31593 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
+2021/05/13 | 7747 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
+2021/05/13 | 8774 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
+2021/05/13 | 195565 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
+2021/05/13 | 214105 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2021/05/13 | 250210 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
+2021/05/13 | 283978 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
+2021/05/13 | 97135 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
+2021/05/13 | 101764 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
+2021/05/13 | 60552 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
+2021/05/13 | 67930 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
+2021/05/13 | 124972 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
+2021/05/13 | 136426 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
+2021/05/13 | 147151 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
+2021/05/13 | 163655 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
+2021/05/13 | 199701 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
+2021/05/13 | 180049 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
+2021/05/13 | 67451 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
+2021/05/13 | 77487 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
+2021/05/13 | 31192 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
+2021/05/13 | 35064 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
+2021/05/13 | 38066 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
+2021/05/13 | 42574 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
+2021/05/13 | 42925 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
+2021/05/13 | 47008 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
+2021/05/13 | 45937 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
+2021/05/13 | 52455 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
+2021/05/13 | 193717 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
+2021/05/13 | 211055 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
+2021/05/13 | 35462 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
+2021/05/13 | 39692 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
+2021/05/13 | 748364 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
+2021/05/13 | 816073 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2021/05/13 | 198131 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
+2021/05/13 | 202557 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
+2021/05/13 | 208182 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
+2021/05/13 | 243480 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
+2021/05/13 | 78746 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
+2021/05/13 | 87703 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2021/05/13 | 1171730 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
+2021/05/13 | 1307724 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2021/05/13 | 20121 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
+2021/05/13 | 23882 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2021/05/13 | 31543 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
+2021/05/13 | 37244 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
+2021/05/13 | 64018 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
+2021/05/13 | 72152 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2021/05/13 | 43679 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
+2021/05/13 | 51980 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
+2021/05/13 | 1295414 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
+2021/05/13 | 1424811 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
+2021/05/13 | 42389 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
+2021/05/13 | 51798 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
+2021/05/13 | 56222 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
+2021/05/13 | 59831 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
+2021/05/13 | 25342 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
+2021/05/13 | 27274 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
+2021/05/13 | 16114 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
+2021/05/13 | 18097 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
+2021/05/13 | 63674 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
+2021/05/13 | 70110 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
+2021/05/13 | 153891 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
+2021/05/13 | 167906 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2021/05/13 | 56908 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
+2021/05/13 | 65322 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2021/05/13 | 98520 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
+2021/05/13 | 104625 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
+2021/05/13 | 2499402 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
+2021/05/13 | 2616932 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
+2021/05/13 | 55219 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
+2021/05/13 | 62225 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2021/05/13 | 33440 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
+2021/05/13 | 37294 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
+2021/05/13 | 27197 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
+2021/05/13 | 33152 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2021/05/13 | 65732 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
+2021/05/13 | 70325 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
+2021/05/13 | 311191 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
+2021/05/13 | 345368 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
+2021/05/13 | 55563 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma
+2021/05/13 | 57066 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
+2021/05/13 | 583628 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
+2021/05/13 | 618767 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
+2021/05/13 | 39564 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
+2021/05/13 | 43391 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2021/05/13 | 209301 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
+2021/05/13 | 1270198 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
+2021/05/13 | 1185935 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
+2021/05/13 | 13470 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
+2021/05/13 | 14354 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
2019/03/12 | 1412 | systems/win32/miktex/tm/packages/nextpage.tar.lzma
-2021/05/12 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
+2021/05/13 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
2018/07/06 | 145915 | systems/win32/miktex/tm/packages/nexus-otf.tar.lzma
2017/03/30 | 191149 | systems/win32/miktex/tm/packages/nfssext-cfr.tar.lzma
2012/12/20 | 612251 | systems/win32/miktex/tm/packages/nicefilelist.tar.lzma
@@ -284371,7 +284390,7 @@
2020/10/20 | 342254 | systems/win32/miktex/tm/packages/preview.tar.lzma
2019/06/20 | 375963 | systems/win32/miktex/tm/packages/prftree.tar.lzma
2021/04/23 | 274028 | systems/win32/miktex/tm/packages/principia.tar.lzma
-2021/05/12 | 850 | systems/win32/miktex/tm/packages/pr.ini
+2021/05/13 | 850 | systems/win32/miktex/tm/packages/pr.ini
2010/09/27 | 248469 | systems/win32/miktex/tm/packages/printlen.tar.lzma
2008/06/17 | 77313 | systems/win32/miktex/tm/packages/proba.tar.lzma
2017/07/12 | 988486 | systems/win32/miktex/tm/packages/probsoln.tar.lzma
@@ -285558,13 +285577,13 @@
2021/05/08 | 5531876 | systems/win32/w32tex/aleph-w32.tar.xz
2021/05/09 | 63720288 | systems/win32/w32tex/biblatex-biber.tar.xz
2016/12/13 | 65971452 | systems/win32/w32tex/cbfonts.tar.xz
-2021/05/11 | 830851 | systems/win32/w32tex/ChangeLog
+2021/05/12 | 831401 | systems/win32/w32tex/ChangeLog
2009/08/03 | 141221 | systems/win32/w32tex/ChangeLog.0
2009/08/03 | 221890 | systems/win32/w32tex/ChangeLog.1
2009/08/03 | 116462 | systems/win32/w32tex/ChangeLog.2
2013/09/03 | 352299 | systems/win32/w32tex/ChangeLog.3
2017/06/24 | 644754 | systems/win32/w32tex/ChangeLog.4
-2021/05/08 | 23484712 | systems/win32/w32tex/cjkzr.tar.xz
+2021/05/12 | 23500748 | systems/win32/w32tex/cjkzr.tar.xz
2013/04/27 | 15858676 | systems/win32/w32tex/context-doc.tar.xz
2021/05/10 | 144766492 | systems/win32/w32tex/context.tar.xz
2021/05/04 | 914852 | systems/win32/w32tex/cweb-w32.tar.xz
@@ -285578,19 +285597,19 @@
2021/04/07 | 17377260 | systems/win32/w32tex/gregorio-w32.tar.xz
2009/08/03 | 1072620 | systems/win32/w32tex/gtftex.zip
2021/04/27 | 1862028 | systems/win32/w32tex/jtex-w32.tar.xz
-2021/05/10 | 52805236 | systems/win32/w32tex/latex-dev.tar.xz
+2021/05/12 | 52833448 | systems/win32/w32tex/latex-dev.tar.xz
2021/03/21 | 34776716 | systems/win32/w32tex/latex.tar.xz
2021/04/07 | 1007424 | systems/win32/w32tex/lcdf-typetools-w32.tar.xz
2021/03/30 | 421014648 | systems/win32/w32tex/ltxpkgdocs.tar.xz
-2021/05/10 | 35246464 | systems/win32/w32tex/ltxpkgs.tar.xz
+2021/05/12 | 35252076 | systems/win32/w32tex/ltxpkgs.tar.xz
2021/05/11 | 3844932 | systems/win32/w32tex/luajittex-dev-w32.tar.xz
2021/05/11 | 3823404 | systems/win32/w32tex/luajittex-exp-w32.tar.xz
2021/05/11 | 3830288 | systems/win32/w32tex/luajittex-w32.tar.xz
2021/03/26 | 838276 | systems/win32/w32tex/luasec-w32.tar.xz
-2021/05/11 | 18931684 | systems/win32/w32tex/luatex-dev-w32.tar.xz
-2021/05/11 | 18894040 | systems/win32/w32tex/luatex-exp-w32.tar.xz
+2021/05/12 | 18927808 | systems/win32/w32tex/luatex-dev-w32.tar.xz
+2021/05/12 | 18905048 | systems/win32/w32tex/luatex-exp-w32.tar.xz
2021/04/12 | 68821016 | systems/win32/w32tex/luatexja.tar.xz
-2021/05/11 | 18887188 | systems/win32/w32tex/luatex-w32.tar.xz
+2021/05/12 | 18898988 | systems/win32/w32tex/luatex-w32.tar.xz
2021/05/10 | 1613572 | systems/win32/w32tex/makeindex-w32.tar.xz
2021/03/28 | 5371984 | systems/win32/w32tex/manual.tar.xz
2021/04/07 | 439524 | systems/win32/w32tex/mftools.tar.xz
@@ -285600,7 +285619,7 @@
2021/03/29 | 9811732 | systems/win32/w32tex/newtxpx-boondoxfonts.tar.xz
2021/04/07 | 1246480 | systems/win32/w32tex/omegaj-w32.tar.xz
2020/11/16 | 324540 | systems/win32/w32tex/otfbeta.tar.xz
-2021/05/11 | 22172916 | systems/win32/w32tex/pdftex-w32.tar.xz
+2021/05/12 | 22214320 | systems/win32/w32tex/pdftex-w32.tar.xz
2021/05/10 | 98152500 | systems/win32/w32tex/pgfcontrib.tar.xz
2015/01/26 | 189072 | systems/win32/w32tex/plain2-2.54-w32.tar.xz
2021/02/14 | 2826912 | systems/win32/w32tex/platex.tar.xz
@@ -285608,8 +285627,8 @@
2021/04/07 | 1170892 | systems/win32/w32tex/pstoedit-w32.tar.xz
2021/04/29 | 274303836 | systems/win32/w32tex/pstricks.tar.xz
2021/04/07 | 518092 | systems/win32/w32tex/psutils-w32.tar.xz
-2021/05/08 | 6774728 | systems/win32/w32tex/ptex-ng-w32.tar.xz
-2021/05/11 | 10700004 | systems/win32/w32tex/ptex-w32.tar.xz
+2021/05/12 | 6776656 | systems/win32/w32tex/ptex-ng-w32.tar.xz
+2021/05/12 | 10700708 | systems/win32/w32tex/ptex-w32.tar.xz
2019/04/15 | 499188 | systems/win32/w32tex/sam2p-w32.tar.xz
2021/03/23 | 87955068 | systems/win32/w32tex/t1fonts.tar.xz
2020/10/31 | 142032 | systems/win32/w32tex/t1utils-w32.tar.xz
@@ -285633,7 +285652,7 @@
2020/01/19 | 5856 | systems/win32/w32tex/txtutil.tar.xz
2013/04/08 | 71588 | systems/win32/w32tex/ums.tar.xz
2012/05/28 | 233472 | systems/win32/w32tex/unzip.exe
-2021/05/11 | 8619736 | systems/win32/w32tex/uptex-w32.tar.xz
+2021/05/12 | 8622456 | systems/win32/w32tex/uptex-w32.tar.xz
2013/04/08 | 722652 | systems/win32/w32tex/utf.tar.xz
2013/04/08 | 13748 | systems/win32/w32tex/vf-n2bk.tar.xz
2021/03/24 | 53260516 | systems/win32/w32tex/w32tex-src.tar.xz
@@ -285682,7 +285701,7 @@
2021/05/11 | 1806176 | systems/win32/w32tex/win64/uptex-w64.tar.xz
2021/05/11 | 3755940 | systems/win32/w32tex/win64/web2c-w64.tar.xz
2021/05/08 | 11122468 | systems/win32/w32tex/win64/xetex-w64.tar.xz
-2021/05/08 | 49476568 | systems/win32/w32tex/xetex-w32.tar.xz
+2021/05/12 | 49478904 | systems/win32/w32tex/xetex-w32.tar.xz
2021/04/28 | 2934168 | systems/win32/w32tex/xindy-w32.tar.xz
2013/11/19 | 11356248 | systems/win32/w32tex/xymtex.tar.xz
2016/09/09 | 4334636 | systems/win32/w32tex/xypic.tar.xz
@@ -285779,7 +285798,7 @@
2004/06/04 | 404 | tds/tds.sed
2004/06/23 | 65418 | tds/tds.tex
2019/05/29 | 304264 | tds.zip
-2021/05/13 | 186 | timestamp
+2021/05/14 | 186 | timestamp
2002/08/26 | 61898 | usergrps/dante/antrag.pdf
2002/08/26 | 118217 | usergrps/dante/antrag.ps
2017/06/30 | 917 | usergrps/dante/dtk/doc/beispiel.bib
@@ -287111,41 +287130,41 @@
1999/06/04 | 27445 | usergrps/uktug/baskervi/baskrep.cls
1999/05/12 | 7702 | usergrps/uktug/baskervi/epstopdf
1997/10/01 | 444 | usergrps/uktug/baskervi/README
-2021/05/12 | 10468 | usergrps/usergrps/bg.html
-2021/05/12 | 10165 | usergrps/usergrps/br.html
-2021/05/12 | 10151 | usergrps/usergrps/ca.html
-2021/05/12 | 10430 | usergrps/usergrps/cn.html
-2021/05/12 | 10584 | usergrps/usergrps/cz.html
-2021/05/12 | 10701 | usergrps/usergrps/de.html
-2021/05/12 | 10222 | usergrps/usergrps/dk.html
-2021/05/12 | 10001 | usergrps/usergrps/ee.html
-2021/05/12 | 10226 | usergrps/usergrps/esc.html
-2021/05/12 | 10371 | usergrps/usergrps/es.html
-2021/05/12 | 10511 | usergrps/usergrps/fr.html
-2021/05/12 | 10354 | usergrps/usergrps/gb.html
-2021/05/12 | 10247 | usergrps/usergrps/gr.html
-2021/05/12 | 10651 | usergrps/usergrps/hu.html
-2021/05/12 | 10147 | usergrps/usergrps/ie.html
-2021/05/12 | 6568 | usergrps/usergrps/index.html
-2021/05/12 | 10122 | usergrps/usergrps/is.html
-2021/05/12 | 10374 | usergrps/usergrps/it.html
-2021/05/12 | 10091 | usergrps/usergrps/kh.html
-2021/05/12 | 10491 | usergrps/usergrps/kr.html
+2021/05/13 | 10406 | usergrps/usergrps/bg.html
+2021/05/13 | 10103 | usergrps/usergrps/br.html
+2021/05/13 | 10089 | usergrps/usergrps/ca.html
+2021/05/13 | 10368 | usergrps/usergrps/cn.html
+2021/05/13 | 10522 | usergrps/usergrps/cz.html
+2021/05/13 | 10639 | usergrps/usergrps/de.html
+2021/05/13 | 10160 | usergrps/usergrps/dk.html
+2021/05/13 | 9939 | usergrps/usergrps/ee.html
+2021/05/13 | 10164 | usergrps/usergrps/esc.html
+2021/05/13 | 10309 | usergrps/usergrps/es.html
+2021/05/13 | 10449 | usergrps/usergrps/fr.html
+2021/05/13 | 10292 | usergrps/usergrps/gb.html
+2021/05/13 | 10185 | usergrps/usergrps/gr.html
+2021/05/13 | 10589 | usergrps/usergrps/hu.html
+2021/05/13 | 10085 | usergrps/usergrps/ie.html
+2021/05/13 | 6506 | usergrps/usergrps/index.html
+2021/05/13 | 10060 | usergrps/usergrps/is.html
+2021/05/13 | 10312 | usergrps/usergrps/it.html
+2021/05/13 | 10029 | usergrps/usergrps/kh.html
+2021/05/13 | 10429 | usergrps/usergrps/kr.html
2021/05/10 | 10000 | usergrps/usergrps/labels.pdf
2020/08/05 | 2357 | usergrps/usergrps/labels.tex
-2021/05/12 | 10031 | usergrps/usergrps/lt.html
-2021/05/12 | 37637 | usergrps/usergrps/lugs.html
+2021/05/13 | 9969 | usergrps/usergrps/lt.html
+2021/05/13 | 37637 | usergrps/usergrps/lugs.html
2021/05/10 | 49845 | usergrps/usergrps/lugs.pdf
2020/11/05 | 23855 | usergrps/usergrps/lugs.tex
-2021/05/12 | 10081 | usergrps/usergrps/mx.html
-2021/05/12 | 10467 | usergrps/usergrps/nl.html
-2021/05/12 | 10192 | usergrps/usergrps/no.html
-2021/05/12 | 10656 | usergrps/usergrps/pl.html
-2021/05/12 | 10220 | usergrps/usergrps/pt.html
-2021/05/12 | 10262 | usergrps/usergrps/us.html
-2021/05/12 | 10131 | usergrps/usergrps/uy.html
-2021/05/12 | 10202 | usergrps/usergrps/vn.html
-2021/05/12 | 10141 | usergrps/usergrps/za.html
+2021/05/13 | 10019 | usergrps/usergrps/mx.html
+2021/05/13 | 10405 | usergrps/usergrps/nl.html
+2021/05/13 | 10130 | usergrps/usergrps/no.html
+2021/05/13 | 10594 | usergrps/usergrps/pl.html
+2021/05/13 | 10158 | usergrps/usergrps/pt.html
+2021/05/13 | 10200 | usergrps/usergrps/us.html
+2021/05/13 | 10069 | usergrps/usergrps/uy.html
+2021/05/13 | 10140 | usergrps/usergrps/vn.html
+2021/05/13 | 10079 | usergrps/usergrps/za.html
1992/12/06 | 2551 | web/aplweb/announcement
1993/11/03 | 802292 | web/aplweb/aplweba.zip
1993/11/03 | 771814 | web/aplweb/aplwebb.zip
diff --git a/FILES.byname.gz b/FILES.byname.gz
index a14fb9edcd..f32b2e0990 100644
--- a/FILES.byname.gz
+++ b/FILES.byname.gz
Binary files differ
diff --git a/FILES.last07days b/FILES.last07days
index c844ab6624..368d3749b6 100644
--- a/FILES.last07days
+++ b/FILES.last07days
@@ -1,324 +1,549 @@
+2021/05/13 | 9969 | usergrps/usergrps/lt.html
+2021/05/13 | 99663 | macros/latex/contrib/changes/examples/changes.example.authormarkup.footnote.pdf
+2021/05/13 | 99605 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2021/05/13 | 9939 | usergrps/usergrps/ee.html
+2021/05/13 | 98926 | macros/latex/contrib/changes/examples/changes.example.setsummarytowidth.pdf
+2021/05/13 | 98520 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
+2021/05/13 | 97975 | macros/latex/contrib/changes/examples/changes.example.listofchanges.summary.pdf
+2021/05/13 | 97786 | macros/latex/contrib/changes/examples/changes.example.setsummarywidth.pdf
+2021/05/13 | 97490 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
+2021/05/13 | 97135 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
+2021/05/13 | 96 | macros/latex/contrib/changes/userdoc/sethighlightmarkup_ex.tex
+2021/05/13 | 968693 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
+2021/05/13 | 96634 | macros/latex/contrib/bnumexpr/bnumexpr.pdf
+2021/05/13 | 96371 | macros/latex/contrib/changes/examples/changes.example.settruncatewidth.pdf
+2021/05/13 | 96145 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
+2021/05/13 | 94860 | macros/latex/contrib/changes/examples/changes.example.setaddedmarkup.pdf
+2021/05/13 | 94839 | macros/latex/contrib/changes/examples/changes.example.setauthormarkuptext.pdf
+2021/05/13 | 94802 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
+2021/05/13 | 94740 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
+2021/05/13 | 9443 | macros/luatex/optex/pdfextra/examples/pdfextra-example.tex
+2021/05/13 | 94269 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
+2021/05/13 | 94091 | macros/latex/contrib/changes/examples/changes.example.setdeletedmarkup.pdf
+2021/05/13 | 94058 | macros/latex/contrib/changes/examples/changes.example.setcommentmarkup.pdf
+2021/05/13 | 93929 | macros/latex/contrib/changes/examples/changes.example.sethighlightmarkup.pdf
+2021/05/13 | 93585 | macros/latex/contrib/changes/examples/changes.example.setauthormarkupposition.pdf
+2021/05/13 | 92919 | macros/latex/contrib/changes/examples/changes.example.simple.pdf
+2021/05/13 | 91 | macros/latex/contrib/changes/userdoc/comment_ex.tex
+2021/05/13 | 89121 | macros/latex/contrib/changes/examples/changes.example.listofchanges.show.pdf
+2021/05/13 | 88820 | macros/latex/contrib/changes/examples/changes.example.listofchanges.all.pdf
+2021/05/13 | 88402 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.uuline.pdf
+2021/05/13 | 88388 | macros/latex/contrib/changes/examples/changes.example.listofchanges.title.pdf
+2021/05/13 | 8774 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
+2021/05/13 | 87703 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2021/05/13 | 87637 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
+2021/05/13 | 868 | macros/luatex/optex/pdfextra/README.md
+2021/05/13 | 86749 | macros/latex/contrib/changes/examples/changes.example.listofchanges.compactsummary.pdf
+2021/05/13 | 86058 | macros/latex/contrib/changes/examples/changes.example.markup.bfit.pdf
+2021/05/13 | 85486 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.bf.pdf
+2021/05/13 | 85414 | macros/latex/contrib/changes/examples/changes.example.setauthormarkup.pdf
+2021/05/13 | 85371 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.uuline.pdf
+2021/05/13 | 85110 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.sl.pdf
+2021/05/13 | 850 | systems/win32/miktex/tm/packages/pr.ini
+2021/05/13 | 84993 | macros/latex/contrib/changes/examples/changes.example.listofchanges.wrong.pdf
+2021/05/13 | 84993 | macros/latex/contrib/changes/examples/changes.example.listofchanges.list.pdf
+2021/05/13 | 84982 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.bf.pdf
+2021/05/13 | 84812 | macros/latex/contrib/changes/examples/changes.example.markup.underlined.pdf
+2021/05/13 | 84774 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
+2021/05/13 | 84759 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.uwave.pdf
+2021/05/13 | 84735 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.sl.pdf
+2021/05/13 | 84681 | macros/latex/contrib/changes/examples/changes.example.markup.nocolor.pdf
+2021/05/13 | 845060 | systems/texlive/tlnet/archive/unravel.doc.r59175.tar.xz
+2021/05/13 | 84357 | macros/latex/contrib/changes/examples/changes.example.highlightmarkup.uwave.pdf
+2021/05/13 | 84182 | macros/latex/contrib/changes/examples/changes.example.packageoptions.xcolor.pdf
+2021/05/13 | 84052 | systems/texlive/tlnet/archive/codehigh.doc.r59173.tar.xz
+2021/05/13 | 83 | macros/latex/contrib/changes/userdoc/setauthormarkup_ex.tex
+2021/05/13 | 83877 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.uwave.pdf
+2021/05/13 | 83846 | macros/latex/contrib/changes/examples/changes.example.authormarkuptext.name.pdf
+2021/05/13 | 83749 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.it.pdf
+2021/05/13 | 83749 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.em.pdf
+2021/05/13 | 83517 | macros/latex/contrib/changes/examples/changes.example.packageoptions.truncate.pdf
+2021/05/13 | 82 | macros/latex/contrib/changes/userdoc/usepackage_ulem_changes_ex.tex
+2021/05/13 | 82970 | macros/latex/contrib/changes/examples/changes.example.highlightmarkup.uuline.pdf
+2021/05/13 | 82935 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.dashuline.pdf
+2021/05/13 | 82891 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.it.pdf
+2021/05/13 | 82891 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.em.pdf
+2021/05/13 | 82746 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.uline.pdf
+2021/05/13 | 82590 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.dashuline.pdf
+2021/05/13 | 82553 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.dotuline.pdf
+2021/05/13 | 82299 | macros/latex/contrib/changes/examples/changes.example.defaultcolor.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.setsocextension.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.markup.wrong.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.markup.default.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.highlightmarkup.background.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.draft.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.wrong.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.sout.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.commentmarkup.todo.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.commandnameprefix.wrong.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.commandnameprefix.none.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.commandnameprefix.ifneeded.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.commandnameprefix.always.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.authormarkup.wrong.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.authormarkuptext.wrong.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.authormarkuptext.id.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.authormarkup.superscript.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.authormarkupposition.wrong.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.authormarkupposition.right.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.authormarkupposition.left.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.wrong.pdf
+2021/05/13 | 82295 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.colored.pdf
+2021/05/13 | 82294 | macros/latex/contrib/changes/examples/changes.example.authormarkup.subscript.pdf
+2021/05/13 | 82291 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.uline.pdf
+2021/05/13 | 81965 | macros/latex/contrib/changes/examples/changes.example.commentmarkup.uwave.pdf
+2021/05/13 | 81687 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.dotuline.pdf
+2021/05/13 | 816073 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2021/05/13 | 81521 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.xout.pdf
+2021/05/13 | 81125 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.colored.pdf
+2021/05/13 | 80660 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2021/05/13 | 79 | macros/latex/contrib/changes/userdoc/usepackage_xcolor_changes_ex.tex
+2021/05/13 | 7905248 | macros/latex/contrib/changes.zip
+2021/05/13 | 78953 | macros/latex/contrib/changes/examples/changes.example.commentmarkup.margin.pdf
+2021/05/13 | 78746 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
+2021/05/13 | 77859 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
+2021/05/13 | 77487 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
+2021/05/13 | 7747 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
+2021/05/13 | 75419 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
+2021/05/13 | 75270 | macros/latex/contrib/changes/examples/changes.example.packageoptions.ulem.pdf
+2021/05/13 | 748364 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
+2021/05/13 | 74370 | macros/latex/contrib/changes/examples/changes.example.authormarkup.brackets.pdf
+2021/05/13 | 74164 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2021/05/13 | 73913 | macros/latex/contrib/changes/examples/changes.example.authormarkup.none.pdf
+2021/05/13 | 73181 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
+2021/05/13 | 72860 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
+2021/05/13 | 72152 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2021/05/13 | 71570 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
+2021/05/13 | 70325 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
+2021/05/13 | 70110 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
+2021/05/13 | 692076 | macros/luatex/optex/pdfextra.zip
+2021/05/13 | 68210 | macros/luatex/optex/pdfextra/pdfextra.opm
+2021/05/13 | 68141 | macros/latex/contrib/changes/examples/changes.example.final.pdf
+2021/05/13 | 6810826 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2021/05/13 | 680052 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
+2021/05/13 | 67938 | macros/musixtex/doc/musixdoc/extensions.tex
+2021/05/13 | 67930 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
+2021/05/13 | 67679 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
+2021/05/13 | 67650 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
+2021/05/13 | 6749 | macros/latex/contrib/huawei/huawei.tex
+2021/05/13 | 67451 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
+2021/05/13 | 66 | macros/latex/contrib/changes/userdoc/usepackage_authormarkupposition_changes_in.tex
+2021/05/13 | 662 | macros/luatex/optex/pdfextra/LICENSE
+2021/05/13 | 65732 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
+2021/05/13 | 65322 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2021/05/13 | 6506 | usergrps/usergrps/index.html
+2021/05/13 | 64018 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
+2021/05/13 | 63 | macros/latex/contrib/changes/userdoc/setauthormarkupposition_ex.tex
+2021/05/13 | 63836 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
+2021/05/13 | 63674 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
+2021/05/13 | 6344 | systems/texlive/tlnet/archive/collection-latexextra.r59173.tar.xz
+2021/05/13 | 62 | macros/latex/contrib/changes/userdoc/replaced_in.tex
+2021/05/13 | 62802 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2021/05/13 | 625282 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
+2021/05/13 | 62225 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2021/05/13 | 618767 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
+2021/05/13 | 60552 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
+2021/05/13 | 59831 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
+2021/05/13 | 5963 | macros/musixtex/tex/musixvbm.tex
+2021/05/13 | 594868 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2021/05/13 | 59145 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2021/05/13 | 58 | macros/latex/contrib/changes/userdoc/usepackage_authormarkuptext_changes_in.tex
+2021/05/13 | 58 | macros/latex/contrib/changes/userdoc/listofchanges_in.tex
+2021/05/13 | 58808 | macros/latex/contrib/changes/changes.dtx
+2021/05/13 | 58592 | macros/luatex/optex/pdfextra/examples/pdfextra-example-part.prc
+2021/05/13 | 583628 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
+2021/05/13 | 57600 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
+2021/05/13 | 574966 | systems/win32/miktex/tm/packages/next/files.csv.lzma
+2021/05/13 | 574020 | systems/win32/miktex/tm/packages/files.csv.lzma
+2021/05/13 | 57066 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
+2021/05/13 | 56 | macros/latex/contrib/changes/userdoc/usepackage_highlightmarkup_changes_in.tex
+2021/05/13 | 56 | macros/latex/contrib/changes/userdoc/setlocextension_ex.tex
+2021/05/13 | 56 | macros/latex/contrib/changes/userdoc/setdeletedmarkup_ex.tex
+2021/05/13 | 56908 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
+2021/05/13 | 567628 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
+2021/05/13 | 56717 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
+2021/05/13 | 56457 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
+2021/05/13 | 56222 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
+2021/05/13 | 55 | macros/latex/contrib/changes/userdoc/settruncatewidth_ex.tex
+2021/05/13 | 55 | macros/latex/contrib/changes/userdoc/definechangesauthor_in.tex
+2021/05/13 | 55823 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
+2021/05/13 | 55563 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma
+2021/05/13 | 55219 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
+2021/05/13 | 5450 | macros/musixtex/doc/musixdoc/frontmatter.tex
+2021/05/13 | 53 | macros/latex/contrib/changes/userdoc/setsummarywidth_ex.tex
+2021/05/13 | 53380 | systems/texlive/tlnet/archive/unravel.source.r59175.tar.xz
+2021/05/13 | 532041 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
+2021/05/13 | 52 | macros/latex/contrib/changes/userdoc/usepackage_deletedmarkup_changes_in.tex
+2021/05/13 | 52 | macros/latex/contrib/changes/userdoc/usepackage_commentmarkup_changes_in.tex
+2021/05/13 | 52 | macros/latex/contrib/changes/userdoc/setauthormarkuptext_ex.tex
+2021/05/13 | 52 | macros/latex/contrib/changes/userdoc/setaddedmarkup_ex.tex
+2021/05/13 | 5268 | systems/texlive/tlnet/archive/marathi.r59172.tar.xz
+2021/05/13 | 5264 | macros/latex/contrib/changes/regression.dtx
+2021/05/13 | 52475 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
+2021/05/13 | 52455 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
+2021/05/13 | 52252 | macros/latex/contrib/bnumexpr/bnumexpr.dtx
+2021/05/13 | 51 | macros/latex/contrib/changes/userdoc/usepackage_draft_changes_in.tex
+2021/05/13 | 51 | macros/latex/contrib/changes/userdoc/usepackage_commandnameprefix_changes_in.tex
+2021/05/13 | 51980 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
+2021/05/13 | 51798 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
+2021/05/13 | 51433 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
+2021/05/13 | 5128 | systems/texlive/tlnet/archive/codehigh.r59173.tar.xz
+2021/05/13 | 511635 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
+2021/05/13 | 51160 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
+2021/05/13 | 50 | macros/latex/contrib/changes/userdoc/usepackage_authormarkup_changes_in.tex
+2021/05/13 | 50847 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
+2021/05/13 | 5030 | macros/latex/contrib/changes/example-screenshot.dtx
+2021/05/13 | 49 | macros/latex/contrib/changes/userdoc/setauthormarkupposition_in.tex
+2021/05/13 | 49 | macros/latex/contrib/changes/userdoc/deleted_in.tex
+2021/05/13 | 49971 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
+2021/05/13 | 4932 | macros/latex/contrib/changes/changes.drv
+2021/05/13 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2021/05/13 | 48 | macros/latex/contrib/changes/userdoc/usepackage_todonotes_changes_ex.tex
+2021/05/13 | 48 | macros/latex/contrib/changes/userdoc/usepackage_addedmarkup_changes_in.tex
+2021/05/13 | 48 | macros/latex/contrib/changes/userdoc/setsocextension_ex.tex
+2021/05/13 | 484056 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
+2021/05/13 | 4828 | macros/musixtex/doc/musixdoc/musixdoc.sty
+2021/05/13 | 47 | macros/latex/contrib/changes/userdoc/highlight_in.tex
+2021/05/13 | 47 | macros/latex/contrib/changes/userdoc/added_in.tex
+2021/05/13 | 47878 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
+2021/05/13 | 475935 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
+2021/05/13 | 4709 | systems/win32/miktex/tm/packages/next/miktex-config-2.9.tar.lzma
+2021/05/13 | 47008 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
+2021/05/13 | 461400 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
+2021/05/13 | 45937 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
+2021/05/13 | 45650 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
+2021/05/13 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2021/05/13 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2021/05/13 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2021/05/13 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2021/05/13 | 452979 | macros/latex/contrib/changes/changes.english.withcode.pdf
+2021/05/13 | 45278 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
+2021/05/13 | 43 | macros/latex/contrib/changes/userdoc/usepackage_defaultcolor_changes_in.tex
+2021/05/13 | 43679 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
+2021/05/13 | 43391 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2021/05/13 | 43059 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
+2021/05/13 | 42 | macros/latex/contrib/changes/userdoc/usepackage_todonotes_changes_in.tex
+2021/05/13 | 42925 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
+2021/05/13 | 42627 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
+2021/05/13 | 42574 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
+2021/05/13 | 42389 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
+2021/05/13 | 42081 | macros/latex/contrib/changes/userdoc/changes.de.tex
+2021/05/13 | 41 | macros/latex/contrib/changes/userdoc/usepackage_truncate_changes_in.tex
+2021/05/13 | 41 | macros/latex/contrib/changes/userdoc/usepackage_truncate_changes_ex.tex
+2021/05/13 | 41 | macros/latex/contrib/changes/userdoc/setauthormarkuptext_in.tex
+2021/05/13 | 41103 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
+2021/05/13 | 40624 | biblio/bibtex/contrib/vancouver/vancouver.bst
+2021/05/13 | 39 | macros/latex/contrib/changes/userdoc/usepackage_xcolor_changes_in.tex
+2021/05/13 | 396960 | systems/texlive/tlnet/archive/texlive-scripts.doc.r59168.tar.xz
+2021/05/13 | 39692 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
+2021/05/13 | 39564 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
+2021/05/13 | 392596 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
+2021/05/13 | 38 | macros/latex/contrib/changes/userdoc/usepackage_markup_changes_in.tex
+2021/05/13 | 38 | macros/latex/contrib/changes/userdoc/path_doc_examples_in.tex
+2021/05/13 | 385845 | macros/luatex/optex/pdfextra/examples/pdfextra-example.pdf
+2021/05/13 | 38432 | macros/latex/contrib/changes/userdoc/changes.en.tex
+2021/05/13 | 38070 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
+2021/05/13 | 38066 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
+2021/05/13 | 37 | macros/latex/contrib/changes/userdoc/usepackage_ulem_changes_in.tex
+2021/05/13 | 379316 | macros/latex/contrib/tabularray/tabularray.pdf
+2021/05/13 | 37637 | usergrps/usergrps/lugs.html
+2021/05/13 | 376315 | macros/latex/contrib/changes/changes.ngerman.pdf
+2021/05/13 | 37294 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
+2021/05/13 | 37244 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
+2021/05/13 | 372353 | macros/latex/contrib/huawei.zip
+2021/05/13 | 368904 | macros/latex/contrib/changes/changes.english.pdf
+2021/05/13 | 367564 | systems/texlive/tlnet/archive/els-cas-templates.doc.r59170.tar.xz
+2021/05/13 | 36680 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
+2021/05/13 | 362961 | macros/latex/contrib/huawei/huawei.pdf
+2021/05/13 | 35462 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
+2021/05/13 | 351179 | macros/latex/contrib/tabularray.zip
+2021/05/13 | 35064 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
+2021/05/13 | 34 | macros/latex/contrib/changes/userdoc/sethighlightmarkup_in.tex
+2021/05/13 | 34635 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2021/05/13 | 345368 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
+2021/05/13 | 33440 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
+2021/05/13 | 33152 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2021/05/13 | 330235 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
+2021/05/13 | 32 | macros/latex/contrib/changes/userdoc/usepackage_options_changes_in.tex
+2021/05/13 | 32 | macros/latex/contrib/changes/userdoc/setdeletedmarkup_in.tex
+2021/05/13 | 32 | macros/latex/contrib/changes/userdoc/setcommentmarkup_in.tex
+2021/05/13 | 32746 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
+2021/05/13 | 321894 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
+2021/05/13 | 31 | macros/latex/contrib/changes/userdoc/setauthormarkup_in.tex
+2021/05/13 | 31593 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
+2021/05/13 | 31543 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
+2021/05/13 | 31345 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
+2021/05/13 | 31192 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
+2021/05/13 | 311191 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
+2021/05/13 | 30 | macros/latex/contrib/changes/userdoc/setsocextension_in.tex
+2021/05/13 | 30 | macros/latex/contrib/changes/userdoc/setlocextension_in.tex
+2021/05/13 | 30 | macros/latex/contrib/changes/userdoc/setaddedmarkup_in.tex
+2021/05/13 | 30885 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2021/05/13 | 307908 | systems/texlive/tlnet/archive/easybook.doc.r59174.tar.xz
+2021/05/13 | 3067 | macros/musixtex/README
+2021/05/13 | 30555 | macros/luatex/optex/pdfextra/pdfextra-doc.tex
+2021/05/13 | 3037 | macros/latex/contrib/bnumexpr/README.md
+2021/05/13 | 30037 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2021/05/13 | 29 | macros/latex/contrib/changes/userdoc/comment_in.tex
+2021/05/13 | 29924 | systems/texlive/tlnet/archive/unravel.r59175.tar.xz
+2021/05/13 | 29868 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
+2021/05/13 | 295555 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
+2021/05/13 | 29248 | systems/texlive/tlnet/archive/easybook.source.r59174.tar.xz
+2021/05/13 | 29055 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
+2021/05/13 | 28 | macros/latex/contrib/changes/userdoc/usepackage_final_changes_in.tex
+2021/05/13 | 283978 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
+2021/05/13 | 282107 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
+2021/05/13 | 28119 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
+2021/05/13 | 28009 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
+2021/05/13 | 27 | macros/latex/contrib/changes/userdoc/settruncatewidth_in.tex
+2021/05/13 | 27 | macros/latex/contrib/changes/userdoc/setsummarytowidth_in.tex
+2021/05/13 | 27 | macros/latex/contrib/changes/userdoc/path_script_in.tex
+2021/05/13 | 27363 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
+2021/05/13 | 27274 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
+2021/05/13 | 27197 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
+2021/05/13 | 27183 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
+2021/05/13 | 26 | macros/latex/contrib/changes/userdoc/setsummarywidth_in.tex
+2021/05/13 | 261962 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
+2021/05/13 | 2616932 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
+2021/05/13 | 25 | macros/latex/contrib/changes/userdoc/script_pymergechanges_empty.tex
+2021/05/13 | 258666 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
+2021/05/13 | 25582711 | systems/texlive/tlnet/install-tl.zip
+2021/05/13 | 254 | macros/latex/contrib/changes/userdoc/listofchanges_ex.tex
+2021/05/13 | 2539560 | systems/texlive/tlnet/archive/worldflags.doc.r59171.tar.xz
+2021/05/13 | 25342 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
+2021/05/13 | 25155 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
+2021/05/13 | 250210 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
+2021/05/13 | 25002 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
+2021/05/13 | 2499402 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
+2021/05/13 | 2440587 | install/macros/musixtex.tds.zip
+2021/05/13 | 243480 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
+2021/05/13 | 2424633 | macros/musixtex.zip
+2021/05/13 | 239479 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
+2021/05/13 | 23882 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2021/05/13 | 23292 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
+2021/05/13 | 2301360 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2021/05/13 | 230095 | macros/luatex/optex/pdfextra/pdfextra-doc.pdf
+2021/05/13 | 229 | macros/latex/contrib/changes/userdoc/script_pymergechanges.tex
+2021/05/13 | 22962 | macros/musixtex/doc/musixdoc/beams.tex
+2021/05/13 | 224 | macros/latex/contrib/changes/userdoc/replaced_ex.tex
+2021/05/13 | 223 | macros/latex/contrib/changes/userdoc/highlight_ex.tex
+2021/05/13 | 22039 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
+2021/05/13 | 21 | macros/latex/contrib/changes/userdoc/usepackage_changes_in.tex
+2021/05/13 | 21526 | macros/latex/contrib/tabularray/tabularray.tex
+2021/05/13 | 214105 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2021/05/13 | 21152 | systems/texlive/tlnet/archive/els-cas-templates.r59170.tar.xz
+2021/05/13 | 21130 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
+2021/05/13 | 211055 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
+2021/05/13 | 209371 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2021/05/13 | 209301 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
+2021/05/13 | 208182 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
+2021/05/13 | 20808508 | systems/texlive/tlnet/install-tl-windows.exe
+2021/05/13 | 202557 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
+2021/05/13 | 20121 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
+2021/05/13 | 2009490 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
+2021/05/13 | 199701 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
+2021/05/13 | 198131 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
+2021/05/13 | 1978 | macros/musixtex/doc/musixdoc/musixdoc.ltx
+2021/05/13 | 196 | macros/latex/contrib/changes/userdoc/setcommentmarkup_ex.tex
+2021/05/13 | 1959 | biblio/bibtex/contrib/vancouver/README
+2021/05/13 | 195666 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2021/05/13 | 195565 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
+2021/05/13 | 193717 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
+2021/05/13 | 19106 | biblio/bibtex/contrib/vancouver/LICENSE
+2021/05/13 | 190 | macros/musixtex/doc/ChangeLog-132.txt
+2021/05/13 | 189067 | macros/musixtex/tex/musixtex.tex
+2021/05/13 | 182 | macros/latex/contrib/changes/userdoc/added_ex.tex
+2021/05/13 | 18097 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
+2021/05/13 | 180049 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
+2021/05/13 | 17958 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2021/05/13 | 179380 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
+2021/05/13 | 177 | macros/latex/contrib/changes/userdoc/deleted_ex.tex
+2021/05/13 | 17760 | systems/texlive/tlnet/archive/marathi.source.r59172.tar.xz
+2021/05/13 | 174 | macros/latex/contrib/changes/userdoc/definechangesauthor_ex.tex
+2021/05/13 | 1725547 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
+2021/05/13 | 17225173 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2021/05/13 | 171 | macros/latex/contrib/changes/userdoc/usepackage_markup_changes_ex.tex
+2021/05/13 | 167906 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2021/05/13 | 16628 | macros/latex/contrib/changes/examples.dtx
+2021/05/13 | 164 | macros/latex/contrib/changes/userdoc/usepackage_commandnameprefix_changes_ex.tex
+2021/05/13 | 16393 | macros/latex/contrib/huawei/huawei.cls
+2021/05/13 | 163655 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
+2021/05/13 | 16327 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
+2021/05/13 | 16114 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
+2021/05/13 | 159968 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
+2021/05/13 | 15649 | biblio/bibtex/contrib/vancouver/vancouver.bib
+2021/05/13 | 154 | macros/latex/contrib/changes/userdoc/usepackage_authormarkup_changes_ex.tex
+2021/05/13 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2021/05/13 | 153891 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
+2021/05/13 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2021/05/13 | 152763 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
+2021/05/13 | 151 | macros/latex/contrib/changes/userdoc/usepackage_commentmarkup_changes_ex.tex
+2021/05/13 | 1517 | biblio/bibtex/contrib/vancouver/FAQ
+2021/05/13 | 150336 | systems/texlive/tlnet/archive/marathi.doc.r59172.tar.xz
+2021/05/13 | 149732 | biblio/bibtex/contrib/vancouver.zip
+2021/05/13 | 1497060 | systems/texlive/tlnet/archive/worldflags.r59171.tar.xz
+2021/05/13 | 147 | macros/latex/contrib/changes/userdoc/usepackage_deletedmarkup_changes_ex.tex
+2021/05/13 | 147151 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
+2021/05/13 | 147140 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
+2021/05/13 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2021/05/13 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2021/05/13 | 14354 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
+2021/05/13 | 143191 | macros/latex/contrib/changes/examples/changes.example.screenshot.pdf
+2021/05/13 | 142 | macros/latex/contrib/changes/userdoc/usepackage_addedmarkup_changes_ex.tex
+2021/05/13 | 1425981 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2021/05/13 | 1424811 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
+2021/05/13 | 14056 | biblio/bibtex/contrib/vancouver/vancouver.tex
+2021/05/13 | 1396006 | macros/musixtex/doc/musixdoc.pdf
+2021/05/13 | 136426 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
+2021/05/13 | 135004 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
+2021/05/13 | 134990 | macros/latex/contrib/tabularray/tabularray.sty
+2021/05/13 | 13470 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
+2021/05/13 | 13360 | systems/texlive/tlnet/archive/easybook.r59174.tar.xz
+2021/05/13 | 1326 | macros/latex/contrib/changes/README
+2021/05/13 | 131489 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
+2021/05/13 | 1307724 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2021/05/13 | 1295414 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
+2021/05/13 | 1281106 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
+2021/05/13 | 1270198 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
+2021/05/13 | 1269260 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2021/05/13 | 124972 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
+2021/05/13 | 121265 | biblio/bibtex/contrib/vancouver/vancouver.pdf
+2021/05/13 | 120 | macros/latex/contrib/changes/userdoc/usepackage_authormarkupposition_changes_ex.tex
+2021/05/13 | 1208 | macros/latex/contrib/huawei/README.md
+2021/05/13 | 1186595 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2021/05/13 | 1185935 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
+2021/05/13 | 117 | macros/latex/contrib/changes/userdoc/usepackage_highlightmarkup_changes_ex.tex
+2021/05/13 | 1171730 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
+2021/05/13 | 116931 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
+2021/05/13 | 115469 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2021/05/13 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
+2021/05/13 | 112252 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
+2021/05/13 | 111908 | macros/latex/contrib/bnumexpr.zip
+2021/05/13 | 110514 | macros/latex/contrib/changes/examples/changes.example.commentmarkup.footnote.pdf
+2021/05/13 | 11043 | macros/latex/contrib/changes/pyMergeChanges.py
+2021/05/13 | 109 | macros/latex/contrib/changes/userdoc/usepackage_authormarkuptext_changes_ex.tex
+2021/05/13 | 109276 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2021/05/13 | 107980 | systems/texlive/tlnet/archive/texlive-scripts.r59168.tar.xz
+2021/05/13 | 1078876 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2021/05/13 | 106 | macros/latex/contrib/changes/userdoc/usepackage_defaultcolor_changes_ex.tex
+2021/05/13 | 10639 | usergrps/usergrps/de.html
+2021/05/13 | 10594 | usergrps/usergrps/pl.html
+2021/05/13 | 10589 | usergrps/usergrps/hu.html
+2021/05/13 | 10522 | usergrps/usergrps/cz.html
+2021/05/13 | 104 | macros/latex/contrib/changes/userdoc/setsummarytowidth_ex.tex
+2021/05/13 | 104625 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
+2021/05/13 | 10449 | usergrps/usergrps/fr.html
+2021/05/13 | 10429 | usergrps/usergrps/kr.html
+2021/05/13 | 104166 | macros/latex/contrib/changes/examples/changes.example.packageoptions.todonotes.pdf
+2021/05/13 | 10406 | usergrps/usergrps/bg.html
+2021/05/13 | 10405 | usergrps/usergrps/nl.html
+2021/05/13 | 10368 | usergrps/usergrps/cn.html
+2021/05/13 | 103323 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
+2021/05/13 | 10312 | usergrps/usergrps/it.html
+2021/05/13 | 10309 | usergrps/usergrps/es.html
+2021/05/13 | 10292 | usergrps/usergrps/gb.html
+2021/05/13 | 10200 | usergrps/usergrps/us.html
+2021/05/13 | 10185 | usergrps/usergrps/gr.html
+2021/05/13 | 101764 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
+2021/05/13 | 10164 | usergrps/usergrps/esc.html
+2021/05/13 | 10160 | usergrps/usergrps/dk.html
+2021/05/13 | 10158 | usergrps/usergrps/pt.html
+2021/05/13 | 10140 | usergrps/usergrps/vn.html
+2021/05/13 | 10130 | usergrps/usergrps/no.html
+2021/05/13 | 10119 | macros/latex/contrib/changes/changes.ins
+2021/05/13 | 10103 | usergrps/usergrps/br.html
+2021/05/13 | 10089 | usergrps/usergrps/ca.html
+2021/05/13 | 10085 | usergrps/usergrps/ie.html
+2021/05/13 | 10079 | usergrps/usergrps/za.html
+2021/05/13 | 10069 | usergrps/usergrps/uy.html
+2021/05/13 | 10060 | usergrps/usergrps/is.html
+2021/05/13 | 10029 | usergrps/usergrps/kh.html
+2021/05/13 | 10019 | usergrps/usergrps/mx.html
2021/05/12 | 999978 | macros/latex/contrib/acrotex/doc/eformman.pdf
-2021/05/12 | 99605 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
2021/05/12 | 9854 | macros/latex/contrib/acrotex/taborder.dtx
-2021/05/12 | 98519 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
-2021/05/12 | 97490 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
-2021/05/12 | 97133 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
-2021/05/12 | 968697 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
-2021/05/12 | 96146 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
-2021/05/12 | 94801 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
-2021/05/12 | 94738 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
2021/05/12 | 9452 | macros/latex/contrib/acrotex/doc/acrobat-in-workflow.tex
-2021/05/12 | 94268 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
2021/05/12 | 91316 | macros/latex/contrib/codehigh.zip
2021/05/12 | 908355 | macros/latex/contrib/unravel.zip
-2021/05/12 | 88616 | macros/latex/contrib/bnumexpr/bnumexpr.pdf
2021/05/12 | 880287 | macros/latex/contrib/unravel/unravel.pdf
-2021/05/12 | 8774 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
-2021/05/12 | 87703 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
-2021/05/12 | 87638 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
-2021/05/12 | 850 | systems/win32/miktex/tm/packages/pr.ini
-2021/05/12 | 84774 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
+2021/05/12 | 8622456 | systems/win32/w32tex/uptex-w32.tar.xz
2021/05/12 | 844178 | macros/latex/contrib/els-cas-templates.zip
-2021/05/12 | 816073 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
-2021/05/12 | 80661 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
-2021/05/12 | 78746 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
-2021/05/12 | 77859 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
-2021/05/12 | 77486 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
-2021/05/12 | 7746 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
-2021/05/12 | 75419 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
-2021/05/12 | 748363 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
-2021/05/12 | 74163 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
-2021/05/12 | 73181 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
-2021/05/12 | 72861 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
-2021/05/12 | 72150 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
-2021/05/12 | 71569 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
+2021/05/12 | 831401 | systems/win32/w32tex/ChangeLog
2021/05/12 | 7067733 | macros/latex/contrib/hvfloat/doc/hvfloat.pdf
-2021/05/12 | 70324 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
-2021/05/12 | 70109 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
2021/05/12 | 69171 | language/marathi/marathi.dtx
-2021/05/12 | 6810974 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2021/05/12 | 680049 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
-2021/05/12 | 67930 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
-2021/05/12 | 67679 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
-2021/05/12 | 67650 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
-2021/05/12 | 67451 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
+2021/05/12 | 6807 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+2021/05/12 | 6776656 | systems/win32/w32tex/ptex-ng-w32.tar.xz
2021/05/12 | 673 | macros/latex/contrib/easybook/easybook.ins
-2021/05/12 | 65732 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
-2021/05/12 | 6568 | usergrps/usergrps/index.html
-2021/05/12 | 65322 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
-2021/05/12 | 64016 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
-2021/05/12 | 63835 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
-2021/05/12 | 63673 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
2021/05/12 | 634 | graphics/pgf/contrib/worldflags/README
-2021/05/12 | 62801 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
-2021/05/12 | 625280 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
-2021/05/12 | 62226 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
-2021/05/12 | 618763 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
-2021/05/12 | 60552 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
-2021/05/12 | 59830 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
2021/05/12 | 595755 | macros/latex/contrib/acrotex/exerquiz.dtx
-2021/05/12 | 594870 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
-2021/05/12 | 59146 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
2021/05/12 | 5906 | macros/latex/contrib/acrotex/README.md
-2021/05/12 | 583627 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
2021/05/12 | 5770 | macros/latex/contrib/codehigh/codehigh.tex
-2021/05/12 | 57598 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
-2021/05/12 | 574966 | systems/win32/miktex/tm/packages/next/files.csv.lzma
-2021/05/12 | 574020 | systems/win32/miktex/tm/packages/files.csv.lzma
2021/05/12 | 570 | macros/latex/contrib/els-cas-templates/doc/makefile
-2021/05/12 | 57067 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
-2021/05/12 | 56908 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
-2021/05/12 | 567628 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
-2021/05/12 | 56716 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
-2021/05/12 | 56457 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
-2021/05/12 | 56223 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
-2021/05/12 | 55822 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
-2021/05/12 | 55563 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma
-2021/05/12 | 55217 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
2021/05/12 | 547 | macros/latex/contrib/acrotex/aeb.js
2021/05/12 | 54495 | macros/latex/contrib/hvfloat/latex/hvfloat.sty
2021/05/12 | 544231 | macros/latex/contrib/acrotex/doc/aeb_man.tex
-2021/05/12 | 532040 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
-2021/05/12 | 52476 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
-2021/05/12 | 52455 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
-2021/05/12 | 51976 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
-2021/05/12 | 51797 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
-2021/05/12 | 51431 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
-2021/05/12 | 511634 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
-2021/05/12 | 51158 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
-2021/05/12 | 50847 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
-2021/05/12 | 49971 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
+2021/05/12 | 52833448 | systems/win32/w32tex/latex-dev.tar.xz
2021/05/12 | 49971 | graphics/pgf/contrib/worldflags/doc/worldflags.tex
-2021/05/12 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
-2021/05/12 | 484055 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
+2021/05/12 | 49478904 | systems/win32/w32tex/xetex-w32.tar.xz
2021/05/12 | 4793907 | graphics/pgf/contrib/worldflags.zip
-2021/05/12 | 47892 | macros/latex/contrib/bnumexpr/bnumexpr.dtx
-2021/05/12 | 47877 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
-2021/05/12 | 475932 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
-2021/05/12 | 4708 | systems/win32/miktex/tm/packages/next/miktex-config-2.9.tar.lzma
-2021/05/12 | 47008 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
-2021/05/12 | 461400 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
-2021/05/12 | 45938 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
-2021/05/12 | 45647 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
-2021/05/12 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2021/05/12 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
-2021/05/12 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2021/05/12 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
-2021/05/12 | 45279 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
-2021/05/12 | 43678 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
2021/05/12 | 433973 | macros/latex/contrib/els-cas-templates/doc/elsdoc-cas.pdf
-2021/05/12 | 43390 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
-2021/05/12 | 43057 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
-2021/05/12 | 42925 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
-2021/05/12 | 42627 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
-2021/05/12 | 42574 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
-2021/05/12 | 42386 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
2021/05/12 | 4186 | macros/latex/contrib/codehigh/codehigh.lua
-2021/05/12 | 41102 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
2021/05/12 | 40902 | macros/latex/contrib/projlib/ProjLib.dtx
-2021/05/12 | 40586 | biblio/bibtex/contrib/vancouver/vancouver.bst
2021/05/12 | 401 | macros/latex/contrib/unravel/unravel.ins
-2021/05/12 | 396960 | systems/texlive/tlnet/archive/texlive-scripts.doc.r59164.tar.xz
-2021/05/12 | 39691 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
-2021/05/12 | 39563 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
2021/05/12 | 3928740 | macros/latex/contrib/acrotex.zip
-2021/05/12 | 392597 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
2021/05/12 | 387972 | macros/latex/contrib/projlib.zip
2021/05/12 | 38593 | macros/luatex/latex/lua-ul/lua-ul.dtx
-2021/05/12 | 38070 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
-2021/05/12 | 38065 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
-2021/05/12 | 37637 | usergrps/usergrps/lugs.html
-2021/05/12 | 37293 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
-2021/05/12 | 37244 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
-2021/05/12 | 36679 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
+2021/05/12 | 3711647 | info/biblio/tugboat.bib
2021/05/12 | 362 | macros/latex/contrib/acrotex/web.cfg
-2021/05/12 | 35462 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
+2021/05/12 | 3573 | info/biblio/tugboat.ltx
+2021/05/12 | 35252076 | systems/win32/w32tex/ltxpkgs.tar.xz
2021/05/12 | 35095 | macros/latex/contrib/hvfloat/doc/examples/doublepage2s1c.tex
-2021/05/12 | 35064 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
-2021/05/12 | 34634 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
-2021/05/12 | 345368 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
-2021/05/12 | 3418 | macros/latex/contrib/bnumexpr/README.md
2021/05/12 | 338972 | macros/latex/contrib/easybook.zip
-2021/05/12 | 33441 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
-2021/05/12 | 33152 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
-2021/05/12 | 330233 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
-2021/05/12 | 32744 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
2021/05/12 | 322061 | macros/latex/contrib/unravel/unravel.dtx
-2021/05/12 | 321894 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
-2021/05/12 | 31594 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
2021/05/12 | 3158 | macros/latex/contrib/projlib/README.md
-2021/05/12 | 31543 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
-2021/05/12 | 31344 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
-2021/05/12 | 31191 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
-2021/05/12 | 311191 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
2021/05/12 | 308 | macros/luatex/latex/lua-ul/README
-2021/05/12 | 30886 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
2021/05/12 | 308571 | macros/latex/contrib/easybook/easybook.pdf
-2021/05/12 | 305016 | systems/texlive/tlnet/archive/easybook.doc.r59166.tar.xz
-2021/05/12 | 30037 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
-2021/05/12 | 29869 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
-2021/05/12 | 295554 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
-2021/05/12 | 29053 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
-2021/05/12 | 28488 | systems/texlive/tlnet/archive/easybook.source.r59166.tar.xz
-2021/05/12 | 283979 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
-2021/05/12 | 282104 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
-2021/05/12 | 28119 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
-2021/05/12 | 28008 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
-2021/05/12 | 27362 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
-2021/05/12 | 27274 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
-2021/05/12 | 27196 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
-2021/05/12 | 27183 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
-2021/05/12 | 261962 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
-2021/05/12 | 2616931 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
-2021/05/12 | 258665 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
2021/05/12 | 2560111 | graphics/pgf/contrib/worldflags/doc/worldflags.pdf
-2021/05/12 | 25582728 | systems/texlive/tlnet/install-tl.zip
-2021/05/12 | 25341 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
-2021/05/12 | 25154 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
-2021/05/12 | 250212 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
-2021/05/12 | 25001 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
-2021/05/12 | 2499400 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
-2021/05/12 | 243479 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
-2021/05/12 | 239476 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
-2021/05/12 | 23882 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
2021/05/12 | 2356868 | macros/latex/contrib/hvfloat/doc/examples/doublepage2s1c.pdf
+2021/05/12 | 23500748 | systems/win32/w32tex/cjkzr.tar.xz
2021/05/12 | 2338 | macros/latex/contrib/acrotex/web.ins
-2021/05/12 | 23290 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
-2021/05/12 | 2303924 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
2021/05/12 | 2254268 | macros/latex/contrib/acrotex/doc/aeb_man.pdf
+2021/05/12 | 22214320 | systems/win32/w32tex/pdftex-w32.tar.xz
2021/05/12 | 221440 | macros/latex/contrib/projlib/ProjLib-doc-cn.pdf
-2021/05/12 | 22039 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
2021/05/12 | 216092 | macros/latex/contrib/els-cas-templates/doc/glyphtounicode.tex
-2021/05/12 | 214103 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
-2021/05/12 | 21130 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
-2021/05/12 | 211053 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
-2021/05/12 | 209342 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
-2021/05/12 | 209283 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
2021/05/12 | 2088 | macros/latex/contrib/hvfloat/Changes
-2021/05/12 | 208181 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
-2021/05/12 | 20809713 | systems/texlive/tlnet/install-tl-windows.exe
2021/05/12 | 20267 | macros/latex/contrib/projlib/ProjLib-doc-en.tex
-2021/05/12 | 202556 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
2021/05/12 | 2012 | macros/latex/contrib/acrotex/dljslib.ins
-2021/05/12 | 20120 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
-2021/05/12 | 2009489 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
-2021/05/12 | 199702 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
-2021/05/12 | 198130 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
2021/05/12 | 197272 | macros/latex/contrib/acrotex/doc/eformman.tex
-2021/05/12 | 1959 | biblio/bibtex/contrib/vancouver/README
-2021/05/12 | 195664 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
-2021/05/12 | 195566 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
-2021/05/12 | 193717 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
-2021/05/12 | 19106 | biblio/bibtex/contrib/vancouver/LICENSE
2021/05/12 | 18990 | macros/latex/contrib/projlib/ProjLib-doc-cn.tex
+2021/05/12 | 18927808 | systems/win32/w32tex/luatex-dev-w32.tar.xz
+2021/05/12 | 18905048 | systems/win32/w32tex/luatex-exp-w32.tar.xz
+2021/05/12 | 18898988 | systems/win32/w32tex/luatex-w32.tar.xz
2021/05/12 | 18508 | macros/latex/contrib/els-cas-templates/doc/elsdoc-cas.tex
2021/05/12 | 1842 | macros/latex/contrib/acrotex/taborder.ins
-2021/05/12 | 18096 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
2021/05/12 | 1808 | macros/latex/contrib/els-cas-templates/README
-2021/05/12 | 180048 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
-2021/05/12 | 17957 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
-2021/05/12 | 179379 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
2021/05/12 | 176866 | language/marathi.zip
-2021/05/12 | 1725545 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
-2021/05/12 | 17221193 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
2021/05/12 | 170 | macros/latex/contrib/hvfloat/doc/images/missing.txt
2021/05/12 | 17013 | graphics/pgf/contrib/worldflags/tex/worldflags.sty
2021/05/12 | 16995 | macros/latex/contrib/codehigh/codehigh.sty
2021/05/12 | 1684 | macros/latex/contrib/els-cas-templates/manifest.txt
-2021/05/12 | 167905 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
-2021/05/12 | 163656 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
-2021/05/12 | 16326 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
2021/05/12 | 16284 | systems/texlive/tlnet/archive/pxjahyper.r59165.tar.xz
2021/05/12 | 1619 | macros/latex/contrib/unravel/README.md
-2021/05/12 | 16114 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
-2021/05/12 | 159968 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
-2021/05/12 | 15576 | biblio/bibtex/contrib/vancouver/vancouver.bib
-2021/05/12 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2021/05/12 | 153890 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
-2021/05/12 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2021/05/12 | 152762 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
-2021/05/12 | 1517 | biblio/bibtex/contrib/vancouver/FAQ
-2021/05/12 | 149134 | biblio/bibtex/contrib/vancouver.zip
-2021/05/12 | 147153 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
-2021/05/12 | 147140 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
-2021/05/12 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2021/05/12 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
2021/05/12 | 1448 | macros/latex/contrib/acrotex/examples/test_install.tex
2021/05/12 | 144643 | macros/latex/contrib/projlib/ProjLib-doc-en.pdf
-2021/05/12 | 14353 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
-2021/05/12 | 1425982 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
-2021/05/12 | 1424811 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
-2021/05/12 | 14056 | biblio/bibtex/contrib/vancouver/vancouver.tex
2021/05/12 | 14013 | macros/latex/contrib/els-cas-templates/doc/rvdtx.sty
2021/05/12 | 139999 | language/marathi/marathi.pdf
2021/05/12 | 13988407 | macros/latex/contrib/hvfloat.zip
2021/05/12 | 1394 | macros/luatex/latex/lua-ul/docstrip-luacode.sty
-2021/05/12 | 136427 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
-2021/05/12 | 135005 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
-2021/05/12 | 13470 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
2021/05/12 | 132308 | systems/texlive/tlnet/archive/pxjahyper.doc.r59165.tar.xz
-2021/05/12 | 131490 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
2021/05/12 | 13105 | macros/latex/contrib/acrotex/doc/install_jsfiles.tex
-2021/05/12 | 1307724 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
2021/05/12 | 13070 | macros/latex/contrib/acrotex/contsolns.dtx
-2021/05/12 | 1295412 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
-2021/05/12 | 12924 | systems/texlive/tlnet/archive/easybook.r59166.tar.xz
-2021/05/12 | 1281103 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
-2021/05/12 | 1270504 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
-2021/05/12 | 1269614 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
-2021/05/12 | 124971 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
2021/05/12 | 120846 | macros/latex/contrib/easybook/easybook.dtx
-2021/05/12 | 120699 | biblio/bibtex/contrib/vancouver/vancouver.pdf
2021/05/12 | 1189 | macros/latex/contrib/acrotex/examples/README.md
-2021/05/12 | 1185859 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
-2021/05/12 | 1185751 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
-2021/05/12 | 1171728 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
-2021/05/12 | 116931 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
2021/05/12 | 115576 | macros/latex/contrib/hvfloat/doc/hvfloat.tex
-2021/05/12 | 115469 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
-2021/05/12 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
2021/05/12 | 1151 | graphics/pgf/contrib/worldflags/tex/worldflag_CA.tex
-2021/05/12 | 112253 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
2021/05/12 | 111596 | macros/luatex/latex/lua-ul.zip
-2021/05/12 | 109272 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
-2021/05/12 | 107992 | systems/texlive/tlnet/archive/texlive-scripts.r59164.tar.xz
-2021/05/12 | 1078878 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
-2021/05/12 | 10701 | usergrps/usergrps/de.html
-2021/05/12 | 10656 | usergrps/usergrps/pl.html
-2021/05/12 | 10651 | usergrps/usergrps/hu.html
-2021/05/12 | 10584 | usergrps/usergrps/cz.html
-2021/05/12 | 10511 | usergrps/usergrps/fr.html
-2021/05/12 | 10491 | usergrps/usergrps/kr.html
-2021/05/12 | 10468 | usergrps/usergrps/bg.html
-2021/05/12 | 10467 | usergrps/usergrps/nl.html
-2021/05/12 | 104624 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
+2021/05/12 | 10700708 | systems/win32/w32tex/ptex-w32.tar.xz
2021/05/12 | 104400 | macros/latex/contrib/codehigh/codehigh.pdf
-2021/05/12 | 10430 | usergrps/usergrps/cn.html
2021/05/12 | 103958 | macros/luatex/latex/lua-ul/lua-ul.pdf
-2021/05/12 | 10374 | usergrps/usergrps/it.html
-2021/05/12 | 10371 | usergrps/usergrps/es.html
-2021/05/12 | 10354 | usergrps/usergrps/gb.html
-2021/05/12 | 103323 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
-2021/05/12 | 102806 | macros/latex/contrib/bnumexpr.zip
-2021/05/12 | 10262 | usergrps/usergrps/us.html
-2021/05/12 | 10247 | usergrps/usergrps/gr.html
-2021/05/12 | 10226 | usergrps/usergrps/esc.html
-2021/05/12 | 10222 | usergrps/usergrps/dk.html
-2021/05/12 | 10220 | usergrps/usergrps/pt.html
-2021/05/12 | 10202 | usergrps/usergrps/vn.html
-2021/05/12 | 10192 | usergrps/usergrps/no.html
-2021/05/12 | 101761 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
-2021/05/12 | 10165 | usergrps/usergrps/br.html
-2021/05/12 | 10151 | usergrps/usergrps/ca.html
-2021/05/12 | 10147 | usergrps/usergrps/ie.html
-2021/05/12 | 10141 | usergrps/usergrps/za.html
-2021/05/12 | 10131 | usergrps/usergrps/uy.html
-2021/05/12 | 10122 | usergrps/usergrps/is.html
-2021/05/12 | 10091 | usergrps/usergrps/kh.html
-2021/05/12 | 10081 | usergrps/usergrps/mx.html
-2021/05/12 | 10031 | usergrps/usergrps/lt.html
-2021/05/12 | 10001 | usergrps/usergrps/ee.html
2021/05/11 | 9999 | macros/latex/contrib/l3kernel/l3news10.tex
2021/05/11 | 993116 | systems/texlive/tlnet/archive/europecv.doc.r59162.tar.xz
2021/05/11 | 9610 | language/marathi/namuna-book.tex
@@ -329,11 +554,9 @@
2021/05/11 | 9216 | macros/latex/contrib/l3kernel/l3unicode.dtx
2021/05/11 | 90051 | macros/latex/contrib/l3kernel/l3seq.dtx
2021/05/11 | 89403 | macros/latex/contrib/l3kernel/l3int.dtx
-2021/05/11 | 8619736 | systems/win32/w32tex/uptex-w32.tar.xz
2021/05/11 | 85364 | macros/latex/contrib/l3kernel/l3coffins.dtx
2021/05/11 | 8481 | macros/latex/contrib/l3kernel/l3news11.tex
2021/05/11 | 84816 | macros/latex/contrib/l3kernel/l3fp-basics.dtx
-2021/05/11 | 830851 | systems/win32/w32tex/ChangeLog
2021/05/11 | 80940 | macros/latex/contrib/l3kernel/l3clist.dtx
2021/05/11 | 7999236 | systems/texlive/tlnet/archive/tlgs.win32.r59157.tar.xz
2021/05/11 | 79798 | macros/latex/contrib/l3kernel/l3names.dtx
@@ -350,7 +573,6 @@
2021/05/11 | 70578 | macros/latex/contrib/l3kernel/l3fp.dtx
2021/05/11 | 69576 | macros/latex/contrib/l3kernel/l3candidates.dtx
2021/05/11 | 6913572 | systems/win32/w32tex/win64/pdftex-w64.tar.xz
-2021/05/11 | 6889 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2021/05/11 | 68545 | macros/latex/contrib/l3kernel/l3text-case.dtx
2021/05/11 | 6780088 | macros/latex/contrib/l3kernel/source3.pdf
2021/05/11 | 6677 | macros/latex/contrib/l3kernel/l3news02.tex
@@ -425,7 +647,6 @@
2021/05/11 | 23070 | macros/latex/contrib/l3kernel/l3fp-logic.dtx
2021/05/11 | 229520 | systems/texlive/tlnet/archive/texlive.infra.r59154.tar.xz
2021/05/11 | 2229 | macros/latex/contrib/l3kernel/source3.tex
-2021/05/11 | 22172916 | systems/win32/w32tex/pdftex-w32.tar.xz
2021/05/11 | 21643 | macros/latex/contrib/l3kernel/l3text-purify.dtx
2021/05/11 | 21168 | macros/latex/contrib/l3kernel/l3luatex.dtx
2021/05/11 | 2115492 | systems/texlive/tlnet/archive/xint.doc.r59161.tar.xz
@@ -437,9 +658,6 @@
2021/05/11 | 2031 | language/marathi/namuna-letter.tex
2021/05/11 | 19644 | macros/latex/contrib/l3kernel/l3fp-convert.dtx
2021/05/11 | 1908 | macros/latex/contrib/l3kernel/interface3.tex
-2021/05/11 | 18931684 | systems/win32/w32tex/luatex-dev-w32.tar.xz
-2021/05/11 | 18894040 | systems/win32/w32tex/luatex-exp-w32.tar.xz
-2021/05/11 | 18887188 | systems/win32/w32tex/luatex-w32.tar.xz
2021/05/11 | 1873116 | systems/win32/w32tex/win64/ptex-w64.tar.xz
2021/05/11 | 186 | macros/latex/contrib/codehigh/README
2021/05/11 | 18579 | macros/latex/contrib/l3kernel/l3fp-round.dtx
@@ -480,7 +698,6 @@
2021/05/11 | 10827 | language/marathi/namuna-report.tex
2021/05/11 | 107921 | macros/latex/contrib/l3kernel/l3expan.dtx
2021/05/11 | 107383 | macros/latex/contrib/l3kernel/l3news09.tex
-2021/05/11 | 10700004 | systems/win32/w32tex/ptex-w32.tar.xz
2021/05/11 | 105522 | macros/latex/contrib/l3kernel/l3fp-parse.dtx
2021/05/11 | 10023678 | systems/texlive/tlnet/update-tlmgr-r59154.sh
2021/05/10 | 98152500 | systems/win32/w32tex/pgfcontrib.tar.xz
@@ -500,7 +717,6 @@
2021/05/10 | 661821 | macros/latex/contrib/europecv/europecv.pdf
2021/05/10 | 6593 | macros/latex/contrib/europecv/templates/europecv_photo.jpg
2021/05/10 | 54458 | macros/latex/contrib/europecv/europecv.tex
-2021/05/10 | 52805236 | systems/win32/w32tex/latex-dev.tar.xz
2021/05/10 | 510 | macros/latex/contrib/europecv/templates/europecv_thesis.bib
2021/05/10 | 5026 | macros/latex/contrib/els-cas-templates/cas-sc-template.tex
2021/05/10 | 5026 | macros/latex/contrib/els-cas-templates/cas-dc-template.tex
@@ -522,7 +738,6 @@
2021/05/10 | 37766 | macros/latex/contrib/europecv/examples/europasslogo.eps
2021/05/10 | 37766 | macros/latex/contrib/europecv/europasslogo.eps
2021/05/10 | 37248 | macros/latex/contrib/europecv/examples/minimal.pdf
-2021/05/10 | 35246464 | systems/win32/w32tex/ltxpkgs.tar.xz
2021/05/10 | 3438 | macros/latex/contrib/europecv/ecvgr.def
2021/05/10 | 3436468 | systems/win32/w32tex/tex4htk-w32.tar.xz
2021/05/10 | 34265 | macros/latex/contrib/europecv/europasslogo.pdf
@@ -595,176 +810,51 @@
2021/05/10 | 1002 | macros/latex/contrib/europecv/examples/bulgarian-utf8.tex
2021/05/10 | 10000 | usergrps/usergrps/labels.pdf
2021/05/09 | 999720 | systems/texlive/tlnet/archive/biblatex-gost.doc.r59135.tar.xz
-2021/05/09 | 99663 | macros/latex/contrib/changes/examples/changes.example.authormarkup.footnote.pdf
-2021/05/09 | 98926 | macros/latex/contrib/changes/examples/changes.example.setsummarytowidth.pdf
-2021/05/09 | 97975 | macros/latex/contrib/changes/examples/changes.example.listofchanges.summary.pdf
-2021/05/09 | 97786 | macros/latex/contrib/changes/examples/changes.example.setsummarywidth.pdf
-2021/05/09 | 96 | macros/latex/contrib/changes/userdoc/sethighlightmarkup_ex.tex
-2021/05/09 | 96371 | macros/latex/contrib/changes/examples/changes.example.settruncatewidth.pdf
-2021/05/09 | 94860 | macros/latex/contrib/changes/examples/changes.example.setaddedmarkup.pdf
-2021/05/09 | 94839 | macros/latex/contrib/changes/examples/changes.example.setauthormarkuptext.pdf
-2021/05/09 | 94091 | macros/latex/contrib/changes/examples/changes.example.setdeletedmarkup.pdf
-2021/05/09 | 94058 | macros/latex/contrib/changes/examples/changes.example.setcommentmarkup.pdf
-2021/05/09 | 93929 | macros/latex/contrib/changes/examples/changes.example.sethighlightmarkup.pdf
2021/05/09 | 938 | graphics/pgf/contrib/circuitikz/doc/circuitikz-context.tex
2021/05/09 | 937253 | graphics/pgf/contrib/circuitikz/tex/circuitikz-1.1.2.sty
2021/05/09 | 9364 | macros/latex/contrib/msu-thesis/samples/MSU-thesis-testfile.tex
-2021/05/09 | 93585 | macros/latex/contrib/changes/examples/changes.example.setauthormarkupposition.pdf
2021/05/09 | 929934 | graphics/pgf/contrib/circuitikz/tex/t-circuitikz-1.1.2.tex
-2021/05/09 | 92919 | macros/latex/contrib/changes/examples/changes.example.simple.pdf
-2021/05/09 | 91 | macros/latex/contrib/changes/userdoc/comment_ex.tex
2021/05/09 | 9109 | graphics/pgf/contrib/circuitikz/tex/pgfcircflow.tex
-2021/05/09 | 89121 | macros/latex/contrib/changes/examples/changes.example.listofchanges.show.pdf
-2021/05/09 | 88820 | macros/latex/contrib/changes/examples/changes.example.listofchanges.all.pdf
-2021/05/09 | 88402 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.uuline.pdf
-2021/05/09 | 88388 | macros/latex/contrib/changes/examples/changes.example.listofchanges.title.pdf
2021/05/09 | 8757 | graphics/pgf/contrib/circuitikz/tex/pgfcirccurrent.tex
-2021/05/09 | 86749 | macros/latex/contrib/changes/examples/changes.example.listofchanges.compactsummary.pdf
-2021/05/09 | 86058 | macros/latex/contrib/changes/examples/changes.example.markup.bfit.pdf
-2021/05/09 | 85486 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.bf.pdf
-2021/05/09 | 85414 | macros/latex/contrib/changes/examples/changes.example.setauthormarkup.pdf
-2021/05/09 | 85371 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.uuline.pdf
-2021/05/09 | 85110 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.sl.pdf
-2021/05/09 | 84993 | macros/latex/contrib/changes/examples/changes.example.listofchanges.wrong.pdf
-2021/05/09 | 84993 | macros/latex/contrib/changes/examples/changes.example.listofchanges.list.pdf
-2021/05/09 | 84982 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.bf.pdf
-2021/05/09 | 84812 | macros/latex/contrib/changes/examples/changes.example.markup.underlined.pdf
-2021/05/09 | 84759 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.uwave.pdf
-2021/05/09 | 84735 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.sl.pdf
-2021/05/09 | 84681 | macros/latex/contrib/changes/examples/changes.example.markup.nocolor.pdf
-2021/05/09 | 84357 | macros/latex/contrib/changes/examples/changes.example.highlightmarkup.uwave.pdf
-2021/05/09 | 84182 | macros/latex/contrib/changes/examples/changes.example.packageoptions.xcolor.pdf
2021/05/09 | 841461 | graphics/pgf/contrib/circuitikz/tex/circuitikz-1.0.sty
-2021/05/09 | 83 | macros/latex/contrib/changes/userdoc/setauthormarkup_ex.tex
-2021/05/09 | 83877 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.uwave.pdf
-2021/05/09 | 83846 | macros/latex/contrib/changes/examples/changes.example.authormarkuptext.name.pdf
-2021/05/09 | 83749 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.it.pdf
-2021/05/09 | 83749 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.em.pdf
-2021/05/09 | 83517 | macros/latex/contrib/changes/examples/changes.example.packageoptions.truncate.pdf
2021/05/09 | 834142 | graphics/pgf/contrib/circuitikz/tex/t-circuitikz-1.0.tex
-2021/05/09 | 82 | macros/latex/contrib/changes/userdoc/usepackage_ulem_changes_ex.tex
-2021/05/09 | 82970 | macros/latex/contrib/changes/examples/changes.example.highlightmarkup.uuline.pdf
-2021/05/09 | 82935 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.dashuline.pdf
-2021/05/09 | 82891 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.it.pdf
-2021/05/09 | 82891 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.em.pdf
-2021/05/09 | 82746 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.uline.pdf
-2021/05/09 | 82590 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.dashuline.pdf
-2021/05/09 | 82553 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.dotuline.pdf
2021/05/09 | 8229 | graphics/pgf/contrib/circuitikz/doc/ctikzmanutils.sty
-2021/05/09 | 82299 | macros/latex/contrib/changes/examples/changes.example.defaultcolor.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.setsocextension.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.markup.wrong.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.markup.default.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.highlightmarkup.background.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.draft.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.wrong.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.sout.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.commentmarkup.todo.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.commandnameprefix.wrong.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.commandnameprefix.none.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.commandnameprefix.ifneeded.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.commandnameprefix.always.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.authormarkup.wrong.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.authormarkuptext.wrong.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.authormarkuptext.id.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.authormarkup.superscript.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.authormarkupposition.wrong.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.authormarkupposition.right.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.authormarkupposition.left.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.wrong.pdf
-2021/05/09 | 82295 | macros/latex/contrib/changes/examples/changes.example.addedmarkup.colored.pdf
-2021/05/09 | 82294 | macros/latex/contrib/changes/examples/changes.example.authormarkup.subscript.pdf
-2021/05/09 | 82291 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.uline.pdf
-2021/05/09 | 81965 | macros/latex/contrib/changes/examples/changes.example.commentmarkup.uwave.pdf
-2021/05/09 | 81687 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.dotuline.pdf
-2021/05/09 | 81521 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.xout.pdf
-2021/05/09 | 81125 | macros/latex/contrib/changes/examples/changes.example.deletedmarkup.colored.pdf
-2021/05/09 | 79 | macros/latex/contrib/changes/userdoc/usepackage_xcolor_changes_ex.tex
-2021/05/09 | 7903723 | macros/latex/contrib/changes.zip
-2021/05/09 | 78953 | macros/latex/contrib/changes/examples/changes.example.commentmarkup.margin.pdf
2021/05/09 | 758990 | graphics/pgf/contrib/circuitikz/tex/circuitikz-0.9.6.sty
2021/05/09 | 75385 | systems/win32/miktex/tm/packages/polexpr.tar.lzma
-2021/05/09 | 75270 | macros/latex/contrib/changes/examples/changes.example.packageoptions.ulem.pdf
2021/05/09 | 751663 | graphics/pgf/contrib/circuitikz/tex/t-circuitikz-0.9.6.tex
-2021/05/09 | 74370 | macros/latex/contrib/changes/examples/changes.example.authormarkup.brackets.pdf
-2021/05/09 | 73913 | macros/latex/contrib/changes/examples/changes.example.authormarkup.none.pdf
2021/05/09 | 726068 | systems/texlive/tlnet/archive/l3build.doc.r59136.tar.xz
2021/05/09 | 690730 | graphics/pgf/contrib/circuitikz/tex/circuitikz-0.9.3.sty
2021/05/09 | 683433 | graphics/pgf/contrib/circuitikz/tex/t-circuitikz-0.9.3.tex
-2021/05/09 | 68141 | macros/latex/contrib/changes/examples/changes.example.final.pdf
-2021/05/09 | 66 | macros/latex/contrib/changes/userdoc/usepackage_authormarkupposition_changes_in.tex
2021/05/09 | 65765323 | systems/win32/miktex/tm/packages/rmannot.tar.lzma
2021/05/09 | 6545 | systems/win32/miktex/tm/packages/xintsession.tar.lzma
2021/05/09 | 646790 | systems/win32/miktex/tm/packages/pm-isomath.tar.lzma
-2021/05/09 | 63 | macros/latex/contrib/changes/userdoc/setauthormarkupposition_ex.tex
2021/05/09 | 63720288 | systems/win32/w32tex/biblatex-biber.tar.xz
2021/05/09 | 6364 | systems/texlive/tlnet/archive/tikz-cd.r59133.tar.xz
-2021/05/09 | 62 | macros/latex/contrib/changes/userdoc/replaced_in.tex
2021/05/09 | 615 | macros/latex/contrib/msu-thesis/samples/MSU-thesis-testfile.bib
-2021/05/09 | 58 | macros/latex/contrib/changes/userdoc/usepackage_authormarkuptext_changes_in.tex
-2021/05/09 | 58 | macros/latex/contrib/changes/userdoc/listofchanges_in.tex
-2021/05/09 | 58707 | macros/latex/contrib/changes/changes.dtx
-2021/05/09 | 56 | macros/latex/contrib/changes/userdoc/usepackage_highlightmarkup_changes_in.tex
-2021/05/09 | 56 | macros/latex/contrib/changes/userdoc/setlocextension_ex.tex
-2021/05/09 | 56 | macros/latex/contrib/changes/userdoc/setdeletedmarkup_ex.tex
-2021/05/09 | 55 | macros/latex/contrib/changes/userdoc/settruncatewidth_ex.tex
-2021/05/09 | 55 | macros/latex/contrib/changes/userdoc/definechangesauthor_in.tex
2021/05/09 | 55385 | macros/latex/contrib/msu-thesis/samples/MSU-thesis-template.pdf
2021/05/09 | 54038 | graphics/pgf/contrib/circuitikz/tex/pgfcircmonopoles.tex
-2021/05/09 | 53 | macros/latex/contrib/changes/userdoc/setsummarywidth_ex.tex
2021/05/09 | 532690 | systems/win32/miktex/tm/packages/pst-circ.tar.lzma
2021/05/09 | 531072 | systems/win32/miktex/tm/packages/windycity.tar.lzma
-2021/05/09 | 52 | macros/latex/contrib/changes/userdoc/usepackage_deletedmarkup_changes_in.tex
-2021/05/09 | 52 | macros/latex/contrib/changes/userdoc/usepackage_commentmarkup_changes_in.tex
-2021/05/09 | 52 | macros/latex/contrib/changes/userdoc/setauthormarkuptext_ex.tex
-2021/05/09 | 52 | macros/latex/contrib/changes/userdoc/setaddedmarkup_ex.tex
2021/05/09 | 529448 | systems/texlive/tlnet/archive/pgfplots.r59132.tar.xz
-2021/05/09 | 51 | macros/latex/contrib/changes/userdoc/usepackage_draft_changes_in.tex
-2021/05/09 | 51 | macros/latex/contrib/changes/userdoc/usepackage_commandnameprefix_changes_in.tex
2021/05/09 | 5186 | dviware/dviout/README.txt
-2021/05/09 | 50 | macros/latex/contrib/changes/userdoc/usepackage_authormarkup_changes_in.tex
2021/05/09 | 5039 | macros/latex/contrib/msu-thesis/samples/MSU-thesis-template.tex
-2021/05/09 | 5030 | macros/latex/contrib/changes/example-screenshot.dtx
-2021/05/09 | 49 | macros/latex/contrib/changes/userdoc/setauthormarkupposition_in.tex
-2021/05/09 | 49 | macros/latex/contrib/changes/userdoc/deleted_in.tex
2021/05/09 | 497453 | macros/latex/contrib/msu-thesis.zip
-2021/05/09 | 4932 | macros/latex/contrib/changes/changes.drv
-2021/05/09 | 48 | macros/latex/contrib/changes/userdoc/usepackage_todonotes_changes_ex.tex
-2021/05/09 | 48 | macros/latex/contrib/changes/userdoc/usepackage_addedmarkup_changes_in.tex
-2021/05/09 | 48 | macros/latex/contrib/changes/userdoc/setsocextension_ex.tex
-2021/05/09 | 47 | macros/latex/contrib/changes/userdoc/highlight_in.tex
-2021/05/09 | 47 | macros/latex/contrib/changes/userdoc/added_in.tex
2021/05/09 | 455058 | systems/win32/miktex/tm/packages/tipauni.tar.lzma
-2021/05/09 | 453200 | macros/latex/contrib/changes/changes.english.withcode.pdf
2021/05/09 | 4423 | macros/latex/contrib/acrotex/acrotex.ins
-2021/05/09 | 43 | macros/latex/contrib/changes/userdoc/usepackage_defaultcolor_changes_in.tex
-2021/05/09 | 42 | macros/latex/contrib/changes/userdoc/usepackage_todonotes_changes_in.tex
2021/05/09 | 426541 | graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.tex
2021/05/09 | 424 | systems/texlive/tlnet/archive/tlmgrbasics.r59134.tar.xz
2021/05/09 | 422268 | graphics/pgf/contrib/circuitikz/tex/circuitikz-0.8.3.sty
-2021/05/09 | 42081 | macros/latex/contrib/changes/userdoc/changes.de.tex
-2021/05/09 | 41 | macros/latex/contrib/changes/userdoc/usepackage_truncate_changes_in.tex
-2021/05/09 | 41 | macros/latex/contrib/changes/userdoc/usepackage_truncate_changes_ex.tex
-2021/05/09 | 41 | macros/latex/contrib/changes/userdoc/setauthormarkuptext_in.tex
2021/05/09 | 418 | graphics/pgf/contrib/circuitikz/doc/compatibility.tex
2021/05/09 | 416850 | graphics/pgf/contrib/circuitikz/tex/t-circuitikz-0.8.3.tex
2021/05/09 | 415236 | systems/texlive/tlnet/archive/lua-physical.doc.r59138.tar.xz
2021/05/09 | 403539 | graphics/pgf/contrib/circuitikz/tex/circuitikz-0.7.sty
-2021/05/09 | 39 | macros/latex/contrib/changes/userdoc/usepackage_xcolor_changes_in.tex
2021/05/09 | 3940 | systems/texlive/tlnet/archive/mindflow.source.r59137.tar.xz
2021/05/09 | 393856 | graphics/pgf/contrib/circuitikz/tex/circuitikz-0.6.sty
-2021/05/09 | 38 | macros/latex/contrib/changes/userdoc/usepackage_markup_changes_in.tex
-2021/05/09 | 38 | macros/latex/contrib/changes/userdoc/path_doc_examples_in.tex
-2021/05/09 | 38432 | macros/latex/contrib/changes/userdoc/changes.en.tex
-2021/05/09 | 37 | macros/latex/contrib/changes/userdoc/usepackage_ulem_changes_in.tex
-2021/05/09 | 376311 | macros/latex/contrib/changes/changes.ngerman.pdf
2021/05/09 | 3758 | graphics/pgf/contrib/circuitikz/tex/pgfcircutils.tex
-2021/05/09 | 368902 | macros/latex/contrib/changes/changes.english.pdf
2021/05/09 | 364469 | graphics/pgf/contrib/circuitikz/tex/pgfcirctripoles.tex
2021/05/09 | 364086 | graphics/pgf/contrib/circuitikz/tex/circuitikz-0.4.sty
2021/05/09 | 359576 | systems/texlive/tlnet/archive/lua-physical.r59138.tar.xz
2021/05/09 | 3590 | graphics/pgf/contrib/circuitikz/tex/t-circuitikz.tex
-2021/05/09 | 34 | macros/latex/contrib/changes/userdoc/sethighlightmarkup_in.tex
2021/05/09 | 34956 | graphics/pgf/contrib/circuitikz/doc/changelog.tex
2021/05/09 | 34875 | systems/win32/miktex/tm/packages/ninecolors.tar.lzma
2021/05/09 | 34691 | graphics/pgf/contrib/circuitikz/tex/pgfcircvoltage.tex
@@ -773,93 +863,52 @@
2021/05/09 | 3387625 | systems/win32/miktex/tm/packages/worldflags.tar.lzma
2021/05/09 | 33483 | systems/win32/miktex/tm/packages/texfot.tar.lzma
2021/05/09 | 33324 | systems/texlive/tlnet/archive/l3build.r59136.tar.xz
-2021/05/09 | 32 | macros/latex/contrib/changes/userdoc/usepackage_options_changes_in.tex
-2021/05/09 | 32 | macros/latex/contrib/changes/userdoc/setdeletedmarkup_in.tex
-2021/05/09 | 32 | macros/latex/contrib/changes/userdoc/setcommentmarkup_in.tex
2021/05/09 | 3277 | graphics/pgf/contrib/circuitikz/README.md
2021/05/09 | 321763 | systems/win32/miktex/tm/packages/mparhack.tar.lzma
2021/05/09 | 3210 | macros/latex/contrib/acrotex/exerquiz.ins
-2021/05/09 | 31 | macros/latex/contrib/changes/userdoc/setauthormarkup_in.tex
2021/05/09 | 3130 | graphics/pgf/contrib/circuitikz/tex/ctikzstyle-legacy.tex
2021/05/09 | 3121341 | dviware/dviout/dviout3190-source.zip
-2021/05/09 | 30 | macros/latex/contrib/changes/userdoc/setsocextension_in.tex
-2021/05/09 | 30 | macros/latex/contrib/changes/userdoc/setlocextension_in.tex
-2021/05/09 | 30 | macros/latex/contrib/changes/userdoc/setaddedmarkup_in.tex
2021/05/09 | 30990 | graphics/pgf/contrib/circuitikz/tex/pgfcircshapes.tex
2021/05/09 | 30815 | graphics/pgf/contrib/circuitikz/tex/pgfcirc.defines.tex
-2021/05/09 | 29 | macros/latex/contrib/changes/userdoc/comment_in.tex
2021/05/09 | 29820 | systems/texlive/tlnet/archive/l3build.source.r59136.tar.xz
-2021/05/09 | 28 | macros/latex/contrib/changes/userdoc/usepackage_final_changes_in.tex
2021/05/09 | 280 | graphics/pgf/contrib/circuitikz/tex/ctikzstyle-example.tex
-2021/05/09 | 27 | macros/latex/contrib/changes/userdoc/settruncatewidth_in.tex
-2021/05/09 | 27 | macros/latex/contrib/changes/userdoc/setsummarytowidth_in.tex
-2021/05/09 | 27 | macros/latex/contrib/changes/userdoc/path_script_in.tex
2021/05/09 | 279924 | systems/texlive/tlnet/archive/tikz-cd.doc.r59133.tar.xz
2021/05/09 | 2771940 | systems/win32/miktex/tm/packages/onedown.tar.lzma
2021/05/09 | 27503 | macros/latex/contrib/msu-thesis/msu-thesis.cls
2021/05/09 | 2707199 | install/graphics/pgf/contrib/circuitikz.tds.zip
-2021/05/09 | 26 | macros/latex/contrib/changes/userdoc/setsummarywidth_in.tex
2021/05/09 | 26969 | macros/latex/contrib/msu-thesis/msu-thesis.tex
2021/05/09 | 2691207 | graphics/pgf/contrib/circuitikz.zip
2021/05/09 | 263250 | systems/win32/miktex/tm/packages/pbalance.tar.lzma
-2021/05/09 | 25 | macros/latex/contrib/changes/userdoc/script_pymergechanges_empty.tex
2021/05/09 | 2562682 | systems/win32/miktex/tm/packages/xint.tar.lzma
-2021/05/09 | 254 | macros/latex/contrib/changes/userdoc/listofchanges_ex.tex
2021/05/09 | 241412 | graphics/pgf/contrib/circuitikz/tex/pgfcircbipoles.tex
-2021/05/09 | 229 | macros/latex/contrib/changes/userdoc/script_pymergechanges.tex
2021/05/09 | 22692372 | systems/win32/miktex/tm/packages/newcomputermodern.tar.lzma
-2021/05/09 | 224 | macros/latex/contrib/changes/userdoc/replaced_ex.tex
-2021/05/09 | 223 | macros/latex/contrib/changes/userdoc/highlight_ex.tex
2021/05/09 | 222407 | macros/latex/contrib/msu-thesis/msu-thesis.pdf
-2021/05/09 | 21 | macros/latex/contrib/changes/userdoc/usepackage_changes_in.tex
2021/05/09 | 217160 | systems/win32/miktex/tm/packages/pgf-pie.tar.lzma
2021/05/09 | 21160 | systems/texlive/tlnet/archive/biblatex-gost.r59135.tar.xz
2021/05/09 | 199924 | macros/latex/contrib/msu-thesis/samples/MSU-thesis-testfile.pdf
-2021/05/09 | 196 | macros/latex/contrib/changes/userdoc/setcommentmarkup_ex.tex
2021/05/09 | 1930 | graphics/pgf/contrib/circuitikz/tex/ctikzstyle-romano.tex
2021/05/09 | 1880 | systems/texlive/tlnet/archive/mindflow.r59137.tar.xz
2021/05/09 | 186516 | systems/texlive/tlnet/archive/mindflow.doc.r59137.tar.xz
-2021/05/09 | 182 | macros/latex/contrib/changes/userdoc/added_ex.tex
2021/05/09 | 1803596 | systems/win32/miktex/tm/packages/nicematrix.tar.lzma
2021/05/09 | 1800 | macros/latex/contrib/msu-thesis/README.md
-2021/05/09 | 177 | macros/latex/contrib/changes/userdoc/deleted_ex.tex
2021/05/09 | 17727 | graphics/pgf/contrib/circuitikz/doc/circuitikz-context.pdf
2021/05/09 | 1765936 | systems/texlive/tlnet/archive/pgfplots.source.r59132.tar.xz
-2021/05/09 | 174 | macros/latex/contrib/changes/userdoc/definechangesauthor_ex.tex
-2021/05/09 | 171 | macros/latex/contrib/changes/userdoc/usepackage_markup_changes_ex.tex
-2021/05/09 | 16628 | macros/latex/contrib/changes/examples.dtx
2021/05/09 | 16580 | graphics/pgf/contrib/circuitikz/tex/pgfcircpath.tex
-2021/05/09 | 164 | macros/latex/contrib/changes/userdoc/usepackage_commandnameprefix_changes_ex.tex
-2021/05/09 | 154 | macros/latex/contrib/changes/userdoc/usepackage_authormarkup_changes_ex.tex
2021/05/09 | 15328 | graphics/pgf/contrib/circuitikz/tex/pgfcirclabel.tex
-2021/05/09 | 151 | macros/latex/contrib/changes/userdoc/usepackage_commentmarkup_changes_ex.tex
2021/05/09 | 151392 | systems/texlive/tlnet/archive/tlmgrbasics.doc.r59134.tar.xz
-2021/05/09 | 147 | macros/latex/contrib/changes/userdoc/usepackage_deletedmarkup_changes_ex.tex
2021/05/09 | 145379 | systems/texlive/tlnet/tlpkg/TeXLive/TLUtils.pm
-2021/05/09 | 143191 | macros/latex/contrib/changes/examples/changes.example.screenshot.pdf
-2021/05/09 | 142 | macros/latex/contrib/changes/userdoc/usepackage_addedmarkup_changes_ex.tex
2021/05/09 | 139462 | systems/win32/miktex/tm/packages/vcell.tar.lzma
2021/05/09 | 1383374 | graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.pdf
2021/05/09 | 137120 | systems/win32/miktex/tm/packages/pxjahyper.tar.lzma
-2021/05/09 | 1326 | macros/latex/contrib/changes/README
2021/05/09 | 13085900 | systems/texlive/tlnet/archive/pgfplots.doc.r59132.tar.xz
2021/05/09 | 126090 | systems/win32/miktex/tm/packages/ut-thesis.tar.lzma
2021/05/09 | 12348 | graphics/pgf/contrib/circuitikz/tex/circuitikz.sty
2021/05/09 | 123018 | graphics/pgf/contrib/circuitikz/tex/pgfcircquadpoles.tex
2021/05/09 | 122692761 | macros/context/latest/cont-tmf.zip
-2021/05/09 | 120 | macros/latex/contrib/changes/userdoc/usepackage_authormarkupposition_changes_ex.tex
-2021/05/09 | 117 | macros/latex/contrib/changes/userdoc/usepackage_highlightmarkup_changes_ex.tex
-2021/05/09 | 110514 | macros/latex/contrib/changes/examples/changes.example.commentmarkup.footnote.pdf
-2021/05/09 | 11043 | macros/latex/contrib/changes/pyMergeChanges.py
-2021/05/09 | 109 | macros/latex/contrib/changes/userdoc/usepackage_authormarkuptext_changes_ex.tex
2021/05/09 | 1091448 | support/TeX4ht/source/tex4ht-4ht.tex
-2021/05/09 | 106 | macros/latex/contrib/changes/userdoc/usepackage_defaultcolor_changes_ex.tex
2021/05/09 | 106148 | graphics/pgf/contrib/circuitikz/tex/pgfcircmultipoles.tex
-2021/05/09 | 104 | macros/latex/contrib/changes/userdoc/setsummarytowidth_ex.tex
-2021/05/09 | 104166 | macros/latex/contrib/changes/examples/changes.example.packageoptions.todonotes.pdf
2021/05/09 | 1021921 | graphics/pgf/contrib/circuitikz/tex/circuitikz-1.2.7.sty
2021/05/09 | 1014383 | graphics/pgf/contrib/circuitikz/tex/t-circuitikz-1.2.7.tex
-2021/05/09 | 10120 | macros/latex/contrib/changes/changes.ins
2021/05/08 | 982928 | systems/texlive/tlnet/archive/latexindent.doc.r59121.tar.xz
2021/05/08 | 957 | macros/latex/contrib/biblatex-contrib/biblatex-gost/tex/lbx/french-gost.lbx
2021/05/08 | 95278 | graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfmathfloat.code.tex
@@ -895,7 +944,6 @@
2021/05/08 | 734672 | systems/texlive/tlnet/archive/texlive.infra.i386-netbsd.r58981.tar.xz
2021/05/08 | 723974 | graphics/pgf/contrib/pgfplots/source/pgfplotstests.context.tar.bz2
2021/05/08 | 71792 | graphics/pgf/contrib/pgfplots/tex/pgfplotsutil.code.tex
-2021/05/08 | 6774728 | systems/win32/w32tex/ptex-ng-w32.tar.xz
2021/05/08 | 6758 | macros/luatex/latex/lua-physical/src/physical-data.lua
2021/05/08 | 6521 | graphics/pgf/contrib/pgfplots/tex/pgflibrarypgfplots.surfshading.pgfsys-dvipdfmx.def
2021/05/08 | 64209 | graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.smithchart.code.tex
@@ -922,7 +970,6 @@
2021/05/08 | 5108 | systems/texlive/tlnet/archive/xintsession.r59120.tar.xz
2021/05/08 | 50466 | graphics/pgf/contrib/tikz-cd/tikz-cd-doc.tex
2021/05/08 | 5026 | graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_tikzlibraryexternal.code.tex
-2021/05/08 | 49476568 | systems/win32/w32tex/xetex-w32.tar.xz
2021/05/08 | 4904 | graphics/pgf/contrib/pgfplots/tex/pgfplots.sty
2021/05/08 | 485274 | graphics/pgf/contrib/pgfplots/tex/pgfplots.code.tex
2021/05/08 | 4782 | macros/luatex/latex/lua-physical/src/physical-dimension.lua
@@ -1011,7 +1058,6 @@
2021/05/08 | 2382 | macros/latex/contrib/biblatex-contrib/biblatex-gost/doc/ltxdockit.cfg
2021/05/08 | 23581 | graphics/pgf/contrib/pgfplots/tex/tikzlibrarycolorbrewer.code.tex
2021/05/08 | 23537 | graphics/pgf/contrib/pgfplots/tex/pgfplotsarray.code.tex
-2021/05/08 | 23484712 | systems/win32/w32tex/cjkzr.tar.xz
2021/05/08 | 232 | macros/latex/contrib/biblatex-contrib/biblatex-gost/tex/cbx/gost-authoryear-min.cbx
2021/05/08 | 232 | macros/latex/contrib/biblatex-contrib/biblatex-gost/tex/cbx/gost-alphabetic-min.cbx
2021/05/08 | 23256 | graphics/pgf/contrib/pgfplots/README
@@ -1274,79 +1320,3 @@
2021/05/07 | 10361 | support/latexindent/LatexIndent/Command.pm
2021/05/07 | 10135 | support/latexindent/documentation/sec-indent-config-and-settings.tex
2021/05/07 | 100247 | macros/latex/contrib/l3packages/xtemplate.dtx
-2021/05/06 | 9438 | macros/latex/contrib/l3build/l3build-install.lua
-2021/05/06 | 909748 | systems/texlive/tlnet/archive/mcf2graph.doc.r59086.tar.xz
-2021/05/06 | 86490 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm
-2021/05/06 | 85239 | graphics/pgf/contrib/worldflags/tex/worldflag_AT-St.tex
-2021/05/06 | 824 | info/tlmgr-intro-zh-cn/latexmkrc
-2021/05/06 | 793716 | install/macros/latex/contrib/l3build.tds.zip
-2021/05/06 | 77925 | macros/latex/contrib/hvfloat/doc/examples/capPos.pdf
-2021/05/06 | 7629 | macros/latex/contrib/l3build/l3build-arguments.lua
-2021/05/06 | 7585 | macros/latex/contrib/l3build/l3build-variables.lua
-2021/05/06 | 72722 | macros/latex/contrib/froufrou.zip
-2021/05/06 | 71908 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/README.md
-2021/05/06 | 7189 | macros/latex/contrib/l3build/l3build-manifest.lua
-2021/05/06 | 708832 | macros/latex/contrib/l3build/l3build.pdf
-2021/05/06 | 687 | macros/latex/contrib/hvfloat/doc/examples/README.exa
-2021/05/06 | 6739 | macros/latex/contrib/l3build/l3build-typesetting.lua
-2021/05/06 | 66866 | macros/latex/contrib/froufrou/froufrou.pdf
-2021/05/06 | 651 | info/tlmgr-intro-zh-cn/tlmgr-intro-zh-cn.tex
-2021/05/06 | 6479 | macros/plain/contrib/xintsession.zip
-2021/05/06 | 646065 | graphics/pgf/contrib/worldflags/tex/worldflag_AT-B.tex
-2021/05/06 | 609715 | macros/latex/contrib/nicematrix/nicematrix.dtx
-2021/05/06 | 607413 | support/TeX4ht/source/tex4ht-html4.tex
-2021/05/06 | 60024353 | info/symbols/comprehensive.zip
-2021/05/06 | 5946 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015ms.cbx
-2021/05/06 | 58771 | systems/texlive/tlnet/tlpkg/TeXLive/TLPOBJ.pm
-2021/05/06 | 56822 | systems/texlive/tlnet/tlpkg/translations/da.po
-2021/05/06 | 538 | macros/latex/contrib/froufrou/LICENSE
-2021/05/06 | 5232 | macros/latex/contrib/l3build/l3build.lua
-2021/05/06 | 513 | macros/latex/contrib/froufrou/README.md
-2021/05/06 | 5011 | macros/latex/contrib/l3build/l3build-aux.lua
-2021/05/06 | 46536 | systems/texlive/tlnet/archive/polexpr.doc.r59088.tar.xz
-2021/05/06 | 462481 | macros/latex/contrib/nicematrix/nicematrix-french.pdf
-2021/05/06 | 449505 | info/tlmgr-intro-zh-cn.zip
-2021/05/06 | 4476 | macros/latex/contrib/l3build/l3build-ctan.lua
-2021/05/06 | 4338 | macros/latex/contrib/l3build/l3build-stdmain.lua
-2021/05/06 | 376582 | info/tlmgr-intro-zh-cn/tlmgr-intro-zh-cn.pdf
-2021/05/06 | 34564 | macros/latex/contrib/l3build/l3build-check.lua
-2021/05/06 | 332376 | systems/texlive/tlnet/archive/dvipdfmx.win32.r59085.tar.xz
-2021/05/06 | 31628 | systems/texlive/tlnet/archive/polexpr.r59088.tar.xz
-2021/05/06 | 2938 | macros/latex/contrib/hvfloat/doc/examples/capPos.tex
-2021/05/06 | 2746 | macros/plain/contrib/xintsession/README.md
-2021/05/06 | 2745 | macros/latex/contrib/l3build/l3build-unpack.lua
-2021/05/06 | 256210 | macros/latex/contrib/pbalance.zip
-2021/05/06 | 2471 | macros/latex/contrib/l3build/l3build-help.lua
-2021/05/06 | 2338 | macros/latex/contrib/l3build/CONTRIBUTING.md
-2021/05/06 | 23336 | systems/texlive/tlnet/archive/mcf2graph.r59086.tar.xz
-2021/05/06 | 2285 | macros/latex/contrib/l3build/l3build-tagging.lua
-2021/05/06 | 2145 | macros/latex/contrib/l3build/l3build-clean.lua
-2021/05/06 | 209306 | macros/latex/contrib/acrotex/web.dtx
-2021/05/06 | 2071 | macros/latex/contrib/froufrou/froufrou.ins
-2021/05/06 | 1928549 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015.zip
-2021/05/06 | 1915138 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015.pdf
-2021/05/06 | 19106 | macros/latex/contrib/projlib/LICENSE
-2021/05/06 | 190426 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015.tex
-2021/05/06 | 1822166 | macros/latex/contrib/nicematrix.zip
-2021/05/06 | 1816 | macros/latex/contrib/l3build/l3build.1
-2021/05/06 | 166368 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015.bbx
-2021/05/06 | 166269 | macros/latex/contrib/nicematrix/nicematrix-french.tex
-2021/05/06 | 164525 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015ay.bbx
-2021/05/06 | 15 | support/TeX4ht/source/extra-bin/xmllint
-2021/05/06 | 15 | support/TeX4ht/source/extra-bin/vcss
-2021/05/06 | 15555 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015.cbx
-2021/05/06 | 15514 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015mx.cbx
-2021/05/06 | 15506 | macros/latex/contrib/froufrou/froufrou.dtx
-2021/05/06 | 1540 | macros/latex/contrib/l3build/l3build.ins
-2021/05/06 | 14286 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015ay.cbx
-2021/05/06 | 13966 | macros/latex/contrib/l3build/CHANGELOG.md
-2021/05/06 | 13839 | macros/plain/contrib/xintsession/xintsession.tex
-2021/05/06 | 133848 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015mx.bbx
-2021/05/06 | 12641 | macros/latex/contrib/l3build/l3build-file-functions.lua
-2021/05/06 | 1248363 | macros/latex/contrib/nicematrix/nicematrix.pdf
-2021/05/06 | 11969 | macros/latex/contrib/l3build/l3build-upload.lua
-2021/05/06 | 1159 | macros/latex/contrib/hvfloat/doc/examples/capPos.ltx
-2021/05/06 | 115199 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015ms.bbx
-2021/05/06 | 10790 | macros/latex/contrib/l3build/l3build-manifest-setup.lua
-2021/05/06 | 107586 | macros/latex/contrib/l3build/l3build.dtx
-2021/05/06 | 1019 | macros/latex/contrib/l3build/README.md
diff --git a/biblio/bibtex/contrib/vancouver/vancouver.bib b/biblio/bibtex/contrib/vancouver/vancouver.bib
index 6a655acb89..645a3cd719 100644
--- a/biblio/bibtex/contrib/vancouver/vancouver.bib
+++ b/biblio/bibtex/contrib/vancouver/vancouver.bib
@@ -1,9 +1,9 @@
@Patent{ pagedas:flexible,
- inventor = {Pagedas, A.C.},
+ inventor = {Pagedas, Anthony C.},
assignee = {Ancel Surgical R\&D Inc.},
title = {Flexible endoscopic grasping and cutting device and positioning tool assembly},
- numberi = {United States patent US 20020103498},
+ number = {United States patent US 20020103498},
year = {2002 Aug 1}
}
@@ -37,7 +37,7 @@
}
@Webpage{ american,
- title = {American {M}edical {A}ssociation},
+ title = {American {Medical} {Association}},
part = {AMA Office of Group Practice Liaison; [about 2 screens]},
address = {Chicago},
publisher = {The Association},
@@ -49,7 +49,7 @@
}
@Webpage{ bibliographic,
- title = {Bibliographic {S}ervices {D}ivision},
+ title = {Bibliographic {Services} {Division}},
address = {Bethesda (MD)},
publisher = {National Library of Medicine (US)},
type = {homepage on the Internet},
@@ -60,7 +60,7 @@
}
@Webpage{ cancer-pain,
- title = {Cancer-{P}ain.org},
+ title = {{Cancer-Pain.org}},
publisher = {Association of Cancer Online Resources, Inc.},
address = {New York},
type = {homepage on the Internet},
@@ -92,7 +92,7 @@
}
@Webpage{ mesh,
- title = {Me{SH} {B}rowser},
+ title = {{MeSH} {Browser}},
part = {Meta-analysis; unique ID: D015201},
address = {Bethesda (MD)},
pages = {about 3 p.},
@@ -111,7 +111,7 @@
}
@Webpage{ whos,
- title = {Who's {C}ertified},
+ title = {Who's {Certified}},
address = {Evanston (IL)},
publisher = {The American Board of Medical Specialists},
type = {database on the Internet},
@@ -132,7 +132,7 @@
}
@Webpage{ abood:quality,
- author = {Abood, S.},
+ author = {Abood, Sheila},
title = {Quality improvement initiative in nursing homes: the {ANA}
acts in an advisory role},
journal = {Am J Nurs},
@@ -178,9 +178,9 @@
}
@PhDThesis{ borkowski:infant,
- author = {Borkowski, M.M.},
- title = {Infant sleep and feeding: a telephone survey of {H}ispanic
- {A}mericans},
+ author = {Borkowski, Margaret Marie},
+ title = {Infant sleep and feeding: a telephone survey of {Hispanic}
+ {Americans}},
school = {Central Michigan University},
type = {dissertation},
address = {Mount Pleasant (MI)},
@@ -217,14 +217,14 @@
}
@InProceedings{ christensen.oppacher:analysis,
- author = {Christensen, S. and Oppacher, F.},
- title = {An analysis of {K}oza's computational effort statistic for
+ author = {Christensen, Steffen and Oppacher, Franz},
+ title = {An analysis of {Koza}'s computational effort statistic for
genetic programming},
- booktitle = {Genetic programming. {E}uro{GP} 2002: {P}roceedings of the
- 5th {E}uropean {C}onference on {G}enetic {P}rogramming;
- 2002 {A}pr 3-5; {K}insdale, {I}reland},
- editor = {Foster, J.A. and Lutton, E. and Miller, J. and Ryan, C.
- and Tettamanzi, A.G.},
+ booktitle = {Genetic programming. {EuroGP} 2002: {Proceedings} of the
+ 5th {European} {Conference} on {Genetic} {Programming};
+ 2002 {Apr} 3-5; {Kinsdale}, {Ireland}},
+ editor = {Foster, James A. and Lutton, Evelyne and Miller, Julian
+ and Ryan, Conor and Tettamanzi, Andra G.},
pages = {182--191},
address = {Berlin},
publisher = {Springer},
@@ -270,7 +270,7 @@
@Webpage{ foley.gelband:improving,
title = {Improving palliative care for cancer},
address = {Washington},
- editor = {Foley, K.M. and Gelband, H.},
+ editor = {Foley, Kathleen M. and Gelband, Hellen},
publisher = {National Academy Press},
type = {monograph on the Internet},
year = {2001},
@@ -342,10 +342,10 @@
}
@Proceedings{ harnden.joffe.ea:germ,
- title = {Germ cell tumours {V}. {P}roceedings of the 5th {G}erm
- {C}ell {T}umour {C}onference; 2001 {S}ep 13-15; {L}eeds,
+ title = {Germ cell tumours {V}. {Proceedings} of the 5th {Germ}
+ {Cell} {Tumour} {Conference}; 2001 {Sep} 13-15; {Leeds},
{UK}},
- editor = {Harnden, P. and Joffe, J.K. and Jones, W.G.},
+ editor = {Harnden, Patricia and Joffe, Jonathan K and Jones, William G},
address = {New York},
publisher = {Springer},
year = 2002
@@ -353,8 +353,8 @@
@Webpage{ jablonski:online,
author = {Jablonski, S.},
- title = {Online {M}ultiple {C}ongential {A}nomaly/{M}ental
- {R}etardation ({MCA}/{MR}) {S}yndromes},
+ title = {Online {Multiple} {Congential} {Anomaly}/{Mental}
+ {Retardation} ({MCA}/{MR}) {Syndromes}},
address = {Bethesda (MD)},
publisher = {National Library of Medicine (US)},
type = {database on the Internet},
@@ -448,7 +448,7 @@
author = {Russell, M.L. and Goth-Goldstein, R. and Apte, M.G. and
Fisk, W.J.},
title = {Method for measuring the size distribution of airborne
- {R}hinovirus},
+ {Rhinovirus}},
institution = {Lawrence Berkeley National Laboratory, Environmental
Energy Technologies Division},
number = {Report No.: LBNL49574. Contract No.: DEAC0376SF00098},
@@ -461,7 +461,7 @@
@Unpublished{ tian.araki.ea:signature,
author = {Tian, D. and Araki, H. and Stahl, E. and Bergelson, J. and
Kreitman, M.},
- title = {Signature of balancing selection in {A}rabidopsis},
+ title = {Signature of balancing selection in {Arabidopsis}},
note = {In press 2002.},
organization = {Proc Natl Acad Sci U S A},
year = 2002
@@ -491,7 +491,7 @@
}
@Webpage{ uniform,
- title = {Uniform {R}equirements for {M}anuscripts {S}ubmitted to {B}iomedical {J}ournals: {W}riting and {E}diting for {B}iomedical {P}ublication},
+ title = {Uniform {Requirements} for {Manuscripts} {Submitted} to {Biomedical} {Journals}: {Writing} and {Editing} for {Biomedical} {Publication}},
publisher = {International Committee of Medical Journal Editors},
address = {Philadelphia (PA)},
type = {homepage on the Internet},
@@ -504,7 +504,7 @@
@Article{ vallancien.emberton.ea:sexual,
author = {Vallancien, G. and Emberton, M. and Harving, N. and van
Moorselaar, R.J.},
- title = {Sexual dysfunction in 1,274 {E}uropean men suffering from
+ title = {Sexual dysfunction in 1,274 {European} men suffering from
lower urinary tract symptoms.},
journal = {J Urol},
volume = {169},
@@ -516,7 +516,7 @@
@TechReport{ yen:health,
author = {Yen, G.G.},
- title = {Health monitoring on vibration signatures. {F}inal
+ title = {Health monitoring on vibration signatures. {Final}
report},
institution = {Air Force Office of Scientific Research (US), Air Force
Research Laboratory},
diff --git a/biblio/bibtex/contrib/vancouver/vancouver.bst b/biblio/bibtex/contrib/vancouver/vancouver.bst
index 0e9b5d0667..e0acb43429 100644
--- a/biblio/bibtex/contrib/vancouver/vancouver.bst
+++ b/biblio/bibtex/contrib/vancouver/vancouver.bst
@@ -11,7 +11,7 @@
%%-------------------------------------------------------------------
%%
%% Author: Folkert van der Beek <folkertvanderbeek@gmail.com>
-%% Version: 0.9
+%% Version: 1.0
%% URL: https://gitlab.com/fvdbeek/vancouver.bst
%%
%% This work may be distributed and/or modified under the
@@ -1460,6 +1460,10 @@ FUNCTION {format.institution.address}
{ institution "institution" bibinfo.check format.org.or.pub
}
+FUNCTION {format.school.address}
+{ school "school" bibinfo.check format.org.or.pub
+}
+
% urlbst...
% Functions for making hypertext links.
@@ -1832,8 +1836,7 @@ FUNCTION {phdthesis}
"title" output.check
format.type "type" output.check
new.block
- school "school" bibinfo.warn output
- address "address" bibinfo.check output
+ format.school.address output
format.date "year" output.check
new.block
format.note output
diff --git a/biblio/bibtex/contrib/vancouver/vancouver.pdf b/biblio/bibtex/contrib/vancouver/vancouver.pdf
index c58ef64454..746c7d6f64 100644
--- a/biblio/bibtex/contrib/vancouver/vancouver.pdf
+++ b/biblio/bibtex/contrib/vancouver/vancouver.pdf
Binary files differ
diff --git a/macros/latex/contrib/bnumexpr/README.md b/macros/latex/contrib/bnumexpr/README.md
index bda6edef58..a7db8bf12c 100644
--- a/macros/latex/contrib/bnumexpr/README.md
+++ b/macros/latex/contrib/bnumexpr/README.md
@@ -1,5 +1,5 @@
| Source: bnumexpr.dtx
-| Version: v1.4, 2021/05/12 (doc: 2021/05/12)
+| Version: v1.4a, 2021/05/13 (doc: 2021/05/13)
| Author: Jean-Francois Burnol
| Info: Expressions with big integers
| License: LPPL 1.3c
@@ -35,13 +35,6 @@ the syntax elements to macros from an alternative big integer
expandable engine of the user own choosing,
and then [xintcore](http://ctan.org/pkg/xint) is not loaded.
-Note; the possibility not to use the xintcore macros might be
-removed in the future: perhaps a future release will maintain during
-computations a private internal representation (especially tailored
-either for the xintcore macros or new ones which would be included
-within `bnumexpr.sty` itself) and the constraints this implies may
-render optional use of other macros impossible.
-
Installation
============
diff --git a/macros/latex/contrib/bnumexpr/bnumexpr.dtx b/macros/latex/contrib/bnumexpr/bnumexpr.dtx
index 83e0ab6c38..23ead1e2e1 100644
--- a/macros/latex/contrib/bnumexpr/bnumexpr.dtx
+++ b/macros/latex/contrib/bnumexpr/bnumexpr.dtx
@@ -1,17 +1,17 @@
% -*- coding: utf-8-unix; time-stamp-format: "%02d-%02m-%:y %02H:%02M:%02S %Z"; sentence-end-double-space: t; -*-
%<*dtx>
-\def\bnedtxtimestamp {Time-stamp: <12-05-2021 22:05:26 CEST>}
+\def\bnedtxtimestamp {Time-stamp: <13-05-2021 12:37:08 CEST>}
\iffalse
%</dtx>
%<*drv>
%% ---------------------------------------------------------------
-\def\bnedocdate {2021/05/12}% package bnumexpr documentation date
-\def\bnepackdate{2021/05/12}% package bnumexpr date
-\def\bneversion {1.4} % package bnumexpr version
+\def\bnedocdate {2021/05/13}% package bnumexpr documentation date
+\def\bnepackdate{2021/05/13}% package bnumexpr date
+\def\bneversion {1.4a} % package bnumexpr version
%</drv>
%<*readme>--------------------------------------------------------
| Source: bnumexpr.dtx
-| Version: v1.4, 2021/05/12 (doc: 2021/05/12)
+| Version: v1.4a, 2021/05/13 (doc: 2021/05/13)
| Author: Jean-Francois Burnol
| Info: Expressions with big integers
| License: LPPL 1.3c
@@ -47,13 +47,6 @@ the syntax elements to macros from an alternative big integer
expandable engine of the user own choosing,
and then [xintcore](http://ctan.org/pkg/xint) is not loaded.
-Note; the possibility not to use the xintcore macros might be
-removed in the future: perhaps a future release will maintain during
-computations a private internal representation (especially tailored
-either for the xintcore macros or new ones which would be included
-within `bnumexpr.sty` itself) and the constraints this implies may
-render optional use of other macros impossible.
-
Installation
============
@@ -129,6 +122,17 @@ and the derived files
%%
%</!readme>
%<*changes>-------------------------------------------------------
+\item[1.4a (2021/05/13)]
+ \begin{itemize}
+ \item fix undefined control sequences errors encountered by the parser in
+ case of either extra or missing closing parenthesis (due to a problem
+ in technology transfer at |1.4| from upstream \xintexprname).
+ \item fix |\BNE_Op_opp| must now be f-expandable (also caused as a
+ collateral to the technology transfer).
+ \item fix user documentation regarding the constraints applying to the user
+ replacement macros for the core algebra, as they have changed at |1.4|.
+ \end{itemize}
+
\item[1.4 (2021/05/12)]
\begin{itemize}
\item technology transfer from \xintexprname |1.4| of
@@ -300,7 +304,7 @@ and the derived files
\PassOptionsToPackage{dvipdfm}{geometry}
\PassOptionsToPackage{bookmarks=true}{hyperref}
\PassOptionsToPackage{dvipdfmx-outline-open}{hyperref}
- \PassOptionsToPackage{dvipdfmx-outline-open}{bookmark}
+ %\PassOptionsToPackage{dvipdfmx-outline-open}{bookmark}
%
\def\pgfsysdriver{pgfsys-dvipdfm.def}
\else
@@ -476,12 +480,14 @@ pdfpagemode=UseOutlines}
{bnumexpr}%
\xspace }%
+\def\xintkernelname
+ {\href{http://www.ctan.org/pkg/xint}{xintkernel}\xspace }%
\def\xintname
{\href{http://www.ctan.org/pkg/xint}{xint}\xspace }%
\def\xintcorename
{\href{http://www.ctan.org/pkg/xint}{xintcore}\xspace }%
\def\xintexprname
- {\href{http://www.ctan.org/pkg/xint}{xintexpr}\xspace }%
+ {\href{http://www.ctan.org/pkg/xintexpr}{xintexpr}\xspace }%
\def\xintbinhexname
{\href{http://www.ctan.org/pkg/xint}{xintbinhex}\xspace }%
@@ -546,15 +552,10 @@ pdfpagemode=UseOutlines}
\etocsetnexttocdepth{section}
\tableofcontents
-\section{\csh{thebnumexpr}, \csh{bnumeval}, \csh{evaltohex}}
+\section{\csh{bnumeval} (\csh{thebnumexpr}), \csh{evaltohex}}
\label{sec:bnumexpr}
-\LaTeX\ Package \bnumname provides |\thebnumexpr|\meta{expression}|\relax|:%
-%
-\footnote{Since |1.4|, one can use |\bnumexpr...\relax| directly in
- typesetting context, it is not mandatory to prefix it with |\bnethe| or to
- use |\thebnumexpr|.}
-%
+\LaTeX\ Package \bnumname provides |\thebnumexpr|\meta{expression}|\relax|:
it is analogous to
|\the\numexpr|\meta{expression}|\relax|, with these extensions:
\begin{itemize}
@@ -569,11 +570,20 @@ it is analogous to
separator,
\item comma separated expressions are allowed.
\end{itemize}
-There is also an alternative interface |\bnumeval|\marg{expression}, where the
-expression is fetched as braced argument. And there is
-|\evaltohex|\marg{expression} which does the same as
-|\bnumeval|\marg{expression} but with a conversion to hexadecimal notation of
-the (possibly comma separated) output. Hexadecimal input uses the |"| prefix.
+There is also a more core-level |\bnumexpr...\relax| construct%
+\footnote{Since |1.4|, one can use |\bnumexpr...\relax| directly in
+ typesetting context, it is not mandatory to prefix it with |\bnethe| or to
+ use |\thebnumexpr|.}%
+, which expands
+to a self-contained unit, rather than to explicit digit tokens (and commas).
+See \autoref{sec:differences} for some related information.
+
+There is also the alternative interface |\bnumeval|\marg{expression}, where the
+expression is fetched as braced argument.
+
+And there is |\evaltohex|\marg{expression} which does the same as |\bnumeval|
+but with a conversion to hexadecimal notation of the (possibly comma
+separated) output. Hexadecimal input uses the |"| prefix.
This package parser is a scaled-down variant of |\xintiiexpr| from package
\xintexprname, dropping support for nested structures, functions, variables,
@@ -594,32 +604,27 @@ possible to replace them by expandable macros of a custom origin.
\noindent\bneshow {---1 208 637 867 * (2 187 917 891 - 3 109 197 072)}%
\bneshoweval {(13_8089_1090-300_1890_2902)*(1083_1908_3901-109_8290_3890)}%
-\bneshow{(92_874_927_979**5-31_9792_7979**6)/30!}%
+\bneshoweval {(92_874_927_979**5-31_9792_7979**6)/30!}%
\bneshoweval {30!/20!/21/22/23/24/25/(26*27*28*29)}%
-\bneshow {13^50//12^50, 13^50/:12^50}%
+\bneshoweval {13^50//12^50, 13^50/:12^50}%
\bneshoweval {13^50/12^50, 12^50}%
-\bneshow {(1^10+2^10+3^10+4^10+5^10+6^10+7^10+8^10+9^10)^3}%
+\bneshoweval {(1^10+2^10+3^10+4^10+5^10+6^10+7^10+8^10+9^10)^3}%
\bneshoweval {100!/36^100}%
\bneshoweval {"10*"100*"1000*"A0000, 16^(1+2+3+4)*10}%
\bneshowevaltohex{"7FFFFFFF+1, "400^3, "ABCDEF*"FEDCBA}%
\section{Differences from \csh{numexpr}}
+\label{sec:differences}
Apart from the extension to big integers (i.e. exceeding the \TeX{} limit at
\number"7FFFFFFF), and the added operators, there are a number of important
differences between |\bnumexpr| and |\numexpr|:
\begin{enumerate}
-\item one may embed directly |\bnumexpr...\relax| in another one (or in
- a |\xintexpr...\relax|), but not in a |\numexpr...\relax|: it must
- then be using |\thebnumexpr...| or |\bnethe\bnumexpr...| syntax; on
- the other hand a |\numexpr...\relax| does not need to be prefixed by
- |\the| or |\number| inside |\bnumexpr...\relax|.
-
\item contrarily to |\numexpr|, the |\bnumexpr| parser stops only after having
- found (and swallowed) a mandatory ending |\relax| token,
+ found (and swallowed) a mandatory ending |\relax| token (it can arise from expansion),
-\item in particular spaces between digits do not stop |\bnumexpr|, in contrast
+\item in particular note that spaces between digits do not stop |\bnumexpr|, in contrast
with |\numexpr|:
|\the\numexpr 3 5+79\relax| expands (in one step) to \expandafter|\the\numexpr 3 5+79\relax|
@@ -627,15 +632,23 @@ differences between |\bnumexpr| and |\numexpr|:
|\thebnumexpr 3 5+79\relax| expands (in two steps) to
\expandafter\expandafter\expandafter|\thebnumexpr 3 5+79\relax|
-\item one may do |\edef\variable{\bnumexpr 1+2\relax}|, and then either use
- |\variable| in another |\bnumexpr...\relax|, or print it via
- |\bnethe\variable| (or directly since |1.4|). The computation is done at the time of the |\edef|
- (and two expansion steps suffice). This is again in contrast with
- |\numexpr...\relax| which, without |\the| (or |\number| or
- |\romannumeral|) as prefix would not expand inside an |\edef|,
+\item with |\edef\myVar{\thebnumexpr1+2\relax}|, the computation is of course
+ done at time of the |\edef|. But one is also allowed to do
+ |\edef\myVar{\bnumexpr1+2\relax}| which prepares |\myVar| as a macro which
+ can be inserted in other \bnumname expressions and behave there as a
+ self-contained pre-computed unit triggering tacit multiplication, or be
+ typeset directly if inserted in the typesetting stream.%
+%
+\footnote{Prior to |1.4|, one would have had to use |\bnethe\myVar| for
+ typesetting, or |\bnumeval{\myVar}|.}
+%
+ There is no analog with |\numexpr| as |\edef\myVar{\numexpr1+2\relax}| does
+ not pre-compute anything and furthermore |\the\numexpr2\myVar\relax| in
+ typesetting flow then triggers the |You can't use `\numexpr' in horizontal
+ mode| error.
\item expressions may be comma separated. On input, spaces are ignored,
- naturally, and on output the values are comma separated with a space after
+ and on output the values are comma separated with a space after
each comma,
\item |\bnumexpr -(1+1)\relax| is legal contrarily to |\numexpr -(1+1)\relax|
@@ -644,9 +657,6 @@ differences between |\bnumexpr| and |\numexpr|:
\item |\numexpr 2\cnta\relax| is illegal (with |\cnta| a |\count|-variable.)
But |\bnumexpr 2\cnta\relax| is perfectly legal and will do the tacit
multiplication,
-% \newcount\cnta
-% \cnta 1111
-% \thebnumexpr 2\cnta\relax
\item more generally, tacit multiplication applies in front of parenthesized
sub-expressions, or sub |\bnumexpr...\relax| (or |\numexpr...\relax|), or
@@ -657,13 +667,34 @@ differences between |\bnumexpr| and |\numexpr|:
\end{enumerate}
+As hinted above |\bnumexpr...\relax| differs from |\thebnumexpr...\relax| as
+the latter expands to explicit digit tokens, but the former expands to a
+private self-contained format which can serve as sub-unit in other
+expressions, or be used inside |\edef|. Since |1.4| the former idiom can also
+be inserted directly inside the typesetting stream, or be written out to an
+external file where it will expand to some control sequences, braces, and
+character tokens, all with their standard catcodes.
+
+One can use |\numexpr...\relax| as a sub-unit in |\bnumexpr...\relax| but the
+reverse does not apply: it would either cause an error or an
+anticipated end to the |\numexpr| which will think having hit a |\relax|.
+
An important thing to keep in mind is that if one has a calculation
whose result is a small integer, acceptable by \TeX{} in |\ifnum| or
count assignments, this integer produced by |\thebnumexpr| is not
self-delimiting, contrarily to a |\numexpr...\relax| construct: the
situation is exactly as with a |\the\numexpr...\relax|, thus one may
need to terminate the number to avoid premature expansion of following
-tokens; for example with the |\space| token.
+tokens; for example with the |\space| control sequence. When using |\bnumeval{...}|
+syntax as in
+\begin{verbatim}
+\ifnum\bnumeval{...}
+...
+\fi
+\end{verbatim}
+the end of line will insert a terminating space token. Again, here
+|\bnumeval{...}| must produce an integer acceptable to \TeX, i.e. at most
+{\number"7FFFFFFF} in absolute value.
\section{Printing big numbers}
@@ -737,7 +768,8 @@ the following way:
\usepackage{xintcore}
\bnumexprsetup{add=\xintiiAdd, sub=\xintiiSub, mul=\xintiiMul,
divround=\xintiiDivRound, div=\xintiiDivFloor,
- mod=\xintiiMod, pow=\xintiiPow, fac=\xintiiFac}
+ mod=\xintiiMod, pow=\xintiiPow, fac=\xintiiFac,
+ opp=\xintiiOpp}%
\end{verbatim}
If
@@ -748,27 +780,22 @@ multiplication will be changed.
Naturally it is up to the user to load the appropriate package for
the alternative macros.
-As per the macros which are the key values, they must have the
-following properties:
-\begin{enumerate}
-\item they must be completely expandable (in the sense of an |\edef|
- or a |\csname...\endcsname|.)
-\item they must fully expand their arguments first (in the sense of
- |\romannumeral-`0|.)
-\item they must output a number with no leading zeros, at most one
- minus sign and no plus sign.
-\end{enumerate}
-The first two items are truly mandatory, the last one may be not
-obeyed if the extra key |opp| is used with \csa{bnumexprsetup} to
-specify a suitable macro for the opposite of a number. This macro will
-be presented not with a braced argument but directly with a sequence
-of digits (either as gathered by the parser which skips leading
-zeros, or as produced by the other arithmetic macros and then there
-could be a minus, or even a plus if macros others than the ones from
-\xintcorename have been used).
-Thus, |opp| could identify a plus sign |+| upfront and then act
-adequately.\footnote{see \csa{BNE_Op_opp} in the code for the
- default.}
+The macros serving as custom user replacements must be \emph{f}-expandable.%
+%
+\footnote{Prior to |1.4|, only \emph{x}-expandability was required. The author
+ could relax again the constraint, if asked to do so. Or perhaps simply add
+ an option for it.}
+%
+(except for the computation of factorials, which only has to be
+\emph{x}-expandable).
+
+They will by default receive arguments composed of explicit digit tokens, with
+no leading zeros, with at most one leading minus sign and no plus sign.
+
+The format of these arguments may depend on what the |opp=\foo| replacement
+macro does. If the custom |\foo| inserts a |+| when taking the opposite of a
+negative number, then the custom macros for arithmetic (and the |\foo| macro
+itself) must be able to handle arguments starting optionally with such a |+|.
Macro |\bnumexprsetup| can be used multiple times in the same document, thus
allowing to switch math engines or to remap operators to some other arithmetic
@@ -792,6 +819,8 @@ output is handled, it goes necessarily via the \xintbinhexname macros.
\noindent\kern\parindent\input README.md
\endgroup }\x
+%\clearpage
+
\section{Changes}
%\small
\begin{description}
@@ -816,29 +845,65 @@ output is handled, it goes necessarily via the \xintbinhexname macros.
% \label{sec:bnumexprcode}
% \etocdefaultlines
% \localtableofcontents
+% \etocmarkbothnouc{Package \bnumnameimp implementation}
%
% Comments are sparse. Actually at |1.4|, there are simply no comments. I
% transferred from \xintexprname its |\expanded| based infra-structure from
-% its own |1.4| release of January 2020. It is a possibility that, even
-% though I did remove very large chunks of unneeded macros, in the end, some
-% more simplifications could have been considered here.
+% its own |1.4| release of January 2020.
%
% Error handling by the parser is kept to a minimum; if something goes wrong,
% the offensive token gets discarded, and it is not even always the case that
% some expandable error message is issued.
%
+% A few comments at |1.4a|:
+% \begin{itemize}
+% \item It looked a bit costly and probably would have been mostly useless to
+% end users to integrate in \bnumname support for nested structures via
+% square brackets [, ], which is in \xintexprname since its January 2020
+% |1.4| release. But some underlying related architecture remains here; we
+% could make some micro-gains probably but diverging from upstream code
+% would make maintenance a nightmare.
+% \item The |\bnumexpr\relax| syntax creating an empty ople is by itself now
+% legal, and can be injected (comma separated) in an expression, keeping it
+% invariant, however |\bnumeval{}| ends in a |File ended while scanning use
+% of \BNE_print_c| error because |\BNEprint| makes the tacit requirement
+% that the 1D ople to output has at least one item.
+% \item Formerly, the |\csname...\endcsname| encapsulation technique had the
+% after-effect to allow the macros supporting the infix operators to be only
+% x-expandable. At |1.4|, I could have still allowed only x-expandable
+% macros, but, keeping in sync with upstream, I have used only a
+% |\romannumeral| trigger and did not insert an |\expanded|, so now the
+% support macros must be f-expandable. The |1.4a| release fixes the related
+% user documentation of |\bnumexprsetup| which was not updated at |1.4|.
+% The support macro for the factorial however needs only be x-expandable.
+% \item Also, I simply do not understand why the legacy user documentation
+% said that the support macros were supposed to f-expand their arguments, as
+% they are used only with arguments being explicit digit tokens (and
+% optional minus sign).
+% \item I hesitated a bit about making the decimal to hexadecimal and
+% hexadecimal to decimal support macros customizable, but dropped the
+% idea. Loading \xintbinhexname unconditionally has also the advantage to
+% not have to define some \xintkernelname provided helper macros; and it
+% still does not load \xintcorename, so is keeping dependencies somewhat low
+% and the |custom| option significant.
+% \item I had fleetingly consider a parser |\hexexpr| where input is
+% hexadecimal with no |"| prefix, but implementing this basically means
+% duplicating with new names a large chunk of the parser code to have parser
+% specific |"getnext"| macros for example. Not worth it.
+% \end{itemize}
+%
% \subsection{Package identification and catcode setup}
% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}%
-\ProvidesPackage{bnumexpr}[2021/05/12 v1.4 Expressions with big integers (JFB)]%
+\ProvidesPackage{bnumexpr}[2021/05/13 v1.4a Expressions with big integers (JFB)]%
% \end{macrocode}
% \subsection{Load unconditionally xintbinhex}
% Newly done at |1.4|. Formerly, \bnumname had no dependency if loaded
% with option |custom|. But for |1.4| release I have decided to add
% unconditional support for hexadecimal notation.
%
-% Let's require the most recent xint date at time of
-% writing. We should check for availability of \string\expanded\space but well.
+% Let's require the most recent \xintname date at time of
+% writing. We should check for availability of |\expanded| but well.
%
% \begin{macrocode}
\RequirePackage{xintbinhex}[2021/05/10]%
@@ -858,6 +923,9 @@ output is handled, it goes necessarily via the \xintbinhexname macros.
}%
% \end{macrocode}
% \subsection{Package options}
+% The keys should have been |Add|, |Sub|, \dots, not |add|, |sub|, \dots, so
+% internally macros |\BNE_Op_Add| etc\dots\ macro names would be used, but well,
+% let's simply leave with this.
% \begin{macrocode}
\def\BNEtmpa {0}%
\DeclareOption {custom}{\def\BNEtmpa {1}}%
@@ -869,7 +937,8 @@ output is handled, it goes necessarily via the \xintbinhexname macros.
\RequirePackage{xintcore}[2021/05/10]%
\bnumexprsetup{add=\xintiiAdd, sub=\xintiiSub, mul=\xintiiMul,
divround=\xintiiDivRound, div=\xintiiDivFloor,
- mod=\xintiiMod, pow=\xintiiPow, fac=\xintiiFac}%
+ mod=\xintiiMod, pow=\xintiiPow, fac=\xintiiFac,
+ opp=\xintiiOpp}%
}%
% \end{macrocode}
% Strangely those three are not defined in xintkernel.sty, but only in xint.sty
@@ -1148,12 +1217,17 @@ output is handled, it goes necessarily via the \xintbinhexname macros.
}%
}%
\let\BNE_done\space
+\def\BNE_getop_legacy #1%
+{%
+ \expanded{\unexpanded{{#1}}\expandafter}\romannumeral`&&@\BNE_getop
+}%
\expandafter\BNE_tmpa
\csname BNE_start\expandafter\endcsname
\csname BNE_check\expandafter\endcsname
\csname BNE_checkp\expandafter\endcsname
\csname BNE_op_-xii\expandafter\endcsname
\csname BNE_extra_)\endcsname
+\catcode`) 11
\def\BNE_tmpa #1#2#3#4#5#6%
{%
\def #1##1% op_(
@@ -1191,7 +1265,6 @@ output is handled, it goes necessarily via the \xintbinhexname macros.
\csname BNE_check-_)\expandafter\endcsname
\csname BNE_checkp_)\expandafter\endcsname
\csname BNE_op_-xii\endcsname
-\catcode`) 11
\let\BNE_precedence_)\xint_c_i
\def\BNE_missing_)
{\XINT_expandableerror{Sorry to report a missing ) at the end of this journey.}%
@@ -1199,6 +1272,11 @@ output is handled, it goes necessarily via the \xintbinhexname macros.
\catcode`) 12
% \end{macrocode}
% \subsection{The comma as binary operator}
+% At |1.4|, it is simply a union operator for 1D oples. Inserting directly
+% here a |<space><comma>| separator (as in earlier releases) in accumulated
+% result would avoid having to do it on output but to the cost of diverging
+% from \xintexprname upstream code, and to have to let the |\evaltohex| output
+% routine handle comma separated values rather than braced values.
% \begin{macrocode}
\def\BNE_tmpa #1#2#3#4#5%
{%
@@ -1234,6 +1312,15 @@ output is handled, it goes necessarily via the \xintbinhexname macros.
\expandafter\let\csname BNE_precedence_,\endcsname\xint_c_iii
% \end{macrocode}
% \subsection{The minus as prefix operator of variable precedence level}
+% This |\BNE_Op_opp| causes trouble as at |1.4| it must be f-expandable,
+% whereas earlier it expanded inside |\csname...\endcsname| context, so I
+% could define it as {\catcode`\#12 |\if-#1\else\if0#10\else-#1\fi\fi|} where
+% {\catcode`\#12 |#1|} was the
+% first token of unbraced argument but this meant at |1.4| an added
+% |\xint_firstofone| here. Well let's return to sanity at |1.4a| and not add
+% the |\xint_firstofone| and simply default |\BNE_Op_opp| to |\xintiiOpp|,
+% which it should have been all along! And on this occasion let's trim user
+% documentation of irrelevant complications.
% \begin{macrocode}
\def\BNE_tmpb #1#2#3#4#5%
{%
@@ -1245,7 +1332,7 @@ output is handled, it goes necessarily via the \xintbinhexname macros.
\def #2##1##2##3% \BNE_exec_-<level>
{%
\expandafter ##1\expandafter ##2\expandafter
- {\expandafter{\romannumeral`&&@\expandafter\BNE_Op_opp\xint_firstofone##3}}%
+ {\expandafter{\romannumeral`&&@\BNE_Op_opp##3}}%
}%
\def #3##1% \BNE_check-_-<level>
{%
@@ -1277,9 +1364,15 @@ output is handled, it goes necessarily via the \xintbinhexname macros.
\BNE_tmpa {xiv}%
\BNE_tmpa {xvi}%
\BNE_tmpa {xviii}%
-\def\BNE_Op_opp #1{\if-#1\else\if0#10\else-#1\fi\fi }%
% \end{macrocode}
% \subsection{The infix operators.}
+% I could have at the |1.4| refactoring injected usage of |\expanded| here,
+% but kept in sync with upstream \xintexprname code.
+%
+% Macro names are somewhat bad and there is much risk of confusion in future
+% maintenance of |\BNE_Op_| prefix (used for |\BNE_Op_add| etc...; besides
+% this should have been |\BNE_Op_Add|) and |\BNE_op_| prefix (used for
+% {\catcode`+ 11 |\BNE_op_+|} etc...).
% \begin{macrocode}
\def\BNE_defbin_c #1#2#3#4#5#6#7%
{%
@@ -1337,6 +1430,7 @@ output is handled, it goes necessarily via the \xintbinhexname macros.
\expandafter\let\csname BNE_precedence_***\endcsname \xint_c_xvi
% \end{macrocode}
% \subsection{! as postfix factorial operator}
+% This one uses |\expanded|.
% \begin{macrocode}
\catcode`! 11
\let\BNE_precedence_! \xint_c_xx
@@ -1354,23 +1448,8 @@ output is handled, it goes necessarily via the \xintbinhexname macros.
% \MakePercentComment
%</package>
%<*dtx>
-\DeleteShortVerb{\|}
-\CharacterTable
- {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
- Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
- Digits \0\1\2\3\4\5\6\7\8\9
- Exclamation \! Double quote \" Hash (number) \#
- Dollar \$ Percent \% Ampersand \&
- Acute accent \' Left paren \( Right paren \)
- Asterisk \* Plus \+ Comma \,
- Minus \- Point \. Solidus \/
- Colon \: Semicolon \; Less than \<
- Equals \= Greater than \> Question mark \?
- Commercial at \@ Left bracket \[ Backslash \\
- Right bracket \] Circumflex \^ Underscore \_
- Grave accent \` Left brace \{ Vertical bar \|
- Right brace \} Tilde \~}
-\CheckSum {949}
-\makeatletter\check@checksum\makeatother
-\Finale
+\DeleteShortVerb{\|}%
+\CheckSum {947}%
+\makeatletter\check@checksum\makeatother%
+\Finale%
%% End of file xint.dtx
diff --git a/macros/latex/contrib/bnumexpr/bnumexpr.pdf b/macros/latex/contrib/bnumexpr/bnumexpr.pdf
index d6fce09181..79f259f3f2 100644
--- a/macros/latex/contrib/bnumexpr/bnumexpr.pdf
+++ b/macros/latex/contrib/bnumexpr/bnumexpr.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/changes.drv b/macros/latex/contrib/changes/changes.drv
index cfb813e288..e8e7868fb1 100644
--- a/macros/latex/contrib/changes/changes.drv
+++ b/macros/latex/contrib/changes/changes.drv
@@ -1,6 +1,6 @@
%%%
% driver file of changes package
-\newcommand{\docversion}{4.0.3}
+\newcommand{\docversion}{4.0.4}
\documentclass[titlepage, parskip=half, toc=flat, cleardoublepage=empty, captions=nooneline, origlongtable, english]{scrartcl}
diff --git a/macros/latex/contrib/changes/changes.dtx b/macros/latex/contrib/changes/changes.dtx
index cf459852f9..cdb43d7d46 100644
--- a/macros/latex/contrib/changes/changes.dtx
+++ b/macros/latex/contrib/changes/changes.dtx
@@ -66,6 +66,7 @@
% \changes{v4.0.1}{2021/02/14}{bugfix: Command do undefined}
% \changes{v4.0.2}{2021/04/05}{bugfix: documentation with ifthenelse references}
% \changes{v4.0.3}{2021/05/09}{bugfix: compile error with cite command in change markup with final option}
+% \changes{v4.0.4}{2021/05/13}{bugfix: added missing regression.dtx to ctan archive; no code change}
% \GetFileInfo{changes.dtx}
% \RecordChanges
%
@@ -105,8 +106,8 @@
% Type some information to the console.
% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{changes}[2021/05/09 v4.0.3 changes package]
-\typeout{*** changes package 2021/05/09 v4.0.3 ***}
+\ProvidesPackage{changes}[2021/05/13 v4.0.4 changes package]
+\typeout{*** changes package 2021/05/13 v4.0.4 ***}
% \end{macrocode}
%
% Package \docpackage{xkeyval} provides options with key-value-pairs.
diff --git a/macros/latex/contrib/changes/changes.english.pdf b/macros/latex/contrib/changes/changes.english.pdf
index 4b4e0b695b..3966c3b985 100644
--- a/macros/latex/contrib/changes/changes.english.pdf
+++ b/macros/latex/contrib/changes/changes.english.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/changes.english.withcode.pdf b/macros/latex/contrib/changes/changes.english.withcode.pdf
index b5f0ef869a..fb527586e1 100644
--- a/macros/latex/contrib/changes/changes.english.withcode.pdf
+++ b/macros/latex/contrib/changes/changes.english.withcode.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/changes.ins b/macros/latex/contrib/changes/changes.ins
index 33ca5ae772..537ecf5d1e 100644
--- a/macros/latex/contrib/changes/changes.ins
+++ b/macros/latex/contrib/changes/changes.ins
@@ -1,6 +1,6 @@
%% This file creates the needed files from changes.dtx
%%
-\def\filedate{2021/02/14}
+\def\filedate{2021/05/13}
\def\batchfile{changes.ins}
\input docstrip
@@ -153,7 +153,7 @@ Copyright 2007-2021 Ekkart Kleinod
%
\file{examples/changes.example.screenshot.tex}{\from{example-screenshot.dtx}{example:screenshot}}
%
- \file{regression/changes.regression.draft.tex}{\from{regression.dtx}{regression:draft}}
+ \file{regression/changes.regression.draft.tex}{\from{regression.dtx}{regression:draft}}
\file{regression/changes.regression.final.tex}{\from{regression.dtx}{regression:final}}
}
diff --git a/macros/latex/contrib/changes/changes.ngerman.pdf b/macros/latex/contrib/changes/changes.ngerman.pdf
index db7e686fad..d96ed9c052 100644
--- a/macros/latex/contrib/changes/changes.ngerman.pdf
+++ b/macros/latex/contrib/changes/changes.ngerman.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.addedmarkup.bf.pdf b/macros/latex/contrib/changes/examples/changes.example.addedmarkup.bf.pdf
index 55ca5987a4..dc0c3dd07a 100644
--- a/macros/latex/contrib/changes/examples/changes.example.addedmarkup.bf.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.addedmarkup.bf.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.addedmarkup.colored.pdf b/macros/latex/contrib/changes/examples/changes.example.addedmarkup.colored.pdf
index ec67a5c59b..9b20a91f4b 100644
--- a/macros/latex/contrib/changes/examples/changes.example.addedmarkup.colored.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.addedmarkup.colored.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.addedmarkup.dashuline.pdf b/macros/latex/contrib/changes/examples/changes.example.addedmarkup.dashuline.pdf
index 42755a29d0..997338b6fa 100644
--- a/macros/latex/contrib/changes/examples/changes.example.addedmarkup.dashuline.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.addedmarkup.dashuline.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.addedmarkup.dotuline.pdf b/macros/latex/contrib/changes/examples/changes.example.addedmarkup.dotuline.pdf
index 3d82022ab6..d22a436c8b 100644
--- a/macros/latex/contrib/changes/examples/changes.example.addedmarkup.dotuline.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.addedmarkup.dotuline.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.addedmarkup.em.pdf b/macros/latex/contrib/changes/examples/changes.example.addedmarkup.em.pdf
index 55c5d2326c..05fda41a2c 100644
--- a/macros/latex/contrib/changes/examples/changes.example.addedmarkup.em.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.addedmarkup.em.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.addedmarkup.it.pdf b/macros/latex/contrib/changes/examples/changes.example.addedmarkup.it.pdf
index 95eaa4da82..82efbcff69 100644
--- a/macros/latex/contrib/changes/examples/changes.example.addedmarkup.it.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.addedmarkup.it.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.addedmarkup.sl.pdf b/macros/latex/contrib/changes/examples/changes.example.addedmarkup.sl.pdf
index 60a30bdf1f..2d8e55c72e 100644
--- a/macros/latex/contrib/changes/examples/changes.example.addedmarkup.sl.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.addedmarkup.sl.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.addedmarkup.uline.pdf b/macros/latex/contrib/changes/examples/changes.example.addedmarkup.uline.pdf
index c5bd26700c..e42b78e69f 100644
--- a/macros/latex/contrib/changes/examples/changes.example.addedmarkup.uline.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.addedmarkup.uline.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.addedmarkup.uuline.pdf b/macros/latex/contrib/changes/examples/changes.example.addedmarkup.uuline.pdf
index 2778aa204e..cf0f7977ca 100644
--- a/macros/latex/contrib/changes/examples/changes.example.addedmarkup.uuline.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.addedmarkup.uuline.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.addedmarkup.uwave.pdf b/macros/latex/contrib/changes/examples/changes.example.addedmarkup.uwave.pdf
index 98ed53ebba..174d468e10 100644
--- a/macros/latex/contrib/changes/examples/changes.example.addedmarkup.uwave.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.addedmarkup.uwave.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.addedmarkup.wrong.pdf b/macros/latex/contrib/changes/examples/changes.example.addedmarkup.wrong.pdf
index 7f5dea591a..b6afc108f3 100644
--- a/macros/latex/contrib/changes/examples/changes.example.addedmarkup.wrong.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.addedmarkup.wrong.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.authormarkup.brackets.pdf b/macros/latex/contrib/changes/examples/changes.example.authormarkup.brackets.pdf
index 471640cda0..04849c936c 100644
--- a/macros/latex/contrib/changes/examples/changes.example.authormarkup.brackets.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.authormarkup.brackets.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.authormarkup.footnote.pdf b/macros/latex/contrib/changes/examples/changes.example.authormarkup.footnote.pdf
index f850b6d45c..8307c1eb34 100644
--- a/macros/latex/contrib/changes/examples/changes.example.authormarkup.footnote.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.authormarkup.footnote.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.authormarkup.none.pdf b/macros/latex/contrib/changes/examples/changes.example.authormarkup.none.pdf
index f530551bb3..8526a878c9 100644
--- a/macros/latex/contrib/changes/examples/changes.example.authormarkup.none.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.authormarkup.none.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.authormarkup.subscript.pdf b/macros/latex/contrib/changes/examples/changes.example.authormarkup.subscript.pdf
index 87fca6e7b5..5722d29e3c 100644
--- a/macros/latex/contrib/changes/examples/changes.example.authormarkup.subscript.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.authormarkup.subscript.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.authormarkup.superscript.pdf b/macros/latex/contrib/changes/examples/changes.example.authormarkup.superscript.pdf
index cdaf9ae0f1..614753eae4 100644
--- a/macros/latex/contrib/changes/examples/changes.example.authormarkup.superscript.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.authormarkup.superscript.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.authormarkup.wrong.pdf b/macros/latex/contrib/changes/examples/changes.example.authormarkup.wrong.pdf
index 813ae0f2ed..f92a3815a6 100644
--- a/macros/latex/contrib/changes/examples/changes.example.authormarkup.wrong.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.authormarkup.wrong.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.authormarkupposition.left.pdf b/macros/latex/contrib/changes/examples/changes.example.authormarkupposition.left.pdf
index 41cc948b14..4baa2793e8 100644
--- a/macros/latex/contrib/changes/examples/changes.example.authormarkupposition.left.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.authormarkupposition.left.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.authormarkupposition.right.pdf b/macros/latex/contrib/changes/examples/changes.example.authormarkupposition.right.pdf
index 053b1a7108..bea03c7f39 100644
--- a/macros/latex/contrib/changes/examples/changes.example.authormarkupposition.right.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.authormarkupposition.right.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.authormarkupposition.wrong.pdf b/macros/latex/contrib/changes/examples/changes.example.authormarkupposition.wrong.pdf
index 637ab58f9c..5cc15530ea 100644
--- a/macros/latex/contrib/changes/examples/changes.example.authormarkupposition.wrong.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.authormarkupposition.wrong.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.authormarkuptext.id.pdf b/macros/latex/contrib/changes/examples/changes.example.authormarkuptext.id.pdf
index 54b6055a3a..e13fbc099e 100644
--- a/macros/latex/contrib/changes/examples/changes.example.authormarkuptext.id.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.authormarkuptext.id.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.authormarkuptext.name.pdf b/macros/latex/contrib/changes/examples/changes.example.authormarkuptext.name.pdf
index 73e03a81ab..09d2d962ba 100644
--- a/macros/latex/contrib/changes/examples/changes.example.authormarkuptext.name.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.authormarkuptext.name.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.authormarkuptext.wrong.pdf b/macros/latex/contrib/changes/examples/changes.example.authormarkuptext.wrong.pdf
index c32978d197..8f9b11217c 100644
--- a/macros/latex/contrib/changes/examples/changes.example.authormarkuptext.wrong.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.authormarkuptext.wrong.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.commandnameprefix.always.pdf b/macros/latex/contrib/changes/examples/changes.example.commandnameprefix.always.pdf
index 56836d4869..34e44f4122 100644
--- a/macros/latex/contrib/changes/examples/changes.example.commandnameprefix.always.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.commandnameprefix.always.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.commandnameprefix.ifneeded.pdf b/macros/latex/contrib/changes/examples/changes.example.commandnameprefix.ifneeded.pdf
index 116bb6814e..755b71e7b6 100644
--- a/macros/latex/contrib/changes/examples/changes.example.commandnameprefix.ifneeded.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.commandnameprefix.ifneeded.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.commandnameprefix.none.pdf b/macros/latex/contrib/changes/examples/changes.example.commandnameprefix.none.pdf
index eadce526ac..61d3656b21 100644
--- a/macros/latex/contrib/changes/examples/changes.example.commandnameprefix.none.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.commandnameprefix.none.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.commandnameprefix.wrong.pdf b/macros/latex/contrib/changes/examples/changes.example.commandnameprefix.wrong.pdf
index 39e0441dd1..4ae72adfb5 100644
--- a/macros/latex/contrib/changes/examples/changes.example.commandnameprefix.wrong.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.commandnameprefix.wrong.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.commentmarkup.footnote.pdf b/macros/latex/contrib/changes/examples/changes.example.commentmarkup.footnote.pdf
index b64d016ffe..a0c6078b41 100644
--- a/macros/latex/contrib/changes/examples/changes.example.commentmarkup.footnote.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.commentmarkup.footnote.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.commentmarkup.margin.pdf b/macros/latex/contrib/changes/examples/changes.example.commentmarkup.margin.pdf
index d0899372f6..da26c081e4 100644
--- a/macros/latex/contrib/changes/examples/changes.example.commentmarkup.margin.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.commentmarkup.margin.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.commentmarkup.todo.pdf b/macros/latex/contrib/changes/examples/changes.example.commentmarkup.todo.pdf
index 553d11bc50..c7df7d621f 100644
--- a/macros/latex/contrib/changes/examples/changes.example.commentmarkup.todo.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.commentmarkup.todo.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.commentmarkup.uwave.pdf b/macros/latex/contrib/changes/examples/changes.example.commentmarkup.uwave.pdf
index 72f1b090d8..9dcab9f153 100644
--- a/macros/latex/contrib/changes/examples/changes.example.commentmarkup.uwave.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.commentmarkup.uwave.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.defaultcolor.pdf b/macros/latex/contrib/changes/examples/changes.example.defaultcolor.pdf
index 3bcbbbd277..0927c66a56 100644
--- a/macros/latex/contrib/changes/examples/changes.example.defaultcolor.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.defaultcolor.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.bf.pdf b/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.bf.pdf
index 5165d0142d..f7bc342800 100644
--- a/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.bf.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.bf.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.colored.pdf b/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.colored.pdf
index ab50ae7042..7bd79fce36 100644
--- a/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.colored.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.colored.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.dashuline.pdf b/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.dashuline.pdf
index cd3db0cff5..e41a79f0e1 100644
--- a/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.dashuline.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.dashuline.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.dotuline.pdf b/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.dotuline.pdf
index 8dbe2decd7..5996794da5 100644
--- a/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.dotuline.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.dotuline.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.em.pdf b/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.em.pdf
index a1339f3f13..71d6ae63da 100644
--- a/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.em.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.em.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.it.pdf b/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.it.pdf
index 293abd5051..a7360c45e1 100644
--- a/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.it.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.it.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.sl.pdf b/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.sl.pdf
index 7ec00ac4be..52c8856fe5 100644
--- a/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.sl.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.sl.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.sout.pdf b/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.sout.pdf
index b14b88a92e..25da40e2a4 100644
--- a/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.sout.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.sout.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.uline.pdf b/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.uline.pdf
index 9114b60379..0bc0bb96db 100644
--- a/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.uline.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.uline.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.uuline.pdf b/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.uuline.pdf
index de00241473..3b29e78138 100644
--- a/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.uuline.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.uuline.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.uwave.pdf b/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.uwave.pdf
index 36d0f9277c..a0b414f540 100644
--- a/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.uwave.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.uwave.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.wrong.pdf b/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.wrong.pdf
index 17f59b5f0f..d5e92334b6 100644
--- a/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.wrong.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.wrong.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.xout.pdf b/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.xout.pdf
index df2ca6a4e8..7c88d36d25 100644
--- a/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.xout.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.deletedmarkup.xout.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.draft.pdf b/macros/latex/contrib/changes/examples/changes.example.draft.pdf
index 19604e3dc1..7487224028 100644
--- a/macros/latex/contrib/changes/examples/changes.example.draft.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.draft.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.final.pdf b/macros/latex/contrib/changes/examples/changes.example.final.pdf
index 8b220865d3..ba26534645 100644
--- a/macros/latex/contrib/changes/examples/changes.example.final.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.final.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.highlightmarkup.background.pdf b/macros/latex/contrib/changes/examples/changes.example.highlightmarkup.background.pdf
index c15f9259b8..5454e5cb9e 100644
--- a/macros/latex/contrib/changes/examples/changes.example.highlightmarkup.background.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.highlightmarkup.background.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.highlightmarkup.uuline.pdf b/macros/latex/contrib/changes/examples/changes.example.highlightmarkup.uuline.pdf
index 5980796240..44660333cc 100644
--- a/macros/latex/contrib/changes/examples/changes.example.highlightmarkup.uuline.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.highlightmarkup.uuline.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.highlightmarkup.uwave.pdf b/macros/latex/contrib/changes/examples/changes.example.highlightmarkup.uwave.pdf
index 5c9b001fbd..b0dde8c21e 100644
--- a/macros/latex/contrib/changes/examples/changes.example.highlightmarkup.uwave.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.highlightmarkup.uwave.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.listofchanges.all.pdf b/macros/latex/contrib/changes/examples/changes.example.listofchanges.all.pdf
index 8c0cc20248..1d91a78803 100644
--- a/macros/latex/contrib/changes/examples/changes.example.listofchanges.all.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.listofchanges.all.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.listofchanges.compactsummary.pdf b/macros/latex/contrib/changes/examples/changes.example.listofchanges.compactsummary.pdf
index 26a11f1814..d4e2dc9286 100644
--- a/macros/latex/contrib/changes/examples/changes.example.listofchanges.compactsummary.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.listofchanges.compactsummary.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.listofchanges.list.pdf b/macros/latex/contrib/changes/examples/changes.example.listofchanges.list.pdf
index 02ba064853..bf123cce50 100644
--- a/macros/latex/contrib/changes/examples/changes.example.listofchanges.list.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.listofchanges.list.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.listofchanges.show.pdf b/macros/latex/contrib/changes/examples/changes.example.listofchanges.show.pdf
index 5d8bd6bf4c..65c702e413 100644
--- a/macros/latex/contrib/changes/examples/changes.example.listofchanges.show.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.listofchanges.show.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.listofchanges.summary.pdf b/macros/latex/contrib/changes/examples/changes.example.listofchanges.summary.pdf
index 59a489ead4..565a258ad9 100644
--- a/macros/latex/contrib/changes/examples/changes.example.listofchanges.summary.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.listofchanges.summary.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.listofchanges.title.pdf b/macros/latex/contrib/changes/examples/changes.example.listofchanges.title.pdf
index 378bc395c2..64ca9aa1af 100644
--- a/macros/latex/contrib/changes/examples/changes.example.listofchanges.title.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.listofchanges.title.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.listofchanges.wrong.pdf b/macros/latex/contrib/changes/examples/changes.example.listofchanges.wrong.pdf
index 2f0c65b9a9..302a98cfcd 100644
--- a/macros/latex/contrib/changes/examples/changes.example.listofchanges.wrong.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.listofchanges.wrong.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.markup.bfit.pdf b/macros/latex/contrib/changes/examples/changes.example.markup.bfit.pdf
index 335460ea5d..02216b7feb 100644
--- a/macros/latex/contrib/changes/examples/changes.example.markup.bfit.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.markup.bfit.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.markup.default.pdf b/macros/latex/contrib/changes/examples/changes.example.markup.default.pdf
index 5e19e72dad..e7808d8a3d 100644
--- a/macros/latex/contrib/changes/examples/changes.example.markup.default.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.markup.default.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.markup.nocolor.pdf b/macros/latex/contrib/changes/examples/changes.example.markup.nocolor.pdf
index f22f6b88bc..e9aa8961aa 100644
--- a/macros/latex/contrib/changes/examples/changes.example.markup.nocolor.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.markup.nocolor.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.markup.underlined.pdf b/macros/latex/contrib/changes/examples/changes.example.markup.underlined.pdf
index 69a6bafc59..4e857736ad 100644
--- a/macros/latex/contrib/changes/examples/changes.example.markup.underlined.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.markup.underlined.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.markup.wrong.pdf b/macros/latex/contrib/changes/examples/changes.example.markup.wrong.pdf
index ad081f72cb..92d173d497 100644
--- a/macros/latex/contrib/changes/examples/changes.example.markup.wrong.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.markup.wrong.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.packageoptions.todonotes.pdf b/macros/latex/contrib/changes/examples/changes.example.packageoptions.todonotes.pdf
index 0e00c4420f..e4b03e2b5d 100644
--- a/macros/latex/contrib/changes/examples/changes.example.packageoptions.todonotes.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.packageoptions.todonotes.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.packageoptions.truncate.pdf b/macros/latex/contrib/changes/examples/changes.example.packageoptions.truncate.pdf
index c98fb27a2e..dcc53cb087 100644
--- a/macros/latex/contrib/changes/examples/changes.example.packageoptions.truncate.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.packageoptions.truncate.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.packageoptions.ulem.pdf b/macros/latex/contrib/changes/examples/changes.example.packageoptions.ulem.pdf
index 880cadda7d..8505cb8df9 100644
--- a/macros/latex/contrib/changes/examples/changes.example.packageoptions.ulem.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.packageoptions.ulem.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.packageoptions.xcolor.pdf b/macros/latex/contrib/changes/examples/changes.example.packageoptions.xcolor.pdf
index 3089085f93..c14ec5b69d 100644
--- a/macros/latex/contrib/changes/examples/changes.example.packageoptions.xcolor.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.packageoptions.xcolor.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.screenshot.pdf b/macros/latex/contrib/changes/examples/changes.example.screenshot.pdf
index 2eb639c281..f160be560a 100644
--- a/macros/latex/contrib/changes/examples/changes.example.screenshot.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.screenshot.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.setaddedmarkup.pdf b/macros/latex/contrib/changes/examples/changes.example.setaddedmarkup.pdf
index a83f2f1064..3bd6988e6f 100644
--- a/macros/latex/contrib/changes/examples/changes.example.setaddedmarkup.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.setaddedmarkup.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.setauthormarkup.pdf b/macros/latex/contrib/changes/examples/changes.example.setauthormarkup.pdf
index c6d7119322..7daf91ae92 100644
--- a/macros/latex/contrib/changes/examples/changes.example.setauthormarkup.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.setauthormarkup.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.setauthormarkupposition.pdf b/macros/latex/contrib/changes/examples/changes.example.setauthormarkupposition.pdf
index fa609d6a4d..a1d970adaf 100644
--- a/macros/latex/contrib/changes/examples/changes.example.setauthormarkupposition.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.setauthormarkupposition.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.setauthormarkuptext.pdf b/macros/latex/contrib/changes/examples/changes.example.setauthormarkuptext.pdf
index 1780b0bb63..6d5b376fda 100644
--- a/macros/latex/contrib/changes/examples/changes.example.setauthormarkuptext.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.setauthormarkuptext.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.setcommentmarkup.pdf b/macros/latex/contrib/changes/examples/changes.example.setcommentmarkup.pdf
index a0d62a22b6..95bb7d328e 100644
--- a/macros/latex/contrib/changes/examples/changes.example.setcommentmarkup.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.setcommentmarkup.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.setdeletedmarkup.pdf b/macros/latex/contrib/changes/examples/changes.example.setdeletedmarkup.pdf
index 75d1f0b381..b41d6fad38 100644
--- a/macros/latex/contrib/changes/examples/changes.example.setdeletedmarkup.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.setdeletedmarkup.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.sethighlightmarkup.pdf b/macros/latex/contrib/changes/examples/changes.example.sethighlightmarkup.pdf
index 904094ba18..bad03fbfd1 100644
--- a/macros/latex/contrib/changes/examples/changes.example.sethighlightmarkup.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.sethighlightmarkup.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.setsocextension.pdf b/macros/latex/contrib/changes/examples/changes.example.setsocextension.pdf
index c76adf1d00..985d432902 100644
--- a/macros/latex/contrib/changes/examples/changes.example.setsocextension.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.setsocextension.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.setsummarytowidth.pdf b/macros/latex/contrib/changes/examples/changes.example.setsummarytowidth.pdf
index 1dd53cc870..35306c3ce1 100644
--- a/macros/latex/contrib/changes/examples/changes.example.setsummarytowidth.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.setsummarytowidth.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.setsummarywidth.pdf b/macros/latex/contrib/changes/examples/changes.example.setsummarywidth.pdf
index 3b4a6ae2a0..bb075da847 100644
--- a/macros/latex/contrib/changes/examples/changes.example.setsummarywidth.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.setsummarywidth.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.settruncatewidth.pdf b/macros/latex/contrib/changes/examples/changes.example.settruncatewidth.pdf
index e816f0dde8..62b2878df3 100644
--- a/macros/latex/contrib/changes/examples/changes.example.settruncatewidth.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.settruncatewidth.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/examples/changes.example.simple.pdf b/macros/latex/contrib/changes/examples/changes.example.simple.pdf
index 1a803ad07f..0c7385b600 100644
--- a/macros/latex/contrib/changes/examples/changes.example.simple.pdf
+++ b/macros/latex/contrib/changes/examples/changes.example.simple.pdf
Binary files differ
diff --git a/macros/latex/contrib/changes/regression.dtx b/macros/latex/contrib/changes/regression.dtx
new file mode 100644
index 0000000000..a3fe6c903a
--- /dev/null
+++ b/macros/latex/contrib/changes/regression.dtx
@@ -0,0 +1,187 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2007-2021
+% Ekkart Kleinod (ekleinod@edgesoft.de)
+% --------------------------------------------------------------------------
+%
+% 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 any later version.
+% The latest version of this license is in\\
+% \url{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 Ekkart Kleinod.
+% \fi
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+% \GetFileInfo{regression.dtx}
+%
+%^^A --------------------------------------------------------------------------
+%
+% Start the \LaTeX document the standard way.
+%
+% \begin{macrocode}
+\documentclass[11pt, a4paper, notitlepage, english]{article}
+\usepackage{babel}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*regression:draft>
+\usepackage[authormarkuptext=name]{changes}
+%</regression:draft>
+%<*regression:final>
+\usepackage[final]{changes}
+%</regression:final>
+%
+% Define some authors.
+%
+% \begin{macrocode}
+\definechangesauthor[color=green]{Green}
+\definechangesauthor[name={Mister Orange}, color=orange]{OA}
+\definechangesauthor{nochanges}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\begin{document}
+
+%<*regression:draft>
+ \section{Test empty string}
+
+ Anonymous author should have no space before the \added[comment=no space]{number} in the comment.
+
+ Author name should \added[id=OA]{appear here} but \added[id=Green]{id here}.
+
+ \listofchanges[title={List of changes should not contain empty author brackets}]
+
+ \listofchanges[style=compactsummary, title={Summary should not contain empty author brackets either}]
+%</regression:draft>
+
+%<*regression:final>
+ \section{Compile errors to avoid}
+
+ no compile error here (just a missing citation): --- \added{a cite inside added \cite{bibid}} ---
+
+ \section{Errors with empty replacement}
+
+ All corresponding lines should have the same width.
+
+ Text before deletion.
+ \deleted{Deleted text.}
+ Text after deletion.
+
+ Text before deletion. \deleted{Deleted text.} Text after deletion.
+
+ Text before deletion.
+ Text after deletion.
+
+
+ Text before replacement.
+ \replaced{}{Replaced text.}
+ Text after replacement.
+
+ Text before replacement. \replaced{}{Replaced text.} Text after replacement.
+
+ Text before replacement.
+ Text after replacement.
+
+
+ Text before replacement.
+ \replaced{}{}
+ Text after replacement.
+
+ Text before replacement. \replaced{}{} Text after replacement.
+
+ Text before replacement.
+ Text after replacement.
+
+
+ Text before addition.
+ \added{}
+ Text after addition.
+
+ Text before addition. \added{} Text after addition.
+
+ Text before addition.
+ Text after addition.
+
+ Text before comment.
+ \comment{Comment.}
+ Text after comment.
+
+ Text before comment. \comment{Comment.} Text after comment.
+
+ Text before comment.
+ Text after comment.
+
+ Text before empty comment.
+ \comment{}
+ Text after empty comment.
+
+ Text before empty comment. \comment{} Text after empty comment.
+
+ Text before empty comment.
+ Text after empty comment.
+
+ Text before highlight.
+ \highlight[comment={Highlight comment}]{Highlighted text.}
+ Text after highlight.
+
+ Text before highlight. \highlight[comment={Highlight comment}]{Highlighted text.} Text after highlight.
+
+ Text before highlight.
+ Highlighted text.
+ Text after highlight.
+
+ Text before empty highlight text.
+ \highlight[comment={Highlight comment}]{}
+ Text after empty highlight text.
+
+ Text before empty highlight text. \highlight[comment={Highlight comment}]{} Text after empty highlight text.
+
+ Text before empty highlight text.
+ Text after empty highlight text.
+
+ Text before empty highlight comment.
+ \highlight[comment={}]{Highlighted text.}
+ Text after empty highlight comment.
+
+ Text before empty highlight comment. \highlight[comment={}]{Highlighted text.} Text after empty highlight comment.
+
+ Text before empty highlight comment.
+ Highlighted text.
+ Text after empty highlight comment.
+
+ Text before empty highlight.
+ \highlight[comment={}]{}
+ Text after empty highlight.
+
+ Text before empty highlight. \highlight[comment={}]{} Text after empty highlight.
+
+ Text before empty highlight.
+ Text after empty highlight.
+
+%</regression:final>
+
+\end{document}
+% \end{macrocode}
+%
+%\Finale
+\endinput
diff --git a/macros/latex/contrib/huawei/README.md b/macros/latex/contrib/huawei/README.md
index ddb9d7db34..a6ae6ec72c 100644
--- a/macros/latex/contrib/huawei/README.md
+++ b/macros/latex/contrib/huawei/README.md
@@ -1,14 +1,16 @@
+[![make](https://github.com/yegor256/huawei.cls/actions/workflows/make.yml/badge.svg)](https://github.com/yegor256/huawei.cls/actions/workflows/make.yml)
+
Disclaimer: This is **NOT** a product of Huawei Technologies Co., Ltd.
This package is created in order to help some people working
with Huawei or inside Huawei to render some documents in LaTeX format.
You are welcome to use it at your own risk.
-You can use this [`huawei.cls`](huawei.cls) LaTeX style just by copying it to some local
-directory and then mentioning it in the preamble of all your documents
-(on my laptop it's called `/code/huawei.cls`):
+First, [install it](https://en.wikibooks.org/wiki/LaTeX/Installing_Extra_Packages)
+from [CTAN](https://ctan.org/pkg/huawei)
+and then use in the preamble:
```tex
-\documentclass[landscape]{/code/huawei}
+\documentclass[landscape]{huawei}
\author{Yegor Bugayenko}
\title{An Interesting Document About Something}
\begin{document}
diff --git a/macros/latex/contrib/huawei/huawei.cls b/macros/latex/contrib/huawei/huawei.cls
index 7ea0170c9c..1a8c9c2ef3 100644
--- a/macros/latex/contrib/huawei/huawei.cls
+++ b/macros/latex/contrib/huawei/huawei.cls
@@ -21,7 +21,7 @@
% SOFTWARE.
\NeedsTeXFormat{LaTeX2e}
-\ProvidesClass{huawei}[17/4/2021 0.1.0 Template for Huawei documents]
+\ProvidesClass{huawei}[13/05/2021 0.2.0 Template for Huawei documents]
\newif\ifnosecurity
\DeclareOption{nosecurity}{\nosecuritytrue}
\newif\ifnobrand
@@ -75,15 +75,13 @@
\noexpand\setstretch{\fpeval{(#1)*(\baselinestretch)}}%
}\x%
}
+\RequirePackage[maxnames=1,minnames=1,natbib=true,style=ieee,doi=false,url=false,isbn=false,isbn=false]{biblatex}
\RequirePackage[table]{xcolor}
\definecolor{huawei-red}{HTML}{CF0A2C}
\definecolor{huawei-black}{HTML}{232527}
\RequirePackage{tikz}
\RequirePackage{tabularx}
\RequirePackage{titling}
-\RequirePackage{fancyhdr}
- \pagestyle{empty}
-\RequirePackage{everypage}
\RequirePackage{svg}
\RequirePackage[normalem]{ulem}
\RequirePackage[hidelinks]{hyperref}
@@ -97,12 +95,6 @@
\endgroup\makeatother
\RequirePackage[absolute]{textpos}\TPGrid{16}{16}
-\newcommand\LeftHuaweiBar{%
- \begin{textblock}{1}[0,0](0,0)%
- \tikz \node[fill=huawei-red,minimum width=\TPHorizModule,minimum height=16\TPVertModule] {};%
- \end{textblock}%
-}
-
% Our custom commands to redefine:
\renewcommand\title[1]{\renewcommand\thetitle{#1}}
\newcommand\thetitle{Untitled}
@@ -115,7 +107,7 @@
% Custom commands
\newcommand\nospell[1]{#1}
-\newcommand\headers[1]{{\small\sffamily\color{gray}#1}}
+\newcommand\headers[1]{\setrelativestretch{0.8}{\small\sffamily\color{gray}#1}}
\newcommand\tbd[1]{{\color{red}#1}}
\newcommand\crumb[2]{\begin{minipage}{\columnwidth}\raggedright\textsc{#1}:\\#2\end{minipage}\vspace{4pt}}
\RequirePackage{tcolorbox}
@@ -132,116 +124,111 @@
\def\arraystretch{1.5}%
}
-\newcommand\PrintFirstPage[1]{
- \LeftHuaweiBar{}
- \def\param{#1}%
- \ifx\param\empty
- % nothing
- \else
- \includegraphics[height=2in]{#1}
- \fi
- \vspace*{0.5in}
- \maketitle
+\newcommand\LeftHuaweiBar{%
+ \begin{textblock}{1}[0,0](0,0)%
+ \tikz \node[fill=huawei-red,minimum width=\TPHorizModule,minimum height=16\TPVertModule] {};%
+ \end{textblock}%
}
-\AddEverypageHook{%
- \LeftHuaweiBar{}
- \ifnobrand%
- % nothing here
- \else%
- \begin{textblock}{8}[0,0](1.2,0.2)%
- \begin{tikzpicture}[y=0.80pt, x=0.80pt, yscale=-1, inner sep=0pt, outer sep=0pt]
- \begin{scope}[even odd rule,line width=0.800pt]
- \begin{scope}[shift={(0,-0.00024)}]
- \path[fill=huawei-black] (10.9375,30.2240) -- (10.9375,33.6097) .. controls (10.9375,34.5713) and (10.4603,35.0845) .. (9.5932,35.0845) .. controls (8.7212,35.0845) and (8.2411,34.5565) .. (8.2411,33.5686) -- (8.2411,30.2278) -- (7.0415,30.2278) -- (7.0415,33.6097) .. controls (7.0415,35.2737) and (7.9658,36.2272) .. (9.5774,36.2272) .. controls (11.2041,36.2272) and (12.1371,35.2554) .. (12.1371,33.5609) -- (12.1371,30.2240) -- (10.9375,30.2240) -- cycle;
- \path[fill=huawei-black] (15.3511,30.2240) -- (12.7456,36.1351) -- (13.9702,36.1351) -- (14.4731,34.9903) -- (14.5091,34.9045) -- (17.2158,34.9045) -- (17.7467,36.1351) -- (19.0045,36.1351) -- (16.4233,30.2590) -- (16.4001,30.2240) -- cycle;
- \path[fill=huawei-black] (22.4840,30.2240) -- (21.1414,34.2912) -- (19.8344,30.2271) -- (18.5578,30.2271) -- (20.6186,36.1388) -- (21.6120,36.1388) -- (22.9573,32.2553) -- (24.3016,36.1388) -- (25.3034,36.1388) -- (27.3592,30.2271) -- (26.1152,30.2271) -- (24.8055,34.2912) -- (23.4626,30.2240) -- cycle;
- \path[fill=huawei-black] (34.2236,30.2240) -- (34.2236,36.1300) -- (35.4074,36.1300) -- (35.4074,30.2240) -- cycle;
- \path[fill=huawei-black] (0.2686,30.2244) -- (0.2686,36.1384) -- (1.4686,36.1384) -- (1.4686,33.7365) -- (4.1780,33.7365) -- (4.1780,36.1384) -- (5.3783,36.1384) -- (5.3783,30.2244) -- (4.1780,30.2244) -- (4.1780,32.6102) -- (1.4686,32.6102) -- (1.4686,30.2244) -- cycle;
- \path[fill=huawei-black] (28.3267,30.2284) -- (28.3267,36.1344) -- (32.7928,36.1344) -- (32.7928,35.0575) -- (29.5105,35.0575) -- (29.5105,33.5931) -- (31.6931,33.5931) -- (31.6931,32.5160) -- (29.5105,32.5160) -- (29.5105,31.3052) -- (32.6785,31.3052) -- (32.6785,30.2284) -- cycle;
- \path[fill=white] (15.8594,31.7207) -- (16.7149,33.7008) -- (16.7119,33.7008) -- (16.7701,33.8374) -- (14.9552,33.8374) -- (15.0127,33.7008) -- (15.0117,33.7008) -- cycle;
- \path[fill=huawei-red] (15.2113,0.0001) .. controls (14.7353,0.0422) and (13.4491,0.3349) .. (13.4491,0.3349) -- (13.4486,0.3349) .. controls (10.5495,1.0843) and (9.8643,3.7151) .. (9.8643,3.7151) .. controls (9.7227,4.1575) and (9.6584,4.6109) .. (9.6395,5.0380) -- (9.6395,5.6194) .. controls (9.6780,6.5176) and (9.8777,7.1883) .. (9.8777,7.1883) .. controls (10.8461,11.4823) and (15.6075,18.5379) .. (16.6308,20.0200) .. controls (16.7034,20.0920) and (16.7615,20.0660) .. (16.7615,20.0660) .. controls (16.8720,20.0355) and (16.8633,19.9296) .. (16.8633,19.9296) -- (16.8654,19.9301) .. controls (18.4416,4.1760) and (15.2113,0.0001) .. (15.2113,0.0001) -- (15.2113,0.0001) -- cycle;
- \path[fill=huawei-red] (20.4192,0.0000) .. controls (20.4192,0.0000) and (17.1748,4.1782) .. (18.7521,19.9415) -- (18.7542,19.9415) .. controls (18.7664,20.0416) and (18.8374,20.0624) .. (18.8374,20.0624) .. controls (18.9430,20.1033) and (18.9971,20.0019) .. (18.9971,20.0019) -- (18.9976,20.0029) .. controls (20.0472,18.4829) and (24.7814,11.4657) .. (25.7455,7.1882) .. controls (25.7455,7.1882) and (26.2683,5.1179) .. (25.7636,3.7150) .. controls (25.7636,3.7150) and (25.0470,1.0434) .. (22.1442,0.3375) .. controls (22.1442,0.3375) and (21.3077,0.1251) .. (20.4193,0.0000) -- (20.4192,0.0000) -- cycle;
- \path[fill=huawei-red] (5.4542,4.7294) .. controls (5.4542,4.7294) and (2.6920,7.3513) .. (2.5547,10.1307) -- (2.5558,10.1307) -- (2.5558,10.5519) .. controls (2.5579,10.5836) and (2.5595,10.6157) .. (2.5615,10.6480) .. controls (2.6804,12.8893) and (4.3665,14.2157) .. (4.3665,14.2157) .. controls (7.0831,16.8634) and (13.6611,20.2062) .. (15.1896,20.9647) .. controls (15.2110,20.9727) and (15.2900,20.9985) .. (15.3364,20.9399) .. controls (15.3364,20.9399) and (15.3605,20.9216) .. (15.3715,20.8887) -- (15.3715,20.8189) .. controls (15.3704,20.8149) and (15.3683,20.8109) .. (15.3663,20.8065) -- (15.3669,20.8065) .. controls (11.1809,11.6620) and (5.4543,4.7294) .. (5.4543,4.7294) -- (5.4542,4.7294) -- cycle;
- \path[fill=huawei-red] (30.1695,4.7294) .. controls (30.1695,4.7294) and (24.4602,11.6403) .. (20.2761,20.7662) -- (20.2777,20.7657) .. controls (20.2777,20.7657) and (20.2283,20.8715) .. (20.3082,20.9399) .. controls (20.3082,20.9399) and (20.3320,20.9579) .. (20.3650,20.9652) -- (20.4229,20.9652) .. controls (20.4333,20.9622) and (20.4444,20.9582) .. (20.4554,20.9507) -- (20.4554,20.9517) .. controls (22.0255,20.1724) and (28.5525,16.8516) .. (31.2563,14.2162) .. controls (31.2563,14.2162) and (32.9686,12.8412) .. (33.0583,10.6334) .. controls (33.2560,7.5672) and (30.1696,4.7294) .. (30.1696,4.7294) -- (30.1695,4.7294) -- cycle;
- \path[fill=huawei-red] (35.3082,13.8080) .. controls (35.3082,13.8080) and (26.0003,18.8031) .. (21.1876,22.0494) -- (21.1882,22.0499) -- (21.1893,22.0509) .. controls (21.1893,22.0509) and (21.1019,22.1081) .. (21.1324,22.2106) .. controls (21.1324,22.2106) and (21.1781,22.2933) .. (21.2446,22.2933) -- (21.2446,22.2938) .. controls (22.9684,22.2968) and (29.4914,22.3041) .. (29.6549,22.2736) .. controls (29.6549,22.2736) and (30.4983,22.2399) .. (31.5406,21.8395) .. controls (31.5406,21.8395) and (33.8608,21.1019) .. (35.0659,18.4677) .. controls (35.0659,18.4677) and (35.6166,17.3662) .. (35.6246,15.8187) -- (35.6246,15.7531) .. controls (35.6206,15.1563) and (35.5365,14.4957) .. (35.3083,13.8080) -- (35.3082,13.8080) -- cycle;
- \path[fill=huawei-red] (0.3129,13.8313) .. controls (-0.5339,16.4531) and (0.6062,18.5656) .. (0.6080,18.5690) .. controls (1.7962,21.0795) and (4.0641,21.8401) .. (4.0641,21.8401) .. controls (5.1112,22.2703) and (6.1586,22.3000) .. (6.1586,22.3000) .. controls (6.3221,22.3300) and (12.6713,22.3030) .. (14.3725,22.2950) .. controls (14.4445,22.2945) and (14.4842,22.2221) .. (14.4842,22.2221) .. controls (14.4892,22.2142) and (14.4936,22.2062) .. (14.4955,22.1989) -- (14.4955,22.1333) .. controls (14.4814,22.0893) and (14.4439,22.0584) .. (14.4439,22.0584) -- (14.4450,22.0578) .. controls (9.6347,18.8126) and (0.3130,13.8315) .. (0.3130,13.8315) -- (0.3129,13.8313) -- cycle;
- \path[fill=huawei-red] (14.1782,23.1010) -- (3.2285,23.4850) .. controls (4.4160,25.6018) and (6.4158,27.2469) .. (8.4990,26.7416) .. controls (9.9366,26.3822) and (13.1935,24.1105) .. (14.2687,23.3429) -- (14.2651,23.3399) .. controls (14.3487,23.2648) and (14.3188,23.2045) .. (14.3188,23.2045) .. controls (14.2913,23.1062) and (14.1783,23.1063) .. (14.1783,23.1063) -- (14.1782,23.1010) -- cycle;
- \path[fill=huawei-red] (21.4305,23.1090) -- (21.4294,23.1130) .. controls (21.4294,23.1130) and (21.3333,23.1252) .. (21.3064,23.1972) .. controls (21.3064,23.1972) and (21.2831,23.2956) .. (21.3478,23.3445) -- (21.3467,23.3455) .. controls (22.3950,24.0973) and (25.5729,26.3191) .. (27.1039,26.7505) .. controls (27.1039,26.7505) and (27.3359,26.8294) .. (27.7246,26.8435) -- (27.9581,26.8435) .. controls (28.9839,26.8075) and (30.7708,26.2805) .. (32.3946,23.4907) -- (21.4305,23.1090) -- cycle;
- \end{scope}%
- \end{scope}%
- \end{tikzpicture}%
- \end{textblock}%
- \fi%
- \begin{textblock}{8}[1,0](15.8,0.2)%
- \raggedleft\headers{%
- \ifnosecurity%
- % nothing here
- \else%
- \thesecurity
+\newcommand\HuaweiLogo{
+ \begin{tikzpicture}[y=0.80pt, x=0.80pt, yscale=-1, inner sep=0pt, outer sep=0pt]
+ \begin{scope}[even odd rule,line width=0.800pt]
+ \begin{scope}[shift={(0,-0.00024)}]
+ \path[fill=huawei-black] (10.9375,30.2240) -- (10.9375,33.6097) .. controls (10.9375,34.5713) and (10.4603,35.0845) .. (9.5932,35.0845) .. controls (8.7212,35.0845) and (8.2411,34.5565) .. (8.2411,33.5686) -- (8.2411,30.2278) -- (7.0415,30.2278) -- (7.0415,33.6097) .. controls (7.0415,35.2737) and (7.9658,36.2272) .. (9.5774,36.2272) .. controls (11.2041,36.2272) and (12.1371,35.2554) .. (12.1371,33.5609) -- (12.1371,30.2240) -- (10.9375,30.2240) -- cycle;
+ \path[fill=huawei-black] (15.3511,30.2240) -- (12.7456,36.1351) -- (13.9702,36.1351) -- (14.4731,34.9903) -- (14.5091,34.9045) -- (17.2158,34.9045) -- (17.7467,36.1351) -- (19.0045,36.1351) -- (16.4233,30.2590) -- (16.4001,30.2240) -- cycle;
+ \path[fill=huawei-black] (22.4840,30.2240) -- (21.1414,34.2912) -- (19.8344,30.2271) -- (18.5578,30.2271) -- (20.6186,36.1388) -- (21.6120,36.1388) -- (22.9573,32.2553) -- (24.3016,36.1388) -- (25.3034,36.1388) -- (27.3592,30.2271) -- (26.1152,30.2271) -- (24.8055,34.2912) -- (23.4626,30.2240) -- cycle;
+ \path[fill=huawei-black] (34.2236,30.2240) -- (34.2236,36.1300) -- (35.4074,36.1300) -- (35.4074,30.2240) -- cycle;
+ \path[fill=huawei-black] (0.2686,30.2244) -- (0.2686,36.1384) -- (1.4686,36.1384) -- (1.4686,33.7365) -- (4.1780,33.7365) -- (4.1780,36.1384) -- (5.3783,36.1384) -- (5.3783,30.2244) -- (4.1780,30.2244) -- (4.1780,32.6102) -- (1.4686,32.6102) -- (1.4686,30.2244) -- cycle;
+ \path[fill=huawei-black] (28.3267,30.2284) -- (28.3267,36.1344) -- (32.7928,36.1344) -- (32.7928,35.0575) -- (29.5105,35.0575) -- (29.5105,33.5931) -- (31.6931,33.5931) -- (31.6931,32.5160) -- (29.5105,32.5160) -- (29.5105,31.3052) -- (32.6785,31.3052) -- (32.6785,30.2284) -- cycle;
+ \path[fill=white] (15.8594,31.7207) -- (16.7149,33.7008) -- (16.7119,33.7008) -- (16.7701,33.8374) -- (14.9552,33.8374) -- (15.0127,33.7008) -- (15.0117,33.7008) -- cycle;
+ \path[fill=huawei-red] (15.2113,0.0001) .. controls (14.7353,0.0422) and (13.4491,0.3349) .. (13.4491,0.3349) -- (13.4486,0.3349) .. controls (10.5495,1.0843) and (9.8643,3.7151) .. (9.8643,3.7151) .. controls (9.7227,4.1575) and (9.6584,4.6109) .. (9.6395,5.0380) -- (9.6395,5.6194) .. controls (9.6780,6.5176) and (9.8777,7.1883) .. (9.8777,7.1883) .. controls (10.8461,11.4823) and (15.6075,18.5379) .. (16.6308,20.0200) .. controls (16.7034,20.0920) and (16.7615,20.0660) .. (16.7615,20.0660) .. controls (16.8720,20.0355) and (16.8633,19.9296) .. (16.8633,19.9296) -- (16.8654,19.9301) .. controls (18.4416,4.1760) and (15.2113,0.0001) .. (15.2113,0.0001) -- (15.2113,0.0001) -- cycle;
+ \path[fill=huawei-red] (20.4192,0.0000) .. controls (20.4192,0.0000) and (17.1748,4.1782) .. (18.7521,19.9415) -- (18.7542,19.9415) .. controls (18.7664,20.0416) and (18.8374,20.0624) .. (18.8374,20.0624) .. controls (18.9430,20.1033) and (18.9971,20.0019) .. (18.9971,20.0019) -- (18.9976,20.0029) .. controls (20.0472,18.4829) and (24.7814,11.4657) .. (25.7455,7.1882) .. controls (25.7455,7.1882) and (26.2683,5.1179) .. (25.7636,3.7150) .. controls (25.7636,3.7150) and (25.0470,1.0434) .. (22.1442,0.3375) .. controls (22.1442,0.3375) and (21.3077,0.1251) .. (20.4193,0.0000) -- (20.4192,0.0000) -- cycle;
+ \path[fill=huawei-red] (5.4542,4.7294) .. controls (5.4542,4.7294) and (2.6920,7.3513) .. (2.5547,10.1307) -- (2.5558,10.1307) -- (2.5558,10.5519) .. controls (2.5579,10.5836) and (2.5595,10.6157) .. (2.5615,10.6480) .. controls (2.6804,12.8893) and (4.3665,14.2157) .. (4.3665,14.2157) .. controls (7.0831,16.8634) and (13.6611,20.2062) .. (15.1896,20.9647) .. controls (15.2110,20.9727) and (15.2900,20.9985) .. (15.3364,20.9399) .. controls (15.3364,20.9399) and (15.3605,20.9216) .. (15.3715,20.8887) -- (15.3715,20.8189) .. controls (15.3704,20.8149) and (15.3683,20.8109) .. (15.3663,20.8065) -- (15.3669,20.8065) .. controls (11.1809,11.6620) and (5.4543,4.7294) .. (5.4543,4.7294) -- (5.4542,4.7294) -- cycle;
+ \path[fill=huawei-red] (30.1695,4.7294) .. controls (30.1695,4.7294) and (24.4602,11.6403) .. (20.2761,20.7662) -- (20.2777,20.7657) .. controls (20.2777,20.7657) and (20.2283,20.8715) .. (20.3082,20.9399) .. controls (20.3082,20.9399) and (20.3320,20.9579) .. (20.3650,20.9652) -- (20.4229,20.9652) .. controls (20.4333,20.9622) and (20.4444,20.9582) .. (20.4554,20.9507) -- (20.4554,20.9517) .. controls (22.0255,20.1724) and (28.5525,16.8516) .. (31.2563,14.2162) .. controls (31.2563,14.2162) and (32.9686,12.8412) .. (33.0583,10.6334) .. controls (33.2560,7.5672) and (30.1696,4.7294) .. (30.1696,4.7294) -- (30.1695,4.7294) -- cycle;
+ \path[fill=huawei-red] (35.3082,13.8080) .. controls (35.3082,13.8080) and (26.0003,18.8031) .. (21.1876,22.0494) -- (21.1882,22.0499) -- (21.1893,22.0509) .. controls (21.1893,22.0509) and (21.1019,22.1081) .. (21.1324,22.2106) .. controls (21.1324,22.2106) and (21.1781,22.2933) .. (21.2446,22.2933) -- (21.2446,22.2938) .. controls (22.9684,22.2968) and (29.4914,22.3041) .. (29.6549,22.2736) .. controls (29.6549,22.2736) and (30.4983,22.2399) .. (31.5406,21.8395) .. controls (31.5406,21.8395) and (33.8608,21.1019) .. (35.0659,18.4677) .. controls (35.0659,18.4677) and (35.6166,17.3662) .. (35.6246,15.8187) -- (35.6246,15.7531) .. controls (35.6206,15.1563) and (35.5365,14.4957) .. (35.3083,13.8080) -- (35.3082,13.8080) -- cycle;
+ \path[fill=huawei-red] (0.3129,13.8313) .. controls (-0.5339,16.4531) and (0.6062,18.5656) .. (0.6080,18.5690) .. controls (1.7962,21.0795) and (4.0641,21.8401) .. (4.0641,21.8401) .. controls (5.1112,22.2703) and (6.1586,22.3000) .. (6.1586,22.3000) .. controls (6.3221,22.3300) and (12.6713,22.3030) .. (14.3725,22.2950) .. controls (14.4445,22.2945) and (14.4842,22.2221) .. (14.4842,22.2221) .. controls (14.4892,22.2142) and (14.4936,22.2062) .. (14.4955,22.1989) -- (14.4955,22.1333) .. controls (14.4814,22.0893) and (14.4439,22.0584) .. (14.4439,22.0584) -- (14.4450,22.0578) .. controls (9.6347,18.8126) and (0.3130,13.8315) .. (0.3130,13.8315) -- (0.3129,13.8313) -- cycle;
+ \path[fill=huawei-red] (14.1782,23.1010) -- (3.2285,23.4850) .. controls (4.4160,25.6018) and (6.4158,27.2469) .. (8.4990,26.7416) .. controls (9.9366,26.3822) and (13.1935,24.1105) .. (14.2687,23.3429) -- (14.2651,23.3399) .. controls (14.3487,23.2648) and (14.3188,23.2045) .. (14.3188,23.2045) .. controls (14.2913,23.1062) and (14.1783,23.1063) .. (14.1783,23.1063) -- (14.1782,23.1010) -- cycle;
+ \path[fill=huawei-red] (21.4305,23.1090) -- (21.4294,23.1130) .. controls (21.4294,23.1130) and (21.3333,23.1252) .. (21.3064,23.1972) .. controls (21.3064,23.1972) and (21.2831,23.2956) .. (21.3478,23.3445) -- (21.3467,23.3455) .. controls (22.3950,24.0973) and (25.5729,26.3191) .. (27.1039,26.7505) .. controls (27.1039,26.7505) and (27.3359,26.8294) .. (27.7246,26.8435) -- (27.9581,26.8435) .. controls (28.9839,26.8075) and (30.7708,26.2805) .. (32.3946,23.4907) -- (21.4305,23.1090) -- cycle;
+ \end{scope}%
+ \end{scope}%
+ \end{tikzpicture}%
+}
+
+\RequirePackage{fancyhdr}
+ \pagestyle{fancy}
+ \renewcommand{\headrulewidth}{0pt}
+ \fancyhf{}
+ \fancyfoot[L]{
+ \LeftHuaweiBar{}
+ \ifnum\value{page}=1\else%
+ \ifnobrand\else%
+ \begin{textblock}{8}[0,0](1.2,0.2)%
+ \HuaweiLogo{}%
+ \end{textblock}%
\fi%
- }%
- \end{textblock}%
- \begin{textblock}{8}[0,1](1.2,15.8)%
- \headers{%
- \ifanonymous%
- % nothing here
- \else%
- \theauthor%
- \ifnosecurity%
- % nothing here
- \else,
- \theid
- \fi%
- \ifnobrand%
- % nothing here
- \else%
- \\[2pt]
+ \fi%
+ \begin{textblock}{8}[1,0](15.8,0.2)%
+ \raggedleft\headers{%
+ \ifnosecurity\else%
+ \thesecurity
\fi%
+ }%
+ \end{textblock}%
+ \begin{textblock}{8}[0,1](1.2,15.8)%
+ \ifnum\value{page}=1\else%
+ \headers{%
+ \ifanonymous\else%
+ \theauthor%
+ \ifnosecurity\else,
+ \theid
+ \fi%
+ \ifnobrand\else%
+ \newline
+ \fi%
+ \fi%
+ \ifnobrand\else%
+ \thecompany{}
+ \fi%
+ }%
\fi%
- \ifnobrand%
- % nothing here
- \else%
- \thecompany{}
- \fi%
- }%
- \end{textblock}%
- \begin{textblock}{8}[1,1](15.8,15.8)%
- \raggedleft\headers{%
- \ifnopaging%
- % nothing here
- \else%
- Page \#\thepage{} of \pageref*{LastPage}
- \ifnodate%
- % nothing here
- \else%
- \\[2pt]
+ \end{textblock}%
+ \begin{textblock}{8}[1,1](15.8,15.8)%
+ \raggedleft\headers{%
+ \ifnum\value{page}=1\else%
+ \ifnopaging\else%
+ Page \#\thepage{} of \pageref*{LastPage}%
+ \ifnodate\else%
+ \\
+ \fi%
+ \fi%
\fi%
- \fi%
- \ifnodate%
- % nothing here
- \else%
- \today{} \currenttime
- \fi%
- }%
- \end{textblock}%
-}
+ \ifnodate\else%
+ \today{} \currenttime
+ \fi%
+ }%
+ \end{textblock}%
+ }
\renewcommand\maketitle{%
-\vspace*{18pt}
-{\bfseries{\Huge\thetitle}}
-\\[6pt]
-\ifx\thesubtitle\empty\else%
- {\color{gray!50!black}\large\thesubtitle}
-\fi
-\\[18pt]
-\ifx\theauthor\empty\else%
- {\scshape\theauthor}\\
-\fi
-\ifx\theauthor\empty\else%
- {\theid}
-\fi
-\vspace{2em}
+ \vspace*{18pt}
+ {\bfseries{\Huge\thetitle}}
+ \\[6pt]
+ \ifx\thesubtitle\empty\else%
+ {\color{gray!50!black}\large\thesubtitle}
+ \fi
+ \\[18pt]
+ \ifanonymous\else%
+ \thecompany\newline
+ \fi
+ \ifx\theauthor\empty\else%
+ {\scshape\theauthor}%
+ \fi%
+ \ifx\theauthor\empty\else
+ \ifx\theid\empty\else
+ \;/ {\theid}
+ \fi
+ \fi\newline
+ \vspace{2em}
}
\newcommand\PrintThankYouPage{
@@ -274,6 +261,16 @@
cannot be held liable for the use of and reliance of the opinions, estimates, forecasts and
findings in these documents.}}}
+\newcommand\PrintFirstPage[1]{
+ \LeftHuaweiBar{}
+ \def\param{#1}%
+ \ifx\param\empty\else
+ \includegraphics[height=2in]{#1}
+ \fi
+ \vspace*{0.5in}
+ \maketitle
+}
+
\newcommand\PrintLastPage{
\newpage
\vspace*{1in}
@@ -285,15 +282,18 @@
\vspace{0.5in}
\begin{CJK}{UTF8}{gbsn}
- 把数字世界带入每个人、每个家庭、
每个组织,构建万物互联的智能世界。
+ 把数字世界带入每个人、每个家庭、
每个组织、构建万物互联的智能世界。
\end{CJK}
- Bring digital to every person, home and
- organization for a fully connected,
- intelligent world.
+ Bring digital to every person, home and organization
+ \newline
+ for a fully connected, intelligent world.
- \textbf{Copyright \copyright{} \the\year{} \thecompany{}\\
- All Rights Reserved.}
+ \textbf{%
+ Copyright \copyright{} \the\year{} \thecompany{}
+ \newline
+ All Rights Reserved.%
+ }
The information in this document may contain predictive
statements including, without limitation, statements regarding
@@ -308,4 +308,16 @@
\end{center}%
}
+\newcommand\PrintBibliography{
+ \setlength\bibitemsep{0pt}
+ \AtNextBibliography{\small}
+ \newpage
+ \raggedright
+ \iflandscape
+ \begin{multicols}{3}\setrelativestretch{1.0}{\printbibliography}\end{multicols}
+ \else
+ \begin{multicols}{2}\setrelativestretch{1.0}{\printbibliography}\end{multicols}
+ \fi
+}
+
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/huawei/huawei.pdf b/macros/latex/contrib/huawei/huawei.pdf
index d0341ad561..0c4cfd48e1 100644
--- a/macros/latex/contrib/huawei/huawei.pdf
+++ b/macros/latex/contrib/huawei/huawei.pdf
Binary files differ
diff --git a/macros/latex/contrib/huawei/huawei.tex b/macros/latex/contrib/huawei/huawei.tex
index adacc3b092..dc2d76e5cf 100644
--- a/macros/latex/contrib/huawei/huawei.tex
+++ b/macros/latex/contrib/huawei/huawei.tex
@@ -5,7 +5,9 @@
\begin{document}
\maketitle
-\ff{Version 0.1.0}
+\ff{Version: 0.2.0}
+\newline
+\ff{Date: 13/05/2021}
\section{Overview}
diff --git a/macros/latex/contrib/tabularray/README b/macros/latex/contrib/tabularray/README
new file mode 100644
index 0000000000..b4714bd0a7
--- /dev/null
+++ b/macros/latex/contrib/tabularray/README
@@ -0,0 +1,4 @@
+Package: Typeset tabulars and arrays with LaTeX3
+Author: Jianrui Lyu <tolvjr@163.com>
+Repository: https://github.com/lvjr/tabularray
+License: The LaTeX Project Public License 1.3
diff --git a/macros/latex/contrib/tabularray/tabularray.pdf b/macros/latex/contrib/tabularray/tabularray.pdf
new file mode 100644
index 0000000000..f367583b1b
--- /dev/null
+++ b/macros/latex/contrib/tabularray/tabularray.pdf
Binary files differ
diff --git a/macros/latex/contrib/tabularray/tabularray.sty b/macros/latex/contrib/tabularray/tabularray.sty
new file mode 100644
index 0000000000..dbd07ddc8e
--- /dev/null
+++ b/macros/latex/contrib/tabularray/tabularray.sty
@@ -0,0 +1,3897 @@
+%%% % -*- coding: utf-8 -*-
+%%% ----------------------------------------------------------------------------
+%%% Tabularray: Typeset tabulars and arrays with LaTeX3
+%%% Author : Jianrui Lyu <tolvjr@163.com>
+%%% Repository: https://github.com/lvjr/tabularray
+%%% License : The LaTeX Project Public License 1.3
+%%% ----------------------------------------------------------------------------
+
+%%% --------------------------------------------------------
+%% \section{Scratch Variables and Data Structures}
+%%% --------------------------------------------------------
+
+\NeedsTeXFormat{LaTeX2e}
+\RequirePackage{expl3}
+\ProvidesExplPackage{tabularray}{2021-05-13}{2021H}
+ {Typeset tabulars and arrays with LaTeX3}
+
+%\RequirePackage{xparse}
+\AtBeginDocument{\@ifpackageloaded{xcolor}{\RequirePackage{ninecolors}}{}}
+
+\ExplSyntaxOn
+
+\cs_if_exist:NF \vbox_set_top_to_ht:Nnn
+ {
+ \cs_new_protected:Npn \vbox_set_top_to_ht:Nnn #1 #2 #3
+ {
+ \tex_setbox:D #1 \tex_vtop:D to \dim_eval:n { #2 }
+ { \color_group_begin: #3 \par \color_group_end: }
+ }
+ }
+
+\cs_generate_variant:Nn \msg_error:nnnn { nnVn }
+\cs_generate_variant:Nn \prop_item:Nn { Ne, NV }
+\cs_generate_variant:Nn \prop_put:Nnn { Nxn, Nxx, NxV }
+\cs_generate_variant:Nn \regex_replace_all:NnN { NVN }
+\cs_generate_variant:Nn \seq_map_indexed_inline:Nn { cn }
+\cs_generate_variant:Nn \tl_gput_right:Nn { Nf }
+\prg_generate_conditional_variant:Nnn \clist_if_in:Nn { Nx } { TF }
+\prg_generate_conditional_variant:Nnn \prop_if_in:Nn { c } { T }
+\prg_generate_conditional_variant:Nnn \str_if_eq:nn { xn } { TF }
+\prg_generate_conditional_variant:Nnn \tl_if_eq:nn { en } { T, TF }
+\prg_generate_conditional_variant:Nnn \tl_if_head_eq_meaning:nN { VN } { T, TF }
+
+\tl_new:N \l__tblr_a_tl
+\tl_new:N \l__tblr_b_tl
+\tl_new:N \l__tblr_c_tl
+\tl_new:N \l__tblr_d_tl
+\tl_new:N \l__tblr_e_tl
+\tl_new:N \l__tblr_f_tl
+\tl_new:N \l__tblr_h_tl
+\tl_new:N \l__tblr_i_tl % for row index
+\tl_new:N \l__tblr_j_tl % for column index
+\tl_new:N \l__tblr_k_tl
+\tl_new:N \l__tblr_n_tl
+\tl_new:N \l__tblr_o_tl
+\tl_new:N \l__tblr_r_tl
+\tl_new:N \l__tblr_s_tl
+\tl_new:N \l__tblr_t_tl
+\tl_new:N \l__tblr_u_tl
+\tl_new:N \l__tblr_v_tl
+\tl_new:N \l__tblr_w_tl
+\tl_new:N \l__tblr_x_tl
+\tl_new:N \l__tblr_y_tl
+\int_new:N \l__tblr_a_int
+\int_new:N \l__tblr_c_int % for column number
+\int_new:N \l__tblr_r_int % for row number
+\dim_new:N \l__tblr_d_dim % for depth
+\dim_new:N \l__tblr_h_dim % for height
+\dim_new:N \l__tblr_o_dim
+\dim_new:N \l__tblr_p_dim
+\dim_new:N \l__tblr_q_dim
+\dim_new:N \l__tblr_r_dim
+\dim_new:N \l__tblr_s_dim
+\dim_new:N \l__tblr_t_dim
+\dim_new:N \l__tblr_v_dim
+\dim_new:N \l__tblr_w_dim % for width
+\box_new:N \l__tblr_a_box
+\box_new:N \l__tblr_b_box
+\box_new:N \l__tblr_c_box % for cell box
+\box_new:N \l__tblr_d_box
+
+\int_new:N \g_tblr_level_int % store table nesting level
+
+\cs_new_protected:Npn \__tblr_prop_gput:nnn #1 #2 #3
+ {
+ \prop_gput:cnn
+ { g_tblr_#1_ \int_use:N \g_tblr_level_int _prop } { #2 } { #3 }
+ }
+\cs_generate_variant:Nn \__tblr_prop_gput:nnn { nnx, nnV, nxn, nxx, nxV }
+
+\cs_new:Npn \__tblr_prop_item:nn #1 #2
+ {
+ \prop_item:cn { g_tblr_#1_ \int_use:N \g_tblr_level_int _prop } { #2 }
+ }
+\cs_generate_variant:Nn \__tblr_prop_item:nn { ne }
+
+\cs_new_protected:Npn \__tblr_prop_if_in:nnT #1
+ {
+ \prop_if_in:cnT { g_tblr_#1_ \int_use:N \g_tblr_level_int _prop }
+ }
+\cs_new_protected:Npn \__tblr_prop_if_in:nnF #1
+ {
+ \prop_if_in:cnF { g_tblr_#1_ \int_use:N \g_tblr_level_int _prop }
+ }
+\cs_new_protected:Npn \__tblr_prop_if_in:nnTF #1
+ {
+ \prop_if_in:cnTF { g_tblr_#1_ \int_use:N \g_tblr_level_int _prop }
+ }
+\prg_generate_conditional_variant:Nnn \__tblr_prop_if_in:nn { nx } { T, F, TF }
+
+\cs_new_protected:Npn \__tblr_prop_log:n #1
+ {
+ \prop_log:c { g_tblr_#1_ \int_use:N \g_tblr_level_int _prop }
+ }
+
+\cs_new_protected:Npn \__tblr_prop_map_inline:nn #1 #2
+ {
+ \prop_map_inline:cn { g_tblr_#1_ \int_use:N \g_tblr_level_int _prop } {#2}
+ }
+
+\cs_new_protected:Npn \__tblr_prop_gput_if_larger:nnn #1 #2 #3
+ {
+ \__tblr_gput_if_larger:cnn
+ { g_tblr_#1_ \int_use:N \g_tblr_level_int _prop } { #2 } { #3 }
+ }
+\cs_generate_variant:Nn \__tblr_prop_gput_if_larger:nnn { nnx, nnV, nxn, nxx, nxV }
+
+\cs_new_protected:Npn \__tblr_prop_gadd_dimen_value:nnn #1 #2 #3
+ {
+ \__tblr_gadd_dimen_value:cnn
+ { g_tblr_#1_ \int_use:N \g_tblr_level_int _prop } { #2 } { #3 }
+ }
+\cs_generate_variant:Nn \__tblr_prop_gadd_dimen_value:nnn { nnx, nnV, nxn, nxx }
+
+%% Put the dimension to the prop list only if it's larger than the old one
+
+\tl_new:N \l__tblr_put_if_larger_tl
+
+\cs_new_protected:Npn \__tblr_put_if_larger:Nnn #1 #2 #3
+ {
+ \tl_set:Nx \l__tblr_put_if_larger_tl { \prop_item:Nn #1 { #2 } }
+ \bool_lazy_or:nnT
+ { \tl_if_empty_p:N \l__tblr_put_if_larger_tl }
+ { \dim_compare_p:nNn { #3 } > { \l__tblr_put_if_larger_tl } }
+ { \prop_put:Nnn #1 { #2 } { #3 } }
+ }
+\cs_generate_variant:Nn \__tblr_put_if_larger:Nnn { Nnx, Nxn, Nxx }
+
+\cs_new_protected:Npn \__tblr_gput_if_larger:Nnn #1 #2 #3
+ {
+ \tl_set:Nx \l__tblr_put_if_larger_tl { \prop_item:Nn #1 { #2 } }
+ \bool_lazy_or:nnT
+ { \tl_if_empty_p:N \l__tblr_put_if_larger_tl }
+ { \dim_compare_p:nNn { #3 } > { \l__tblr_put_if_larger_tl } }
+ { \prop_gput:Nnn #1 { #2 } { #3 } }
+ }
+\cs_generate_variant:Nn \__tblr_gput_if_larger:Nnn { Nnx, Nxn, Nxx, cnn }
+
+%% Add the dimension to some key value of the prop list
+%% #1: the prop list, #2: the key, #3: the dimen to add
+
+\cs_new_protected:Npn \__tblr_add_dimen_value:Nnn #1 #2 #3
+ {
+ \prop_put:Nnx #1 { #2 } { \dim_eval:n { \prop_item:Nn #1 { #2 } + #3 } }
+ }
+\cs_generate_variant:Nn \__tblr_add_dimen_value:Nnn { cnn }
+
+\cs_new_protected:Npn \__tblr_gadd_dimen_value:Nnn #1 #2 #3
+ {
+ \prop_gput:Nnx #1 { #2 } { \dim_eval:n { \prop_item:Nn #1 { #2 } + #3 } }
+ }
+\cs_generate_variant:Nn \__tblr_gadd_dimen_value:Nnn { cnn }
+
+%% Some counters for row and column numbering
+\newcounter{rownum}
+\newcounter{colnum}
+\newcounter{rowcount}
+\newcounter{colcount}
+
+%%% --------------------------------------------------------
+%% \section{Child Selectors}
+%%% --------------------------------------------------------
+
+\clist_new:N \g_tblr_used_child_selectors_clist
+
+\tl_new:N \l__tblr_childs_arg_spec_tl
+
+\msg_new:nnn { tabularray } { used-child-selector }
+ { Child ~ selector ~ name ~ "#1" ~ has ~ been ~ used! }
+
+\NewDocumentCommand \NewChildSelector { m O{0} o m }
+ {
+ \__tblr_new_child_selector_aux:xnnn { \tl_trim_spaces:n {#1} } {#2} {#3} {#4}
+ }
+
+\cs_new_protected:Npn \__tblr_new_child_selector_aux:nnnn #1 #2 #3 #4
+ {
+ \clist_if_in:NnTF \g_tblr_used_child_selectors_clist { #1 }
+ {
+ \msg_error:nnn { tabularray } { used-child-selector } { #1 }
+ \clist_log:N \g_tblr_used_child_selectors_clist
+ }
+ {
+ \__tblr_make_xparse_arg_spec:nnN { #2 } { #3 } \l__tblr_childs_arg_spec_tl
+ \exp_args:NcV \NewDocumentCommand
+ { __tblr_child_selector_ #1 :w } \l__tblr_childs_arg_spec_tl { #4 }
+ \clist_gput_right:Nn \g_tblr_used_child_selectors_clist { #1 }
+ }
+ }
+\cs_generate_variant:Nn \__tblr_new_child_selector_aux:nnnn { xnnn }
+
+%% #1: argument number, #2: optional argument default, #3: result tl
+\cs_new_protected:Npn \__tblr_make_xparse_arg_spec:nnN #1 #2 #3
+ {
+ \tl_clear:N #3
+ \int_compare:nNnT { #1 } > { 0 }
+ {
+ \IfValueTF { #2 }
+ { \tl_set:Nn #3 { O{#2} } }
+ { \tl_set:Nn #3 { m } }
+ \tl_put_right:Nx #3 { \prg_replicate:nn { #1 - 1 } { m } }
+ }
+ }
+
+\clist_new:N \l_tblr_childs_clist
+\tl_new:N \l_tblr_childs_total_tl
+
+\NewChildSelector { odd }
+ {
+ \int_step_inline:nnnn {1} {2} { \l_tblr_childs_total_tl }
+ { \clist_put_right:Nn \l_tblr_childs_clist {##1} }
+ }
+
+\NewChildSelector { even }
+ {
+ \int_step_inline:nnnn {2} {2} { \l_tblr_childs_total_tl }
+ { \clist_put_right:Nn \l_tblr_childs_clist {##1} }
+ }
+
+\regex_const:Nn \c__tblr_split_selector_name_regex { ^ ( [A-Za-z] {2,} ) ( . * ) }
+\seq_new:N \l__tblr_childs_split_seq
+\seq_new:N \l__tblr_childs_regex_seq
+\tl_new:N \l__tblr_childs_end_tl
+\tl_new:N \l__tblr_childs_selector_tl
+
+%% #1, child specifications; #2, total number.
+%% The result will be put into \l_tblr_childs_clist
+\cs_new_protected:Npn \__tblr_get_childs:nn #1 #2
+ {
+ \clist_clear:N \l_tblr_childs_clist
+ \tl_set:Nx \l_tblr_childs_total_tl {#2}
+ \regex_extract_once:NnNTF \c__tblr_split_selector_name_regex {#1}
+ \l__tblr_childs_regex_seq
+ {
+ \tl_set:No \l__tblr_childs_selector_tl
+ {
+ \cs:w
+ __tblr_child_selector_ \seq_item:Nn \l__tblr_childs_regex_seq {2} :w
+ \cs_end:
+ }
+ \exp_args:Nx \l__tblr_childs_selector_tl
+ { \seq_item:Nn \l__tblr_childs_regex_seq{3} }
+ }
+ {
+ \tl_if_eq:nnTF {#1} {-}
+ { \__tblr_get_childs_normal:nn {1-#2} {#2} }
+ { \__tblr_get_childs_normal:nn {#1} {#2} }
+ }
+ %\clist_log:N \l_tblr_childs_clist
+ }
+\cs_generate_variant:Nn \__tblr_get_childs:nn { nx }
+
+\cs_new_protected:Npn \__tblr_get_childs_normal:nn #1 #2
+ {
+ \seq_set_split:Nnn \l__tblr_childs_split_seq {,} {#1}
+ \seq_map_inline:Nn \l__tblr_childs_split_seq
+ { \__tblr_get_childs_normal_aux:w ##1 - s \scan_stop }
+ }
+
+\cs_new_protected_nopar:Npn \__tblr_get_childs_normal_aux:w #1 - #2 #3 \scan_stop
+ {
+ \tl_if_eq:nnTF {#2} {s}
+ { \tl_set:Nn \l__tblr_childs_end_tl {#1} }
+ { \tl_set:Nn \l__tblr_childs_end_tl {#2} }
+ \int_step_inline:nnn {#1} { \l__tblr_childs_end_tl }
+ { \clist_put_right:Nn \l_tblr_childs_clist {##1} }
+ }
+
+%%% --------------------------------------------------------
+%% \section{New Table Commands}
+%%% --------------------------------------------------------
+
+%% We need some commands to modify table/row/column/cell specifications.
+%% These commands must be defined with \NewTableCommand command,
+%% so that we could extract them, execute them once, then disable them.
+
+\clist_new:N \g__tblr_table_commands_clist
+
+\msg_new:nnn { tabularray } { defined-table-command }
+ { Table ~ commnad ~ #1 has ~ been ~ defined! }
+
+\NewDocumentCommand \NewTableCommand { m O{0} o m }
+ {
+ \clist_if_in:NnTF \g__tblr_table_commands_clist { #1 }
+ {
+ \msg_error:nnn { tabularray } { defined-table-command } { #1 }
+ \clist_log:N \g__tblr_table_commands_clist
+ }
+ {
+ \__tblr_make_xparse_arg_spec:nnN { #2 } { #3 } \l__tblr_a_tl
+ \exp_args:NcV \NewDocumentCommand
+ { __tblr_table_command_ \cs_to_str:N #1 :w } \l__tblr_a_tl { #4 }
+ \exp_args:NcV \NewDocumentCommand
+ { __tblr_table_command_ \cs_to_str:N #1 _gobble :w } \l__tblr_a_tl { }
+ \IfValueTF { #3 }
+ {
+ \tl_gset:cn { g__tblr_table_cmd_ \cs_to_str:N #1 _arg_numb_tl } {-#2}
+ }
+ {
+ \tl_gset:cn { g__tblr_table_cmd_ \cs_to_str:N #1 _arg_numb_tl } {#2}
+ }
+ \clist_gput_right:Nn \g__tblr_table_commands_clist { #1 }
+ }
+ }
+
+\cs_new_protected:Npn \__tblr_enable_table_commands:
+ {
+ \clist_map_inline:Nn \g__tblr_table_commands_clist
+ { \cs_set_eq:Nc ##1 { __tblr_table_command_ \cs_to_str:N ##1 :w } }
+ }
+
+\cs_new_protected:Npn \__tblr_disable_table_commands:
+ {
+ \clist_map_inline:Nn \g__tblr_table_commands_clist
+ { \cs_set_eq:Nc ##1 { __tblr_table_command_ \cs_to_str:N ##1 _gobble:w } }
+ }
+
+\cs_new_protected:Npn \__tblr_execute_table_commands:
+ {
+ \__tblr_prop_map_inline:nn { command }
+ {
+ \__tblr_set_row_col_from_key_name:w ##1
+ ##2
+ }
+ \LogTblrTracing { cell }
+ }
+
+\cs_new_protected:Npn \__tblr_set_row_col_from_key_name:w [#1][#2]
+ {
+ \int_set:Nn \c@rownum {#1}
+ \int_set:Nn \c@colnum {#2}
+ }
+
+%%% --------------------------------------------------------
+%% \section{New Dash Styles}
+%%% --------------------------------------------------------
+
+%% \NewDashStyle commands
+
+\dim_zero_new:N \rulewidth
+\dim_set:Nn \rulewidth {0.4pt}
+
+\prop_gset_from_keyval:Nn \g__tblr_defined_hdash_styles_prop
+ { solid = \hrule height \rulewidth }
+\prop_gset_from_keyval:Nn \g__tblr_defined_vdash_styles_prop
+ { solid = \vrule width \rulewidth }
+
+\NewDocumentCommand \NewDashStyle { m m }
+ {
+ \seq_set_split:Nnn \l_tmpa_seq { ~ } {#2}
+ \tl_set:Nx \l__tblr_a_tl { \seq_item:Nn \l_tmpa_seq {1} }
+ \tl_set:Nx \l__tblr_b_tl { \seq_item:Nn \l_tmpa_seq {2} }
+ \tl_set:Nx \l__tblr_c_tl { \seq_item:Nn \l_tmpa_seq {3} }
+ \tl_set:Nx \l__tblr_d_tl { \seq_item:Nn \l_tmpa_seq {4} }
+ \tl_if_eq:NnT \l__tblr_a_tl { on }
+ {
+ \tl_if_eq:NnT \l__tblr_c_tl { off }
+ {
+ \__tblr_dash_style_make_boxes:nxx {#1}
+ { \dim_eval:n {\l__tblr_b_tl} } { \dim_eval:n {\l__tblr_d_tl} }
+ }
+ }
+ }
+
+\cs_new_protected:Npn \__tblr_dash_style_make_boxes:nnn #1 #2 #3
+ {
+ \dim_set:Nn \l_tmpa_dim { #2 + #3 }
+ \tl_set:Nn \l__tblr_h_tl { \hbox_to_wd:nn }
+ \tl_put_right:Nx \l__tblr_h_tl { { \dim_use:N \l_tmpa_dim } }
+ \tl_put_right:Nn \l__tblr_h_tl
+ {
+ { \hss \vbox:n { \hbox_to_wd:nn {#2} {} \hrule height \rulewidth } \hss }
+ }
+ \prop_gput:NnV \g__tblr_defined_hdash_styles_prop {#1} \l__tblr_h_tl
+ %\prop_log:N \g__tblr_defined_hdash_styles_prop
+ \tl_set:Nn \l__tblr_v_tl { \vbox_to_ht:nn }
+ \tl_put_right:Nx \l__tblr_v_tl { { \dim_use:N \l_tmpa_dim } }
+ \tl_put_right:Nn \l__tblr_v_tl
+ {
+ { \vss \hbox:n { \vbox_to_ht:nn {#2} {} \vrule width \rulewidth } \vss }
+ }
+ \prop_gput:NnV \g__tblr_defined_vdash_styles_prop {#1} \l__tblr_v_tl
+ %\prop_log:N \g__tblr_defined_vdash_styles_prop
+ }
+\cs_generate_variant:Nn \__tblr_dash_style_make_boxes:nnn { nxx }
+
+\cs_new_protected:Npn \__tblr_get_hline_dash_style:N #1
+ {
+ \tl_set:Nx \l_tmpa_tl
+ { \prop_item:NV \g__tblr_defined_hdash_styles_prop #1 }
+ \tl_if_empty:NF \l_tmpa_tl { \tl_set_eq:NN #1 \l_tmpa_tl }
+ }
+
+\cs_new_protected:Npn \__tblr_get_vline_dash_style:N #1
+ {
+ \tl_set:Nx \l_tmpa_tl
+ { \prop_item:NV \g__tblr_defined_vdash_styles_prop #1 }
+ \tl_if_empty:NF \l_tmpa_tl { \tl_set_eq:NN #1 \l_tmpa_tl }
+ }
+
+\NewDashStyle {dashed} {on ~ 2pt ~ off ~ 2pt}
+\NewDashStyle {dotted} {on ~ 0.4pt ~ off ~ 1pt}
+
+%%% --------------------------------------------------------
+%% \section{Set Hlines and Vlines}
+%%% --------------------------------------------------------
+
+\tl_set:Nn \@tblr@dash { dash }
+\tl_set:Nn \@tblr@text { text }
+
+\regex_const:Nn \c__tblr_is_color_key_regex { ^[A-Za-z] }
+
+%% \SetHlines command for setting every hline in the table
+\NewTableCommand \SetHlines [3] [+]
+ {
+ \tblr_set_every_hline:nnn {#1} {#2} {#3}
+ }
+
+%% We put all code inside a group to avoid affecting other table commands
+\cs_new_protected:Npn \tblr_set_every_hline:nnn #1 #2 #3
+ {
+ \group_begin:
+ \int_step_inline:nn { \int_eval:n { \c@rowcount + 1 } }
+ {
+ \int_set:Nn \c@rownum {##1}
+ \tblr_set_hline:nnn {#1} {#2} {#3}
+ }
+ \group_end:
+ }
+
+%% Check the number of arguments and call \tblr_set_every_hline in different ways
+%% This function is called when parsing table specifications
+\cs_new_protected:Npn \__tblr_set_every_hline_aux:n #1
+ {
+ \tl_if_head_is_group:nTF {#1}
+ {
+ \int_compare:nNnTF { \tl_count:n {#1} } = {3}
+ { \tblr_set_every_hline:nnn #1 }
+ { \tblr_set_every_hline:nnn {1} #1 }
+ }
+ { \tblr_set_every_hline:nnn {1} {-} {#1} }
+ }
+
+%% Add \SetHline, \hline and \cline commands
+
+\tl_new:N \l__tblr_hline_count_tl % the count of all hlines
+\tl_new:N \l__tblr_hline_num_tl % the index of the hline
+\tl_new:N \l__tblr_hline_cols_tl % the columns of the hline
+\tl_new:N \l__tblr_hline_dash_tl % dash style
+\tl_new:N \l__tblr_hline_fg_tl % dash foreground
+\tl_new:N \l__tblr_hline_wd_tl % dash width
+
+\NewTableCommand \cline [2] [] { \SetHline [=] {#2} {#1} }
+
+\NewTableCommand \hline [1] [] { \SetHline [+] {-} {#1} }
+
+%% #1: the index of the hline (may be + or =)
+%% #2: which columns of the hline, separate by commas
+%% #3: key=value pairs
+\NewTableCommand \SetHline [3] [+]
+ {
+ \tblr_set_hline:nnn {#1} {#2} {#3}
+ }
+
+%% We need to check "text" key first
+%% If it does exist and has empty value, then do nothing
+\cs_new_protected:Npn \tblr_set_hline:nnn #1 #2 #3
+ {
+ \group_begin:
+ \keys_set_groups:nnn { tblr-hline } { text } {#3}
+ \tl_if_eq:NnF \l__tblr_hline_dash_tl { \exp_not:N \@tblr@text }
+ {
+ \__tblr_set_hline_num:n {#1}
+ \tl_clear:N \l__tblr_hline_dash_tl
+ \keys_set:nn { tblr-hline } { dash = solid, #3 }
+ \__tblr_set_hline_cmd:n {#2}
+ }
+ \group_end:
+ }
+
+\cs_new_protected:Npn \tblr_set_hline:nnnn #1 #2 #3 #4
+ {
+ \group_begin:
+ \__tblr_get_childs:nx {#1} { \int_eval:n { \c@rowcount + 1 } }
+ \clist_map_inline:Nn \l_tblr_childs_clist
+ {
+ \int_set:Nn \c@rownum {##1}
+ \tblr_set_hline:nnn {#2} {#3} {#4}
+ }
+ \group_end:
+ }
+
+%% Check the number of arguments and call \tblr_set_hline in different ways
+%% Note that #1 always includes an outer pair of braces
+%% This function is called when parsing table specifications
+\cs_new_protected:Npn \__tblr_set_hline_aux:nn #1 #2
+ {
+ \tl_if_head_is_group:nTF {#2}
+ {
+ \int_compare:nNnTF { \tl_count:n {#2} } = {3}
+ { \tblr_set_hline:nnnn #1 #2 }
+ { \tblr_set_hline:nnnn #1 {1} #2 }
+ }
+ { \tblr_set_hline:nnnn #1 {1} {-} {#2} }
+ }
+\cs_generate_variant:Nn \__tblr_set_hline_aux:nn { Vn }
+
+%% #1: the index of hline to set (may be + or =)
+\cs_new_protected:Npn \__tblr_set_hline_num:n #1
+ {
+ \tl_clear:N \l__tblr_hline_num_tl
+ \tl_set:Nx \l__tblr_hline_count_tl
+ { \__tblr_prop_item:ne { hline } { [\int_use:N \c@rownum] / @hline-count } }
+ \tl_if_empty:NTF \l__tblr_hline_count_tl
+ {
+ \tl_set:Nx \l__tblr_hline_num_tl { 1 }
+ \__tblr_prop_gput:nxx { hline }
+ { [\int_use:N \c@rownum] / @hline-count } { 1 }
+ }
+ {
+ \tl_if_eq:nnTF {#1} {+}
+ { \__tblr_set_hline_num_incr: }
+ {
+ \tl_if_eq:nnTF {#1} {=}
+ { \tl_set_eq:NN \l__tblr_hline_num_tl \l__tblr_hline_count_tl }
+ {
+ \int_compare:nNnTF {#1} > { \l__tblr_hline_count_tl }
+ { \__tblr_set_hline_num_incr: }
+ { \tl_set:Nn \l__tblr_hline_num_tl {#1} }
+ }
+ }
+ }
+ }
+
+\cs_new_protected:Npn \__tblr_set_hline_num_incr:
+ {
+ \tl_set:Nx \l__tblr_hline_count_tl
+ { \int_eval:n { \l__tblr_hline_count_tl + 1 } }
+ \__tblr_prop_gput:nxx { hline }
+ { [\int_use:N \c@rownum] / @hline-count } { \l__tblr_hline_count_tl }
+ \tl_set_eq:NN \l__tblr_hline_num_tl \l__tblr_hline_count_tl
+ }
+
+\keys_define:nn { tblr-hline }
+ {
+ dash .code:n = \tl_set:Nn \l__tblr_hline_dash_tl { \exp_not:N \@tblr@dash #1 },
+ text .code:n = \tl_set:Nn \l__tblr_hline_dash_tl { \exp_not:N \@tblr@text #1 },
+ text .groups:n = { text },
+ wd .code:n = \tl_set:Nn \l__tblr_hline_wd_tl { \dim_eval:n {#1} },
+ fg .code:n = \tl_set:Nn \l__tblr_hline_fg_tl {#1},
+ baseline .code:n = \__tblr_hline_set_baseline:n {#1},
+ unknown .code:n = \__tblr_hline_unknown_key:V \l_keys_key_str,
+ }
+
+\cs_new_protected:Npn \__tblr_hline_unknown_key:n #1
+ {
+ \prop_if_in:NnTF \g__tblr_defined_hdash_styles_prop {#1}
+ { \tl_set:Nn \l__tblr_hline_dash_tl { \exp_not:N \@tblr@dash #1 } }
+ {
+ \regex_match:NnTF \c__tblr_is_color_key_regex {#1}
+ { \tl_set:Nn \l__tblr_hline_fg_tl {#1} }
+ {
+ \tl_set_rescan:Nnn \l__tblr_v_tl {} {#1}
+ \tl_set:Nn \l__tblr_hline_wd_tl { \dim_eval:n {\l__tblr_v_tl} }
+ }
+ }
+ }
+\cs_generate_variant:Nn \__tblr_hline_unknown_key:n { V }
+
+\cs_new_protected_nopar:Npn \__tblr_set_hline_cmd:n #1
+ {
+ \__tblr_get_childs:nx {#1} { \int_use:N \c@colcount }
+ \clist_map_inline:Nn \l_tblr_childs_clist
+ {
+ \__tblr_prop_gput:nxx { hline }
+ { [\int_use:N \c@rownum][##1](\l__tblr_hline_num_tl) / @dash }
+ { \l__tblr_hline_dash_tl }
+ \tl_if_empty:NF \l__tblr_hline_wd_tl
+ {
+ \__tblr_prop_gput:nxx { hline }
+ { [\int_use:N \c@rownum][##1](\l__tblr_hline_num_tl) / wd }
+ { \l__tblr_hline_wd_tl }
+ }
+ \tl_if_empty:NF \l__tblr_hline_fg_tl
+ {
+ \__tblr_prop_gput:nxx { hline }
+ { [\int_use:N \c@rownum][##1](\l__tblr_hline_num_tl) / fg }
+ { \l__tblr_hline_fg_tl }
+ }
+ }
+ }
+
+\NewTableCommand \firsthline [1] [] { \SetHline [+] {-} { #1, baseline=below } }
+\NewTableCommand \lasthline [1] [] { \SetHline [+] {-} { #1, baseline=above } }
+
+\cs_new_protected:Npn \__tblr_hline_set_baseline:n #1
+ {
+ \tl_if_eq:nnTF {#1} {above}
+ {
+ \__tblr_prop_gput:nnx { table }
+ { baseline } { \int_eval:n { \c@rownum - 1 } }
+ }
+ {
+ \tl_if_eq:nnT {#1} {below}
+ {
+ \__tblr_prop_gput:nnx { table } { baseline } { \int_use:N \c@rownum }
+ }
+ }
+ }
+
+%% \SetVlines command for setting every vline in the table
+\NewTableCommand \SetVlines [3] [+]
+ {
+ \tblr_set_every_vline:nnn {#1} {#2} {#3}
+ }
+
+%% We put all code inside a group to avoid affecting other table commands
+\cs_new_protected:Npn \tblr_set_every_vline:nnn #1 #2 #3
+ {
+ \group_begin:
+ \int_step_inline:nn { \int_eval:n { \c@colcount + 1 } }
+ {
+ \int_set:Nn \c@colnum {##1}
+ \tblr_set_vline:nnn {#1} {#2} {#3}
+ }
+ \group_end:
+ }
+
+%% Check the number of arguments and call \tblr_set_every_vline in different ways
+%% This function is called when parsing table specifications
+\cs_new_protected:Npn \__tblr_set_every_vline_aux:n #1
+ {
+ \tl_if_head_is_group:nTF {#1}
+ {
+ \int_compare:nNnTF { \tl_count:n {#1} } = {3}
+ { \tblr_set_every_vline:nnn #1 }
+ { \tblr_set_every_vline:nnn {1} #1 }
+ }
+ { \tblr_set_every_vline:nnn {1} {-} {#1} }
+ }
+
+%% Add \SetVline, \vline and \rline commands
+
+\tl_new:N \l__tblr_vline_count_tl % the count of all vlines
+\tl_new:N \l__tblr_vline_num_tl % the index of the vline
+\tl_new:N \l__tblr_vline_rows_tl % the rows of the vline
+\tl_new:N \l__tblr_vline_dash_tl % dash style
+\tl_new:N \l__tblr_vline_fg_tl % dash foreground
+\tl_new:N \l__tblr_vline_wd_tl % dash width
+
+\NewTableCommand \rline [2] [] { \SetVline [=] {#2} {#1} }
+
+\NewTableCommand \vline [1] [] { \SetVline [+] {-} {#1} }
+
+%% #1: the index of the vline (may be + or =)
+%% #2: which rows of the vline, separate by commas
+%% #3: key=value pairs
+\NewTableCommand \SetVline [3] [+]
+ {
+ \tblr_set_vline:nnn {#1} {#2} {#3}
+ }
+
+%% We need to check "text" key first
+%% If it does exist and has empty value, then do nothing
+\cs_new_protected:Npn \tblr_set_vline:nnn #1 #2 #3
+ {
+ \group_begin:
+ \keys_set_groups:nnn { tblr-vline } { text } {#3}
+ \tl_if_eq:NnF \l__tblr_vline_dash_tl { \exp_not:N \@tblr@text }
+ {
+ \__tblr_set_vline_num:n {#1}
+ \tl_clear:N \l__tblr_vline_dash_tl
+ \keys_set:nn { tblr-vline } { dash = solid, #3 }
+ \__tblr_set_vline_cmd:n {#2}
+ }
+ \group_end:
+ }
+
+\cs_new_protected:Npn \tblr_set_vline:nnnn #1 #2 #3 #4
+ {
+ \group_begin:
+ \__tblr_get_childs:nx {#1} { \int_eval:n { \c@colcount + 1} }
+ \clist_map_inline:Nn \l_tblr_childs_clist
+ {
+ \int_set:Nn \c@colnum {##1}
+ \tblr_set_vline:nnn {#2} {#3} {#4}
+ }
+ \group_end:
+ }
+
+%% Check the number of arguments and call \tblr_set_vline in different ways
+%% Note that #1 always includes an outer pair of braces
+%% This function is called when parsing table specifications
+\cs_new_protected:Npn \__tblr_set_vline_aux:nn #1 #2
+ {
+ \tl_if_head_is_group:nTF {#2}
+ {
+ \int_compare:nNnTF { \tl_count:n {#2} } = {3}
+ { \tblr_set_vline:nnnn #1 #2 }
+ { \tblr_set_vline:nnnn #1 {1} #2 }
+ }
+ { \tblr_set_vline:nnnn #1 {1} {-} {#2} }
+ }
+\cs_generate_variant:Nn \__tblr_set_vline_aux:nn { Vn }
+
+%% #1: the index of vline to set (may be + or =)
+\cs_new_protected:Npn \__tblr_set_vline_num:n #1
+ {
+ \tl_clear:N \l__tblr_vline_num_tl
+ \tl_set:Nx \l__tblr_vline_count_tl
+ { \__tblr_prop_item:ne { vline } { [\int_use:N \c@colnum] / @vline-count } }
+ \tl_if_empty:NTF \l__tblr_vline_count_tl
+ {
+ \tl_set:Nx \l__tblr_vline_num_tl { 1 }
+ \__tblr_prop_gput:nxx { vline }
+ { [\int_use:N \c@colnum] / @vline-count } { 1 }
+ }
+ {
+ \tl_if_eq:nnTF {#1} {+}
+ { \__tblr_set_vline_num_incr: }
+ {
+ \tl_if_eq:nnTF {#1} {=}
+ { \tl_set_eq:NN \l__tblr_vline_num_tl \l__tblr_vline_count_tl }
+ {
+ \int_compare:nNnTF {#1} > { \l__tblr_vline_count_tl }
+ { \__tblr_set_vline_num_incr: }
+ { \tl_set:Nn \l__tblr_vline_num_tl {#1} }
+ }
+ }
+ }
+ }
+
+\cs_new_protected:Npn \__tblr_set_vline_num_incr:
+ {
+ \tl_set:Nx \l__tblr_vline_count_tl
+ { \int_eval:n { \l__tblr_vline_count_tl + 1 } }
+ \__tblr_prop_gput:nxx { vline }
+ { [\int_use:N \c@colnum] / @vline-count } { \l__tblr_vline_count_tl }
+ \tl_set_eq:NN \l__tblr_vline_num_tl \l__tblr_vline_count_tl
+ }
+
+\keys_define:nn { tblr-vline }
+ {
+ dash .code:n = \tl_set:Nn \l__tblr_vline_dash_tl { \exp_not:N \@tblr@dash #1 },
+ text .code:n = \tl_set:Nn \l__tblr_vline_dash_tl { \exp_not:N \@tblr@text #1 },
+ text .groups:n = { text },
+ wd .code:n = \tl_set:Nn \l__tblr_vline_wd_tl { \dim_eval:n {#1} },
+ fg .code:n = \tl_set:Nn \l__tblr_vline_fg_tl {#1},
+ unknown .code:n = \__tblr_vline_unknown_key:V \l_keys_key_str,
+ }
+
+\cs_new_protected:Npn \__tblr_vline_unknown_key:n #1
+ {
+ \prop_if_in:NnTF \g__tblr_defined_vdash_styles_prop {#1}
+ { \tl_set:Nn \l__tblr_vline_dash_tl { \exp_not:N \@tblr@dash #1 } }
+ {
+ \regex_match:NnTF \c__tblr_is_color_key_regex {#1}
+ { \tl_set:Nn \l__tblr_vline_fg_tl {#1} }
+ {
+ \tl_set_rescan:Nnn \l__tblr_v_tl {} {#1}
+ \tl_set:Nn \l__tblr_vline_wd_tl { \dim_eval:n {\l__tblr_v_tl} }
+ }
+ }
+ }
+\cs_generate_variant:Nn \__tblr_vline_unknown_key:n { V }
+
+\cs_new_protected_nopar:Npn \__tblr_set_vline_cmd:n #1
+ {
+ \__tblr_get_childs:nx {#1} { \int_use:N \c@rowcount }
+ \clist_map_inline:Nn \l_tblr_childs_clist
+ {
+ \__tblr_prop_gput:nxx { vline }
+ { [##1][\int_use:N \c@colnum](\l__tblr_vline_num_tl) / @dash }
+ { \l__tblr_vline_dash_tl }
+ \tl_if_empty:NF \l__tblr_vline_wd_tl
+ {
+ \__tblr_prop_gput:nxx { vline }
+ { [##1][\int_use:N \c@colnum](\l__tblr_vline_num_tl) / wd }
+ { \l__tblr_vline_wd_tl }
+ }
+ \tl_if_empty:NF \l__tblr_vline_fg_tl
+ {
+ \__tblr_prop_gput:nxx { vline }
+ { [##1][\int_use:N \c@colnum](\l__tblr_vline_num_tl) / fg }
+ { \l__tblr_vline_fg_tl }
+ }
+ }
+ }
+
+%%% --------------------------------------------------------
+%% \section{Set Cells}
+%%% --------------------------------------------------------
+
+%% \SetCells command for setting every cell in the table
+\NewTableCommand \SetCells [2] []
+ {
+ \tblr_set_every_cell:nn {#1} {#2}
+ }
+
+%% We put all code inside a group to avoid affecting other table commands
+\cs_new_protected:Npn \tblr_set_every_cell:nn #1 #2
+ {
+ \group_begin:
+ \int_step_inline:nn { \c@rowcount }
+ {
+ \int_set:Nn \c@rownum {##1}
+ \int_step_inline:nn { \c@colcount }
+ {
+ \int_set:Nn \c@colnum {####1}
+ \tblr_set_cell:nn {#1} {#2}
+ }
+ }
+ \group_end:
+ }
+
+%% Check the number of arguments and call \tblr_set_every_cell in different ways
+%% This function is called when parsing table specifications
+\cs_new_protected:Npn \__tblr_set_every_cell_aux:n #1
+ {
+ \tl_if_head_is_group:nTF {#1}
+ { \tblr_set_every_cell:nn #1 }
+ { \tblr_set_every_cell:nn {} {#1} }
+ }
+
+%% \SetCell command for multirow and/or multicolumn cells
+
+\NewTableCommand \SetCell [2] []
+ {
+ \tblr_set_cell:nn { #1 } { #2 }
+ }
+
+\tl_new:N \l__tblr_row_span_num_tl
+\tl_new:N \l__tblr_col_span_num_tl
+
+\cs_new_protected:Npn \tblr_set_cell:nn #1 #2
+ {
+ \tl_set:Nn \l__tblr_row_span_num_tl { 1 }
+ \tl_set:Nn \l__tblr_col_span_num_tl { 1 }
+ \keys_set:nn { tblr-cell-span } { #1 }
+ \keys_set:nn { tblr-cell-spec } { #2 }
+ \__tblr_set_span_spec:VV \l__tblr_row_span_num_tl \l__tblr_col_span_num_tl
+ }
+\cs_generate_variant:Nn \tblr_set_cell:nn { nV }
+
+\cs_new_protected:Npn \tblr_set_cell:nnnn #1 #2 #3 #4
+ {
+ \group_begin:
+ \__tblr_get_childs:nx {#1} { \int_use:N \c@rowcount }
+ \clist_set_eq:NN \l_tmpa_clist \l_tblr_childs_clist
+ \__tblr_get_childs:nx {#2} { \int_use:N \c@colcount }
+ \clist_set_eq:NN \l_tmpb_clist \l_tblr_childs_clist
+ \clist_map_inline:Nn \l_tmpa_clist
+ {
+ \int_set:Nn \c@rownum {##1}
+ \clist_map_inline:Nn \l_tmpb_clist
+ {
+ \int_set:Nn \c@colnum {####1}
+ \tblr_set_cell:nn {#3} {#4}
+ }
+ }
+ \group_end:
+ }
+
+%% Check the number of arguments and call \tblr_set_cell in different ways
+%% Note that #1 is always of the type {<i>}{<j>}
+%% This function is called when parsing table specifications
+\cs_new_protected:Npn \__tblr_set_cell_aux:nn #1 #2
+ {
+ \tl_if_head_is_group:nTF {#2}
+ { \tblr_set_cell:nnnn #1 #2 }
+ { \tblr_set_cell:nnnn #1 {} {#2} }
+ }
+\cs_generate_variant:Nn \__tblr_set_cell_aux:nn { Vn }
+
+\keys_define:nn { tblr-cell-span }
+ {
+ r .tl_set:N = \l__tblr_row_span_num_tl,
+ c .tl_set:N = \l__tblr_col_span_num_tl,
+ }
+
+\keys_define:nn { tblr-cell-spec }
+ {
+ l .code:n = \__tblr_prop_gput:nxx {cell}
+ {[\int_use:N \c@rownum][\int_use:N \c@colnum] / halign} {l},
+ c .code:n = \__tblr_prop_gput:nxx {cell}
+ {[\int_use:N \c@rownum][\int_use:N \c@colnum] / halign} {c},
+ r .code:n = \__tblr_prop_gput:nxx {cell}
+ {[\int_use:N \c@rownum][\int_use:N \c@colnum] / halign} {r},
+ t .code:n = \__tblr_prop_gput:nxx {cell}
+ {[\int_use:N \c@rownum][\int_use:N \c@colnum] / valign} {t},
+ p .code:n = \__tblr_prop_gput:nxx {cell}
+ {[\int_use:N \c@rownum][\int_use:N \c@colnum] / valign} {t},
+ m .code:n = \__tblr_prop_gput:nxx {cell}
+ {[\int_use:N \c@rownum][\int_use:N \c@colnum] / valign} {m},
+ b .code:n = \__tblr_prop_gput:nxx {cell}
+ {[\int_use:N \c@rownum][\int_use:N \c@colnum] / valign} {b},
+ h .code:n = \__tblr_prop_gput:nxx {cell}
+ {[\int_use:N \c@rownum][\int_use:N \c@colnum] / valign} {h},
+ f .code:n = \__tblr_prop_gput:nxx {cell}
+ {[\int_use:N \c@rownum][\int_use:N \c@colnum] / valign} {f},
+ wd .code:n = \__tblr_prop_gput:nxx {cell}
+ {[\int_use:N \c@rownum][\int_use:N \c@colnum] / width} {#1},
+ bg .code:n = \__tblr_prop_gput:nxx {cell}
+ {[\int_use:N \c@rownum][\int_use:N \c@colnum] / background} {#1},
+ unknown .code:n = \__tblr_cell_unknown_key:V \l_keys_key_str,
+ }
+
+\cs_new_protected:Npn \__tblr_cell_unknown_key:n #1
+ {
+ \regex_match:NnTF \c__tblr_is_color_key_regex {#1}
+ {
+ \__tblr_prop_gput:nxx {cell}
+ {[\int_use:N \c@rownum][\int_use:N \c@colnum] / background} {#1}
+ }
+ {
+ \tl_set_rescan:Nnn \l__tblr_v_tl {} {#1}
+ \__tblr_prop_gput:nxx {cell}
+ { [\int_use:N \c@rownum][\int_use:N \c@colnum] / width }
+ { \dim_eval:n { \l__tblr_v_tl } }
+ }
+ }
+\cs_generate_variant:Nn \__tblr_cell_unknown_key:n { V }
+
+\cs_new_protected:Npn \__tblr_set_span_spec:nn #1 #2
+ {
+ \int_compare:nNnT { #1 } > { 1 }
+ {
+ \__tblr_prop_gput:nnn {table} {rowspan} {true}
+ \__tblr_prop_gput:nxn {cell}
+ { [\int_use:N \c@rownum][\int_use:N \c@colnum] / rowspan } { #1 }
+ }
+ \int_compare:nNnT { #2 } > { 1 }
+ {
+ \__tblr_prop_gput:nnn {table} {colspan} {true}
+ \__tblr_prop_gput:nxn {cell}
+ { [\int_use:N \c@rownum][\int_use:N \c@colnum] / colspan } { #2 }
+ }
+ \int_step_variable:nnNn
+ { \int_use:N \c@rownum } { \int_eval:n { \c@rownum + #1 - 1 } } \l__tblr_i_tl
+ {
+ \int_step_variable:nnNn
+ { \int_use:N \c@colnum } { \int_eval:n { \c@colnum + #2 - 1 } }
+ \l__tblr_j_tl
+ {
+ \bool_lazy_and:nnF
+ { \int_compare_p:nNn { \l__tblr_i_tl } = { \c@rownum } }
+ { \int_compare_p:nNn { \l__tblr_j_tl } = { \c@colnum } }
+ {
+ \__tblr_prop_gput:nxx {cell}
+ { [\l__tblr_i_tl][\l__tblr_j_tl] / omit } {true}
+ }
+ \int_compare:nNnF { \l__tblr_i_tl } = { \c@rownum }
+ {
+ \__tblr_prop_gput:nxx {hline}
+ { [\l__tblr_i_tl][\l__tblr_j_tl] / omit } {true}
+ }
+ \int_compare:nNnF { \l__tblr_j_tl } = { \c@colnum }
+ {
+ \__tblr_prop_gput:nxx {vline}
+ { [\l__tblr_i_tl][\l__tblr_j_tl] / omit } {true}
+ }
+ }
+ }
+ }
+\cs_generate_variant:Nn \__tblr_set_span_spec:nn { VV }
+
+%% Legacy \multicolumn and \multirow commands
+%% Both of them could be replaced with \SetCell command
+%% Note that they don't have cell text as the last arguments
+
+%% If \multicolumn is followed by \multirow,
+%% We need to call \tblr_set_cell together
+%% in order to omit all hlines inside the span cell.
+\tl_new:N \g__tblr_multicolumn_num_tl
+\tl_new:N \g__tblr_multicolumn_spec_tl
+
+%% There maybe p{2em} inside #2 of \multicolumn command
+\NewTableCommand \multicolumn [2]
+ {
+ \tl_gclear:N \g__tblr_multicolumn_num_tl
+ \tl_gclear:N \g__tblr_multicolumn_spec_tl
+ \tl_map_inline:nn {#2}
+ {
+ \bool_lazy_and:nnF
+ { \tl_if_single_token_p:n {##1} }
+ { \token_if_eq_charcode_p:NN ##1 | }
+ { \tl_put_right:Nn \g__tblr_multicolumn_spec_tl {,##1} }
+ }
+ \peek_meaning:NTF \multirow
+ { \tl_gset:Nn \g__tblr_multicolumn_num_tl {#1} }
+ { \tblr_set_cell:nV { c = #1 } \g__tblr_multicolumn_spec_tl }
+ }
+
+\NewTableCommand \multirow [3] [m]
+ {
+ \tl_if_eq:nnTF {#1} {c}
+ { \tl_set:Nn \l_tmpa_tl {, m} }
+ {
+ \tl_if_eq:nnTF {#1} {t}
+ { \tl_set:Nn \l_tmpa_tl {, h} }
+ { \tl_if_eq:nnTF {#1} {b}
+ { \tl_set:Nn \l_tmpa_tl {, f} }
+ { \tl_set:Nn \l_tmpa_tl {, #1} }
+ }
+ }
+ \tl_if_eq:nnF {#3} {*}
+ { \tl_if_eq:nnF {#3} {=} { \tl_put_right:Nn \l_tmpa_tl {, wd=#3} } }
+ \tl_if_empty:NTF \g__tblr_multicolumn_num_tl
+ { \tblr_set_cell:nV { r = #2 } \l_tmpa_tl }
+ {
+ \tl_put_left:NV \l_tmpa_tl \g__tblr_multicolumn_spec_tl
+ \exp_args:Nx \tblr_set_cell:nV
+ { c = \g__tblr_multicolumn_num_tl, r = #2 } \l_tmpa_tl
+ \tl_gclear:N \g__tblr_multicolumn_num_tl
+ }
+ }
+
+%%% --------------------------------------------------------
+%% \section{Set Columns and Rows}
+%%% --------------------------------------------------------
+
+%% \SetColumns command for setting every column in the table
+\NewTableCommand \SetColumns [2] []
+ {
+ \tblr_set_every_column:nn {#1} {#2}
+ }
+
+%% We put all code inside a group to avoid affecting other table commands
+\cs_new_protected:Npn \tblr_set_every_column:nn #1 #2
+ {
+ \group_begin:
+ \int_step_inline:nn { \c@colcount }
+ {
+ \int_set:Nn \c@colnum {##1}
+ \tblr_set_column:nn {#1} {#2}
+ }
+ \group_end:
+ }
+
+%% Check the number of arguments and call \tblr_set_every_column in different ways
+%% This function is called when parsing table specifications
+\cs_new_protected:Npn \__tblr_set_every_column_aux:n #1
+ {
+ \tl_if_head_is_group:nTF {#1}
+ { \tblr_set_every_column:nn #1 }
+ { \tblr_set_every_column:nn {} {#1} }
+ }
+
+%% \SetColumn command for current column or each cells in the column
+
+\NewTableCommand \SetColumn [2] []
+ {
+ \tblr_set_column:nn {#1} {#2}
+ }
+
+\cs_new_protected:Npn \tblr_set_column:nn #1 #2
+ {
+ \keys_set:nn { tblr-column } {#2}
+ }
+
+\cs_new_protected:Npn \tblr_set_column:nnn #1 #2 #3
+ {
+ \group_begin:
+ \__tblr_get_childs:nx {#1} { \int_use:N \c@colcount }
+ \clist_map_inline:Nn \l_tblr_childs_clist
+ {
+ \int_set:Nn \c@colnum {##1}
+ \tblr_set_column:nn {#2} {#3}
+ }
+ \group_end:
+ }
+
+%% Check the number of arguments and call \tblr_set_column in different ways
+%% Note that #1 always includes an outer pair of braces
+%% This function is called when parsing table specifications
+\cs_new_protected:Npn \__tblr_set_column_aux:nn #1 #2
+ {
+ \tl_if_head_is_group:nTF {#2}
+ { \tblr_set_column:nnn #1 #2 }
+ { \tblr_set_column:nnn #1 {} {#2} }
+ }
+\cs_generate_variant:Nn \__tblr_set_column_aux:nn { Vn }
+
+\keys_define:nn { tblr-column }
+ {
+ l .code:n = \__tblr_set_key_for_every_column_cell:nnn
+ { \int_use:N \c@colnum } { halign } {l},
+ c .code:n = \__tblr_set_key_for_every_column_cell:nnn
+ { \int_use:N \c@colnum } { halign } {c},
+ r .code:n = \__tblr_set_key_for_every_column_cell:nnn
+ { \int_use:N \c@colnum } { halign } {r},
+ t .code:n = \__tblr_set_key_for_every_column_cell:nnn
+ { \int_use:N \c@colnum } { valign } {t},
+ p .code:n = \__tblr_set_key_for_every_column_cell:nnn
+ { \int_use:N \c@colnum } { valign } {t},
+ m .code:n = \__tblr_set_key_for_every_column_cell:nnn
+ { \int_use:N \c@colnum } { valign } {m},
+ b .code:n = \__tblr_set_key_for_every_column_cell:nnn
+ { \int_use:N \c@colnum } { valign } {b},
+ h .code:n = \__tblr_set_key_for_every_column_cell:nnn
+ { \int_use:N \c@colnum } { valign } {h},
+ f .code:n = \__tblr_set_key_for_every_column_cell:nnn
+ { \int_use:N \c@colnum } { valign } {f},
+ bg .code:n = \__tblr_set_key_for_every_column_cell:nnn
+ { \int_use:N \c@colnum } { background } {#1},
+ wd .code:n = \__tblr_prop_gput:nxx { column }
+ { [\int_use:N \c@colnum] / width } { \dim_eval:n {#1} },
+ co .code:n = \__tblr_prop_gput:nxx { column }
+ { [\int_use:N \c@colnum] / coefficient } {#1},
+ leftsep .code:n = \__tblr_prop_gput:nxx { column }
+ { [\int_use:N \c@colnum] / leftsep } { \dim_eval:n {#1} },
+ rightsep .code:n = \__tblr_prop_gput:nxx { column }
+ { [\int_use:N \c@colnum] / rightsep } { \dim_eval:n {#1} },
+ colsep .meta:n = { leftsep = #1, rightsep = #1},
+ leftsep+ .code:n = \__tblr_prop_gadd_dimen_value:nxx { column }
+ { [\int_use:N \c@colnum] / leftsep } { \dim_eval:n {#1} },
+ rightsep+ .code:n = \__tblr_prop_gadd_dimen_value:nxx { column }
+ { [\int_use:N \c@colnum] / rightsep } { \dim_eval:n {#1} },
+ colsep+ .meta:n = { leftsep+ = #1, rightsep+ = #1},
+ unknown .code:n = \__tblr_column_unknown_key:V \l_keys_key_str,
+ }
+
+%% #1: column number; #2: key; #3: value
+\cs_new_protected:Npn \__tblr_set_key_for_every_column_cell:nnn #1 #2 #3
+ {
+ \int_step_inline:nn { \c@rowcount }
+ {
+ \__tblr_prop_gput:nxn {cell} { [##1][#1] / #2 } {#3}
+ }
+ }
+
+\regex_const:Nn \c__tblr_is_number_key_regex { ^[\+\-]? (\d+|\d*\.\d+)$ }
+
+\cs_new_protected:Npn \__tblr_column_unknown_key:n #1
+ {
+ \regex_match:NnTF \c__tblr_is_number_key_regex {#1}
+ {
+ \__tblr_prop_gput:nxx { column }
+ { [\int_use:N \c@colnum] / coefficient } {#1}
+ }
+ {
+ \regex_match:NnTF \c__tblr_is_color_key_regex {#1}
+ {
+ \__tblr_set_key_for_every_column_cell:nnn
+ { \int_use:N \c@colnum } { background } {#1}
+ }
+ {
+ \tl_set_rescan:Nnn \l__tblr_v_tl {} {#1}
+ \__tblr_prop_gput:nxx { column }
+ { [\int_use:N \c@colnum] / width } { \dim_eval:n { \l__tblr_v_tl } }
+ }
+ }
+ }
+\cs_generate_variant:Nn \__tblr_column_unknown_key:n { V }
+
+%% \SetRows command for setting every row in the table
+\NewTableCommand \SetRows [2] []
+ {
+ \tblr_set_every_row:nn {#1} {#2}
+ }
+
+%% We put all code inside a group to avoid affecting other table commands
+\cs_new_protected:Npn \tblr_set_every_row:nn #1 #2
+ {
+ \group_begin:
+ \int_step_inline:nn { \c@rowcount }
+ {
+ \int_set:Nn \c@rownum {##1}
+ \tblr_set_row:nn {#1} {#2}
+ }
+ \group_end:
+ }
+
+%% Check the number of arguments and call \tblr_set_every_row in different ways
+%% This function is called when parsing table specifications
+\cs_new_protected:Npn \__tblr_set_every_row_aux:n #1
+ {
+ \tl_if_head_is_group:nTF {#1}
+ { \tblr_set_every_row:nn #1 }
+ { \tblr_set_every_row:nn {} {#1} }
+ }
+
+%% \SetRow command for current row or each cells in the row
+
+\NewTableCommand \SetRow [2] []
+ {
+ \tblr_set_row:nn {#1} {#2}
+ }
+
+\cs_new_protected:Npn \tblr_set_row:nn #1 #2
+ {
+ \keys_set:nn { tblr-row } {#2}
+ }
+
+\cs_new_protected:Npn \tblr_set_row:nnn #1 #2 #3
+ {
+ \group_begin:
+ \__tblr_get_childs:nx {#1} { \int_use:N \c@rowcount }
+ \clist_map_inline:Nn \l_tblr_childs_clist
+ {
+ \int_set:Nn \c@rownum {##1}
+ \tblr_set_row:nn {#2} {#3}
+ }
+ \group_end:
+ }
+
+%% Check the number of arguments and call \tblr_set_row in different ways
+%% Note that #1 always includes an outer pair of braces
+%% This function is called when parsing table specifications
+\cs_new_protected:Npn \__tblr_set_row_aux:nn #1 #2
+ {
+ \tl_if_head_is_group:nTF {#2}
+ { \tblr_set_row:nnn #1 #2 }
+ { \tblr_set_row:nnn #1 {} {#2} }
+ }
+\cs_generate_variant:Nn \__tblr_set_row_aux:nn { Vn }
+
+\keys_define:nn { tblr-row }
+ {
+ l .code:n = \__tblr_set_key_for_every_row_cell:nnn
+ { \int_use:N \c@rownum } { halign } {l},
+ c .code:n = \__tblr_set_key_for_every_row_cell:nnn
+ { \int_use:N \c@rownum } { halign } {c},
+ r .code:n = \__tblr_set_key_for_every_row_cell:nnn
+ { \int_use:N \c@rownum } { halign } {r},
+ t .code:n = \__tblr_set_key_for_every_row_cell:nnn
+ { \int_use:N \c@rownum } { valign } {t},
+ p .code:n = \__tblr_set_key_for_every_row_cell:nnn
+ { \int_use:N \c@rownum } { valign } {t},
+ m .code:n = \__tblr_set_key_for_every_row_cell:nnn
+ { \int_use:N \c@rownum } { valign } {m},
+ b .code:n = \__tblr_set_key_for_every_row_cell:nnn
+ { \int_use:N \c@rownum } { valign } {b},
+ h .code:n = \__tblr_set_key_for_every_row_cell:nnn
+ { \int_use:N \c@rownum } { valign } {h},
+ f .code:n = \__tblr_set_key_for_every_row_cell:nnn
+ { \int_use:N \c@rownum } { valign } {f},
+ bg .code:n = \__tblr_set_key_for_every_row_cell:nnn
+ { \int_use:N \c@rownum } { background } {#1},
+ ht .code:n = \__tblr_prop_gput:nxx { row }
+ { [\int_use:N \c@rownum] / height } { \dim_eval:n {#1} },
+ co .code:n = \__tblr_prop_gput:nxx { row }
+ { [\int_use:N \c@rownum] / coefficient } {#1},
+ abovesep .code:n = \__tblr_prop_gput:nxx { row }
+ { [\int_use:N \c@rownum] / abovesep } { \dim_eval:n {#1} },
+ belowsep .code:n = \__tblr_prop_gput:nxx { row }
+ { [\int_use:N \c@rownum] / belowsep } { \dim_eval:n {#1} },
+ rowsep .meta:n = { abovesep = #1, belowsep = #1},
+ abovesep+ .code:n = \__tblr_prop_gadd_dimen_value:nxx { row }
+ { [\int_use:N \c@rownum] / abovesep } { \dim_eval:n {#1} },
+ belowsep+ .code:n = \__tblr_prop_gadd_dimen_value:nxx { row }
+ { [\int_use:N \c@rownum] / belowsep } { \dim_eval:n {#1} },
+ rowsep+ .meta:n = { abovesep+ = #1, belowsep+ = #1},
+ nobreak .code:n = \__tblr_prop_gput:nxx { row }
+ { [\int_eval:n {\c@rownum - 1}] / nobreak } { true },
+ unknown .code:n = \__tblr_row_unknown_key:V \l_keys_key_str,
+ }
+
+%% #1: row number; #2: key; #3: value
+\cs_new_protected:Npn \__tblr_set_key_for_every_row_cell:nnn #1 #2 #3
+ {
+ \int_step_inline:nn { \c@colcount }
+ {
+ \__tblr_prop_gput:nxn {cell} { [#1][##1] / #2 } {#3}
+ }
+ }
+
+\cs_new_protected:Npn \__tblr_row_unknown_key:n #1
+ {
+ \regex_match:NnTF \c__tblr_is_number_key_regex {#1}
+ {
+ \__tblr_prop_gput:nxx { row }
+ { [\int_use:N \c@rownum] / coefficient } {#1}
+ }
+ {
+ \regex_match:NnTF \c__tblr_is_color_key_regex {#1}
+ {
+ \__tblr_set_key_for_every_row_cell:nnn
+ { \int_use:N \c@rownum } { background } {#1}
+ }
+ {
+ \tl_set_rescan:Nnn \l__tblr_v_tl {} {#1}
+ \__tblr_prop_gput:nxx { row }
+ { [\int_use:N \c@rownum] / height } { \dim_eval:n { \l__tblr_v_tl } }
+ }
+ }
+ }
+\cs_generate_variant:Nn \__tblr_row_unknown_key:n { V }
+
+%%% --------------------------------------------------------
+%% \section{Column Types and Row Types}
+%%% --------------------------------------------------------
+
+%% Some primitive column/row types
+
+\str_const:Nn \c_tblr_primitive_colrow_types_str { Q | < > }
+\tl_new:N \g__tblr_expanded_colrow_spec_tl
+
+\exp_args:Nc \NewDocumentCommand { tblr_primitive_column_type_ Q } { O{} }
+ {
+ \keys_set:nn { tblr-column } { #1 }
+ \int_incr:N \c@colnum
+ \__tblr_execute_colrow_spec_next:N
+ }
+\exp_args:Nc \NewDocumentCommand { tblr_column_type_ Q } { O{} }
+ {
+ \tl_gput_right:Nn \g__tblr_expanded_colrow_spec_tl { Q[#1] }
+ \__tblr_expand_colrow_spec_next:N
+ }
+
+\exp_args:Nc \NewDocumentCommand { tblr_primitive_row_type_ Q } { O{} }
+ {
+ \keys_set:nn { tblr-row } { #1 }
+ \int_incr:N \c@rownum
+ \__tblr_execute_colrow_spec_next:N
+ }
+\exp_args:Nc \NewDocumentCommand { tblr_row_type_ Q } { O{} }
+ {
+ \tl_gput_right:Nn \g__tblr_expanded_colrow_spec_tl { Q[#1] }
+ \__tblr_expand_colrow_spec_next:N
+ }
+
+\exp_args:Nc \NewDocumentCommand { tblr_primitive_column_type_ | } { O{} }
+ {
+ \vline [#1]
+ \__tblr_execute_colrow_spec_next:N
+ }
+\exp_args:Nc \NewDocumentCommand { tblr_column_type_ | } { O{} }
+ {
+ \tl_gput_right:Nn \g__tblr_expanded_colrow_spec_tl { |[#1] }
+ \__tblr_expand_colrow_spec_next:N
+ }
+
+\exp_args:Nc \NewDocumentCommand { tblr_primitive_row_type_ | } { O{} }
+ {
+ \hline [#1]
+ \__tblr_execute_colrow_spec_next:N
+ }
+\exp_args:Nc \NewDocumentCommand { tblr_row_type_ | } { O{} }
+ {
+ \tl_gput_right:Nn \g__tblr_expanded_colrow_spec_tl { |[#1] }
+ \__tblr_expand_colrow_spec_next:N
+ }
+
+\exp_args:Nc \NewDocumentCommand { tblr_primitive_column_type_ > } { O{} m }
+ {
+ \tl_if_blank:nF { #1 }
+ {
+ \__tblr_prop_gput:nxx
+ { column }
+ { [\int_use:N \c@colnum] / leftsep}
+ { \dim_eval:n { #1 } }
+ }
+ \tl_if_blank:nF { #2 }
+ {
+ \int_step_variable:nNn { \c@rowcount } \l__tblr_i_tl
+ {
+ \tl_set:Nx \l_tmpa_tl
+ {
+ \__tblr_prop_item:ne {text}
+ { [\l__tblr_i_tl][\int_use:N \c@colnum] }
+ }
+ \tl_put_left:Nn \l_tmpa_tl { #2 }
+ \__tblr_prop_gput:nxV {text}
+ { [\l__tblr_i_tl][\int_use:N \c@colnum] } \l_tmpa_tl
+ }
+ }
+ \__tblr_execute_colrow_spec_next:N
+ }
+\exp_args:Nc \NewDocumentCommand { tblr_column_type_ > } { O{} m }
+ {
+ \tl_gput_right:Nn \g__tblr_expanded_colrow_spec_tl { >[#1]{#2} }
+ \__tblr_expand_colrow_spec_next:N
+ }
+
+\exp_args:Nc \NewDocumentCommand { tblr_primitive_row_type_ > } { O{} m }
+ {
+ \tl_if_blank:nF { #1 }
+ {
+ \__tblr_prop_gput:nxx
+ { row }
+ { [\int_use:N \c@rownum] / abovesep }
+ { \dim_eval:n { #1 } }
+ }
+ \tl_if_blank:nF { #2 }
+ {
+ \int_step_variable:nNn { \c@colcount } \l__tblr_j_tl
+ {
+ \tl_set:Nx \l_tmpa_tl
+ {
+ \__tblr_prop_item:ne {text}
+ { [\int_use:N \c@rownum][\l__tblr_j_tl] }
+ }
+ \tl_put_left:Nn \l_tmpa_tl { #2 }
+ \__tblr_prop_gput:nxV {text}
+ { [\int_use:N \c@rownum][\l__tblr_j_tl] } \l_tmpa_tl
+ }
+ }
+ \__tblr_execute_colrow_spec_next:N
+ }
+\exp_args:Nc \NewDocumentCommand { tblr_row_type_ > } { O{} m }
+ {
+ \tl_gput_right:Nn \g__tblr_expanded_colrow_spec_tl { >[#1]{#2} }
+ \__tblr_expand_colrow_spec_next:N
+ }
+
+\exp_args:Nc \NewDocumentCommand { tblr_primitive_column_type_ < } { O{} m }
+ {
+ \tl_if_blank:nF { #1 }
+ {
+ \__tblr_prop_gput:nxx
+ { column }
+ { [\int_eval:n {\c@colnum - 1}] / rightsep }
+ { \dim_eval:n { #1 } }
+ }
+ \tl_if_blank:nF { #2 }
+ {
+ \int_step_variable:nNn { \c@rowcount } \l__tblr_i_tl
+ {
+ \tl_set:Nx \l_tmpa_tl
+ {
+ \__tblr_prop_item:ne {text}
+ { [\l__tblr_i_tl][\int_eval:n {\c@colnum - 1}] }
+ }
+ \tl_put_right:Nn \l_tmpa_tl { #2 }
+ \__tblr_prop_gput:nxV {text}
+ { [\l__tblr_i_tl][\int_eval:n {\c@colnum - 1}] } \l_tmpa_tl
+ }
+ }
+ \__tblr_execute_colrow_spec_next:N
+ }
+\exp_args:Nc \NewDocumentCommand { tblr_column_type_ < } { O{} m }
+ {
+ \tl_gput_right:Nn \g__tblr_expanded_colrow_spec_tl { <[#1]{#2} }
+ \__tblr_expand_colrow_spec_next:N
+ }
+
+\exp_args:Nc \NewDocumentCommand { tblr_primitive_row_type_ < } { O{} m }
+ {
+ \tl_if_blank:nF { #1 }
+ {
+ \__tblr_prop_gput:nxx
+ { row }
+ { [\int_eval:n {\c@rownum - 1}] / belowsep }
+ { \dim_eval:n { #1 } }
+ }
+ \tl_if_blank:nF { #2 }
+ {
+ \int_step_variable:nNn { \c@colcount } \l__tblr_j_tl
+ {
+ \tl_set:Nx \l_tmpa_tl
+ {
+ \__tblr_prop_item:ne {text}
+ { [\int_eval:n {\c@rownum - 1}][\l__tblr_j_tl] }
+ }
+ \tl_put_right:Nn \l_tmpa_tl { #2 }
+ \__tblr_prop_gput:nxV {text}
+ { [\int_eval:n {\c@rownum - 1}][\l__tblr_j_tl] } \l_tmpa_tl
+ }
+ }
+ \__tblr_execute_colrow_spec_next:N
+ }
+\exp_args:Nc \NewDocumentCommand { tblr_row_type_ < } { O{} m }
+ {
+ \tl_gput_right:Nn \g__tblr_expanded_colrow_spec_tl { <[#1]{#2} }
+ \__tblr_expand_colrow_spec_next:N
+ }
+
+%% \NewColumnType/\NewRowType command and predefined column/row types
+
+\str_new:N \g_tblr_used_column_types_str
+\str_gset_eq:NN \g_tblr_used_column_types_str \c_tblr_primitive_colrow_types_str
+
+\str_new:N \g_tblr_used_row_types_str
+\str_gset_eq:NN \g_tblr_used_row_types_str \c_tblr_primitive_colrow_types_str
+
+\bool_new:N \g__tblr_colrow_spec_expand_stop_bool
+\tl_new:N \g__tblr_column_or_row_tl
+
+\msg_new:nnn { tabularray } { used-colrow-type }
+ { #1 ~ type ~ name ~ #2 ~ has ~ been ~ used! }
+
+\NewDocumentCommand \NewColumnType { m O{0} o m }
+ {
+ \tl_set:Nn \g__tblr_column_or_row_tl { column }
+ \__tblr_new_column_or_row_type:nnnn {#1} {#2} {#3} {#4}
+ }
+
+\NewDocumentCommand \NewRowType { m O{0} o m }
+ {
+ \tl_set:Nn \g__tblr_column_or_row_tl { row }
+ \__tblr_new_column_or_row_type:nnnn {#1} {#2} {#3} {#4}
+ }
+
+\NewDocumentCommand \NewColumnRowType { m O{0} o m }
+ {
+ \tl_set:Nn \g__tblr_column_or_row_tl { column }
+ \__tblr_new_column_or_row_type:nnnn {#1} {#2} {#3} {#4}
+ \tl_set:Nn \g__tblr_column_or_row_tl { row }
+ \__tblr_new_column_or_row_type:nnnn {#1} {#2} {#3} {#4}
+ }
+
+\cs_new_protected:Npn \__tblr_new_column_or_row_type:nnnn #1 #2 #3 #4
+ {
+ \str_if_in:cnTF { g_tblr_used_ \g__tblr_column_or_row_tl _types_str } {#1}
+ {
+ \tl_if_eq:NnTF \g__tblr_column_or_row_tl { row }
+ { \msg_warning:nnnn { tabularray } { used-colrow-type } { Row } {#1} }
+ { \msg_warning:nnnn { tabularray } { used-colrow-type } { Column } {#1} }
+ \str_log:c { g_tblr_used_ \g__tblr_column_or_row_tl _types_str }
+ }
+ {
+ \__tblr_make_xparse_arg_spec:nnN {#2} {#3} \l__tblr_a_tl
+ \exp_args:NcV \NewDocumentCommand
+ { tblr_ \g__tblr_column_or_row_tl _type_ #1 } \l__tblr_a_tl
+ {
+ \bool_gset_false:N \g__tblr_colrow_spec_expand_stop_bool
+ \tl_gput_right:Nf \g__tblr_expanded_colrow_spec_tl {#4}
+ \__tblr_expand_colrow_spec_next:N
+ }
+ \str_gput_right:cn
+ { g_tblr_used_ \g__tblr_column_or_row_tl _types_str } {#1}
+ }
+ }
+
+\NewColumnRowType { l } { Q[l] }
+\NewColumnRowType { c } { Q[c] }
+\NewColumnRowType { r } { Q[r] }
+
+\NewColumnType { t } [1] { Q[t,wd=#1] }
+\NewColumnType { p } [1] { Q[p,wd=#1] }
+\NewColumnType { m } [1] { Q[m,wd=#1] }
+\NewColumnType { b } [1] { Q[b,wd=#1] }
+\NewColumnType { h } [1] { Q[h,wd=#1] }
+\NewColumnType { f } [1] { Q[f,wd=#1] }
+
+\NewRowType { t } [1] { Q[t,ht=#1] }
+\NewRowType { p } [1] { Q[p,ht=#1] }
+\NewRowType { m } [1] { Q[m,ht=#1] }
+\NewRowType { b } [1] { Q[b,ht=#1] }
+\NewRowType { h } [1] { Q[h,ht=#1] }
+\NewRowType { f } [1] { Q[f,ht=#1] }
+
+\NewColumnRowType { X } [1][] { Q[co=1,#1] }
+
+\NewColumnRowType { ! } [1] { |[text={#1}] }
+\NewColumnRowType { @ } [1] { <[0pt]{} |[text={#1}] >[0pt]{} }
+\NewColumnRowType { * } [2] { \prg_replicate:nn {#1} {#2} }
+
+\cs_new_protected:Npn \__tblr_parse_colrow_spec:nn #1 #2
+ {
+ \tl_gset:Nn \g__tblr_column_or_row_tl {#1}
+ \tl_gset:Nn \g__tblr_expanded_colrow_spec_tl {#2}
+ \__tblr_expand_colrow_spec:N \g__tblr_expanded_colrow_spec_tl
+ \__tblr_execute_colrow_spec:N \g__tblr_expanded_colrow_spec_tl
+ }
+
+%% Expand defined column/row types
+
+\cs_new_protected:Npn \__tblr_expand_colrow_spec:N #1
+ {
+ \bool_do_until:Nn \g__tblr_colrow_spec_expand_stop_bool
+ {
+ \LogTblrTracing { colspec, rowspec }
+ \bool_gset_true:N \g__tblr_colrow_spec_expand_stop_bool
+ \tl_set_eq:NN \l_tmpa_tl #1
+ \tl_gclear:N #1
+ \exp_last_unbraced:NV
+ \__tblr_expand_colrow_spec_next:N \l_tmpa_tl \scan_stop:
+ }
+ }
+
+\msg_new:nnn { tabularray } { unexpandable-colrow-type }
+ { Unexpandable ~ command ~ #2 inside ~ #1 ~ type! }
+
+\msg_new:nnn { tabularray } { unknown-colrow-type }
+ { Unknown ~ #1 ~ type ~ #2! }
+
+\cs_new_protected:Npn \__tblr_expand_colrow_spec_next:N #1
+ {
+ \token_if_eq_catcode:NNTF #1 \scan_stop:
+ {
+ \token_if_eq_meaning:NNF #1 \scan_stop:
+ {
+ \msg_error:nnVn { tabularray } { unexpandable-colrow-type }
+ \g__tblr_column_or_row_tl {#1}
+ }
+ }
+ {
+ \str_if_in:cnTF { g_tblr_used_ \g__tblr_column_or_row_tl _types_str } {#1}
+ { \cs:w tblr_ \g__tblr_column_or_row_tl _type_ #1 \cs_end: }
+ {
+ \msg_error:nnVn { tabularray } { unknown-colrow-type }
+ \g__tblr_column_or_row_tl {#1}
+ \str_log:c { g_tblr_used_ \g__tblr_column_or_row_tl _types_str }
+ }
+ }
+ }
+
+%% Execute primitive column/row types
+
+\cs_new_protected:Npn \__tblr_execute_colrow_spec:N #1
+ {
+ \tl_if_eq:NnTF \g__tblr_column_or_row_tl { row }
+ { \int_set:Nn \c@rownum {1} }
+ { \int_set:Nn \c@colnum {1} }
+ \exp_last_unbraced:NV \__tblr_execute_colrow_spec_next:N #1 \scan_stop:
+ }
+
+\cs_new_protected:Npn \__tblr_execute_colrow_spec_next:N #1
+ {
+ \token_if_eq_meaning:NNF #1 \scan_stop:
+ { \cs:w tblr_primitive_ \g__tblr_column_or_row_tl _type_ #1 \cs_end: }
+ }
+
+%%% --------------------------------------------------------
+%% \section{Tabularray Environments}
+%%% --------------------------------------------------------
+
+\tl_new:N \l__tblr_env_name_tl
+\bool_new:N \l__tblr_math_mode_bool
+
+\NewDocumentEnvironment { tblr } { O{c} m +b }
+ {
+ \tl_set:Nn \l__tblr_env_name_tl { tblr }
+ \mode_if_math:TF
+ { \bool_set_true:N \l__tblr_math_mode_bool }
+ { \bool_set_false:N \l__tblr_math_mode_bool }
+ \buildtblr {#1} {#2} {#3}
+ } { }
+
+%% Read, split and build the table
+
+\cs_new_protected:Npn \buildtblr #1 #2 #3
+ {
+ \mode_leave_vertical:
+ \int_gincr:N \g_tblr_level_int
+ \__tblr_clear_prop_lists:
+ \__tblr_enable_table_commands:
+ \__tblr_split_table:n { #3 }
+ \LogTblrTracing { command }
+ \__tblr_initial_table_spec:
+ \LogTblrTracing { table }
+ \__tblr_parse_table_spec:n { #2 }
+ \__tblr_execute_table_commands:
+ \__tblr_disable_table_commands:
+ \__tblr_calc_cell_and_line_sizes:
+ \__tblr_build_whole:n { #1 }
+ \int_gdecr:N \g_tblr_level_int
+ }
+
+\cs_new_protected:Npn \__tblr_clear_prop_lists:
+ {
+ \prop_gclear_new:c { g_tblr_text_ \int_use:N \g_tblr_level_int _prop }
+ \prop_gclear_new:c { g_tblr_command_ \int_use:N \g_tblr_level_int _prop }
+ \prop_gclear_new:c { g_tblr_table_ \int_use:N \g_tblr_level_int _prop }
+ \prop_gclear_new:c { g_tblr_row_ \int_use:N \g_tblr_level_int _prop }
+ \prop_gclear_new:c { g_tblr_column_ \int_use:N \g_tblr_level_int _prop }
+ \prop_gclear_new:c { g_tblr_cell_ \int_use:N \g_tblr_level_int _prop }
+ \prop_gclear_new:c { g_tblr_hline_ \int_use:N \g_tblr_level_int _prop }
+ \prop_gclear_new:c { g_tblr_vline_ \int_use:N \g_tblr_level_int _prop }
+ }
+
+%% Insert and remove braces for nesting environments inside cells
+%% These make line split and cell split workable
+%% We need to replace N times for N level nestings
+\regex_const:Nn \c__tblr_insert_braces_regex
+ {
+ \c{begin} \cB\{ (\c[^BE].*) \cE\} (.*?) \c{end} \cB\{ (\c[^BE].*) \cE\}
+ }
+\tl_const:Nn \c__tblr_insert_braces_tl
+ {
+ \c{begin} \cB\{ \cB\{ \1 \cE\} \2 \c{end} \cE\} \cB\{ \3 \cE\}
+ }
+\regex_const:Nn \c__tblr_remove_braces_regex
+ {
+ \c{begin} \cB\{ \cB\{ (.*?) \c{end} \cE\}
+ }
+\tl_const:Nn \c__tblr_remove_braces_tl
+ {
+ \c{begin} \cB\{ \1 \c{end}
+ }
+\cs_new_protected:Npn \__tblr_insert_braces:N #1
+ {
+ \regex_replace_all:NVN \c__tblr_insert_braces_regex \c__tblr_insert_braces_tl #1
+ \regex_replace_all:NVN \c__tblr_insert_braces_regex \c__tblr_insert_braces_tl #1
+ }
+\cs_new_protected:Npn \__tblr_remove_braces:N #1
+ {
+ \regex_replace_all:NVN \c__tblr_remove_braces_regex \c__tblr_remove_braces_tl #1
+ \regex_replace_all:NVN \c__tblr_remove_braces_regex \c__tblr_remove_braces_tl #1
+ }
+
+%% Split table content to cells and store them
+%% #1: table content
+
+\seq_new:N \l_tblr_lines_seq
+
+\cs_new_protected:Npn \__tblr_split_table:n #1
+ {
+ \int_zero:N \c@rowcount
+ \int_zero:N \c@colcount
+ \__tblr_split_table_to_lines:nN { #1 } \l_tblr_lines_seq
+ \__tblr_split_lines_to_cells:N \l_tblr_lines_seq
+ }
+
+%% Split table content to a sequence of lines
+%% #1: table content, #2: resulting sequence of lines
+\cs_new_protected:Npn \__tblr_split_table_to_lines:nN #1 #2
+ {
+ \tl_set:Nn \l_tmpa_tl { #1 }
+ \__tblr_insert_braces:N \l_tmpa_tl
+ \seq_set_split:NnV \l_tmpa_seq { \\ } \l_tmpa_tl
+ \seq_clear:N #2
+ \seq_map_inline:Nn \l_tmpa_seq
+ {
+ \tl_if_head_eq_meaning:nNTF {##1} *
+ {
+ \tl_set:Nn \l__tblr_b_tl { \SetRow{nobreak} }
+ \tl_set:Nx \l__tblr_c_tl { \tl_tail:n {##1} }
+ \tl_trim_spaces:N \l__tblr_c_tl %% Ignore spaces between * and [dimen]
+ \tl_log:N \l__tblr_c_tl
+ \tl_if_head_eq_meaning:VNT \l__tblr_c_tl [
+ {
+ \tl_put_right:Nn \l__tblr_b_tl { \RowBefore@AddBelowSep }
+ }
+ \tl_put_right:NV \l__tblr_b_tl \l__tblr_c_tl
+ \seq_put_right:NV #2 \l__tblr_b_tl
+ }
+ {
+ \tl_if_head_eq_meaning:nNTF { ##1 } [
+ { \seq_put_right:Nn #2 { \RowBefore@AddBelowSep ##1 } }
+ { \seq_put_right:Nn #2 { ##1 } }
+ }
+ }
+ \int_set:Nn \c@rowcount { \seq_count:N #2 }
+ }
+
+%% Treat \\[dimen] command
+\NewTableCommand \RowBefore@AddBelowSep [1] []
+ {
+ \IfValueT { #1 }
+ {
+ \__tblr_prop_gadd_dimen_value:nxx { row }
+ { [\int_eval:n {\c@rownum - 1}] / belowsep } { #1 }
+ }
+ }
+
+%% Split table lines to cells and store them
+%% #1: sequence of lines
+\cs_new_protected:Npn \__tblr_split_lines_to_cells:N #1
+ {
+ \seq_map_indexed_function:NN #1 \__tblr_split_one_line:nn
+ \LogTblrTracing { text }
+ }
+
+%% Split one line into cells and store them
+%% #1: row number, #2 the line text
+\cs_new_protected:Npn \__tblr_split_one_line:nn #1 #2
+ {
+ \seq_set_split:Nnn \l_tmpa_seq { & } { #2 }
+ \int_set:Nn \c@rownum {#1}
+ \int_zero:N \c@colnum
+ \seq_map_inline:Nn \l_tmpa_seq
+ {
+ \tl_set:Nn \l_tmpa_tl { ##1 }
+ \__tblr_remove_braces:N \l_tmpa_tl
+ \int_incr:N \c@colnum
+ \__tblr_extract_table_commands:N \l_tmpa_tl
+ \__tblr_prop_gput:nxV {text} { [#1][\int_use:N \c@colnum] } \l_tmpa_tl
+ \__tblr_add_multicolumn_empty_cell:
+ }
+ %% Decrease row count by 1 if the last row has only one empty cell text
+ %% We need to do it here since the > or < column type may add text to cells
+ \bool_lazy_and:nnTF
+ { \int_compare_p:nNn {\c@colnum} = {1} }
+ { \tl_if_empty_p:N \l_tmpa_tl }
+ { \int_decr:N \c@rowcount }
+ {
+ \__tblr_prop_gput:nnx
+ {row} { [#1] / cell-number } { \int_use:N \c@colnum }
+ \int_compare:nT { \c@colnum > \c@colcount }
+ {
+ \int_set_eq:NN \c@colcount \c@colnum
+ }
+ }
+ }
+
+%% Add empty cells after the \multicolumn span cell
+\cs_new_protected:Npn \__tblr_add_multicolumn_empty_cell:
+ {
+ \int_step_inline:nn { \l__multicolumn_cell_number_int - 1 }
+ {
+ \int_incr:N \c@colnum
+ \__tblr_prop_gput:nxn {text}
+ { [\int_use:N \c@rownum][\int_use:N \c@colnum] } { }
+ }
+ }
+
+%%% --------------------------------------------------------
+%% \section{Extract Table Commands from Cell Text}
+%%% --------------------------------------------------------
+
+%% Extract table commands defined with \NewTableCommand from cell text
+
+\clist_gset:Nn \g__tblr_table_commands_unbrace_next_clist {\multirow, \multicolumn}
+\bool_new:N \l__tblr_table_command_unbrace_next_bool
+\int_new:N \l__multicolumn_cell_number_int
+\tl_new:N \l__tblr_saved_table_commands_before_cell_text_tl
+\tl_new:N \l__tblr_saved_cell_text_after_table_commands_tl
+
+\cs_new_protected:Npn \__tblr_extract_table_commands:N #1
+ {
+ \tl_clear:N \l__tblr_saved_table_commands_before_cell_text_tl
+ \tl_clear:N \l__tblr_saved_cell_text_after_table_commands_tl
+ \int_set:Nn \l__multicolumn_cell_number_int {1}
+ \exp_last_unbraced:NV \__tblr_extract_table_commands_next:w #1 \scan_stop:
+ \tl_if_empty:NF \l__tblr_saved_table_commands_before_cell_text_tl
+ {
+ \__tblr_prop_gput:nxV { command }
+ {[\int_use:N \c@rownum][\int_use:N \c@colnum]}
+ \l__tblr_saved_table_commands_before_cell_text_tl
+ }
+ \tl_set_eq:NN #1 \l__tblr_saved_cell_text_after_table_commands_tl
+ }
+
+%% #1 maybe a single token or multiple tokens given in braces
+\cs_new_protected:Npn \__tblr_extract_table_commands_next:w #1
+ {
+ \clist_if_in:NnTF \g__tblr_table_commands_clist { #1 }
+ {
+ \clist_if_in:NnTF \g__tblr_table_commands_unbrace_next_clist { #1 }
+ { \bool_set_true:N \l__tblr_table_command_unbrace_next_bool }
+ { \bool_set_false:N \l__tblr_table_command_unbrace_next_bool }
+ \token_if_eq_meaning:NNTF #1 \multicolumn
+ { \__tblr_extract_multicolumn_command:Nn #1 }
+ { \__tblr_extract_one_table_command:N #1 }
+ }
+ {
+ \tl_if_single_token:nTF {#1}
+ {
+ \token_if_eq_meaning:NNF #1 \scan_stop:
+ { \__tblr_save_real_cell_text:w #1 }
+ }
+ { \__tblr_save_real_cell_text:w {#1} }
+ }
+ }
+
+\cs_new_protected:Npn \__tblr_extract_multicolumn_command:Nn #1 #2
+ {
+ \int_set:Nn \l__multicolumn_cell_number_int {#2}
+ \__tblr_extract_one_table_command:N #1 {#2}
+ }
+
+\cs_new_protected:Npn \__tblr_extract_one_table_command:N #1
+ {
+ \int_set:Nn \l__tblr_a_int
+ { \cs:w g__tblr_table_cmd_ \cs_to_str:N #1 _arg_numb_tl \cs_end: }
+ \tl_put_right:Nn \l__tblr_saved_table_commands_before_cell_text_tl {#1}
+ \int_compare:nNnTF {\l__tblr_a_int} < {0}
+ {
+ \int_set:Nn \l__tblr_a_int { \int_abs:n {\l__tblr_a_int} - 1 }
+ \peek_charcode:NTF [
+ { \__tblr_extract_table_command_arg_o:w }
+ { \__tblr_extract_table_command_arg_next: }
+ }
+ { \__tblr_extract_table_command_arg_next: }
+ }
+
+\cs_new_protected:Npn \__tblr_extract_table_command_arg_o:w [#1]
+ {
+ \tl_put_right:Nn \l__tblr_saved_table_commands_before_cell_text_tl { [#1] }
+ \__tblr_extract_table_command_arg_next:
+ }
+
+\cs_new_protected:Npn \__tblr_extract_table_command_arg_m:n #1
+ {
+ \tl_put_right:Nn \l__tblr_saved_table_commands_before_cell_text_tl { {#1} }
+ \__tblr_extract_table_command_arg_next:
+ }
+
+\cs_new_protected:Npn \__tblr_extract_table_command_arg_next:
+ {
+ \int_compare:nNnTF {\l__tblr_a_int} > {0}
+ {
+ \int_decr:N \l__tblr_a_int
+ \__tblr_extract_table_command_arg_m:n
+ }
+ {
+ \bool_if:NTF \l__tblr_table_command_unbrace_next_bool
+ { \__tblr_last_unbraced:Nn \__tblr_extract_table_commands_next:w }
+ { \__tblr_extract_table_commands_next:w }
+ }
+ }
+
+\cs_new_protected:Npn \__tblr_last_unbraced:Nn #1 #2 { #1 #2 }
+
+%% The outermost set of braces of cell text #1 will be removed
+\cs_new_protected:Npn \__tblr_save_real_cell_text:w #1 \scan_stop:
+ {
+ \tl_set:Nn \l__tblr_saved_cell_text_after_table_commands_tl {#1}
+ }
+
+%%% --------------------------------------------------------
+%% \section{Initial Table Specifications}
+%%% --------------------------------------------------------
+
+\prop_gset_from_keyval:Nn \g__tblr_default_tblr_table_prop
+ {
+ stretch = 1,
+ }
+
+\prop_gset_from_keyval:Nn \g__tblr_default_tblr_rows_prop
+ {
+ abovesep = 2pt,
+ belowsep = 2pt,
+ @row-height = 0pt,
+ @row-head = 0pt,
+ @row-foot = 0pt,
+ @row-upper = 0pt,
+ @row-lower = 0pt,
+ }
+
+\prop_gset_from_keyval:Nn \g__tblr_default_tblr_columns_prop
+ {
+ leftsep = 6pt,
+ rightsep = 6pt,
+ @col-width = 0pt,
+ }
+
+\prop_gset_from_keyval:Nn \g__tblr_default_tblr_cells_prop
+ {
+ halign = l,
+ valign = t,
+ }
+
+\prop_gset_from_keyval:Nn \g__tblr_default_tblr_hlines_prop
+ {
+ rulesep = 2pt,
+ }
+
+\prop_gset_from_keyval:Nn \g__tblr_default_tblr_vlines_prop
+ {
+ rulesep = 2pt,
+ }
+
+\cs_new_protected:Npn \__tblr_initial_table_spec:
+ {
+ \prop_map_inline:cn { g__tblr_default_ \l__tblr_env_name_tl _table_prop }
+ {
+ \__tblr_prop_gput:nxn { table } { ##1 } {##2}
+ }
+ \int_step_variable:nNn { \c@rowcount } \l__tblr_i_tl
+ {
+ \prop_map_inline:cn { g__tblr_default_ \l__tblr_env_name_tl _rows_prop }
+ {
+ \__tblr_prop_gput:nxn { row } { [\l__tblr_i_tl] / ##1 } {##2}
+ }
+ \prop_map_inline:cn { g__tblr_default_ \l__tblr_env_name_tl _hlines_prop }
+ {
+ \__tblr_prop_gput:nxn { hline } { [\l__tblr_i_tl] / ##1 } {##2}
+ }
+ \int_step_variable:nNn { \c@colcount } \l__tblr_j_tl
+ {
+ \prop_map_inline:cn
+ { g__tblr_default_ \l__tblr_env_name_tl _cells_prop }
+ {
+ \__tblr_prop_gput:nxn { cell }
+ { [\l__tblr_i_tl][\l__tblr_j_tl] / ##1 } {##2}
+ }
+ }
+ }
+ \prop_map_inline:cn { g__tblr_default_ \l__tblr_env_name_tl _hlines_prop }
+ {
+ \__tblr_prop_gput:nxn { hline }
+ { [\int_eval:n { \c@rowcount + 1}] / ##1 } {##2}
+ }
+ \int_step_variable:nNn { \c@colcount } \l__tblr_j_tl
+ {
+ \prop_map_inline:cn { g__tblr_default_ \l__tblr_env_name_tl _columns_prop }
+ {
+ \__tblr_prop_gput:nxn { column } { [\l__tblr_j_tl] / ##1 } {##2}
+ }
+ \prop_map_inline:cn { g__tblr_default_ \l__tblr_env_name_tl _vlines_prop }
+ {
+ \__tblr_prop_gput:nxn { vline } { [\l__tblr_j_tl] / ##1 } {##2}
+ }
+ }
+ \prop_map_inline:cn { g__tblr_default_ \l__tblr_env_name_tl _vlines_prop }
+ {
+ \__tblr_prop_gput:nxn { vline }
+ { [\int_eval:n { \c@colcount + 1}] / ##1 } {##2}
+ }
+ \keys_set:nv { tblr } { l__tblr_default_ \l__tblr_env_name_tl _tl }
+ }
+
+\tl_new:N \l__tblr_default_tblr_tl
+
+%% #1: env name; #2: options
+\NewDocumentCommand \SetTabularrayDefault { O{tblr} m }
+ {
+ \tl_put_right:cn { l__tblr_default_ #1 _tl } { , #2 }
+ }
+\cs_new_eq:NN \SetTblrDefault \SetTabularrayDefault
+
+%%% --------------------------------------------------------
+%% \section{Parse Table Specifications}
+%%% --------------------------------------------------------
+
+\clist_new:N \g__tblr_table_known_keys_clist
+\clist_gset:Nn \g__tblr_table_known_keys_clist
+ {
+ colspec, rowspec, width, hspan, stretch,
+ column, row, cell, vline, hline, columns, rows, cells, vlines, hlines,
+ leftsep, rightsep, colsep, abovesep, belowsep, rowsep,
+ }
+
+\keys_define:nn { tblr }
+ {
+ colspec .code:n = \__tblr_parse_colrow_spec:nn { column } {#1},
+ rowspec .code:n = \__tblr_parse_colrow_spec:nn { row } {#1},
+ width .code:n = \__tblr_keys_gput:nx { width } { \dim_eval:n {#1} },
+ hspan .code:n = \__tblr_keys_gput:nn { hspan } {#1},
+ stretch .code:n = \__tblr_keys_gput:nn { stretch } {#1},
+ columns .code:n = \__tblr_set_every_column_aux:n {#1},
+ rows .code:n = \__tblr_set_every_row_aux:n {#1},
+ cells .code:n = \__tblr_set_every_cell_aux:n {#1},
+ hlines .code:n = \__tblr_set_every_hline_aux:n {#1},
+ vlines .code:n = \__tblr_set_every_vline_aux:n {#1},
+ leftsep .code:n = \tblr_set_every_column:nn { } { leftsep = #1 },
+ rightsep .code:n = \tblr_set_every_column:nn { } { rightsep = #1 },
+ colsep .meta:n = { leftsep = #1, rightsep = #1 },
+ abovesep .code:n = \tblr_set_every_row:nn { } { abovesep = #1 },
+ belowsep .code:n = \tblr_set_every_row:nn { } { belowsep = #1 },
+ rowsep .meta:n = { abovesep = #1, belowsep = #1 },
+ unknown .code:n = \__tblr_table_special_key:Vn \l_keys_key_str {#1},
+ }
+
+\regex_const:Nn \c__tblr_split_key_name_regex { ^ ( [a-z] + ) ( . * ) }
+
+\cs_new_protected:Npn \__tblr_table_special_key:nn #1 #2
+ {
+ \regex_extract_once:NnNT \c__tblr_split_key_name_regex {#1} \l_tmpa_seq
+ {
+ \tl_set:Nx \l__tblr_a_tl { \seq_item:Nn \l_tmpa_seq {2} }
+ \tl_set_rescan:Nnx \l__tblr_b_tl {} { \seq_item:Nn \l_tmpa_seq {3} }
+ \cs:w __tblr_set_ \l__tblr_a_tl _aux:Vn \cs_end: \l__tblr_b_tl {#2}
+ }
+ }
+\cs_generate_variant:Nn \__tblr_table_special_key:nn { Vn }
+
+%% If the first key name is known, treat #1 is the table spec;
+%% otherwise, treat #1 as colspec.
+
+\regex_const:Nn \c__tblr_first_key_name_regex { ^ \s * ( [A-Za-z\-] + ) }
+
+\cs_new_protected:Npn \__tblr_parse_table_spec:n #1
+ {
+ \regex_extract_once:NnNTF \c__tblr_first_key_name_regex {#1} \l_tmpa_seq
+ {
+ \clist_if_in:NxTF \g__tblr_table_known_keys_clist
+ { \seq_item:Nn \l_tmpa_seq {2} }
+ { \keys_set:nn { tblr } {#1} }
+ { \__tblr_parse_colrow_spec:nn { column } {#1} }
+ }
+ { \__tblr_parse_colrow_spec:nn { column } {#1} }
+ }
+
+\cs_new_protected:Npn \__tblr_keys_gput:nn #1 #2
+ {
+ \__tblr_prop_gput:nnn { table } {#1} {#2}
+ }
+\cs_generate_variant:Nn \__tblr_keys_gput:nn { nx }
+
+%%% --------------------------------------------------------
+%% \section{Typeset and Calculate Sizes}
+%%% --------------------------------------------------------
+
+%% Calculate the width and height for every cell and border
+
+\cs_new_protected:Npn \__tblr_calc_cell_and_line_sizes:
+ {
+ \__tblr_make_strut_box:
+ \__tblr_calculate_line_sizes:
+ \__tblr_calculate_cell_sizes:
+ \LogTblrTracing { cell, row, column, hline, vline }
+ \__tblr_compute_extendable_column_width:
+ \__tblr_adjust_sizes_for_span_cells:
+ }
+
+%% make strut box from stretch option of the table
+
+\box_new:N \l__tblr_strut_ht_box
+\box_new:N \l__tblr_strut_dp_box
+
+\cs_new_protected:Npn \__tblr_make_strut_box:
+ {
+ \tl_set:Nx \l__tblr_s_tl { \__tblr_prop_item:ne { table } { stretch } }
+ \hbox_set:Nn \l__tblr_strut_ht_box
+ { \vrule height \l__tblr_s_tl \box_ht:N \strutbox width ~ 0pt }
+ \hbox_set:Nn \l__tblr_strut_dp_box
+ { \vrule depth \l__tblr_s_tl \box_dp:N \strutbox width ~ 0pt }
+ }
+
+%% Calculate the thickness for every hline and vline
+\cs_new_protected:Npn \__tblr_calculate_line_sizes:
+ {
+ %% We need these two counters in executing hline and vline commands
+ \int_zero:N \c@rownum
+ \int_zero:N \c@colnum
+ \int_step_inline:nn { \c@rowcount + 1 }
+ {
+ \int_incr:N \c@rownum
+ \int_zero:N \c@colnum
+ \int_step_inline:nn { \c@colcount + 1 }
+ {
+ \int_incr:N \c@colnum
+ \int_compare:nNnT { ##1 } < { \c@rowcount + 1 }
+ {
+ \__tblr_measure_and_update_vline_size:nn { ##1 } { ####1 }
+ }
+ \int_compare:nNnT { ####1 } < { \c@colcount + 1 }
+ {
+ \__tblr_measure_and_update_hline_size:nn { ##1 } { ####1 }
+ }
+ }
+ }
+ }
+
+%% Measure and update thickness of the vline
+%% #1: row number, #2 column number
+\cs_new_protected:Npn \__tblr_measure_and_update_vline_size:nn #1 #2
+ {
+ \dim_zero:N \l__tblr_w_dim
+ \tl_set:Nx \l__tblr_n_tl
+ { \__tblr_prop_item:ne { vline } { [#2] / @vline-count } }
+ \tl_if_empty:NF \l__tblr_n_tl
+ {
+ \tl_set:Nx \l__tblr_s_tl
+ { \__tblr_prop_item:ne { vline } { [#2] / rulesep } }
+ \int_step_inline:nn { \l__tblr_n_tl }
+ {
+ \vbox_set_to_ht:Nnn \l__tblr_b_box {1pt}
+ {
+ \__tblr_get_vline_segment_child:nnnnn
+ {#1} {#2} {##1} {1pt} {1pt}
+ }
+ \tl_set:Nx \l__tblr_w_tl { \dim_eval:n { \box_wd:N \l__tblr_b_box } }
+ \__tblr_prop_gput_if_larger:nxx { vline }
+ { [#2](##1) / @vline-width } { \l__tblr_w_tl }
+ \dim_add:Nn \l__tblr_w_dim { \l__tblr_w_tl }
+ \dim_add:Nn \l__tblr_w_dim { \l__tblr_s_tl }
+ }
+ \dim_add:Nn \l__tblr_w_dim { - \l__tblr_s_tl }
+ }
+ \__tblr_prop_gput_if_larger:nxx { vline }
+ { [#2]/ @vline-width } { \dim_use:N \l__tblr_w_dim }
+ }
+
+%% Get text of a vline segment
+%% #1: row number, #2: column number; #3: index number; #4: height; #5: depth
+%% We put all code inside a group to avoid conflicts of local variables
+\cs_new_protected:Npn \__tblr_get_vline_segment_child:nnnnn #1 #2 #3 #4 #5
+ {
+ \group_begin:
+ \tl_set:Nx \l__tblr_w_tl
+ { \__tblr_prop_item:ne { vline } { [#1][#2](#3) / wd } }
+ \tl_if_empty:NF \l__tblr_w_tl { \dim_set:Nn \rulewidth { \l__tblr_w_tl } }
+ \tl_set:Nx \l__tblr_d_tl
+ { \__tblr_prop_item:ne { vline } { [#1][#2](#3) / @dash } }
+ \tl_set:Nx \l__tblr_a_tl { \tl_head:N \l__tblr_d_tl }
+ \tl_set:Nx \l__tblr_b_tl { \tl_tail:N \l__tblr_d_tl }
+ \exp_args:NV \tl_if_eq:NNTF \l__tblr_a_tl \@tblr@dash
+ {
+ \__tblr_get_vline_dash_style:N \l__tblr_b_tl
+ \xleaders \l__tblr_b_tl \vfil
+ }
+ {
+ \hbox_set:Nn \l__tblr_d_box { \l__tblr_b_tl }
+ \box_set_ht:Nn \l__tblr_d_box {#4}
+ \box_set_dp:Nn \l__tblr_d_box {#5}
+ \box_use:N \l__tblr_d_box
+ }
+ \group_end:
+ }
+\cs_generate_variant:Nn \__tblr_get_vline_segment_child:nnnnn { nnnxx }
+
+%% Measure and update thickness of the hline
+%% #1: row number, #2 column number
+\cs_new_protected:Npn \__tblr_measure_and_update_hline_size:nn #1 #2
+ {
+ \dim_zero:N \l__tblr_h_dim
+ \tl_set:Nx \l__tblr_n_tl
+ { \__tblr_prop_item:ne { hline } { [#1] / @hline-count } }
+ \tl_if_empty:NF \l__tblr_n_tl
+ {
+ \tl_set:Nx \l__tblr_s_tl
+ { \__tblr_prop_item:ne { hline } { [#1] / rulesep } }
+ \int_step_inline:nn { \l__tblr_n_tl }
+ {
+ \hbox_set_to_wd:Nnn \l__tblr_b_box {1pt}
+ { \__tblr_get_hline_segment_child:nnn {#1} {#2} {##1} }
+ \tl_set:Nx \l__tblr_h_tl
+ {
+ \dim_eval:n
+ { \box_ht:N \l__tblr_b_box + \box_dp:N \l__tblr_b_box }
+ }
+ \__tblr_prop_gput_if_larger:nxx { hline }
+ { [#1](##1) / @hline-height } { \l__tblr_h_tl }
+ \dim_add:Nn \l__tblr_h_dim { \l__tblr_h_tl }
+ \dim_add:Nn \l__tblr_h_dim { \l__tblr_s_tl }
+ }
+ \dim_add:Nn \l__tblr_h_dim { - \l__tblr_s_tl }
+ }
+ \__tblr_prop_gput_if_larger:nxx { hline }
+ { [#1] / @hline-height } { \dim_use:N \l__tblr_h_dim }
+ }
+
+%% Get text of a hline segment
+%% #1: row number, #2: column number; #3: index number
+\cs_new_protected:Npn \__tblr_get_hline_segment_child:nnn #1 #2 #3
+ {
+ \group_begin:
+ \tl_set:Nx \l__tblr_w_tl
+ { \__tblr_prop_item:ne { hline } { [#1][#2](#3) / wd } }
+ \tl_if_empty:NF \l__tblr_w_tl { \dim_set:Nn \rulewidth { \l__tblr_w_tl } }
+ \tl_set:Nx \l__tblr_d_tl
+ { \__tblr_prop_item:ne { hline } { [#1][#2](#3) / @dash } }
+ \tl_set:Nx \l__tblr_a_tl { \tl_head:N \l__tblr_d_tl }
+ \tl_set:Nx \l__tblr_b_tl { \tl_tail:N \l__tblr_d_tl }
+ \exp_args:NV \tl_if_eq:NNTF \l__tblr_a_tl \@tblr@dash
+ {
+ \__tblr_get_hline_dash_style:N \l__tblr_b_tl
+ \xleaders \l__tblr_b_tl \hfil
+ }
+ { \l__tblr_b_tl \hfil }
+ \group_end:
+ }
+
+%% current cell alignments
+\tl_new:N \g__tblr_cell_halign_tl
+\tl_new:N \g__tblr_cell_valign_tl
+\tl_new:N \g__tblr_cell_middle_tl
+
+\tl_const:Nn \c__tblr_valign_h_tl { h }
+\tl_const:Nn \c__tblr_valign_m_tl { m }
+\tl_const:Nn \c__tblr_valign_f_tl { f }
+\tl_const:Nn \c__tblr_valign_t_tl { t }
+\tl_const:Nn \c__tblr_valign_b_tl { b }
+
+\tl_const:Nn \c__tblr_middle_t_tl { t }
+\tl_const:Nn \c__tblr_middle_m_tl { m }
+\tl_const:Nn \c__tblr_middle_b_tl { b }
+
+%% #1: row number; #2: column number
+\cs_new_protected:Npn \__tblr_get_cell_alignments:nn #1 #2
+ {
+ \group_begin:
+ \tl_gset:Nx \g__tblr_cell_halign_tl
+ { \__tblr_prop_item:ne { cell } { [#1][#2] / halign } }
+ \tl_set:Nx \l__tblr_v_tl
+ { \__tblr_prop_item:ne { cell } { [#1][#2] / valign } }
+ \tl_case:NnF \l__tblr_v_tl
+ {
+ \c__tblr_valign_t_tl
+ {
+ \tl_gset:Nn \g__tblr_cell_valign_tl {m}
+ \tl_gset:Nn \g__tblr_cell_middle_tl {t}
+ }
+ \c__tblr_valign_m_tl
+ {
+ \tl_gset:Nn \g__tblr_cell_valign_tl {m}
+ \tl_gset:Nn \g__tblr_cell_middle_tl {m}
+ }
+ \c__tblr_valign_b_tl
+ {
+ \tl_gset:Nn \g__tblr_cell_valign_tl {m}
+ \tl_gset:Nn \g__tblr_cell_middle_tl {b}
+ }
+ }
+ {
+ \tl_gset_eq:NN \g__tblr_cell_valign_tl \l__tblr_v_tl
+ \tl_gclear:N \g__tblr_cell_middle_tl
+ }
+ \group_end:
+ }
+
+%% current cell dimensions
+\dim_new:N \g__tblr_cell_wd_dim
+\dim_new:N \g__tblr_cell_ht_dim
+\dim_new:N \g__tblr_cell_head_dim
+\dim_new:N \g__tblr_cell_foot_dim
+
+%% Calculate the width and height for every cell
+\cs_new_protected:Npn \__tblr_calculate_cell_sizes:
+ {
+ %% You can use these two counters in cell text
+ \int_zero:N \c@rownum
+ \int_zero:N \c@colnum
+ \int_step_inline:nn { \c@rowcount }
+ {
+ \int_incr:N \c@rownum
+ \int_zero:N \c@colnum
+ \tl_set:Nx \l__tblr_h_tl
+ { \__tblr_prop_item:ne { row } { [\int_use:N \c@rownum] / height } }
+ \tl_if_empty:NF \l__tblr_h_tl
+ {
+ \__tblr_prop_gput:nxV { row }
+ { [\int_use:N \c@rownum] / @row-height } \l__tblr_h_tl
+ }
+ \int_step_inline:nn { \c@colcount }
+ {
+ \int_incr:N \c@colnum
+ \__tblr_measure_cell_update_sizes:nnNNNN
+ { \int_use:N \c@rownum }
+ { \int_use:N \c@colnum }
+ \g__tblr_cell_wd_dim
+ \g__tblr_cell_ht_dim
+ \g__tblr_cell_head_dim
+ \g__tblr_cell_foot_dim
+ }
+ }
+ }
+
+%% Measure and update natural dimensions of the row/column/cell
+%% #1: row number; #2 column number; #3: width dimension;
+%% #4: total height dimension; #5: head dimension; #6: foot dimension
+\cs_new_protected:Npn \__tblr_measure_cell_update_sizes:nnNNNN #1 #2 #3 #4 #5 #6
+ {
+ \__tblr_get_cell_alignments:nn {#1} {#2}
+ \hbox_set:Nn \l_tmpa_box { \__tblr_get_cell_text:nn {#1} {#2} }
+ \__tblr_update_cell_size:nnNNNN {#1} {#2} #3 #4 #5 #6
+ \__tblr_update_row_size:nnNNN {#1} {#2} #4 #5 #6
+ \__tblr_update_col_size:nN {#2} #3
+ }
+
+%% #1: row number, #2: column number
+\cs_new_protected:Npn \__tblr_get_cell_text:nn #1 #2
+ {
+ \__tblr_prop_if_in:nxTF {cell} { [#1][#2] / omit }
+ {
+ \dim_gzero:N \g__tblr_cell_wd_dim
+ \dim_gzero:N \g__tblr_cell_ht_dim
+ \dim_gzero:N \g__tblr_cell_head_dim
+ \dim_gzero:N \g__tblr_cell_foot_dim
+ }
+ { \__tblr_get_cell_text_real:nn { #1 } { #2 } }
+ }
+
+%% Get cell text, #1: row number, #2: column number
+%% If the width of the cell is not set, split it with \\ and compute the width
+%% Therefore we always get a vbox for any cell
+\cs_new_protected:Npn \__tblr_get_cell_text_real:nn #1 #2
+ {
+ \group_begin:
+ \tl_set:Nx \l__tblr_c_tl { \__tblr_prop_item:ne {text} {[#1][#2]} }
+ \tl_set:Nx \l__tblr_w_tl
+ { \__tblr_prop_item:ne { cell } { [#1][#2] / width } }
+ \tl_if_empty:NT \l__tblr_w_tl
+ {
+ \__tblr_prop_if_in:nxF { cell } { [#1][#2] / colspan }
+ {
+ \tl_set:Nx \l__tblr_w_tl
+ { \__tblr_prop_item:ne { column } { [#2] / width } }
+ }
+ }
+ \tl_if_empty:NT \l__tblr_w_tl
+ {
+ \bool_if:NTF \l__tblr_math_mode_bool
+ {
+ \hbox_set:Nn \l_tmpa_box { $\l__tblr_c_tl$ }
+ \tl_set:Nx \l__tblr_w_tl { \box_wd:N \l_tmpa_box }
+ }
+ {
+ \tl_set_eq:NN \l_tmpb_tl \l__tblr_c_tl
+ \__tblr_insert_braces:N \l_tmpb_tl
+ \seq_set_split:NnV \l_tmpa_seq { \\ } \l_tmpb_tl
+ \tl_set:Nn \l__tblr_w_tl { 0pt }
+ \seq_map_variable:NNn \l_tmpa_seq \l_tmpa_tl
+ {
+ \__tblr_remove_braces:N \l_tmpa_tl
+ \hbox_set:Nn \l_tmpa_box { \l_tmpa_tl }
+ \tl_set:Nx \l__tblr_w_tl
+ { \dim_max:nn { \l__tblr_w_tl } { \box_wd:N \l_tmpa_box } }
+ }
+ }
+ }
+ \__tblr_get_vcell_and_sizes:NN \l__tblr_c_tl \l__tblr_w_tl
+ \group_end:
+ }
+
+%% #1: cell text; #2: box width
+\cs_new_protected:Npn \__tblr_get_vcell_and_sizes:NN #1 #2
+ {
+ \group_begin:
+ \vbox_set_top:Nn \l_tmpa_box { \__tblr_make_vcell_text:nN #1 #2 }
+ \vbox_set:Nn \l_tmpb_box { \__tblr_make_vcell_text:nN #1 #2 }
+ \dim_gset:Nn \g__tblr_cell_wd_dim { \box_wd:N \l_tmpb_box }
+ \dim_gset:Nn \g__tblr_cell_ht_dim
+ { \box_ht:N \l_tmpb_box + \box_dp:N \l_tmpb_box }
+ \dim_gset:Nn \g__tblr_cell_head_dim { \box_ht:N \l_tmpa_box }
+ \dim_gset:Nn \g__tblr_cell_foot_dim { \box_dp:N \l_tmpb_box }
+ \tl_case:Nn \g__tblr_cell_valign_tl
+ {
+ \c__tblr_valign_h_tl
+ { \box_use:N \l_tmpa_box }
+ \c__tblr_valign_m_tl
+ {
+ \tl_case:Nn \g__tblr_cell_middle_tl
+ {
+ \c__tblr_middle_t_tl
+ { \box_use:N \l_tmpa_box }
+ \c__tblr_middle_m_tl
+ {
+ \tl_set:Nx \l__tblr_b_tl
+ {
+ \dim_eval:n
+ {
+ ( \g__tblr_cell_ht_dim - \g__tblr_cell_head_dim
+ - \g__tblr_cell_foot_dim ) / 2
+ }
+ }
+ \box_set_ht:Nn \l_tmpb_box
+ { \g__tblr_cell_head_dim + \l__tblr_b_tl }
+ \box_set_dp:Nn \l_tmpb_box
+ { \g__tblr_cell_foot_dim + \l__tblr_b_tl }
+ \box_use:N \l_tmpb_box
+ }
+ \c__tblr_middle_b_tl
+ { \box_use:N \l_tmpb_box }
+ }
+ }
+ \c__tblr_valign_f_tl
+ { \box_use:N \l_tmpb_box }
+ }
+ \group_end:
+ }
+
+\cs_new_eq:NN \__tlbr_halign_l: \raggedright
+\cs_new_eq:NN \__tlbr_halign_c: \centering
+\cs_new_eq:NN \__tlbr_halign_r: \raggedleft
+
+%% #1: cell text; #2: box width
+\cs_new_protected:Npn \__tblr_make_vcell_text:nN #1 #2
+ {
+ \dim_set:Nn \tex_hsize:D { #2 }
+ \@arrayparboxrestore
+ \cs:w __tlbr_halign_ \g__tblr_cell_halign_tl : \cs_end:
+ \mode_leave_vertical:
+ \box_use:N \l__tblr_strut_ht_box
+ \bool_if:NTF \l__tblr_math_mode_bool { $#1$ } { #1 }
+ \box_use:N \l__tblr_strut_dp_box
+ }
+
+%% #1: total height dimension; #2: head dimension; #3: foot dimension;
+%% #4: tl for resulting upper size; #5: tl for resulting lower size
+
+\tl_new:N \l__tblr_middle_body_tl
+
+\cs_new_protected:Npn \__tblr_get_middle_cell_upper_lower:NNNNN #1 #2 #3 #4 #5
+ {
+ \tl_case:Nn \g__tblr_cell_middle_tl
+ {
+ \c__tblr_middle_t_tl
+ {
+ \tl_set:Nx #4 { \dim_use:N #2 }
+ \tl_set:Nx #5 { \dim_eval:n { #1 - #2 } }
+ }
+ \c__tblr_middle_m_tl
+ {
+ \tl_set:Nx \l__tblr_middle_body_tl { \dim_eval:n { #1 - #2 - #3 } }
+ \tl_set:Nx #4 { \dim_eval:n { #2 + \l__tblr_middle_body_tl / 2 } }
+ \tl_set:Nx #5 { \dim_eval:n { #3 + \l__tblr_middle_body_tl / 2 } }
+ }
+ \c__tblr_middle_b_tl
+ {
+ \tl_set:Nx #4 { \dim_eval:n { #1 - #3 } }
+ \tl_set:Nx #5 { \dim_use:N #3 }
+ }
+ }
+ }
+
+%% Update natural dimensions of the cell
+%% #1: row number; #2 column number; #3: width dimension;
+%% #4: total height dimension; #5: head dimension; #6: foot dimension
+\cs_new_protected:Npn \__tblr_update_cell_size:nnNNNN #1 #2 #3 #4 #5 #6
+ {
+ \group_begin:
+ \tl_set:Nx \l__tblr_c_tl
+ { \__tblr_prop_item:ne {cell} { [#1][#2] / colspan } }
+ \tl_if_empty:NF \l__tblr_c_tl
+ {
+ \__tblr_prop_gput:nxx {cell} { [#1][#2] / @cell-width } { \dim_use:N #3 }
+ \dim_gzero:N #3 % don't affect column width
+ }
+ \tl_set:Nx \l__tblr_r_tl
+ { \__tblr_prop_item:ne {cell} { [#1][#2] / rowspan } }
+ \tl_if_empty:NF \l__tblr_r_tl
+ {
+ \tl_case:Nn \g__tblr_cell_valign_tl
+ {
+ \c__tblr_valign_h_tl
+ {
+ \tl_set:Nx \l__tblr_u_tl { \dim_use:N #5 }
+ \tl_set:Nx \l__tblr_v_tl { \dim_eval:n { #4 - #5 } }
+ %% Update the head size of the first span row here
+ \__tblr_prop_gput_if_larger:nxx { row }
+ { [#1] / @row-head } { \dim_use:N #5 }
+ }
+ \c__tblr_valign_f_tl
+ {
+ \tl_set:Nx \l__tblr_u_tl { \dim_eval:n { #4 - #6 } }
+ \tl_set:Nx \l__tblr_v_tl { \dim_use:N #6 }
+ %% Update the foot size of the last span row here
+ \__tblr_prop_gput_if_larger:nxx { row }
+ { [\int_eval:n { #1 + \l__tblr_r_tl - 1 }] / @row-foot }
+ { \dim_use:N #6 }
+ }
+ \c__tblr_valign_m_tl
+ {
+ \__tblr_get_middle_cell_upper_lower:NNNNN
+ #4 #5 #6 \l__tblr_u_tl \l__tblr_v_tl
+ }
+ }
+ \__tblr_prop_gput:nxV {cell} { [#1][#2] / @cell-height } \l__tblr_u_tl
+ \__tblr_prop_gput:nxV {cell} { [#1][#2] / @cell-depth } \l__tblr_v_tl
+ %% Don't affect row sizes
+ \dim_gzero:N #4
+ \dim_gzero:N #5
+ \dim_gzero:N #6
+ }
+ \group_end:
+ }
+
+
+%% Update size of the row. #1: row number; #2: column number;
+%% #3: total height dimension; #4: head dimension; #5: foot dimension
+\cs_new_protected:Npn \__tblr_update_row_size:nnNNN #1 #2 #3 #4 #5
+ {
+ \group_begin:
+ %% Note that \l__tblr_h_tl may be empty
+ \tl_set:Nx \l__tblr_h_tl
+ { \__tblr_prop_item:ne { row } { [#1] / @row-height } }
+ \tl_if_eq:NNTF \g__tblr_cell_valign_tl \c__tblr_valign_m_tl
+ {
+ \tl_set:Nx \l__tblr_a_tl
+ { \__tblr_prop_item:ne { row } { [#1] / @row-upper } }
+ \tl_set:Nx \l__tblr_b_tl
+ { \__tblr_prop_item:ne { row } { [#1] / @row-lower } }
+ \__tblr_get_middle_cell_upper_lower:NNNNN
+ #3 #4 #5 \l__tblr_u_tl \l__tblr_v_tl
+ \dim_compare:nNnT { \l__tblr_u_tl } > { \l__tblr_a_tl }
+ {
+ \tl_set_eq:NN \l__tblr_a_tl \l__tblr_u_tl
+ \__tblr_prop_gput:nxV { row }
+ { [#1] / @row-upper } \l__tblr_a_tl
+ }
+ \dim_compare:nNnT { \l__tblr_v_tl } > { \l__tblr_b_tl }
+ {
+ \tl_set_eq:NN \l__tblr_b_tl \l__tblr_v_tl
+ \__tblr_prop_gput:nxV { row }
+ { [#1] / @row-lower } \l__tblr_b_tl
+ }
+ \dim_compare:nNnT
+ { \l__tblr_a_tl + \l__tblr_b_tl } > { \l__tblr_h_tl + 0pt }
+ {
+ \__tblr_prop_gput:nxx { row } { [#1] / @row-height }
+ { \dim_eval:n { \l__tblr_a_tl + \l__tblr_b_tl } }
+ }
+ }
+ {
+ \tl_set:Nx \l__tblr_e_tl
+ { \__tblr_prop_item:ne { row } { [#1] / @row-head } }
+ \tl_set:Nx \l__tblr_f_tl
+ { \__tblr_prop_item:ne { row } { [#1] / @row-foot } }
+ \dim_compare:nNnT {#4} > {\l__tblr_e_tl}
+ {
+ \__tblr_prop_gput:nxx { row } { [#1] / @row-head } { \dim_use:N #4 }
+ }
+ \dim_compare:nNnT {#5} > {\l__tblr_f_tl}
+ {
+ \__tblr_prop_gput:nxx { row } { [#1] / @row-foot } { \dim_use:N #5 }
+ }
+ \tl_set:Nx \l__tblr_x_tl { \dim_max:nn {#4} { \l__tblr_e_tl } }
+ \tl_set:Nx \l__tblr_y_tl { \dim_max:nn {#5} { \l__tblr_f_tl } }
+ \dim_compare:nNnT
+ { #3 - #4 - #5 } > { \l__tblr_h_tl - \l__tblr_x_tl - \l__tblr_y_tl }
+ {
+ \__tblr_prop_gput:nxx { row } { [#1] / @row-height }
+ {
+ \dim_eval:n
+ {
+ \l__tblr_x_tl
+ + \dim_use:N #3 - \dim_use:N #4 - \dim_use:N #5
+ + \l__tblr_y_tl
+ }
+ }
+ }
+ }
+ \group_end:
+ }
+
+
+%% Update size of the column. #1: column number; #2: width dimension
+
+\cs_new_protected:Npn \__tblr_update_col_size:nN #1 #2
+ {
+ \tl_set:Nx \l_tmpb_tl
+ { \__tblr_prop_item:ne {column} { [#1] / @col-width } }
+ \bool_lazy_or:nnT
+ { \tl_if_empty_p:N \l_tmpb_tl }
+ { \dim_compare_p:nNn { \dim_use:N #2 } > { \l_tmpb_tl } }
+ {
+ \__tblr_prop_gput:nxx {column} { [#1] / @col-width } { \dim_use:N #2 }
+ }
+ }
+
+%%% --------------------------------------------------------
+%% \section{Calculate and Adjust Extendable Columns}
+%%% --------------------------------------------------------
+
+%% Compute column widths when there are some extendable columns
+
+\dim_new:N \l__column_target_dim
+\prop_new:N \l__column_coefficient_prop
+\prop_new:N \l__column_natural_width_prop
+\prop_new:N \l__column_computed_width_prop
+
+\msg_new:nnn { tabularray } { table-width-too-small }
+ { Table ~ width ~ is ~ too ~ small, need ~ #1 ~ more! }
+
+\cs_new_protected:Npn \__tblr_compute_extendable_column_width:
+ {
+ \__tblr_collect_extendable_column_width:
+ \dim_compare:nNnTF { \l__column_target_dim } > { 0pt }
+ {
+ \prop_if_empty:NF \l__column_coefficient_prop
+ { \__tblr_adjust_extendable_column_width: }
+ }
+ {
+ \msg_warning:nnx { tabularray } { table-width-too-small }
+ { \dim_abs:n { \l__column_target_dim } }
+ }
+ }
+
+\cs_new_protected:Npn \__tblr_collect_extendable_column_width:
+ {
+ \tl_set:Nx \l_tmpa_tl { \__tblr_prop_item:nn {table} {width} }
+ \tl_if_empty:NTF \l_tmpa_tl
+ { \dim_set_eq:NN \l__column_target_dim \linewidth }
+ { \dim_set:Nn \l__column_target_dim { \l_tmpa_tl } }
+ \prop_clear:N \l__column_coefficient_prop
+ \prop_clear:N \l__column_natural_width_prop
+ \prop_clear:N \l__column_computed_width_prop
+ \int_step_variable:nNn { \c@colcount } \l__tblr_j_tl
+ {
+ \tl_set:Nx \l__tblr_a_tl
+ { \__tblr_prop_item:ne {column} { [\l__tblr_j_tl] / width } }
+ \tl_set:Nx \l__tblr_b_tl
+ { \__tblr_prop_item:ne {column} { [\l__tblr_j_tl] / coefficient } }
+ \tl_set:Nx \l__tblr_c_tl
+ { \__tblr_prop_item:ne {column} { [\l__tblr_j_tl] / @col-width } }
+ \tl_if_empty:NTF \l__tblr_a_tl
+ {
+ \tl_if_empty:NTF \l__tblr_b_tl
+ { \dim_sub:Nn \l__column_target_dim { \l__tblr_c_tl } }
+ {
+ \prop_put:Nxx \l__column_coefficient_prop
+ { \l__tblr_j_tl } { \l__tblr_b_tl }
+ \prop_put:Nxn \l__column_computed_width_prop
+ { \l__tblr_j_tl } { 0pt }
+ \dim_compare:nNnF { \l__tblr_b_tl pt } > { 0pt }
+ {
+ \prop_put:Nxx \l__column_natural_width_prop
+ { \l__tblr_j_tl } { \l__tblr_c_tl }
+ }
+ }
+ }
+ { \dim_sub:Nn \l__column_target_dim { \l__tblr_a_tl } }
+ \tl_set:Nx \l__tblr_a_tl
+ { \__tblr_prop_item:ne {vline} { [\l__tblr_j_tl] / @vline-width } }
+ \tl_set:Nx \l__tblr_b_tl
+ { \__tblr_prop_item:ne {column} { [\l__tblr_j_tl] / leftsep} }
+ \tl_set:Nx \l__tblr_c_tl
+ { \__tblr_prop_item:ne {column} { [\l__tblr_j_tl] / rightsep } }
+ \dim_set:Nn \l__column_target_dim
+ { \l__column_target_dim - \l__tblr_a_tl - \l__tblr_b_tl - \l__tblr_c_tl }
+ }
+ \tl_set:Nx \l__tblr_a_tl
+ {
+ \__tblr_prop_item:ne {vline}
+ { [\int_eval:n {\c@colcount + 1}] / @vline-width }
+ }
+ \tl_if_empty:NF \l__tblr_a_tl
+ { \dim_sub:Nn \l__column_target_dim { \l__tblr_a_tl } }
+ \LogTblrTracing { target }
+ }
+
+%% If all columns have negative coefficients and small natural widths,
+%% \l__column_coefficient_prop will be empty after one or more rounds
+\cs_new_protected:Npn \__tblr_adjust_extendable_column_width:
+ {
+ \bool_while_do:nn
+ { \dim_compare_p:nNn { \l__column_target_dim } > { \hfuzz } }
+ {
+ \prop_if_empty:NTF \l__column_coefficient_prop
+ { \__tblr_adjust_extendable_column_width_negative: }
+ { \__tblr_adjust_extendable_column_width_once: }
+ }
+ \prop_map_inline:Nn \l__column_computed_width_prop
+ {
+ \__tblr_prop_gput:nnx {column} { [##1] / width } { ##2 }
+ \__tblr_prop_gput:nnn {column} { [##1] / @col-width } { 0pt }
+ }
+ \__tblr_calculate_cell_sizes:
+ }
+
+%% We use dimen register, since the coefficient may be a decimal number
+\cs_new_protected:Npn \__tblr_adjust_extendable_column_width_once:
+ {
+ \dim_zero:N \l_tmpa_dim
+ \prop_map_inline:Nn \l__column_coefficient_prop
+ {
+ \dim_add:Nn \l_tmpa_dim { \dim_abs:n { ##2 pt } }
+ }
+ \tl_set:Nx \l__tblr_w_tl
+ { \dim_ratio:nn { \l__column_target_dim } { \l_tmpa_dim } }
+ \dim_zero:N \l__column_target_dim
+ \prop_map_inline:Nn \l__column_coefficient_prop
+ {
+ \tl_set:Nx \l__tblr_a_tl
+ { \dim_eval:n { \dim_abs:n { ##2 pt } * \l__tblr_w_tl } }
+ \dim_compare:nNnTF { ##2 pt } > { 0pt }
+ {
+ \__tblr_add_dimen_value:Nnn
+ \l__column_computed_width_prop { ##1 } { \l__tblr_a_tl }
+ }
+ {
+ \tl_set:Nx \l__tblr_b_tl
+ { \prop_item:Nn \l__column_natural_width_prop { ##1 } }
+ \tl_set:Nx \l__tblr_c_tl
+ { \prop_item:Nn \l__column_computed_width_prop { ##1 } }
+ \dim_compare:nNnTF { \l__tblr_a_tl + \l__tblr_c_tl } > { \l__tblr_b_tl }
+ {
+ \prop_put:Nnx \l__column_computed_width_prop
+ { ##1 } { \l__tblr_b_tl }
+ \dim_add:Nn \l__column_target_dim
+ { \l__tblr_a_tl + \l__tblr_c_tl - \l__tblr_b_tl }
+ \prop_remove:Nn \l__column_coefficient_prop { ##1 }
+ }
+ {
+ \__tblr_add_dimen_value:Nnn
+ \l__column_computed_width_prop { ##1 } { \l__tblr_a_tl }
+ }
+ }
+ }
+ \LogTblrTracing { target }
+ }
+
+\cs_new_protected:Npn \__tblr_adjust_extendable_column_width_negative:
+ {
+ \dim_zero:N \l_tmpa_dim
+ \prop_map_inline:Nn \l__column_natural_width_prop
+ { \dim_add:Nn \l_tmpa_dim { ##2 } }
+ \tl_set:Nx \l_tmpa_tl
+ { \dim_ratio:nn { \l__column_target_dim } { \l_tmpa_dim } }
+ \dim_zero:N \l__column_target_dim
+ \prop_map_inline:Nn \l__column_natural_width_prop
+ {
+ \tl_set:Nx \l_tmpb_tl { \dim_eval:n { ##2 * \l_tmpa_tl } }
+ \__tblr_add_dimen_value:Nnn
+ \l__column_computed_width_prop { ##1 } { \l_tmpb_tl }
+ }
+ \LogTblrTracing { target }
+ }
+
+%%% --------------------------------------------------------
+%% \section{Calculate and Adjust Multispan Cells}
+%%% --------------------------------------------------------
+
+%% Compute and adjust widths when there are some span cells.
+%% By default, we will compute column widths from span widths;
+%% but if we set table option "hspan = minimal",
+%% we will compute span widths from column widths.
+
+\cs_new_protected:Npn \__tblr_adjust_sizes_for_span_cells:
+ {
+ \__tblr_prop_if_in:nnT {table} {colspan}
+ {
+ \__tblr_collect_column_widths_skips:
+ \str_if_eq:xnTF
+ { \__tblr_prop_item:ne {table} {hspan} } {minimal}
+ {
+ \__tblr_set_span_widths_from_column_widths:
+ }
+ {
+ \__tblr_collect_span_widths:
+ \__tblr_set_column_widths_from_span_widths:
+ }
+ \LogTblrTracing {column}
+ \__tblr_calculate_cell_sizes:
+ }
+ \__tblr_prop_if_in:nnT {table} {rowspan}
+ {
+ \__tblr_collect_row_heights_skips:
+ \__tblr_collect_span_heights:
+ \__tblr_set_row_heights_from_span_heights:
+ \LogTblrTracing {row}
+ }
+ }
+
+\prop_new:N \l__tblr_col_item_skip_size_prop
+\prop_new:N \l__tblr_col_span_size_prop
+\prop_new:N \l__tblr_row_item_skip_size_prop
+\prop_new:N \l__tblr_row_span_size_prop
+
+\cs_new_protected:Npn \__tblr_collect_column_widths_skips:
+ {
+ \prop_clear:N \l__tblr_col_item_skip_size_prop
+ \int_step_variable:nNn { \c@colcount } \l__tblr_j_tl
+ {
+ \int_compare:nNnTF { \l__tblr_j_tl } > { 1 }
+ {
+ \prop_put:Nxx \l__tblr_col_item_skip_size_prop { skip[\l__tblr_j_tl] }
+ {
+ \dim_eval:n
+ {
+ \__tblr_prop_item:ne {column}
+ { [\int_eval:n { \l__tblr_j_tl - 1 }] / rightsep }
+ +
+ \__tblr_prop_item:ne {vline}
+ { [\l__tblr_j_tl] / @vline-width }
+ +
+ \__tblr_prop_item:ne {column}
+ { [\l__tblr_j_tl] / leftsep}
+ }
+ }
+ }
+ {
+ \prop_put:Nxn \l__tblr_col_item_skip_size_prop { skip[\l__tblr_j_tl] }
+ { 0pt }
+ }
+ \prop_put:Nxx \l__tblr_col_item_skip_size_prop { item[\l__tblr_j_tl] }
+ { \__tblr_prop_item:ne {column} { [\l__tblr_j_tl] / @col-width } }
+ }
+ \__tblr_do_if_tracing:nn { cellspan }
+ { \prop_log:N \l__tblr_col_item_skip_size_prop }
+ }
+
+\cs_new_protected:Npn \__tblr_collect_row_heights_skips:
+ {
+ \prop_clear:N \l__tblr_row_item_skip_size_prop
+ \int_step_variable:nNn { \c@rowcount } \l__tblr_i_tl
+ {
+ \int_compare:nNnTF { \l__tblr_i_tl } > { 1 }
+ {
+ \prop_put:Nxx \l__tblr_row_item_skip_size_prop { skip[\l__tblr_i_tl] }
+ {
+ \dim_eval:n
+ {
+ \__tblr_prop_item:ne {row}
+ { [\int_eval:n {\l__tblr_i_tl - 1}] / belowsep }
+ +
+ \__tblr_prop_item:ne {hline}
+ { [\l__tblr_i_tl] / @hline-height }
+ +
+ \__tblr_prop_item:ne {row}
+ { [\l__tblr_i_tl] / abovesep }
+ }
+ }
+ }
+ {
+ \prop_put:Nxn \l__tblr_row_item_skip_size_prop { skip[\l__tblr_i_tl] }
+ { 0pt }
+ }
+ \__tblr_collect_one_row_height:NN \l__tblr_i_tl \l__tblr_h_tl
+ \prop_put:Nxx \l__tblr_row_item_skip_size_prop
+ { item[\l__tblr_i_tl] } { \l__tblr_h_tl }
+ }
+ \__tblr_do_if_tracing:nn { cellspan }
+ { \prop_log:N \l__tblr_row_item_skip_size_prop }
+ }
+
+%% #1: row number; #2: tl with result
+\cs_new_protected:Npn \__tblr_collect_one_row_height:NN #1 #2
+ {
+ \tl_set:Nx #2 { \__tblr_prop_item:ne { row } { [#1] / @row-height } }
+ }
+
+\cs_new_protected:Npn \__tblr_collect_span_widths:
+ {
+ \prop_clear:N \l__tblr_col_span_size_prop
+ \int_step_variable:nNn { \c@colcount } \l__tblr_j_tl
+ {
+ \int_step_variable:nNn { \c@rowcount } \l__tblr_i_tl
+ {
+ \tl_set:Nx \l__tblr_a_tl
+ {
+ \__tblr_prop_item:ne {cell}
+ { [\l__tblr_i_tl][\l__tblr_j_tl] / colspan }
+ }
+ \tl_if_empty:NF \l__tblr_a_tl
+ {
+ \__tblr_put_if_larger:Nxx \l__tblr_col_span_size_prop
+ {
+ ( \l__tblr_j_tl -
+ \int_eval:n {\l__tblr_j_tl + \l__tblr_a_tl - 1} )
+ }
+ {
+ \__tblr_prop_item:ne {cell}
+ { [\l__tblr_i_tl][\l__tblr_j_tl] / @cell-width }
+ }
+ }
+ }
+ }
+ \__tblr_do_if_tracing:nn { cellspan }
+ { \prop_log:N \l__tblr_col_span_size_prop }
+ }
+
+\prop_new:N \l__tblr_row_span_to_row_prop
+
+\cs_new_protected:Npn \__tblr_collect_span_heights:
+ {
+ \prop_clear:N \l__tblr_row_span_to_row_prop
+ \prop_clear:N \l__tblr_row_span_size_prop
+ \int_step_variable:nNn { \c@rowcount } \l__tblr_i_tl
+ {
+ \int_step_variable:nNn { \c@colcount } \l__tblr_j_tl
+ {
+ \tl_set:Nx \l__tblr_a_tl
+ {
+ \__tblr_prop_item:ne {cell}
+ { [\l__tblr_i_tl][\l__tblr_j_tl] / rowspan }
+ }
+ \tl_if_empty:NF \l__tblr_a_tl
+ {
+ \tl_set:Nx \l__tblr_v_tl
+ {
+ \__tblr_prop_item:ne {cell}
+ { [\l__tblr_i_tl][\l__tblr_j_tl] / valign }
+ }
+ \tl_if_eq:NnT \l__tblr_v_tl { h }
+ {
+ \tl_set:Nx \l__tblr_h_tl
+ {
+ \__tblr_prop_item:ne {row}
+ { [\l__tblr_i_tl] / @row-head }
+ }
+ \__tblr_prop_gput:nxV {cell}
+ { [\l__tblr_i_tl][\l__tblr_j_tl] / @cell-height }
+ \l__tblr_h_tl
+ }
+ \tl_if_eq:NnT \l__tblr_v_tl { f }
+ {
+ \tl_set:Nx \l__tblr_d_tl
+ {
+ \__tblr_prop_item:ne {row}
+ {
+ [\int_eval:n {\l__tblr_i_tl + \l__tblr_a_tl - 1}]
+ / @row-foot
+ }
+ }
+ \__tblr_prop_gput:nxV {cell}
+ { [\l__tblr_i_tl][\l__tblr_j_tl] / @cell-depth }
+ \l__tblr_d_tl
+ }
+ \__tblr_put_if_larger:Nxx \l__tblr_row_span_size_prop
+ {
+ ( \l__tblr_i_tl -
+ \int_eval:n {\l__tblr_i_tl + \l__tblr_a_tl - 1} )
+ }
+ {
+ \dim_eval:n
+ {
+ \__tblr_prop_item:ne {cell}
+ { [\l__tblr_i_tl][\l__tblr_j_tl] / @cell-height }
+ +
+ \__tblr_prop_item:ne {cell}
+ { [\l__tblr_i_tl][\l__tblr_j_tl] / @cell-depth }
+ }
+ }
+ \prop_put:Nxx \l__tblr_row_span_to_row_prop
+ { [\l__tblr_i_tl][\l__tblr_j_tl] }
+ { \int_eval:n {\l__tblr_i_tl + \l__tblr_a_tl - 1} }
+ }
+ }
+ }
+ \__tblr_do_if_tracing:nn { cellspan }
+ {
+ \prop_log:N \l__tblr_row_span_to_row_prop
+ \prop_log:N \l__tblr_row_span_size_prop
+ }
+ }
+
+%% Compute and set column widths from span widths
+\cs_new_protected:Npn \__tblr_set_column_widths_from_span_widths:
+ {
+ \__tblr_calc_item_sizes_from_span_sizes:xNN
+ { \int_use:N \c@colcount }
+ \l__tblr_col_item_skip_size_prop
+ \l__tblr_col_span_size_prop
+ \__tblr_set_all_column_widths:
+ }
+
+%% Compute and set row heights from span heights
+\cs_new_protected:Npn \__tblr_set_row_heights_from_span_heights:
+ {
+ \__tblr_calc_item_sizes_from_span_sizes:xNN
+ { \int_use:N \c@rowcount }
+ \l__tblr_row_item_skip_size_prop
+ \l__tblr_row_span_size_prop
+ \__tblr_set_all_row_heights:
+ }
+
+%% See page 245 in Chapter 22 of TeXbook
+%% #1: total number of items
+%% #2: prop list with item sizes and skip sizes; #3: prop list with span sizes
+\cs_new_protected:Npn \__tblr_calc_item_sizes_from_span_sizes:nNN #1 #2 #3
+ {
+ \int_step_variable:nNn { #1 } \l__tblr_j_tl
+ {
+ \dim_set:Nn \l__tblr_w_dim
+ {
+ \prop_item:Ne #2 { item[\l__tblr_j_tl] }
+ }
+ \int_step_variable:nNn { \l__tblr_j_tl - 1 } \l__tblr_i_tl
+ {
+ \tl_set:Nx \l__tblr_a_tl
+ { \prop_item:Ne #3 { (\l__tblr_i_tl-\l__tblr_j_tl) } }
+ \tl_if_empty:NF \l__tblr_a_tl
+ {
+ \int_step_variable:nnNn
+ { \l__tblr_i_tl } { \l__tblr_j_tl - 1 } \l__tblr_k_tl
+ {
+ \__tblr_do_if_tracing:nn { cellspan }
+ {
+ \tl_log:x
+ { \l__tblr_j_tl : \l__tblr_i_tl -> \l__tblr_k_tl }
+ }
+ \tl_set:Nx \l_tmpa_tl
+ {
+ \prop_item:Ne #2 { itemskip[\l__tblr_k_tl] }
+ }
+ \tl_set:Nx \l__tblr_a_tl
+ { \dim_eval:n { \l__tblr_a_tl - \l_tmpa_tl } }
+ }
+ \dim_compare:nNnT { \l__tblr_a_tl } > { \l__tblr_w_dim }
+ {
+ \dim_set:Nn \l__tblr_w_dim { \l__tblr_a_tl }
+ }
+ }
+ }
+ \prop_put:Nxx #2
+ { item[\l__tblr_j_tl] } { \dim_use:N \l__tblr_w_dim }
+ \int_compare:nNnT { \l__tblr_j_tl } < { #1 }
+ {
+ \tl_set:Nx \l_tmpb_tl
+ {
+ \prop_item:Ne #2
+ { skip[\int_eval:n { \l__tblr_j_tl + 1} ] }
+ }
+ \dim_add:Nn \l__tblr_w_dim { \l_tmpb_tl }
+ \prop_put:Nxx #2
+ { itemskip[\l__tblr_j_tl] } { \dim_use:N \l__tblr_w_dim }
+ }
+ }
+ \__tblr_do_if_tracing:nn { cellspan } { \prop_log:N #2 }
+ }
+\cs_generate_variant:Nn \__tblr_calc_item_sizes_from_span_sizes:nNN { x }
+
+\cs_new_protected:Npn \__tblr_set_all_column_widths:
+ {
+ \int_step_variable:nNn { \c@colcount } \l__tblr_j_tl
+ {
+ \__tblr_prop_gput:nxx {column}
+ { [\l__tblr_j_tl] / @col-width }
+ { \prop_item:Ne \l__tblr_col_item_skip_size_prop { item[\l__tblr_j_tl] } }
+ }
+ }
+
+\cs_new_protected:Npn \__tblr_set_all_row_heights:
+ {
+ \int_step_variable:nNn { \c@rowcount } \l__tblr_i_tl
+ {
+ \tl_set:Nx \l__tblr_h_tl
+ {
+ \__tblr_prop_item:ne {row} { [\l__tblr_i_tl] / @row-head }
+ }
+ \tl_set:Nx \l__tblr_d_tl
+ {
+ \__tblr_prop_item:ne {row} { [\l__tblr_i_tl] / @row-foot }
+ }
+ \tl_set:Nx \l__tblr_a_tl
+ {
+ \prop_item:Ne \l__tblr_row_item_skip_size_prop { item[\l__tblr_i_tl] }
+ }
+ \__tblr_collect_one_row_height:NN \l__tblr_i_tl \l__tblr_t_tl
+ \__tblr_prop_gput:nxx {row}
+ { [\l__tblr_i_tl] / @row-height } { \l__tblr_a_tl }
+ }
+ }
+
+\cs_new_protected:Npn \__tblr_get_span_key_row_col:w [#1][#2]
+ {
+ \tl_set:Nn \l__tblr_i_tl {#1}
+ \tl_set:Nn \l__tblr_j_tl {#2}
+ }
+
+%% Compute and set span widths from column widths
+\cs_new_protected:Npn \__tblr_set_span_widths_from_column_widths:
+ {
+ \int_step_variable:nNn { \c@colcount } \l__tblr_j_tl
+ {
+ \int_step_variable:nNn { \c@rowcount } \l__tblr_i_tl
+ {
+ \tl_set:Nx \l__tblr_a_tl
+ {
+ \__tblr_prop_item:ne {cell}
+ { [\l__tblr_i_tl][\l__tblr_j_tl] / colspan }
+ }
+ \tl_if_empty:NF \l__tblr_a_tl
+ {
+ \__tblr_calc_span_widths:xxN
+ { \l__tblr_j_tl }
+ { \int_eval:n { \l__tblr_j_tl + \l__tblr_a_tl - 1 } }
+ \l__tblr_w_dim
+ \__tblr_prop_gput:nxx {cell}
+ { [\l__tblr_i_tl][\l__tblr_j_tl] / width }
+ { \dim_use:N \l__tblr_w_dim }
+ }
+ }
+ }
+ }
+
+%% Cell is spanned from col #1 to col #2, #3 is the return dim
+\cs_new_protected:Npn \__tblr_calc_span_widths:nnN #1 #2 #3
+ {
+ \dim_zero:N #3
+ \int_step_inline:nnn { #1 } { #2 }
+ {
+ \tl_set:Nx \l_tmpa_tl
+ { \prop_item:Ne \l__tblr_col_item_skip_size_prop { skip[##1] } }
+ \tl_set:Nx \l_tmpb_tl
+ { \prop_item:Ne \l__tblr_col_item_skip_size_prop { item[##1] } }
+ \dim_add:Nn #3 { \dim_eval:n { \l_tmpa_tl + \l_tmpb_tl } }
+ }
+ }
+\cs_generate_variant:Nn \__tblr_calc_span_widths:nnN { xxN }
+
+%%% --------------------------------------------------------
+%% \section{Build the Whole Table}
+%%% --------------------------------------------------------
+
+\tl_new:N \__tlbr_vbox_align_tl
+\tl_const:Nn \__tlbr_vbox_t_tl {t}
+\tl_const:Nn \__tlbr_vbox_m_tl {m}
+\tl_const:Nn \__tlbr_vbox_c_tl {c}
+\tl_const:Nn \__tlbr_vbox_b_tl {b}
+
+\box_new:N \l__tblr_table_box
+
+\cs_new_protected:Npn \__tblr_build_whole:n #1
+ {
+ \vbox_set:Nn \l__tblr_table_box
+ {
+ \int_step_variable:nNn { \c@rowcount } \l__tblr_i_tl
+ {
+ \hbox:n { \__tblr_build_hline:V \l__tblr_i_tl }
+ \hrule height ~ 0pt % remove lineskip between hlines and rows
+ \hbox:n { \__tblr_build_row:N \l__tblr_i_tl }
+ \hrule height ~ 0pt
+ }
+ \hbox:n { \__tblr_build_hline:n { \int_eval:n {\c@rowcount + 1} } }
+ }
+ \__tblr_valign_whole:Nn \l__tblr_table_box #1
+ }
+
+\cs_new_protected:Npn \__tblr_valign_whole:Nn #1 #2
+ {
+ \group_begin:
+ \tl_set:Nn \__tlbr_vbox_align_tl {#2}
+ \dim_set:Nn \l__tblr_t_dim { \box_ht:N #1 + \box_dp:N #1 }
+ \tl_case:NnF \__tlbr_vbox_align_tl
+ {
+ \__tlbr_vbox_m_tl
+ { \__tblr_valign_whole_middle:N #1 }
+ \__tlbr_vbox_c_tl
+ { \__tblr_valign_whole_middle:N #1 }
+ \__tlbr_vbox_t_tl
+ { \__tblr_valign_whole_top:N #1 }
+ \__tlbr_vbox_b_tl
+ { \__tblr_valign_whole_bottom:N #1 }
+ }
+ { \__tblr_valign_whole_middle:N #1 }
+ \group_end:
+ }
+
+\cs_new_protected:Npn \__tblr_valign_whole_middle:N #1
+ {
+ \hbox:n { $ \m@th \tex_vcenter:D { \vbox_unpack_drop:N #1 } $ }
+ }
+
+\cs_new_protected:Npn \__tblr_valign_whole_top:N #1
+ {
+ \tl_set:Nx \l__tblr_a_tl
+ { \__tblr_prop_item:ne { hline } { [1] / @hline-height } }
+ %% Note that \l__tblr_b_tl may be empty
+ \tl_set:Nx \l__tblr_b_tl
+ { \__tblr_prop_item:ne { table } { baseline } }
+ \bool_lazy_or:nnTF
+ { \dim_compare_p:nNn { \l__tblr_a_tl } = { 0pt } }
+ { \int_compare_p:nNn { \l__tblr_b_tl + 0 } = { 1 } }
+ {
+ \dim_set:Nn \l__tblr_h_dim
+ {
+ \__tblr_prop_item:ne { row } { [1] / abovesep }
+ +
+ ( \__tblr_prop_item:ne { row } { [1] / @row-height }
+ +
+ \__tblr_prop_item:ne { row } { [1] / @row-upper }
+ -
+ \__tblr_prop_item:ne { row } { [1] / @row-lower }
+ ) / 2
+ }
+ \dim_set:Nn \l__tblr_d_dim { \l__tblr_t_dim - \l__tblr_h_dim }
+ }
+ {
+ \dim_set:Nn \l__tblr_h_dim { 0pt }
+ \dim_set_eq:NN \l__tblr_d_dim \l__tblr_t_dim
+ }
+ \box_set_ht:Nn #1 { \l__tblr_h_dim }
+ \box_set_dp:Nn #1 { \l__tblr_d_dim }
+ \box_use_drop:N #1
+ }
+
+\cs_new_protected:Npn \__tblr_valign_whole_bottom:N #1
+ {
+ \tl_set:Nx \l__tblr_a_tl
+ {
+ \__tblr_prop_item:ne { hline }
+ { [\int_eval:n {\c@rowcount + 1}] / @hline-height }
+ }
+ %% Note that \l__tblr_b_tl may be empty
+ \tl_set:Nx \l__tblr_b_tl
+ { \__tblr_prop_item:ne { table } { baseline } }
+ \bool_lazy_or:nnTF
+ { \dim_compare_p:nNn { \l__tblr_a_tl } = { 0pt } }
+ { \int_compare_p:nNn { \l__tblr_b_tl + 0 } = { \c@rowcount } }
+ {
+ \dim_set:Nn \l__tblr_d_dim
+ {
+ ( \__tblr_prop_item:ne { row }
+ { [\int_use:N \c@rowcount] / @row-height }
+ -
+ \__tblr_prop_item:ne { row }
+ { [\int_use:N \c@rowcount] / @row-upper }
+ +
+ \__tblr_prop_item:ne { row }
+ { [\int_use:N \c@rowcount] / @row-lower }
+ ) / 2
+ +
+ \__tblr_prop_item:ne { row } { [1] / belowsep }
+ }
+ \dim_set:Nn \l__tblr_h_dim { \l__tblr_t_dim - \l__tblr_d_dim }
+ }
+ {
+ \dim_set:Nn \l__tblr_d_dim { 0pt }
+ \dim_set_eq:NN \l__tblr_h_dim \l__tblr_t_dim
+ }
+ \box_set_ht:Nn #1 { \l__tblr_h_dim }
+ \box_set_dp:Nn #1 { \l__tblr_d_dim }
+ \box_use_drop:N #1
+ }
+
+\dim_new:N \l__tblr_col_o_wd_dim
+\dim_new:N \l__tblr_col_b_wd_dim
+
+%% Build hline. #1: row number
+\cs_new_protected:Npn \__tblr_build_hline:n #1
+ {
+ \int_step_inline:nn { \c@colcount }
+ { \__tblr_build_hline_segment:nn { #1 } { ##1 } }
+ }
+\cs_generate_variant:Nn \__tblr_build_hline:n { x, V }
+
+%% #1: row number, #2: column number
+\cs_new_protected:Npn \__tblr_build_hline_segment:nn #1 #2
+ {
+ \tl_set:Nx \l__tblr_n_tl
+ { \__tblr_prop_item:ne { hline } { [#1] / @hline-count } }
+ \tl_set:Nx \l__tblr_o_tl
+ { \__tblr_prop_item:ne { hline } { [#1][#2] / omit } }
+ \__tblr_get_col_outer_width_border_width:nNN {#2}
+ \l__tblr_col_o_wd_dim \l__tblr_col_b_wd_dim
+ \tl_if_empty:NTF \l__tblr_o_tl
+ {
+ \tl_if_empty:NF \l__tblr_n_tl
+ { \__tblr_build_hline_segment_real:nn {#1} {#2} }
+ }
+ { \__tblr_build_hline_segment_omit:nn {#1} {#2} }
+ }
+
+%% #1: row number, #2: column number
+\cs_new_protected:Npn \__tblr_build_hline_segment_omit:nn #1 #2
+ {
+ \skip_horizontal:n { \l__tblr_col_o_wd_dim - \l__tblr_col_b_wd_dim }
+ }
+
+%% #1: row number, #2: column number
+\cs_new_protected:Npn \__tblr_build_hline_segment_real:nn #1 #2
+ {
+ \tl_set:Nx \l__tblr_s_tl
+ { \__tblr_prop_item:ne { hline } { [#1] / rulesep } }
+ \vbox_set:Nn \l__tblr_c_box
+ {
+ %% add an empty hbox to support vbox width
+ \tex_hbox:D to \l__tblr_col_o_wd_dim {}
+ \int_step_inline:nn { \l__tblr_n_tl }
+ {
+ \tl_set:Nx \l__tblr_h_tl
+ { \__tblr_prop_item:ne { hline } { [#1](##1) / @hline-height } }
+ \hrule height ~ 0pt % remove lineskip
+ \hbox_set_to_wd:Nnn \l__tblr_b_box { \l__tblr_col_o_wd_dim }
+ {
+ \tl_set:Nx \l__tblr_f_tl
+ { \__tblr_prop_item:ne { hline } { [#1][#2](##1) / fg } }
+ \tl_if_empty:NF \l__tblr_f_tl { \color{\l__tblr_f_tl} }
+ \__tblr_get_hline_segment_child:nnn {#1} {#2} {##1}
+ }
+ \box_set_ht:Nn \l__tblr_b_box { \l__tblr_h_tl }
+ \box_set_dp:Nn \l__tblr_b_box { 0pt }
+ \box_use:N \l__tblr_b_box
+ \skip_vertical:n { \l__tblr_s_tl }
+ }
+ \skip_vertical:n { - \l__tblr_s_tl }
+ }
+ \box_use:N \l__tblr_c_box
+ \skip_horizontal:n { - \l__tblr_col_b_wd_dim }
+ }
+
+%% Read from table specifications and calculate the widths of row and border
+%% column outer width = content width + colsep width + border width
+%% #1: the column number, #2: outer width, #3: border width
+\cs_new_protected:Npn \__tblr_get_col_outer_width_border_width:nNN #1 #2 #3
+ {
+ \dim_set:Nn #3
+ { \__tblr_prop_item:ne {vline} { [\int_eval:n {#1 + 1}] / @vline-width } }
+ \dim_set:Nn #2
+ {
+ \__tblr_prop_item:ne {vline} { [#1] / @vline-width }
+ +
+ \__tblr_prop_item:ne {column} { [#1] / leftsep }
+ +
+ \__tblr_prop_item:ne {column} { [#1] / @col-width }
+ +
+ \__tblr_prop_item:ne {column} { [#1] / rightsep }
+ +
+ #3
+ }
+ }
+
+\dim_new:N \l__tblr_row_ht_dim
+\dim_new:N \l__tblr_row_dp_dim
+\dim_new:N \l__tblr_row_abovesep_dim
+\dim_new:N \l__tblr_row_belowsep_dim
+
+%% Build current row, #1: row number
+\cs_new_protected:Npn \__tblr_build_row:N #1
+ {
+ \__tblr_get_row_inner_height_depth:VNNNN #1
+ \l__tblr_row_ht_dim \l__tblr_row_dp_dim
+ \l__tblr_row_abovesep_dim \l__tblr_row_belowsep_dim
+ \vrule width ~ 0pt ~ height ~ \l__tblr_row_ht_dim ~ depth ~ \l__tblr_row_dp_dim
+ \int_step_variable:nNn { \c@colcount } \l__tblr_j_tl
+ {
+ \__tblr_build_vline_segment:nn {#1} { \l__tblr_j_tl }
+ \__tblr_build_cell:NN #1 \l__tblr_j_tl
+ }
+ \__tblr_build_vline_segment:nn {#1} { \int_eval:n {\c@colcount + 1} }
+ }
+
+%% Read from table specifications and calculate inner height/depth of the row
+%% inner height = abovesep + above vspace + row upper
+%% inner depth = row lower + below vspace + belowsep
+%% #1: the row number; #2: resulting inner height; #3: resulting inner depth;
+%% #4: restulting abovesep; #5: restulting belowsep.
+
+\dim_new:N \l__row_upper_dim
+\dim_new:N \l__row_lower_dim
+\dim_new:N \l__row_vpace_dim
+
+\cs_new_protected:Npn \__tblr_get_row_inner_height_depth:nNNNN #1 #2 #3 #4 #5
+ {
+ \dim_set:Nn #4
+ { \__tblr_prop_item:ne { row } { [#1] / abovesep } }
+ \dim_set:Nn #5
+ { \__tblr_prop_item:ne { row } { [#1] / belowsep } }
+ \dim_set:Nn \l__row_upper_dim
+ { \__tblr_prop_item:ne { row } { [#1] / @row-upper } }
+ \dim_set:Nn \l__row_lower_dim
+ { \__tblr_prop_item:ne { row } { [#1] / @row-lower } }
+ \dim_set:Nn \l__row_vpace_dim
+ {
+ ( \__tblr_prop_item:ne { row } { [#1] / @row-height }
+ - \l__row_upper_dim - \l__row_lower_dim ) / 2
+ }
+ \dim_set:Nn #2 { #4 + \l__row_vpace_dim + \l__row_upper_dim }
+ \dim_set:Nn #3 { \l__row_lower_dim + \l__row_vpace_dim + #5 }
+ }
+\cs_generate_variant:Nn \__tblr_get_row_inner_height_depth:nNNNN { V }
+
+%% #1: row number, #2: column number
+\cs_new_protected:Npn \__tblr_build_vline_segment:nn #1 #2
+ {
+ \tl_set:Nx \l__tblr_n_tl
+ { \__tblr_prop_item:ne { vline } { [#2] / @vline-count } }
+ \tl_set:Nx \l__tblr_o_tl
+ { \__tblr_prop_item:ne { vline } { [#1][#2] / omit } }
+ \tl_if_empty:NTF \l__tblr_o_tl
+ {
+ \tl_if_empty:NF \l__tblr_n_tl
+ { \__tblr_build_vline_segment_real:nn {#1} {#2} }
+ }
+ { \__tblr_build_vline_segment_omit:nn {#1} {#2} }
+ }
+
+%% #1: row number, #2: column number
+\cs_new_protected:Npn \__tblr_build_vline_segment_omit:nn #1 #2
+ {
+ \tl_set:Nx \l__tblr_w_tl
+ { \__tblr_prop_item:ne { vline } { [#2] / @vline-width } }
+ \skip_horizontal:N \l__tblr_w_tl
+ }
+
+%% #1: row number, #2: column number
+%% We make every vline segment intersect with first hline below
+%% to remove gaps in vlines around multirow cells
+\cs_new_protected:Npn \__tblr_build_vline_segment_real:nn #1 #2
+ {
+ \tl_set:Nx \l__tblr_s_tl
+ { \__tblr_prop_item:ne { vline } { [#2] / rulesep } }
+ \tl_set:Nx \l__tblr_b_tl
+ {
+ \__tblr_prop_item:ne { hline }
+ { [\int_eval:n{#1 + 1}](1) / @hline-height }
+ }
+ \tl_if_empty:NT \l__tblr_b_tl { \tl_set:Nn \l__tblr_b_tl { 0pt } }
+ \hbox_set:Nn \l__tblr_a_box
+ {
+ \int_step_inline:nn { \l__tblr_n_tl }
+ {
+ \tl_set:Nx \l__tblr_w_tl
+ { \__tblr_prop_item:ne { vline } { [#2](##1) / @vline-width } }
+ \vbox_set_to_ht:Nnn \l__tblr_b_box
+ { \dim_eval:n { \l__tblr_row_ht_dim + \l__tblr_row_dp_dim } }
+ {
+ \tl_set:Nx \l__tblr_f_tl
+ { \__tblr_prop_item:ne { vline } { [#1][#2](##1) / fg } }
+ \tl_if_empty:NF \l__tblr_f_tl { \color{\l__tblr_f_tl} }
+ \__tblr_get_vline_segment_child:nnnxx {#1} {#2} {##1}
+ { \dim_eval:n { \l__tblr_row_ht_dim } }
+ { \dim_eval:n { \l__tblr_row_dp_dim + \l__tblr_b_tl } }
+ \skip_vertical:n { - \l__tblr_b_tl }
+ }
+ \box_set_wd:Nn \l__tblr_b_box { \l__tblr_w_tl }
+ \box_use:N \l__tblr_b_box
+ \skip_horizontal:n { \l__tblr_s_tl }
+ }
+ \skip_horizontal:n { - \l__tblr_s_tl }
+ }
+ \vbox_set:Nn \l__tblr_c_box { \box_use:N \l__tblr_a_box }
+ \box_set_ht:Nn \l__tblr_c_box { \dim_use:N \l__tblr_row_ht_dim }
+ \box_set_dp:Nn \l__tblr_c_box { \dim_use:N \l__tblr_row_dp_dim }
+ \box_use:N \l__tblr_c_box
+ }
+
+\tl_new:N \l__tblr_cell_rowspan_tl
+\tl_new:N \l__tblr_cell_colspan_tl
+\dim_new:N \l__tblr_cell_wd_dim
+\dim_new:N \l__tblr_cell_ht_dim
+
+\cs_new_protected:Npn \__tblr_build_cell:NN #1 #2
+ {
+ \int_set:Nn \c@rownum {#1}
+ \int_set:Nn \c@colnum {#2}
+ \group_begin:
+ \tl_set:Nx \l__tblr_w_tl
+ { \__tblr_prop_item:ne { column } { [#2] / @col-width } }
+ \tl_set:Nx \l__tblr_h_tl
+ { \__tblr_prop_item:ne { row } { [#1] / @row-height } }
+ \tl_set:Nx \l__tblr_x_tl
+ { \__tblr_prop_item:ne { column } { [#2] / leftsep} }
+ \tl_set:Nx \l__tblr_y_tl
+ { \__tblr_prop_item:ne { column } { [#2] / rightsep } }
+ \tl_set:Nx \l__tblr_cell_colspan_tl
+ { \__tblr_prop_item:ne { cell } { [#1][#2] / colspan } }
+ \tl_if_empty:NTF \l__tblr_cell_colspan_tl
+ { \dim_set:Nn \l__tblr_cell_wd_dim { \l__tblr_w_tl } }
+ {
+ \__tblr_get_span_horizontal_sizes:NNNNN #1 #2
+ \l__tblr_o_dim \l__tblr_cell_wd_dim \l__tblr_q_dim
+ }
+ \tl_set:Nx \l__tblr_cell_rowspan_tl
+ { \__tblr_prop_item:ne { cell } { [#1][#2] / rowspan } }
+ \tl_if_empty:NTF \l__tblr_cell_rowspan_tl
+ { \dim_set:Nn \l__tblr_cell_ht_dim { \l__tblr_h_tl } }
+ {
+ \__tblr_get_span_vertical_sizes:NNNNN #1 #2
+ \l__tblr_r_dim \l__tblr_cell_ht_dim \l__tblr_t_dim
+ }
+ \__tblr_get_cell_alignments:nn {#1} {#2}
+ \__tblr_build_cell_background:NN #1 #2
+ \__tblr_build_cell_content:NN #1 #2
+ \group_end:
+ }
+
+\cs_new_protected:Npn \__tblr_build_cell_content:NN #1 #2
+ {
+ \hbox_set_to_wd:Nnn \l__tblr_a_box { \l__tblr_cell_wd_dim }
+ {
+ \tl_if_eq:NnF \g__tblr_cell_halign_tl {l} { \hfil }
+ \__tblr_get_cell_text:nn {#1} {#2}
+ \tl_if_eq:NnF \g__tblr_cell_halign_tl {r} { \hfil }
+ }
+ \vbox_set_to_ht:Nnn \l__tblr_b_box { \l__tblr_cell_ht_dim }
+ {
+ \tl_case:Nn \g__tblr_cell_valign_tl
+ {
+ \c__tblr_valign_m_tl
+ {
+ \vfil
+ \tl_if_empty:NT \l__tblr_cell_rowspan_tl
+ {
+ \box_set_ht:Nn \l__tblr_a_box
+ { \__tblr_prop_item:ne { row } { [#1] / @row-upper } }
+ \box_set_dp:Nn \l__tblr_a_box
+ { \__tblr_prop_item:ne { row } { [#1] / @row-lower } }
+ }
+ \box_use:N \l__tblr_a_box
+ \vfil
+ }
+ \c__tblr_valign_h_tl
+ {
+ \box_set_ht:Nn \l__tblr_a_box
+ { \__tblr_prop_item:ne { row } { [#1] / @row-head } }
+ \box_use:N \l__tblr_a_box
+ \vfil
+ }
+ \c__tblr_valign_f_tl
+ {
+ \vfil
+ \tl_if_empty:NTF \l__tblr_cell_rowspan_tl
+ {
+ \box_set_dp:Nn \l__tblr_a_box
+ { \__tblr_prop_item:ne { row } { [#1] / @row-foot } }
+ }
+ {
+ \box_set_dp:Nn \l__tblr_a_box
+ {
+ \__tblr_prop_item:ne { row }
+ {
+ [\int_eval:n {#1 + \l__tblr_cell_rowspan_tl - 1}]
+ / @row-foot
+ }
+ }
+ }
+ \box_use:N \l__tblr_a_box
+ }
+ }
+ \hrule height ~ 0pt %% zero depth
+ }
+ \vbox_set_to_ht:Nnn \l__tblr_c_box
+ { \l__tblr_row_ht_dim - \l__tblr_row_abovesep_dim }
+ {
+ \box_use:N \l__tblr_b_box
+ \vss
+ }
+ \skip_horizontal:n { \l__tblr_x_tl }
+ \box_use:N \l__tblr_c_box
+ \skip_horizontal:n { \l__tblr_y_tl - \l__tblr_cell_wd_dim + \l__tblr_w_tl }
+ }
+
+\cs_new_protected:Npn \__tblr_build_cell_background:NN #1 #2
+ {
+ \__tblr_prop_if_in:nxF {cell} { [#1][#2] / omit }
+ {
+ \group_begin:
+ \tl_set:Nx \l__tblr_b_tl
+ { \__tblr_prop_item:ne { cell } { [#1][#2] / background } }
+ \tl_if_empty:NF \l__tblr_b_tl
+ {
+ \__tblr_get_cell_background_width:NNN #1 #2 \l_tmpa_dim
+ \__tblr_get_cell_background_depth:NNN #1 #2 \l_tmpb_dim
+ \__tblr_build_cell_background:nnnn
+ { \dim_use:N \l_tmpa_dim }
+ { \l__tblr_row_ht_dim }
+ { \dim_use:N \l_tmpb_dim }
+ { \l__tblr_b_tl }
+ }
+ \group_end:
+ }
+ }
+
+%% #1: row number; #2: column number; #3 resulting dimension
+\cs_new_protected:Npn \__tblr_get_cell_background_width:NNN #1 #2 #3
+ {
+ \tl_if_empty:NTF \l__tblr_cell_colspan_tl
+ { \dim_set:Nn #3 { \l__tblr_x_tl + \l__tblr_w_tl + \l__tblr_y_tl } }
+ {
+ \dim_set:Nn #3 { \l__tblr_o_dim + \l__tblr_cell_wd_dim + \l__tblr_q_dim }
+ }
+ }
+
+%% #1: row number; #2: column number; #3 resulting dimension
+\cs_new_protected:Npn \__tblr_get_cell_background_depth:NNN #1 #2 #3
+ {
+ \tl_if_empty:NTF \l__tblr_cell_rowspan_tl
+ { \dim_set_eq:NN #3 \l__tblr_row_dp_dim }
+ {
+ \dim_set:Nn #3
+ {
+ \l__tblr_r_dim + \l__tblr_cell_ht_dim
+ + \l__tblr_t_dim - \l__tblr_row_ht_dim
+ }
+ }
+ }
+
+%% #1: width, #2: height, #3: depth, #4: color
+\cs_new_protected:Npn \__tblr_build_cell_background:nnnn #1 #2 #3 #4
+ {
+ \hbox_set:Nn \l__tblr_a_box
+ {
+ \color {#4}
+ \vrule width ~ #1 ~ height ~ #2 ~ depth ~ #3
+ }
+ \box_set_dp:Nn \l__tblr_a_box { 0pt }
+ \box_use:N \l__tblr_a_box
+ \skip_horizontal:n { - #1 }
+ }
+
+%% #1: row number; #2: column number; #3: dimen register for rowsep above.
+%% #4: dimen register for total height; #5: dimen register for rowsep below.
+%% We can use \l__tblr_row_item_skip_size_prop which was made before
+\cs_new_protected:Npn \__tblr_get_span_vertical_sizes:NNNNN #1 #2 #3 #4 #5
+ {
+ \dim_set:Nn #3
+ { \__tblr_prop_item:ne { row } { [#1] / abovesep } }
+ \dim_zero:N #4
+ \int_step_inline:nnn { #1 } { #1 + \l__tblr_cell_rowspan_tl - 2 }
+ {
+ \dim_add:Nn #4
+ { \prop_item:Ne \l__tblr_row_item_skip_size_prop { itemskip[##1] } }
+ }
+ \dim_add:Nn #4
+ {
+ \prop_item:Ne \l__tblr_row_item_skip_size_prop
+ { item[\int_eval:n { #1 + \l__tblr_cell_rowspan_tl - 1 }] }
+ }
+ \dim_set:Nn #5
+ {
+ \__tblr_prop_item:ne { row }
+ { [\int_eval:n {#1 + \l__tblr_cell_rowspan_tl - 1}] / belowsep }
+ }
+ %\tl_log:x { cell[#1][#2] ~:~ \dim_use:N #3, \dim_use:N #4, \dim_use:N #5 }
+ }
+
+%% #1: row number; #2: column number; #3: dimen register for colsep left.
+%% #4: dimen register for total width; #5: dimen register for colsep right.
+%% We can use \l__tblr_col_item_skip_size_prop which was made before
+%% But when hspan=minimal, there are no itemskip in the prop list.
+%% Therefore we need to calculate them from the sizes of items and skips
+\cs_new_protected:Npn \__tblr_get_span_horizontal_sizes:NNNNN #1 #2 #3 #4 #5
+ {
+ \dim_set:Nn #3
+ { \__tblr_prop_item:ne { column } { [#2] / leftsep} }
+ \dim_zero:N #4
+ \int_step_inline:nnn { #2 } { #2 + \l__tblr_cell_colspan_tl - 2 }
+ {
+ \dim_add:Nn #4
+ { \prop_item:Ne \l__tblr_col_item_skip_size_prop { item[##1] } }
+ \dim_add:Nn #4
+ {
+ \prop_item:Ne \l__tblr_col_item_skip_size_prop
+ { skip[\int_eval:n { ##1 + 1 }] }
+ }
+ }
+ \dim_add:Nn #4
+ {
+ \prop_item:Ne \l__tblr_col_item_skip_size_prop
+ { item[\int_eval:n { #2 + \l__tblr_cell_colspan_tl - 1 }] }
+ }
+ \dim_set:Nn #5
+ {
+ \__tblr_prop_item:ne { column }
+ { [\int_eval:n {#2 + \l__tblr_cell_colspan_tl - 1}] / rightsep }
+ }
+ %\tl_log:x { cell[#1][#2] ~:~ \dim_use:N #3, \dim_use:N #4, \dim_use:N #5 }
+ }
+
+%%% --------------------------------------------------------
+%% \section{Tracing Tabularray}
+%%% --------------------------------------------------------
+
+\NewDocumentCommand \SetTabularrayTracing { m }
+ {
+ \keys_set:nn { tblr-set-tracing } {#1}
+ }
+\cs_new_eq:NN \SetTblrTracing \SetTabularrayTracing
+
+\bool_new:N \g__tblr_tracing_text_bool
+\bool_new:N \g__tblr_tracing_command_bool
+\bool_new:N \g__tblr_tracing_table_bool
+\bool_new:N \g__tblr_tracing_column_bool
+\bool_new:N \g__tblr_tracing_row_bool
+\bool_new:N \g__tblr_tracing_cell_bool
+\bool_new:N \g__tblr_tracing_vline_bool
+\bool_new:N \g__tblr_tracing_hline_bool
+\bool_new:N \g__tblr_tracing_colspec_bool
+\bool_new:N \g__tblr_tracing_rowspec_bool
+\bool_new:N \g__tblr_tracing_target_bool
+\bool_new:N \g__tblr_tracing_cellspan_bool
+
+\keys_define:nn { tblr-set-tracing }
+ {
+ +text .code:n = \bool_gset_true:N \g__tblr_tracing_text_bool,
+ -text .code:n = \bool_gset_false:N \g__tblr_tracing_text_bool,
+ +command .code:n = \bool_gset_true:N \g__tblr_tracing_command_bool,
+ -command .code:n = \bool_gset_false:N \g__tblr_tracing_command_bool,
+ +table .code:n = \bool_gset_true:N \g__tblr_tracing_table_bool,
+ -table .code:n = \bool_gset_false:N \g__tblr_tracing_table_bool,
+ +column .code:n = \bool_gset_true:N \g__tblr_tracing_column_bool,
+ -column .code:n = \bool_gset_false:N \g__tblr_tracing_column_bool,
+ +row .code:n = \bool_gset_true:N \g__tblr_tracing_row_bool,
+ -row .code:n = \bool_gset_false:N \g__tblr_tracing_row_bool,
+ +cell .code:n = \bool_gset_true:N \g__tblr_tracing_cell_bool,
+ -cell .code:n = \bool_gset_false:N \g__tblr_tracing_cell_bool,
+ +vline .code:n = \bool_gset_true:N \g__tblr_tracing_vline_bool,
+ -vline .code:n = \bool_gset_false:N \g__tblr_tracing_vline_bool,
+ +hline .code:n = \bool_gset_true:N \g__tblr_tracing_hline_bool,
+ -hline .code:n = \bool_gset_false:N \g__tblr_tracing_hline_bool,
+ +colspec .code:n = \bool_gset_true:N \g__tblr_tracing_colspec_bool,
+ -colspec .code:n = \bool_gset_false:N \g__tblr_tracing_colspec_bool,
+ +rowspec .code:n = \bool_gset_true:N \g__tblr_tracing_rowspec_bool,
+ -rowspec .code:n = \bool_gset_false:N \g__tblr_tracing_rowspec_bool,
+ +target .code:n = \bool_gset_true:N \g__tblr_tracing_target_bool,
+ -target .code:n = \bool_gset_false:N \g__tblr_tracing_target_bool,
+ +cellspan .code:n = \bool_gset_true:N \g__tblr_tracing_cellspan_bool,
+ -cellspan .code:n = \bool_gset_false:N \g__tblr_tracing_cellspan_bool,
+ all .code:n = \__tblr_enable_all_tracings:,
+ none .code:n = \__tblr_disable_all_tracings:,
+ }
+
+\cs_new_protected_nopar:Npn \__tblr_enable_all_tracings:
+ {
+ \bool_gset_true:N \g__tblr_tracing_text_bool
+ \bool_gset_true:N \g__tblr_tracing_command_bool
+ \bool_gset_true:N \g__tblr_tracing_table_bool
+ \bool_gset_true:N \g__tblr_tracing_column_bool
+ \bool_gset_true:N \g__tblr_tracing_row_bool
+ \bool_gset_true:N \g__tblr_tracing_cell_bool
+ \bool_gset_true:N \g__tblr_tracing_vline_bool
+ \bool_gset_true:N \g__tblr_tracing_hline_bool
+ \bool_gset_true:N \g__tblr_tracing_colspec_bool
+ \bool_gset_true:N \g__tblr_tracing_rowspec_bool
+ \bool_gset_true:N \g__tblr_tracing_target_bool
+ \bool_gset_true:N \g__tblr_tracing_cellspan_bool
+ }
+
+\cs_new_protected_nopar:Npn \__tblr_disable_all_tracings:
+ {
+ \bool_gset_false:N \g__tblr_tracing_text_bool
+ \bool_gset_false:N \g__tblr_tracing_command_bool
+ \bool_gset_false:N \g__tblr_tracing_table_bool
+ \bool_gset_false:N \g__tblr_tracing_column_bool
+ \bool_gset_false:N \g__tblr_tracing_row_bool
+ \bool_gset_false:N \g__tblr_tracing_cell_bool
+ \bool_gset_false:N \g__tblr_tracing_vline_bool
+ \bool_gset_false:N \g__tblr_tracing_hline_bool
+ \bool_gset_false:N \g__tblr_tracing_colspec_bool
+ \bool_gset_false:N \g__tblr_tracing_rowspec_bool
+ \bool_gset_false:N \g__tblr_tracing_target_bool
+ \bool_gset_false:N \g__tblr_tracing_cellspan_bool
+ }
+
+\NewDocumentCommand \LogTabularrayTracing { m }
+ {
+ \keys_set:nn { tblr-log-tracing } {#1}
+ }
+\cs_new_eq:NN \LogTblrTracing \LogTabularrayTracing
+
+\keys_define:nn { tblr-log-tracing }
+ {
+ unknown .code:n = \__tblr_log_tracing:N \l_keys_key_str
+ }
+
+\cs_new_protected:Npn \__tblr_log_tracing:N #1
+ {
+ \bool_if:cT { g__tblr_tracing_ #1 _bool }
+ { \cs:w __tblr_log_tracing _ #1 : \cs_end: }
+ }
+
+\cs_new_protected:Npn \__tblr_log_tracing_text:
+ {
+ \__tblr_prop_log:n { text }
+ }
+
+\cs_new_protected:Npn \__tblr_log_tracing_command:
+ {
+ \__tblr_prop_log:n { command }
+ }
+
+\cs_new_protected:Npn \__tblr_log_tracing_table:
+ {
+ \__tblr_prop_log:n { table }
+ }
+
+\cs_new_protected:Npn \__tblr_log_tracing_column:
+ {
+ \__tblr_prop_log:n { column }
+ }
+
+\cs_new_protected:Npn \__tblr_log_tracing_row:
+ {
+ \__tblr_prop_log:n { row }
+ }
+
+\cs_new_protected:Npn \__tblr_log_tracing_cell:
+ {
+ \__tblr_prop_log:n { cell }
+ }
+
+\cs_new_protected:Npn \__tblr_log_tracing_vline:
+ {
+ \__tblr_prop_log:n { vline }
+ }
+
+\cs_new_protected:Npn \__tblr_log_tracing_hline:
+ {
+ \__tblr_prop_log:n { hline }
+ }
+
+\cs_new_protected:Npn \__tblr_log_tracing_colspec:
+ {
+ \tl_if_eq:NnT \g__tblr_column_or_row_tl { column }
+ { \tl_log:N \g__tblr_expanded_colrow_spec_tl }
+ }
+
+\cs_new_protected:Npn \__tblr_log_tracing_rowspec:
+ {
+ \tl_if_eq:NnT \g__tblr_column_or_row_tl { row }
+ { \tl_log:N \g__tblr_expanded_colrow_spec_tl }
+ }
+
+\cs_new_protected:Npn \__tblr_log_tracing_target:
+ {
+ \dim_log:N \l__column_target_dim
+ \prop_log:N \l__column_coefficient_prop
+ \prop_log:N \l__column_natural_width_prop
+ \prop_log:N \l__column_computed_width_prop
+ }
+
+\cs_new_protected:Npn \__tblr_log_tracing_cellspan:
+ {
+ \prop_log:N \l__tblr_col_item_skip_size_prop
+ \prop_log:N \l__tblr_col_span_size_prop
+ \prop_log:N \l__tblr_row_item_skip_size_prop
+ \prop_log:N \l__tblr_row_span_size_prop
+ \prop_log:N \l__tblr_row_span_to_row_prop
+ }
+
+\cs_new_protected:Npn \__tblr_do_if_tracing:nn #1 #2
+ {
+ \bool_if:cT { g__tblr_tracing_ #1 _bool } {#2}
+ }
+
+\ExplSyntaxOff
+
diff --git a/macros/latex/contrib/tabularray/tabularray.tex b/macros/latex/contrib/tabularray/tabularray.tex
new file mode 100644
index 0000000000..41aa2ab9f6
--- /dev/null
+++ b/macros/latex/contrib/tabularray/tabularray.tex
@@ -0,0 +1,751 @@
+% -*- coding: utf-8 -*-
+\documentclass[oneside]{book}
+\usepackage[a4paper,margin=2.5cm]{geometry}
+
+\usepackage{codehigh} % https://github.com/lvjr/codehigh
+%\usepackage{arev}
+\usepackage{tabularray}
+\usepackage{array,multirow,amsmath}
+
+\usepackage{hyperref}
+\hypersetup{
+ colorlinks=true,
+ urlcolor=blue3,
+ linkcolor=red3,
+}
+\renewcommand*{\thefootnote}{*}
+
+\newcommand*{\myversion}{2021H}
+\newcommand*{\mydate}{Version \myversion\ (\the\year-\mylpad\month-\mylpad\day)\\\myrepo}
+\newcommand*{\myrepo}{\url{https://github.com/lvjr/tabularray}}
+\newcommand*{\mylpad}[1]{\ifnum#1<10 0\the#1\else\the#1\fi}
+
+\colorlet{highback}{\ifcase\month\or
+ red9\or brown9\or yellow9\or cyan9\or azure9\or blue9\or
+ red9\or brown9\or yellow9\or cyan9\or azure9\or blue9\fi
+}
+\CodeHigh{language=latex/table,style/main=highback,style/code=highback}
+\NewCodeHighEnv{code}{style/main=gray9,style/code=gray9}
+\NewCodeHighEnv{demo}{style/main=gray9,style/code=gray9,demo}
+
+%\CodeHigh{lite}
+
+\begin{document}
+
+\title{\sffamily\color{red3}Tabularray: Typeset Tabulars and Arrays with \LaTeX3}
+\author{Jianrui Lyu (tolvjr@163.com)}
+\date{\mydate}
+\maketitle
+
+\tableofcontents
+
+\chapter{From Old to New}
+
+\section{Vertical Space}
+
+After loading \verb!tabularrray! package in the preamble,
+we can use \verb!tblr! environments to typeset tabulars and arrays.
+The name \verb!tblr! is short for \verb!tabularray! or \verb!top-bottom-left-right!.
+The following is our first example:
+
+\begin{demo}
+\begin{tabular}{lccr}
+\hline
+ Alpha & Beta & Gamma & Delta \\
+\hline
+ Epsilon & Zeta & Eta & Theta \\
+\hline
+ Iota & Kappa & Lambda & Mu \\
+\hline
+\end{tabular}
+\end{demo}
+
+\begin{demohigh}
+\begin{tblr}{lccr}
+\hline
+ Alpha & Beta & Gamma & Delta \\
+\hline
+ Epsilon & Zeta & Eta & Theta \\
+\hline
+ Iota & Kappa & Lambda & Mu \\
+\hline
+\end{tblr}
+\end{demohigh}
+
+You may notice that there is extra space above and below the table rows with \verb!tblr! envirenment.
+This space makes the table look better.
+If you don't like it, you could use \verb!\SetTblrDefault! command:
+
+\begin{demohigh}
+\SetTblrDefault{rowsep=0pt}
+\begin{tblr}{lccr}
+\hline
+ Alpha & Beta & Gamma & Delta \\
+\hline
+ Epsilon & Zeta & Eta & Theta \\
+\hline
+ Iota & Kappa & Lambda & Mu \\
+\hline
+\end{tblr}
+\end{demohigh}
+
+But in many cases, this rowsep is useful:
+
+\begin{demo}
+$\begin{array}{rrr}
+\hline
+ \dfrac{2}{3} & \dfrac{2}{3} & \dfrac{1}{3} \\
+ \dfrac{2}{3} & -\dfrac{1}{3} & -\dfrac{2}{3} \\
+ \dfrac{1}{3} & -\dfrac{2}{3} & \dfrac{2}{3} \\
+\hline
+\end{array}$
+\end{demo}
+
+\begin{demohigh}
+$\begin{tblr}{rrr}
+\hline
+ \dfrac{2}{3} & \dfrac{2}{3} & \dfrac{1}{3} \\
+ \dfrac{2}{3} & -\dfrac{1}{3} & -\dfrac{2}{3} \\
+ \dfrac{1}{3} & -\dfrac{2}{3} & \dfrac{2}{3} \\
+\hline
+\end{tblr}$
+\end{demohigh}
+
+Note that you can use \verb!tblr! in both text and math modes.
+
+\section{Multiline Cells}
+
+It's quite easy to write multiline cells without fixing the column width in \verb!tblr! environments:
+just enclose the cell text with braces and use \verb!\\! to break lines:
+
+\begin{demohigh}
+\begin{tblr}{|l|c|r|}
+\hline
+ Left & {Center \\ Cent \\ C} & {Right \\ R} \\
+\hline
+ {L \\ Left} & {C \\ Cent \\ Center} & R \\
+\hline
+\end{tblr}
+\end{demohigh}
+
+\section{Cell Alignment}
+
+From time to time,
+you may want to specify the horizontal and vertical alignment of cells at the same time.
+\verb!Tabularray! package provides a \verb!Q! column for this
+(In fact, \verb!Q! column is the only primitive column,
+other columns are defined as \verb!Q! columns with some options):
+
+\begin{demohigh}
+\begin{tblr}{|Q[l,t]|Q[c,m]|Q[r,b]|}
+\hline
+ {Top Baseline \\ Left Left} & Middle Center & {Right Right \\ Bottom Baseline} \\
+\hline
+\end{tblr}
+\end{demohigh}
+
+Note that you can use more meaningful \verb!t! instead of \verb!p! for top baseline alignment.
+For some users who are familiar with word processors,
+these \verb!t! and \verb!b! columns are counter-intuitive.
+In \verb!tabularray! package, there are another two column types \verb!h! and \verb!f!,
+which will align cell text at row head and row foot, respectively:
+
+\begin{demohigh}
+\begin{tblr}{Q[h,4em]Q[t,4em]Q[m,4em]Q[b,4em]Q[f,4em]}
+\hline
+ {row\\head} & {top\\line} & {middle} & {line\\bottom} & {row\\foot} \\
+\hline
+ {row\\head} & {top\\line} & {11\\22\\mid\\44\\55} & {line\\bottom} & {row\\foot} \\
+\hline
+\end{tblr}
+\end{demohigh}
+
+\section{Multirow Cells}
+
+The above \verb!h! and \verb!f! columns are necessary for multirow cells.
+In \verb!tabularray!, the \verb!t! and \verb!b! in the optional argument of \verb!\multirow! commands
+will be treated as \verb!h! and \verb!f!, respectively:
+
+\begin{demo}
+\begin{tabular}{|l|l|l|l|}
+\hline
+ \multirow[t]{4}{1.5cm}{Multirow Cell One} & Alpha &
+ \multirow[b]{4}{1.5cm}{Multirow Cell Two} & Alpha \\
+ & Beta & & Beta \\
+ & Gamma & & Gamma \\
+ & Delta & & Delta \\
+\hline
+\end{tabular}
+\end{demo}
+
+\begin{demohigh}
+\begin{tblr}{|l|l|l|l|}
+\hline
+ \multirow[t]{4}{1.5cm}{Multirow Cell One} & Alpha &
+ \multirow[b]{4}{1.5cm}{Multirow Cell Two} & Alpha \\
+ & Beta & & Beta \\
+ & Gamma & & Gamma \\
+ & Delta & & Delta \\
+\hline
+\end{tblr}
+\end{demohigh}
+
+Note that you don't need to load \verb!multirow! package first,
+since \verb!tabularrray! doesn't depend on it.
+Furthermore, \verb!tabularray! will always typeset descent multirow cells.
+First, it will set correct vertical \verb!c! alignment,
+even though some rows have large height:
+
+\begin{demo}
+\begin{tabular}{|l|m{4em}|}
+\hline
+ \multirow[c]{4}{1.5cm}{Multirow} & Alpha \\
+ & Beta \\
+ & Gamma \\
+ & Delta Delta Delta \\
+\hline
+\end{tabular}
+\end{demo}
+
+\begin{demohigh}
+\begin{tblr}{|l|m{4em}|}
+\hline
+ \multirow[c]{4}{1.5cm}{Multirow} & Alpha \\
+ & Beta \\
+ & Gamma \\
+ & Delta Delta Delta \\
+\hline
+\end{tblr}
+\end{demohigh}
+
+Second, it will enlarge row heights if the multirow cells have large height,
+therefore it always avoids vertical overflow:
+
+\begin{demo}
+\begin{tabular}{|l|m{4em}|}
+\hline
+ \multirow[c]{2}{1cm}{Line \\ Line \\ Line \\ Line} & Alpha \\
+\cline{2-2}
+ & Beta \\
+\hline
+\end{tabular}
+\end{demo}
+
+\begin{demohigh}
+\begin{tblr}{|l|m{4em}|}
+\hline
+ \multirow[c]{2}{1cm}{Line \\ Line \\ Line \\ Line} & Alpha \\
+\cline{2}
+ & Beta \\
+\hline
+\end{tblr}
+\end{demohigh}
+
+\section{Multi Rows and Columns}
+
+It was a hard job to typeset cells with multiple rows and multiple columns. For example:
+
+\begin{demo}
+\begin{tabular}{|c|c|c|c|c|}
+\hline
+ \multirow{2}{*}{2 Rows}
+ & \multicolumn{2}{c|}{2 Columns}
+ & \multicolumn{2}{c|}{\multirow{2}{*}{2 Rows 2 Columns}} \\
+\cline{2-3}
+  & 2-2 & 2-3 & \multicolumn{2}{c|}{} \\
+\hline
+ 3-1 & 3-2 & 3-3 & 3-4 & 3-5 \\
+\hline
+\end{tabular}
+\end{demo}
+
+With \verb!tabularray! package, you can set spanned cells with \verb!\SetCell! command:
+within the optional argument of \verb!\SetCell! command,
+option \verb!r! is for rowspan number, and \verb!c! for colspan number;
+within the mandatory argument of it, horizontal and vertical alignment options are accepted.
+Therefore it's much simpler to typeset spanned cells:
+
+\begin{demohigh}
+\begin{tblr}{|c|c|c|c|c|}
+\hline
+ \SetCell[r=2]{c} 2 Rows
+ & \SetCell[c=2]{c} 2 Columns
+ & & \SetCell[r=2,c=2]{c} 2 Rows 2 Columns & \\
+\hline
+  & 2-2 & 2-3 & & \\
+\hline
+ 3-1 & 3-2 & 3-3 & 3-4 & 3-5 \\
+\hline
+\end{tblr}
+\end{demohigh}
+
+Using \verb!\multicolumn! command, the omitted cells \textcolor{red3}{must} be removed.
+On the contrary,
+using \verb!\multirow! command, the omitted cells \textcolor{red3}{must not} be removed.
+\verb!\SetCell! command behaves the same as \verb!\multirow! command in this aspect.
+
+With \verb!tblr! environment, any \verb!\hline! segments inside a spanned cell will be ignored,
+therefore we're free to use \verb!\hline! in the above example.
+Also, any omitted cell will definitely be ignored when typesetting,
+no matter it's empty or not.
+With this feature, we could put row and column numbers into the omitted cells,
+which will help us to locate cells when the tables are rather complex:
+
+\begin{demohigh}
+\begin{tblr}{|ll|c|rr|}
+\hline
+ \SetCell[r=3,c=2]{h} r=3 c=2 & 1-2 & \SetCell[r=2,c=3]{r} r=2 c=3 & 1-4 & 1-5 \\
+ 2-1 & 2-2 & 2-3 & 2-4 & 2-5 \\
+\hline
+ 3-1 & 3-2 & MIDDLE & \SetCell[r=3,c=2]{f} r=3 c=2 & 3-5 \\
+\hline
+ \SetCell[r=2,c=3]{l} r=2 c=3 & 4-2 & 4-3 & 4-4 & 4-5 \\
+ 5-1 & 5-2 & 5-3 & 5-4 & 5-5 \\
+\hline
+\end{tblr}
+\end{demohigh}
+
+\section{Column Types}
+
+\verb!Tabularray! package supports all normal column types, as well as
+the extendable \verb!X! column type,
+which first occured in \verb!tabularx! package and was largely improved by \verb!tabu! package:
+
+\begin{demohigh}
+\begin{tblr}{|X[2,l]|X[3,l]|X[1,r]|X[r]|}
+\hline
+ Alpha & Beta & Gamma & Delta \\
+\hline
+\end{tblr}
+\end{demohigh}
+
+Also, \verb!X! columns with negative coefficients are possible:
+
+\begin{demohigh}
+\begin{tblr}{|X[2,l]|X[3,l]|X[-1,r]|X[r]|}
+\hline
+ Alpha & Beta & Gamma & Delta \\
+\hline
+\end{tblr}
+\end{demohigh}
+
+We need the width to typeset a table with \verb!X! columns.
+If unset, the default is \verb!\linewidth!.
+To change the width, we have to first put all column specifications into \verb!colspec={...}!:
+
+\begin{demohigh}
+\begin{tblr}{width=0.8\linewidth,colspec={|X[2,l]|X[3,l]|X[-1,r]|X[r]|}}
+\hline
+ Alpha & Beta & Gamma & Delta \\
+\hline
+\end{tblr}
+\end{demohigh}
+
+You can define new column types with \verb!\NewColumnType! command.
+For example, in \verb!tabularray! package,
+\verb!b! and \verb!X! columns are defined as special \verb!Q! columns:
+\begin{codehigh}
+\NewColumnType{b}[1]{Q[b,wd=#1]}
+\NewColumnType{X}[1][]{Q[co=1,#1]}
+\end{codehigh}
+
+\section{Row Types}
+
+Now that we have column types and \verb!colspec! option,
+you may ask for row types and \verb!rowspec! option.
+Yes, they are here:
+
+\begin{demohigh}
+\begin{tblr}{colspec={Q[l]Q[c]Q[r]},rowspec={|Q[t]|Q[m]|Q[b]|}}
+ {Alpha \\ Alpha} & Beta & Gamma \\
+ Delta & Epsilon & {Zeta \\ Zeta} \\
+ Eta & {Theta \\ Theta} & Iota \\
+\end{tblr}
+\end{demohigh}
+
+Same as column types, \verb!Q! is the only primitive row type,
+and other row types are defined as \verb!Q! types with different options.
+It's better to specify horizontal alignment in \verb!colspec!,
+and vertical alignment in \verb!rowspec!, respectively.
+
+Inside \verb!rowspec!, \verb!|! is the hline type.
+Therefore we need not to write \verb!\hline! commnad, which makes table code cleaner.
+
+\section{Hlines and Vlines}
+
+Hlines and vlines have been improved too. You can specify the widths and styles of them:
+
+\begin{demohigh}
+\begin{tblr}{|l|[dotted]|[2pt]c|r|[solid]|[dashed]|}
+\hline
+One & Two & Three \\
+\hline\hline[dotted]\hline
+Four & Five & Six \\
+\hline[dashed]\hline[1pt]
+Seven & Eight & Nine \\
+\hline
+\end{tblr}
+\end{demohigh}
+
+\section{Colorful Tables}
+
+To add colors to your tables, you need to load \verb!xcolor! package first.
+\verb!Tabularray! package will also load \verb!ninecolors! package for proper color contrast.
+First you can specify background option for \verb!Q! rows/columns inside \verb!rowspec!/\verb!colspec!:
+
+\begin{demohigh}
+\begin{tblr}{colspec={lcr},rowspec={|Q[cyan7]|Q[azure7]|Q[blue7]|}}
+ Alpha & Beta & Gamma \\
+ Epsilon & Zeta & Eta \\
+ Iota & Kappa & Lambda \\
+\end{tblr}
+\end{demohigh}
+
+\begin{demohigh}
+\begin{tblr}{colspec={Q[l,brown7]Q[c,yellow7]Q[r,olive7]},rowspec={|Q|Q|Q|}}
+ Alpha & Beta & Gamma \\
+ Epsilon & Zeta & Eta \\
+ Iota & Kappa & Lambda \\
+\end{tblr}
+\end{demohigh}
+
+Also you can use \verb!\SetRow! or \verb!\SetColumn! command to specify row or column colors:
+
+\begin{demohigh}
+\begin{tblr}{colspec={lcr},rowspec={|Q|Q|Q|}}
+ \SetRow{cyan7} Alpha & Beta & Gamma \\
+ \SetRow{azure7} Epsilon & Zeta & Eta \\
+ \SetRow{blue7} Iota & Kappa & Lambda \\
+\end{tblr}
+\end{demohigh}
+
+\begin{demohigh}
+\begin{tblr}{colspec={lcr},rowspec={|Q|Q|Q|}}
+ \SetColumn{brown7}
+ Alpha & \SetColumn{yellow7}
+ Beta & \SetColumn{olive7}
+ Gamma \\
+ Epsilon & Zeta & Eta \\
+ Iota & Kappa & Lambda \\
+\end{tblr}
+\end{demohigh}
+
+Hlines and vlines can also have colors:
+
+\begin{demohigh}
+\begin{tblr}{colspec={lcr},rowspec={|[2pt,green7]Q|[teal7]Q|[green7]Q|[3pt,teal7]}}
+ Alpha & Beta & Gamma \\
+ Epsilon & Zeta & Eta \\
+ Iota & Kappa & Lambda \\
+\end{tblr}
+\end{demohigh}
+
+\begin{demohigh}
+\begin{tblr}{colspec={|[2pt,violet5]l|[2pt,magenta5]c|[2pt,purple5]r|[2pt,red5]}}
+ Alpha & Beta & Gamma \\
+ Epsilon & Zeta & Eta \\
+ Iota & Kappa & Lambda \\
+\end{tblr}
+\end{demohigh}
+
+\section{New Table Commands}
+
+All commands which change the specifications of tables \textcolor{red3}{must} be defined with \verb!\NewTableCommand!.
+The following example demonstrates how to define similar rules as in \verb!booktabs! package:
+
+\begin{demohigh}
+\NewTableCommand\toprule{\hline[0.08em]}
+\NewTableCommand\midrule{\hline[0.05em]}
+\NewTableCommand\bottomrule{\hline[0.08em]}
+\begin{tblr}{llll}
+\toprule
+ Alpha & Beta & Gamma & Delta \\
+\midrule
+ Epsilon & Zeta & Eta & Theta \\
+ Iota & Kappa & Lambda & Mu \\
+ Nu & Xi & Omicron & Pi \\
+\bottomrule
+\end{tblr}
+\end{demohigh}
+
+\chapter{New Interface}
+
+With \verb!tabularray! package, you can separate style and content totally in tables.
+
+\section{Hlines and Vlines}
+
+Options \verb!hlines! and \verb!vlines! are for setting all hlines and vlines, respectively.
+With empty value, all hlines/vlines will be solid.
+
+\begin{demohigh}
+\begin{tblr}{hlines,vlines}
+ Alpha & Beta & Gamma & Delta \\
+ Epsilon & Zeta & Eta & Theta \\
+ Iota & Kappa & Lambda & Mu \\
+ Nu & Xi & Omicron & Pi \\
+ Rho & Sigma & Tau & Upsilon \\
+ Phi & Chi & Psi & Omega \\
+\end{tblr}
+\end{demohigh}
+
+With values inside one pair of braces, all hlines/vlines will be styled.
+
+\begin{demohigh}
+\begin{tblr}{
+ hlines = {1pt,solid},
+ vlines = {red3,dashed},
+}
+ Alpha & Beta & Gamma & Delta \\
+ Epsilon & Zeta & Eta & Theta \\
+ Iota & Kappa & Lambda & Mu \\
+ Nu & Xi & Omicron & Pi \\
+ Rho & Sigma & Tau & Upsilon \\
+ Phi & Chi & Psi & Omega \\
+\end{tblr}
+\end{demohigh}
+
+Another pair of braces before will select segments in all hlines/vlines.
+
+\begin{demohigh}
+\begin{tblr}{
+ vlines = {1,3,5}{dashed},
+ vlines = {2,4,6}{solid},
+}
+ Alpha & Beta & Gamma & Delta \\
+ Epsilon & Zeta & Eta & Theta \\
+ Iota & Kappa & Lambda & Mu \\
+ Nu & Xi & Omicron & Pi \\
+ Rho & Sigma & Tau & Upsilon \\
+ Phi & Chi & Psi & Omega \\
+\end{tblr}
+\end{demohigh}
+
+The above example can be simplified with \verb!odd! and \verb!even! values.
+(More child selectors can be defined with \verb!\NewChildSelector! command.
+Advanced users could read the source code for this.)
+
+\begin{demohigh}
+\begin{tblr}{
+ vlines = {odd}{dashed},
+ vlines = {even}{solid},
+}
+ Alpha & Beta & Gamma & Delta \\
+ Epsilon & Zeta & Eta & Theta \\
+ Iota & Kappa & Lambda & Mu \\
+ Nu & Xi & Omicron & Pi \\
+ Rho & Sigma & Tau & Upsilon \\
+ Phi & Chi & Psi & Omega \\
+\end{tblr}
+\end{demohigh}
+
+Another pair of braces before will draw more hlines/vlines (in which \verb!-! stands for all line segments).
+
+\begin{demohigh}
+\begin{tblr}{
+ hlines = {1}{-}{dashed},
+ hlines = {2}{-}{solid},
+}
+ Alpha & Beta & Gamma & Delta \\
+ Epsilon & Zeta & Eta & Theta \\
+ Iota & Kappa & Lambda & Mu \\
+ Nu & Xi & Omicron & Pi \\
+ Rho & Sigma & Tau & Upsilon \\
+ Phi & Chi & Psi & Omega \\
+\end{tblr}
+\end{demohigh}
+
+Options \verb!hline{i}! and \verb!vline{j}! are for setting some hlines and vlines, respectively.
+
+\begin{demohigh}
+\begin{tblr}{
+ hline{1,7} = {1pt,solid},
+ hline{3-5} = {blue3,dashed},
+ vline{1,5} = {3-4}{dotted},
+}
+ Alpha & Beta & Gamma & Delta \\
+ Epsilon & Zeta & Eta & Theta \\
+ Iota & Kappa & Lambda & Mu \\
+ Nu & Xi & Omicron & Pi \\
+ Rho & Sigma & Tau & Upsilon \\
+ Phi & Chi & Psi & Omega \\
+\end{tblr}
+\end{demohigh}
+
+\section{Cells and Spancells}
+
+Option \verb!cells! is for setting all cells.
+
+\begin{demohigh}
+\begin{tblr}{hlines={white},cells={c,blue7}}
+ Alpha & Beta & Gamma & Delta \\
+ Epsilon & Zeta & Eta & Theta \\
+ Iota & Kappa & Lambda & Mu \\
+ Nu & Xi & Omicron & Pi \\
+ Rho & Sigma & Tau & Upsilon \\
+ Phi & Chi & Psi & Omega \\
+\end{tblr}
+\end{demohigh}
+
+Option \verb!cell{i}{j}! is for setting some cells.
+
+\begin{demohigh}
+\begin{tblr}{
+ hlines = {white},
+ vlines = {white},
+ cell{1,6}{odd} = {teal7},
+ cell{1,6}{even} = {green7},
+ cell{2,4}{1,4} = {red7},
+ cell{3,5}{1,4} = {purple7},
+ cell{2}{2} = {r=4,c=2}{c,azure7},
+}
+ Alpha & Beta & Gamma & Delta \\
+ Epsilon & Zeta & Eta & Theta \\
+ Iota & Kappa & Lambda & Mu \\
+ Nu & Xi & Omicron & Pi \\
+ Rho & Sigma & Tau & Upsilon \\
+ Phi & Chi & Psi & Omega \\
+\end{tblr}
+\end{demohigh}
+
+\section{Rows and Columns}
+
+Options \verb!rows! and \verb!columns! are for setting all rows and columns, respectively.
+
+\begin{demohigh}
+\begin{tblr}{
+ hlines,
+ vlines,
+ rows = {7mm},
+ columns = {15mm,c},
+}
+ Alpha & Beta & Gamma & Delta \\
+ Epsilon & Zeta & Eta & Theta \\
+ Iota & Kappa & Lambda & Mu \\
+\end{tblr}
+\end{demohigh}
+
+Options \verb!row{i}! and \verb!column{j}! are for setting some rows and columns, respectively.
+
+\begin{demohigh}
+\begin{tblr}{
+ hlines = {1pt,white},
+ row{odd} = {blue7},
+ row{even} = {azure7},
+ column{1} = {purple7,c},
+}
+ Alpha & Beta & Gamma & Delta \\
+ Epsilon & Zeta & Eta & Theta \\
+ Iota & Kappa & Lambda & Mu \\
+ Nu & Xi & Omicron & Pi \\
+ Rho & Sigma & Tau & Upsilon \\
+ Phi & Chi & Psi & Omega \\
+\end{tblr}
+\end{demohigh}
+
+\section{Space in Tables}
+
+Options \verb!rowsep! and \verb!colsep! are for setting padding for rows and columns, respectively.
+
+\begin{demohigh}
+\SetTblrDefault{rowsep=2pt,colsep=2pt}
+\begin{tblr}{hlines,vlines}
+ Alpha & Beta & Gamma & Delta \\
+ Epsilon & Zeta & Eta & Theta \\
+ Iota & Kappa & Lambda & Mu \\
+\end{tblr}
+\end{demohigh}
+
+Also \verb!abovesep!, \verb!belowsep!, \verb!leftsep!, \verb!rightsep! options are available:
+
+\begin{demohigh}
+\begin{tblr}{
+ hlines,
+ vlines,
+ rows = {abovesep=1pt,belowsep=5pt},
+ columns = {leftsep=1pt,rightsep=5pt},
+}
+ Alpha & Beta & Gamma & Delta \\
+ Epsilon & Zeta & Eta & Theta \\
+ Iota & Kappa & Lambda & Mu \\
+\end{tblr}
+\end{demohigh}
+
+And \verb!\\[dimen]! can be replaced by \verb!belowsep+! option:
+
+\begin{demohigh}
+\begin{tblr}{
+ hlines, row{2} = {belowsep+=5pt},
+}
+ Alpha & Beta & Gamma & Delta \\
+ Epsilon & Zeta & Eta & Theta \\
+ Iota & Kappa & Lambda & Mu \\
+\end{tblr}
+\end{demohigh}
+
+Also \verb!\arraystretch! parameter can be replaced by \verb!stretch! option:
+
+\begin{demohigh}
+\begin{tblr}{hlines,stretch=1.5}
+ Alpha & Beta & Gamma & Delta \\
+ Epsilon & Zeta & Eta & Theta \\
+ Iota & Kappa & Lambda & Mu \\
+\end{tblr}
+\end{demohigh}
+
+\section{Counters in Tables}
+
+Counters \verb!rownum!, \verb!colnum!, \verb!rowcount!, \verb!colcount! can be used in cell text:
+
+\begin{demohigh}
+\begin{tblr}{hlines}
+ Cell[\arabic{rownum}][\arabic{colnum}] & Cell[\arabic{rownum}][\arabic{colnum}] &
+ Cell[\arabic{rownum}][\arabic{colnum}] & Cell[\arabic{rownum}][\arabic{colnum}] \\
+ Cell[\arabic{rownum}][\arabic{colnum}] & Cell[\arabic{rownum}][\arabic{colnum}] &
+ Cell[\arabic{rownum}][\arabic{colnum}] & Cell[\arabic{rownum}][\arabic{colnum}] \\
+ Row=\arabic{rowcount}, Col=\arabic{colcount} &
+ Row=\arabic{rowcount}, Col=\arabic{colcount} &
+ Row=\arabic{rowcount}, Col=\arabic{colcount} &
+ Row=\arabic{rowcount}, Col=\arabic{colcount} \\
+ Cell[\arabic{rownum}][\arabic{colnum}] & Cell[\arabic{rownum}][\arabic{colnum}] &
+ Cell[\arabic{rownum}][\arabic{colnum}] & Cell[\arabic{rownum}][\arabic{colnum}] \\
+ Cell[\arabic{rownum}][\arabic{colnum}] & Cell[\arabic{rownum}][\arabic{colnum}] &
+ Cell[\arabic{rownum}][\arabic{colnum}] & Cell[\arabic{rownum}][\arabic{colnum}] \\
+\end{tblr}
+\end{demohigh}
+
+\section{Experimental Interface}
+
+Everything described in this section is in \underline{\textcolor{red3}{\textbf{experimental}}} status.
+Don’t use it in important documents, unless you have time
+to update them for the newer versions of \verb!tabularray! package in the future.
+
+By default \verb!tabularray! package will compute column widths from span widths.
+By setting option \verb!hspan=minimal!, it will compute span widths from column widths.
+The following two examples show this difference:
+
+\begin{demohigh}
+\SetTblrDefault{hlines,vlines}
+\begin{tblr}{cell{2}{1}={c=2}{l},cell{3}{1}={c=3}{l},cell{4}{2}={c=2}{l}}
+ 111 111 & 222 222 & 333 333 \\
+ 12 Multi Columns Multi Columns 12 & & 333 \\
+ 13 Multi Columns Multi Columns Multi Columns 13 & & \\
+ 111 & 23 Multi Columns Multi Columns 23 & \\
+\end{tblr}
+\end{demohigh}
+
+\begin{demohigh}
+\SetTblrDefault{hlines,vlines,hspan=minimal}
+\begin{tblr}{cell{2}{1}={c=2}{l},cell{3}{1}={c=3}{l},cell{4}{2}={c=2}{l}}
+ 111 111 & 222 222 & 333 333 \\
+ 12 Multi Columns Multi Columns 12 & & 333 \\
+ 13 Multi Columns Multi Columns Multi Columns 13 & & \\
+ 111 & 23 Multi Columns Multi Columns 23 & \\
+\end{tblr}
+\end{demohigh}
+
+\chapter{Source Code}
+
+%\CodeHigh{lite}
+\dochighinput[language=latex/latex3]{tabularray.sty}
+
+\end{document}
diff --git a/macros/luatex/optex/pdfextra/LICENSE b/macros/luatex/optex/pdfextra/LICENSE
new file mode 100644
index 0000000000..7468558136
--- /dev/null
+++ b/macros/luatex/optex/pdfextra/LICENSE
@@ -0,0 +1,12 @@
+Copyright (C) 2021 Michal Vlasák <lahcim8@gmail.com>
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
diff --git a/macros/luatex/optex/pdfextra/README.md b/macros/luatex/optex/pdfextra/README.md
new file mode 100644
index 0000000000..c47262b1f5
--- /dev/null
+++ b/macros/luatex/optex/pdfextra/README.md
@@ -0,0 +1,35 @@
+# PDF Extra
+
+PDF Extra provides extra PDF features for OpTeX.
+
+As a minimalistic package OpTeX doesn't support "advanced" features of PDF file
+format in the base. This third party package aims to provide them. Summary of
+supported features:
+
+ - insertion of multimedia (audio, video, 3D);
+ - hyperlinks and other actions,
+ - trigger events;
+ - transitions;
+ - attachments.
+
+The repository of PDF Extra is at https://github.com/vlasakm/pdfextra.
+
+# Documentation
+
+See `pdfextra-doc.pdf` for documentation. It contains user documentation as
+well as technical documentation interleaved with source code.
+
+# Installation instructions
+
+Put `pdfextra.opm` where `optex` can find it.
+
+Or just copy paste anything you want.
+
+# Usage
+
+In OpTex do: `\load [pdfextra]`.
+
+# License
+
+This package is available under the Zero-Clause BSD license. See `LICENSE` for
+more information.
diff --git a/macros/luatex/optex/pdfextra/examples/pdfextra-example-part.prc b/macros/luatex/optex/pdfextra/examples/pdfextra-example-part.prc
new file mode 100644
index 0000000000..812479dcbb
--- /dev/null
+++ b/macros/luatex/optex/pdfextra/examples/pdfextra-example-part.prc
Binary files differ
diff --git a/macros/luatex/optex/pdfextra/examples/pdfextra-example.pdf b/macros/luatex/optex/pdfextra/examples/pdfextra-example.pdf
new file mode 100644
index 0000000000..abb2e9c4c5
--- /dev/null
+++ b/macros/luatex/optex/pdfextra/examples/pdfextra-example.pdf
Binary files differ
diff --git a/macros/luatex/optex/pdfextra/examples/pdfextra-example.tex b/macros/luatex/optex/pdfextra/examples/pdfextra-example.tex
new file mode 100644
index 0000000000..6093bf7def
--- /dev/null
+++ b/macros/luatex/optex/pdfextra/examples/pdfextra-example.tex
@@ -0,0 +1,341 @@
+% PDFextra example file.
+% This file, apart from other topics, shows how to port 3D examples from media9
+% (https://ctan.org/pkg/media9) documentation. You probably have to adjust path
+% searching to succesfully compile this example, e.g.:
+%
+% \begtt
+% env TEXMFDOTDIR=.:~/src/texlive/texmf-dist/source/latex/media9/files/ optex pdfextra-example.tex
+% \endtt
+
+% basic \OpTeX/ settings
+\enlang\enquotes
+\fontfam[lm]
+
+%\pdfobjcompresslevel=0
+%\pdfcompresslevel=0
+
+% load the package from standard search path
+\load[pdfextra]
+
+% Before using \hlink we must activate hyperlinks
+\hyperlinks\Blue\Green
+
+% Maybe we want to greet the user and jump to page 2 right at the start?
+\openaction[
+ js:{%
+ app.alert("Javascript alert, open action");
+ console.println("printing to console from openaction");},
+ pg:2,
+]
+
+
+
+% Using document level JavaScript we can run initialization code right at the
+% start (this is more flexible than \openaction).
+\dljavascript[random]{
+ function getRandomNumber() {
+ return 4; % chosen by fair dice roll, ![https://xkcd.com/221/]
+ }
+ console.println("initialized with seed " + getRandomNumber());
+}
+
+
+
+% For external references we need to `\filedef` "external" and "url" files beforehand:
+\filedef/u[doc-internet]{http://petr.olsak.net/ftp/olsak/optex/optex-doc.pdf}
+\filedef/x[doc-local]{optex-doc.pdf}
+
+% We then try to reference them using external references:
+\hlink[extref:doc-internet:ref:langphrases]{OpTeX documentation, section \"Multilingual phrases and quotation marks".}
+\hlink[extpgref:doc-internet:12]{OpTeX documentation, page 12.}
+
+
+
+% Insert a video twice with different settings:
+\filedef/e[video]{example-movie.mp4}
+% insert video into page using Renditions mechanism with controls and autoplay
+\render[video][
+ controls=true,
+ aactions=\renditionautoplay,
+]{\picwidth=\hsize \inspic{example-image.pdf}}
+
+% Maybe add action buttons?
+\hlink[rendition::play]{play} \hlink[rendition::pause]{pause}
+\hlink[rendition::stop]{stop} \hlink[rendition::resume]{resume}
+
+% Render the same file again, but with different dimensions, no controls
+% and explicit activation.
+\render[video]{\inspic{example-image.pdf}}
+% This one can't have buttons, because it doesn't have its own name ("video") is used by the previous one.
+
+
+
+% Add already embedded video to the list of attachments shown in user
+% interface.
+\attach[video]
+
+
+% We are done for this page, who not go to the next one?
+%
+% \hlink typesets in group, so we locally disable lining links (our button is
+% bigger than normal line)
+\hlink[named:NextPage]{\nolininglinks\typoscale[2000/2000]\inoval{NEXT PAGE}}
+
+
+
+\vfil\break
+
+
+
+% deliver fresh random number to everyone who sees this page using "page open"
+% trigger event of page's actions
+\pageactions[
+ {O} {js:{app.alert("Random number for you is " + getRandomNumber());}}
+]
+
+% "previous page" link with "Split" transition
+\hlink[pg:1, transition:Split]{Go to previous page (with transition).}
+
+
+
+\vfil\break
+
+% A 3D Rich Media annotation with a custom view and script follows:
+
+% First we define the 3D file, so we can use same name for the view and have it auto included.
+\filedef/e[example]{pdfextra-example-part.prc}
+
+% Then a simplistic "front" view.
+\DDDview[example][
+ projection=ortho,
+ roo=400,
+]
+
+% A 3D JavaScript script that will define function to use with action button.
+% (we write the script only now, so we don't have to carry around an extra file in the package)
+\newwrite\js
+\immediate\openout\js=turn.js
+% rotate every node by angle degrees along $x$ axis
+\immediate\write\js{\detokenize{
+function turn(angle) {
+ angle = angle * Math.PI / 180;
+ for (var i = 0; i < scene.nodes.count; i++) {
+ var node = scene.nodes.getByIndex(i);
+ node.transform.rotateAboutXInPlace(angle);
+ }
+}
+}}
+\closeout\js
+
+% The annotation itself, with our script above.
+\RM[example][
+ activation=auto,
+ scripts=turn.js,
+]{{\White\vrule width\hsize height\hsize}}
+
+\hlink[js:\DDDcontext{example}.turn(10);]{Turn by 10 degrees along $x$ axis.}\par
+\hlink[js:\DDDcontext{example}.turn(30);]{Turn by 30 degrees along $x$ axis.}\par
+\hlink[js:\DDDcontext{example}.turn(90);]{Turn by 90 degrees along $x$ axis.}
+
+
+
+\vfil\break
+
+
+% Here is the "epix" 3D model example from media9 documentation ported to pdfextra
+%
+% First we define a view with the same name as the future Rich Media
+% annotation. This view will then automatically be used if no `views` is
+% specified. No need to be excessive with decimal numbers.
+\DDDview[epix][
+ FOV=30,
+ c2c=4 2 3,
+ coo=4.41 2.19 0,
+ roo=430,
+]
+
+% 3Dmenu is used often, lets use shortcut instead.
+\filedef/e[3dmenu]{3Dmenu.js}
+% We want to use the nice "epix" name for the view and annotation.
+\filedef/e[epix]{epix.prc}
+
+% Just to spice things up, we diverge a bit from media9 and define custom background color.
+\colordef\GreyBG{0.1\Black}
+
+% Define the 3D Rich Media annotation. One view is automatically detected from
+% name ("epix"). Scripts will run in turn at initialization time.
+\RM[epix][
+ scripts={
+ asylabels.js,
+ 3Dspintool.js,
+ 3dmenu,
+ },
+ background=\GreyBG,
+]{\picwidth=0.8\hsize \picheight=0.8\hsize \inspic{epixposter.pdf}}
+
+
+
+\vfil\break
+
+
+
+% Second media9 example is "dice" it has a lot of views, but they are simple.
+% This time we can't use the deduction with same name.
+\DDDview[Front][roo=27]
+\DDDview[Back][roo=27, c2c=0 1 0]
+\DDDview[Left][roo=27, c2c=-1 0 0]
+\DDDview[Right][roo=27, c2c=1 0 0]
+\DDDview[Top][roo=27, c2c=0 0 1]
+\DDDview[Bottom][roo=27, c2c=0 0 -1]
+\DDDview[Fish Eye at Centre][fov=120]
+
+% We want to use all the defined views, as well as autoactivate the annotation.
+% This means that the previews mostly sets dimensions, because it will not be
+% shown much. (Except in viewers that don't support 3D Rich Media -- all except
+% Acrobat).
+\RM[dice.u3d][
+ views={Front, Back, Left, Right, Top, Bottom, Fish Eye at Centre},
+ activation=auto,
+ scripts=3dmenu,
+]{{\Red \vrule height.5\hsize width.5\hsize}}
+
+% A few buttons for switching views.
+\hlink[goto3dview::/N]{\frame{Next view}}
+\hlink[goto3dview::(Back)]{\frame{View \"Back"}}
+\hlink[goto3dview::5]{\frame{6th view in the list}}
+
+% And define the action buttons using this new custom action.
+\hlink[diceview:/N]{Next view}
+\hlink[diceview:(Back)]{View \"Back"}
+\hlink[diceview:5]{6th view in the list}
+
+
+\vfil\break
+
+
+% Last media9 example ported. It has its own JavaScript file for animation,
+% which can be customized at runtime using JavaScript actions that access 3D
+% conotext.
+\filedef/e[malte]{malte.u3d}
+\DDDview[malte][c2c=1 1 1, roo=0.25]
+\RM[malte][
+ activation=auto,
+ scripts={3dmenu, malte.js},
+]{{\Blue \vrule height.5\hsize width0.5\hsize}}
+
+{\picheight=1.44em
+% Normal JavaScript actions, but we access functions defined globaly in the 3D
+% JavaScript context of "malte" Rich Media annotation.
+\hlink[js:\DDDcontext{malte}.cntrClockWise();]{\inspic{boutona.pdf}}
+\hlink[js:\DDDcontext{malte}.pause();]{\inspic{boutonb.pdf}}
+\hlink[js:\DDDcontext{malte}.clockWise();]{\inspic{boutonc.pdf}}
+\hlink[js:\DDDcontext{malte}.scaleSpeed(1/1.1);]{\inspic{boutond.pdf}}
+\hlink[js:\DDDcontext{malte}.origSpeed();]{\inspic{boutone.pdf}}
+\hlink[js:\DDDcontext{malte}.scaleSpeed(1.1);]{\inspic{boutonf.pdf}}
+}
+
+
+\vfil\break
+
+
+% Lastly a showcase of transitions / page durations in \OpTeX/ slideshow.
+% Because transitions are displayed only in fullscreen mode, we could request
+% it by using "\fullscreen". But we have more pages before this, so we didn't.
+
+% We just turn the rest of the document into slideshow.
+\slides
+\slideshow
+% To see the transitions better, we color each page with a background color.
+\global\pgbackground={\bgcolor \hrule height\pdfpageheight width\pdfpagewidth}
+\glet\bgcolor=\Yellow
+
+% Transitions on all pages where it is not said otherwise will be of type
+% "Wipe" and be 1 second long.
+\transitions[Wipe:1]
+
+% The slides will by default be shown for 3 seconds before advancing to the next one.
+\defaultpageduration[3]
+% But the first slide has override to only be shown for 1 second.
+\pageduration[1]
+
+\tit Presentation
+
+\subtit Transistions and durations
+
+\pg;
+\glet\bgcolor=\Red
+% All transitions are defined on the page object and they are shown when we go
+% to that page. That means that we probably didn't see the "Wipe:1" animation
+% of the first slide, because we already were there. However, this second slide
+% with "Fade" is now shown correctly. (The first one also will, when we go
+% back.)
+\transition[Fade]
+
+\sec First slide
+
+Some\pg+
+% In a slideshow, by using \pg+ we are on a new PDF page with independently set
+% transition/duration. We can use this to disable page durations -- we have
+% seen the "single page override" in action on previous page, and the default
+% duration on this "page".
+\defaultpageduration[]
+
+% Also apply a long transition on this "page"/"slide"/"subslide".
+\transition[Dissolve:4]
+
+% More uses of currently set default values follow.
+text\pg+
+
+to\pg+
+
+test\pg+
+
+slideshow
+
+\pg;
+% Now show different transitions on differently colored pages:
+\glet\bgcolor=\Green
+\transition[Split:3:/Dm /V /M /I]
+
+\sec Second slide
+
+\transitions[Blinds:2]
+
+more\pg+
+
+text
+
+\transitions[Wipe]
+
+\pg;
+\glet\bgcolor=\Brown
+\transition[Dissolve]
+
+\sec Third slide
+
+\pg;
+\glet\bgcolor=\Red
+\transition[Box]
+
+\sec More
+
+\pg;
+\glet\bgcolor=\Yellow
+
+\sec slides
+
+\pg;
+\glet\bgcolor=\Red
+
+\sec using
+
+\pg;
+\glet\bgcolor=\Yellow
+
+\sec default transition
+
+bye\pg+
+
+bye
+
+\bye
diff --git a/macros/luatex/optex/pdfextra/pdfextra-doc.pdf b/macros/luatex/optex/pdfextra/pdfextra-doc.pdf
new file mode 100644
index 0000000000..e5a6b8e30d
--- /dev/null
+++ b/macros/luatex/optex/pdfextra/pdfextra-doc.pdf
Binary files differ
diff --git a/macros/luatex/optex/pdfextra/pdfextra-doc.tex b/macros/luatex/optex/pdfextra/pdfextra-doc.tex
new file mode 100644
index 0000000000..38f6cd9795
--- /dev/null
+++ b/macros/luatex/optex/pdfextra/pdfextra-doc.tex
@@ -0,0 +1,684 @@
+% vim: tw=80
+\load [doc, pdfextra]
+\catcode`\.=11
+
+\hyperlinks\Green\Green
+
+% table notes (http://petr.olsak.net/optex/optex-tricks.html#tnote)
+\newcount\tnotenum
+\def\tnotelist{}
+\def\tnote#1{\incr\tnotenum $^{\rm\_romannumeral\tnotenum}$\global\addto\tnotelist{{#1}}}
+\def\tnoteprint{\typoscale[920/920]\par \tnotenum=0
+ \ea\foreach\tnotelist
+ \do{\advance\tnotenum by1 \par $^{\rm\_romannumeral\tnotenum}$##1 }\par
+ \global\tnotenum=0 \gdef\tnotelist{}%
+}
+
+% use `\hlink` instead of OpTeX `\*link` s
+\protected\def\_link[#1]#2#3{\hlink[#1]{#3}}
+\protected\def\_ilink[#1]#2{\hlink[#1]{#2}}
+\protected\def\_ulink[#1]#2{\hlink[url:#1]{#2}}
+\public \link \ilink \ulink ;
+
+\let\_cslinkcolor\Blue
+
+% allow hyperlinking of \OpTeX's control sequences (see doc.opm)
+\let\_pdfextra_opdocaction\_pdfextra_urlaction
+\let\_pdfextra_opdoclinkcolor\Blue
+\def\_Xindex#1#2{\sdef{,#1}{}\slet{el:#1}{optexdoclink}}
+\def\optexdoclink{\hlink[opdoc:\optexdocurl\#cs:\_tmpa]{\csstring\\\_tmpb}}
+\def\optexdocurl{http://petr.olsak.net/ftp/olsak/optex/optex-doc.pdf}
+\isfile{optex-doc.eref}\iftrue \input{optex-doc.eref}\fi
+
+\insertoutline{PDF extra}
+\tit PDF extra -- extra PDF features for \OpTeX/
+
+\hfill Version \_pdfextra_version
+
+\centerline{\it Michal Vlasák, 2021}
+\bigskip
+
+\noindent
+`PDFextra` is a third party package for \OpTeX/. It aims to provide access to
+more advanced PDF features, which are currently not supported in \OpTeX/ --
+especially interactive and multimedia features. The development is hosted at
+\url{https://github.com/vlasakm/pdfextra}.
+
+In the spirit of \OpTeX/ you may use these macros in any form you want. Either
+by installing this package and doing `\load[pdfextra]` in \OpTeX/, or just by
+copying some useful parts of this package into your documents / packages.
+\OpTeX/ namespacing is used, but it can be easily stripped, if you wish to
+incorporate these macros into other macro packages. The code currently depends
+on \LuaTeX/, but mostly uses only pdf\TeX/ primitives and a few simple macros
+from \OpTeX/.
+
+User documentation (`pdfextra-doc.tex`) and technical documentation interleaved
+with source code (`pdfextra.opm`) are all typeset in this PDF file. Some
+examples of usage are in the user documentation, but file
+`pdfextra-example.tex` contains more examples.
+
+\insertoutline{Contents}\outlines{0}
+\notoc\nonum \sec Contents
+\maketoc
+
+\vfil\break
+
+\chap User documentation
+
+\sec Defining files
+
+Many commands provided by this package require you to supply a file <name>. This
+is because many commands either work directly (like inserting attachments or
+multimedia) or can optionally use files (like inserting JavaScript).
+The \"right" way to use <name> is to first define the <name> with:\nl\indent
+\^`\filedef``/<type>[<name>]{<path or URL>}`.
+
+Where <name> is the name you will use to refer to this file. It is currently
+limited to ASCII only (as all \"<name>s" required by this package).
+Interpretation of <path or URL>
+depends on the type, which may be:
+
+\begitems
+ * `e`, \"embedded file". The file with path <path> will be embedded to the PDF
+ file. A file that is embedded this once, can later be used many times in
+ different contexts, e.g. you may use it to attach a video as an attachment but
+ also have it play on page 1 and even other pages. This is the best way, because
+ the resulting PDF file is self contained.
+ * `x`, \"external file". <path> can only be a path to the current directory.
+ To refer to the file only <path> is used, sort of like a reference. This way
+ the file you want to refer to {\em has} to be present in the same directory as
+ the PDF file when it is {\em viewed}!
+ * `u`, \"URL file". <URL> is the URL of the file you want to refer to.
+\enditems
+
+All these create the same type of object, which ideally could be used
+interchangibly everywhere a {\em file specification} is required in PDF. This is
+sadly not always true. The limitations to only certain types of `\filedef`'s
+will be mentioned in due sections. But as a rule of thumb, most of the time you
+want to embed the files into PDF. The external/URL references are good for
+refering to external files, although other methods are also possible there.
+
+Because most of the times you want <name> to be embedded file, you may omit the
+prior definition and instead use the <path> itself. The file will be
+autoembedded.
+
+Examples:
+
+\begtt
+\filedef/u[doc-internet]{http://petr.olsak.net/ftp/olsak/optex/optex-doc.pdf}
+\filedef/x[doc-local]{optex-doc.pdf}
+\filedef/e[doc-embedded]{optex-doc.pdf}
+\endtt
+
+\label[user:multimedia]
+\sec Multimedia
+
+It is possible to insert video, audio and 3D files for playback/display inside
+a PDF file (on a page). There are several different PDF mechanisms for
+inserting multimedia. For audio/video this package uses the so called
+\"Renditions", which currently have the best support in PDF viewers (fully
+works in Acrobat and Foxit, partly in Evince and Okular). Rich Media
+annotations are used for 3D art (works only in Acrobat Reader), although it is
+possible to also insert audio/video using this mechanism it is very restricting
+and Renditions are recommended.
+
+Use command \^`\render``[<name>][<optional key-value parameters>]{<appearance>}` for
+inserting audio/video with Renditions or
+\^`\RM``[<name>][<optional key-value parameters>]{<appearance>}` for inserting
+audio/video/3D as Rich Media annnotation.
+The result of this command is similiar to what `\inspic`
+produces\fnote{But because annotations are involved, transformations using PDF
+literals will not work as expected.}. Both commands expect <name> to be
+\~`\filedef`'d name of the file to play/display. As usual, fallback for
+interpreting <name> as path (and embedding it) is in place. It is recommended
+to only use embedded files with both mechanisms (Rich Media requires it,
+Renditions with other than embedded files do not work in Acrobat). Optional
+key-value parameters may be used to customize default values. They may be left
+out enitrely (including brackets). Last parameter, <appearance>, defines so
+called \"normal apperance", which is shown before the annotation is activated
+(audio/video starts playing or 3D scene is displayed). The dimensions of
+resulting multimedia annotation will be taken from <appearance>. Most likely
+you want to use a \"poster" picture (inserted with `\inspic`) as appearance --
+the dimensions will be taken from it and e.g. aspect ratio will be nicely
+preserved.
+
+Customization of Renditions is possible using key-value parameters, but beware
+that it mostly doesn't work in Evince and Okular (Acrobat and Foxit are fine in
+this regard). The available parameters are in Table~\ref[tab:kv-renditions].
+Most customizations of Rich Media concern 3D art. Available parameters are
+listed in Table~\ref[tab:kv-rm].
+
+\midinsert
+\label[tab:kv-renditions]
+\caption/t Key value parameters available for Renditions (\~`\render`)
+\cskip
+\centerline{\table{lllp{72mm\fL}}{
+Key & Possible values & Default & Description \crll
+`controls` & `true` or `false` & `false` & Whether to display audio/video player controls. \crl
+`volume` & decimal betwen 0 and 100 & 100 & Audio volume. \crl
+`repeat` & integer $\geq$ 0 & 1 & Number of repetitions (0 means loop forever). \crl
+`background` & \OpTeX/ color & `\White` & Color used for part of the annotation not covered by video player (for wrong aspect ratios). \crl
+`opacity` & decimal between 0 and 1 & 1 & Opacity of `background`. \crl
+`aactions` & `\renditionautoplay` & (none) & Can be used for autoplay on page open. \crl
+`name` & ascii string & `<name>` & Name for use with actions and scripts. \crll
+}}
+\endinsert
+
+\midinsert
+\label[tab:kv-rm]
+\caption/t Key value parameters available for Rich Media (\~`\RM`)
+\cskip
+\centerline{\table{lp{31mm\fL}lp{75mm\fL}}{
+Key & Possible values & Default & Description \crll
+`activation` & `explicit` or `auto` & `explicit` & Whether to automatically activate the annotation on page open or display normal apperance until user clicks. \crl
+`deactivation` & `explicit` or `auto` & `explicit` & Whether to automatically deactivate the annotation on page close or require explicit deactivation by user (from right click menu). \crl
+`toolbar` & `true` or `false` & `true` & Whether to show 3D toolbar (with view and other options). \crl
+`views` & comma separated list of view <name>s & `<name>` & List of names of 3D views to be used. The default is to try a view of same <name>. Beware that unknown views are silently ignored. \crl
+`scripts` & comma separated list of script <name>s & (none) & List of names of JavaScript script file <name>s to be used. \crl
+`name` & ascii string & `<name>` & Name for use with actions and scripts. \crll
+}}
+\endinsert
+
+The weird `name` key is only required if one media file is used
+more than once and control using actions or JavaScript scripts is needed.
+
+Examples of video insertion:
+
+\begtt
+% embed file under name "video"
+\filedef/e[video]{example-movie.mp4}
+% insert video into page using Renditions mechanism with controls and autoplay
+\render[video][
+ name=bigvideo,
+ controls=true,
+ aactions=\renditionautoplay,
+]{\picwidth=\hsize \inspic{example-image.pdf}}
+
+% render the same file again, but with different dimensions, no controls
+% and explicit activation
+\render[video]{\inspic{example-image.pdf}}
+\endtt
+
+When displaying 3D there are more things involved. First, only U3D and PRC can
+be included in PDF files. The simplest way to show the 3D scene on page is without
+any optional parameters:
+\par\nobreak\begtt
+\RM[part.prc]{\picwidth=\hsize \inspic{part.png}}
+\endtt
+
+The resulting view will be what is defined in the 3D file. But it is possible
+to customize it, by creating custom view. Or even more of them -- they will be
+available in the user interface for easy switching, first one is considered
+default. Parameters not defined in a custom view often take what is in the 3D
+file as default value. \^`\DDDview``[<view name>][<key-value parameters>]` is
+the command for defining 3D views. The brackets surrounding key-value
+parameters have to be included even if no key-value parameters are used. The
+available parameters are explained in Table~\ref[tab:kv-3dview].
+
+\midinsert
+\label[tab:kv-3dview]
+\caption/t Key value parameters available for 3D views (\~`\DDDview`)
+\cskip
+\centerline{\table{lp{38mm\fL}lp{55mm\fL}}{
+Key & Possible values & Default & Description \crll
+`projection` & `perspective` or `ortho` & `perspective` & Projection type to use (perspective distorts the view, e.g. parallel lines are not shown as such, but is more natural to human eye, orthogonal projection is what is generally used with technical parts). \crl
+`scale` & decimal number & 1 & Scaling to use when orthogonal projection is used. \crl
+`FOV` & number between 0 and 180 & 30 & Field of view for use with perspective projection. \crl
+`background` & \OpTeX/ color & `\White` & Color used as background in the 3D scene. \crl
+`rendermode` & {\typosize[9/10]`Solid`,\hfil\break`SolidWireframe`,\hfil\break`Transparent`,\hfil\break`TransparentWireframe`,\hfil\break`BoundingBox`,\hfil\break`TransparentBoundingBox`,\hfil\break`Wireframe`,\hfil\break`ShadedWireframe`,\hfil\break`Vertices`,\hfil\break`ShadedVertices`,\hfil\break`Illustration`,\hfil\break`SolidOutline`,\hfil\break`ShadedIllustration`} & (taken from 3D file) & Used rendering mode. See PDF standard\tnote{\url{https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/PDF32000_2008.pdf\#G12.2358303}} for more details. \crl
+`lighting` & `White`, `Day`, `Night`, `Hard`, `Primary`, `Blue`, `Red`, `Cube`, `CAD`, `Headlamp` & (taken from 3D file) & Used lighting scheme. See PDF standard\tnote{\url{https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/PDF32000_2008.pdf\#G12.2358356}} for more details.\crl
+`method` & `media9`, `manual`, `u3d` & `media9` & Method used for defining 3D camera position and orientation. \crll
+}}
+\tnoteprint
+\endinsert
+
+The value of `method` key influences what other key-value
+parameters are available. For details about the manual method see the technical
+documentation~(\ref[mm-3dviews]). The `u3d` method works only with U3D files
+(not with PRC files) and requires you to know the internal \"path" of the view
+contained in the file and is hence not always useful (especially when the paths
+are weirdly constructed by exporting applications). But if you know the path
+you can use \"`method=u3d, u3dpath=<path>`". All Unicode characters are allowed in
+<path>.
+
+The most useful method of specifying the camera position/orientation is
+`method=media9`. The same method is also used in a number of other packages
+(movie15, rmannot, Con\TeX/t). Its input are key-value parameters, listed in
+Table~\ref[tab:kv-media9]. For illustration of the parameters check the
+documentation\fnote{\url{https://mirrors.ctan.org/macros/latex/contrib/media9/doc/media9.pdf\#figure.8}}
+of media9.
+
+\midinsert
+\label[tab:kv-media9]
+\caption/t Key value parameters available for media9 method of 3D views (\^`\DDDview`)
+\cskip
+\centerline{\table{lp{38mm\fL}lp{50mm\fL}}{
+Key & Possible values & Default & Description \crll
+`coo` & three space separated (decimal) numbers & `0 0 0` & \"Center of orbit". Coordinates of the point camera is supposed to look at. \crl
+`roo` & (decimal) number & `0` & Distance of camera from `coo`. \crl
+`c2c` & three space separated (decimal) numbers & `0 -1 0` & \"Center of orbit to camera" vector. A directional vector (i.e. length doesn't matter). The direction the camera will be looking at is opposite of this vector. Default is view towards positive $y$.\crll
+}}
+\endinsert
+
+You can construct simple views only by using these few parameters. When talking
+about meanings/names of different views it is needed to know the real placement
+of the 3D object in the 3D world. But for a reasonably orientated object in the
+center (`coo=0 0 0`) constructing simple views is very easy (keep in mind
+`method=media9` is default):
+
+\begtt
+\DDDview[front][
+ projection=ortho,
+ roo=400,
+]
+\DDDview[left][
+ projection=ortho,
+ roo=400,
+ c2c=-1 0 0,
+]
+\DDDview[top][
+ projection=ortho,
+ roo=400,
+ c2c=0 0 1,
+]
+\DDDview[isometric][
+ projection=ortho,
+ roo=500,
+ c2c=-1 -1 1,
+]
+\endtt
+
+We can then perhaps use these views in \^`\RM`:
+
+\begtt
+% Auto activated 3D Rich Media annotation. White background just ensures
+% the right dimensions. Comma in `views` is escaped using "{}".
+\RM[part.prc][
+ activation=auto,
+ views={front, left},
+]{{\White\vrule width\hsize height\vsize}}
+
+\RM[part.prc][ % the same 3D file, now with different views
+ name=part2,
+ activation=auto,
+ views={top, isometric},
+]{{\White\vrule width\hsize height\vsize}}
+\endtt
+
+If you want to deduce the view parameters automatically it is possible. You can
+just not specify any view, but include the `3Dmenu.js` script from media9
+package. It enables you to right click the annotation and select \"Get Current
+View" (or even \"Generate Default View" which finds the view all by itself). A
+window with generated parameters will show up. You can then copy the ones this
+package understands (`c2c`, `coo`, `roo`) and use them. You don't have to be
+excessive with precision, because after calculation everything gets rounded to
+6 decimal places anyways.
+
+\begtt
+% using 3Dmenu.js to generate 3D view parameters automatically
+\RM[part.prc][
+ name=part3,
+ activation=auto,
+ scripts=3Dmenu.js,
+]{{\White\vrule width\hsize height\vsize}}
+\endtt
+
+The use of `scripts` isn't limited to this though, there are many other
+possibilities. First, you can use as many scripts as you want
+(`scripts={script1.js, script2.js, ...}`), but be careful that 3D JavaScript is
+kind of special, and has to come from embedded files (here we
+were using the auto-embedding, but we could have used e.g.
+\~`\filedef/e[3dmenu]{3Dmenu.js}` and then \"`3dmenu`" instead). For creating
+your own scripts check out the Acrobat 3D JavaScript
+API\fnote{\url{https://wwwimages.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/AcrobatDC_js_3d_api_reference.pdf}}.
+It is possible to do different transformations and achieve animations using
+\"time events". The implicit \"context" of 3D scripts can be accessed from
+normal JavaScript actions (see~\ref[user:actions-3djs]). Vice versa 3D scripts
+may access the global JavaScript environment using `host` object.
+
+More examples of 3D Rich Media, including usage of 3D JavaScript, are available
+in the example file `pdfextra-example.tex`. They show how it is possible to
+port the examples used by media9.
+
+\sec Actions
+
+Actions are very important aspect of interactivity in the context of PDF. There
+are a few very useful types of actions, like \"goto" actions which jump to
+other part of document. There are also a few ways how to {\em execute} actions.
+The most usual is a clickable area on page, but clickable bookmarks (\"document
+outline") also execute actions behind the scenes. \OpTeX/ supports only basic
+\"goto" and \"URI" actions using `\ilink` (used for `\ref`, `\cite`, etc.) and
+`\ulink` (used for `\url`).
+
+This package offers generalization of this mechanism. The core of it is a way
+of specifying an action. This syntax is called <action spec> and is used for
+example by `\hlink` command, which can replace both `\ilink` and `\ulink`.
+<action spec> is a comma separated list of `<type>:<arguments>`. where <type>
+refers to the action type and the syntax of arguments is dependant on <type>.
+Leading spaces are ignored, trailing aren't. You probably won't often use the
+possiblity of specifying multiple actions, but it is for chaining execution of
+several actions.
+
+\^`\pdfaction``[<action spec>]` is available for lower level creation of
+different actions, but for clickable areas on page you will use
+\^`\hlink``[<action spec>]{<text>}` with a very similiar syntax. Although note,
+that `\hlink`'s interface is also not really high level and wrapping it inside
+macros like `\ref` or `\url` might be beneficial. <text> will be typeset
+directly and the area it occupies will be clickable. Clicking it executes
+action defined by <action spec>. Line breaks inside <text> will be possible, in
+that case several clickable rectangles will be created, one for each line.
+Normally in text you want the ares to be of the same height and depth
+(calculated from `\baselineskip`), to achieve sort of a lining, uniform effect.
+If you want to define big clickable buttons, you may need to turn off the
+lining effect using \^`\nolininglinks`. It respects groups, but a counterpart
+(\^`\lininglinks`) is also available.
+
+There are a few predefined action types (<type>): `url`, `extref`, `extpgref`,
+`named`, `transition`, `js`, `goto3dview` and `rendition`. They will be explained in a
+moment. Any unrecognized <type> is understood as an \"internal link", where
+`<type>:<link>` is the destination of the link. Hence it is possible to
+use `\hlink` as `\ilink` for example with \OpTeX/'s normal types
+of internal links. For example:
+\begtt
+See section~\hlink[ref:section]{2.2.13} or page~\hlink[pg:5]{5}.
+\endtt
+`\ulink` may be replaced like this:
+\begtt
+Visit CTAN's \hlink[url:https://www.ctan.org/]{website}.
+\endtt
+
+Before we really get into different types of actions, there is a nicer command
+for setting the initial (\"open") action of PDF document, which is executed
+when the document is opened. It defaults to opening the page with the zoom
+level according to viewing user's preferences. But you can change this using
+\^`\openaction``[<action spec>]`:
+
+\begtt
+\openaction[pg:2]
+\endtt
+
+\secc External references
+There are two actions analogous to internal links that can be used to link to
+external documents. `[extref:<name>:<named destination>]` can be used to refer
+to named locations in a PDF document prepared by `\filedef` with <name>.
+`[extpgref:<name>:<page number>]` is similiar but refers to a page number.
+Although it would be nice, these actions aren't well supported by all viewers.
+
+Example:
+
+\begtt
+\hlink[extref:doc-internet:ref:langphrases]{OpTeX documentation,
+ section \"Multilingual phrases and quotation marks".}
+\hlink[extpgref:doc-internet:12]{OpTeX documentation, page 12.}
+\endtt
+
+(Note that \"`:`" in \"`ref:langphrase`" is not part of the syntactic rule, it
+is just the value of <named destination> in this case.)
+
+A little bit of customization is possible, see~\ref[actions-jump].
+
+Because of the poor support you may find luck with the less universal url action with `#fragment`:
+
+\begtt
+\hlink[url:http://petr.olsak.net/ftp/olsak/optex/optex-doc.pdf#ref:langphrases]
+ {OpTeX documentation, section \"Multilingual phrases and quotation marks".}
+\endtt
+
+\secc Named actions
+There are four defined in PDF standard, but viewers may support more. All in
+examples:
+
+\begtt
+\hlink[named:NextPage]{Go to next page,}
+\hlink[named:PrevPage]{go to previous page,}
+\hlink[named:FirstPage]{go to first page,}
+\hlink[named:LastPage]{go to last page.}
+\endtt
+
+\secc Transition actions
+
+Transition actions generally make sense only when chained {\em after} jump
+actions. The specified transition/animation will occur, before destination is
+opened, but it will not override a transition defined for the particular page.
+The syntax is `[transition:<transition spec>]`. See~\ref[user:transitions] for
+more information about `<transition spec>`.
+
+Example:
+\begtt
+\hlink[ref:yellow-slide, transition:Box:3:/M /O]
+ {Go to yellow slide with long outward Box transition}
+\endtt
+
+\secc JavaScript actions
+
+They allow executing pieces of JavaScript code using syntax:
+`[js:<name or script>]`. If <name or script> is a validly `\filedef`'d the script from file
+<name> will be executed (only embedded files are valid). Otherwise <script> will
+be used directly. Apart from reuse in different documents, scripts loaded from
+files may be encoded in UTF-16BE and hence support Unicode, inline <script>s
+current don't.
+
+Examples:
+
+\begtt
+\openaction[js:{%
+ app.alert("Javascript alert, open action");
+ console.println("printing to console from openaction");
+}]
+
+\filedef/e[jstest]{test.js}
+\hlink[js:jstest]{JavaScript action from file}
+\endtt
+
+(Note how braces were used to guard the comma in JavaScript code from being
+interpreted as a action separator.)
+
+In these actions you may want to use your own functions which should be defined
+before user has a chance of activating any other JavaScript actions. This is the
+purpose of \"document level" JavaScript actions. They function exactly the same
+way as normal JavaScript actions, but have names (although meaningless, they
+must be unique) and are executed in order of definition. Use
+\^`\dljavascript``[<name>]{<name or script>}` for defining these actions:
+
+\begtt \adef![#1]{\url{#1}}
+\filedef/e[preamble]{preamble.js}
+\djavascript[preamble]{preamble}
+
+\dljavascript[initialization]{%
+ var data = 42;
+ function getRandomNumber() {
+ return 4; // chosen by fair dice roll, ![https://xkcd.com/221/]
+ }
+ console.println("initialized with seed " + getRandomNumber());
+}
+\endtt
+
+The JavaScript API available is not the same as the one in the web browsers. It
+is instead specified by Adobe:
+\url{https://wwwimages.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/js_api_reference.pdf}.
+
+\label[user:actions-3djs]
+\secc 3D JavaScript actions
+
+There are no \"special" JavaScript actions for dealing with 3D. Normal
+JavaScript actions are used. You just have to access the 3D context of the
+annotation you want to control. For annotation with <name> the context is made
+available in \^`\DDDcontext{<name>}`. Under this context object you find all
+global definitions from the respective 3D scripts. For example if a \"`turn`"
+function is defined, it is possible to call it like this:
+
+\begtt
+\hlink[js:\DDDcontext{part3}.turn();]{Turn by 90 degrees along $x$ axis.}
+\endtt
+
+\secc GoTo3Dview actions
+
+GoTo3Dview actions allow changing the view of the 3D scene to one of the
+predefined views (those listed by `views` comma separated list of \~`\RM`). The
+syntax is `[goto3dview:<name>:<view>]`. <name> is name of the annotation whose
+view we want to change and <view> is the intended view. You can refer to last
+inserted Rich Media annotation using empty name. For <view> you can either use
+\"`(<view name>)`" (e.g. \"`(part)`"), index of the view in the view list (zero
+based, e.g.\ \"`0`" for the first view) or one of the special values: \"`/N`"
+(next), \"`/P`" (previous), \"`/F`" (first) \"`/L`" (\"last").
+
+\begtt
+% let's define an annotation with a few views
+\RM[part.prc][
+ activation=auto,
+ views={front, left, top, isometric},
+]{{\White\vrule width\hsize height\vsize}}
+
+% try the different methods of reffering to views
+\hlink[goto3dview::/N]{Next view},
+\hlink[goto3dview::(left)]{left view} and
+\hlink[goto3dview:part.prc:3]{third view}.
+\endtt
+
+\secc Rendition actions
+
+Rendition actions can be used to control playback of \"Rendition annotations".
+They use the syntax `[rendition:<name>:<operation>]`, where <name> refers to
+the name of the rendition to control and <operation> is one of `play`, `stop`,
+`pause` or `resume`. As a convenience, you can refer to last inserted rendition
+using empty name. If a file has been \~`\render`ed more than once with the same
+name, the action will influence the first instance.
+
+Beware that currently these actions do not work in Evince and Okular (but do in
+Acrobat and Foxit).
+
+Examples:
+
+\begtt
+% rendition with name=video, that we want to control
+\render[video]{\inspic{example-image.pdf}}
+
+% we want the rendition action to have yellow border and red content
+\let\_renditionborder\Yellow
+\let\_renditionlinkcolor\Red
+
+To start playing the video, click \hlink[rendition::play]{\"Play"}.
+After that you can \hlink[rendition:video]{pause}.
+\endtt
+
+\label[user:transitions]
+\sec Transitions and other page attributes
+
+In PDF there are a few settings that can be set as {\em page attributes}. This
+means that they apply only to said page. For setting these page attributes,
+there are two options:
+
+\begitems
+* value for \"current page" (or rather the page where the command appears),
+* default value used if \"current page" value is not set.
+\enditems
+
+While this package contains mechanism to handle all page attributes, not that
+many are useful for end user. The interesting ones remaining are:
+
+\begitems
+* Transitions and page durations. When page has the transition attribute any
+jump to this page will display the requested animation (customized by the
+corresponding parameters). Page duration is the time before PDF viewer will auto
+advance to the next page. \^`\transition``[<transition spec>]` sets transition
+for the \"current page", \^`\transitions` sets the default.
+`<transition spec>` has three parts:\nl\indent
+`<animation type>:<duration>:<raw PDF attributes>`\nl
+\noindent <animation type> is one of `Split`, `Blinds`, `Box`, `Wipe`,
+`Dissolve`, `Glitter`, `Fly`, `Push`, `Cover`, `Uncover` and `Fade`, or the
+special value `R` which essentially means no animation and instantaneous
+transition (regardless of the set duration of transition). <duration> is the
+duration of transition in seconds (integer or decimal number).
+<raw PDF attributes> may be used to customize
+the animations (for example `/M` can set the direction of motion of `Split`,
+`Box` and `Fly`, e.g. `/M /I` for inward motion). For the raw PDF attributes
+refer to the standard
+itself\fnote{\url{https://wwwimages2.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/PDF32000_2008.pdf\#G11.2295795}}.
+`:<raw PDF attributes>` or even `:<duration>:<raw PDF attributes>` may be omitted.
+Default values specified by PDF standard will be used in that case (1 second
+duration and default values for all attributes). Page durations can be set
+either using \^`\defaultpageduration``[<duration>]` or
+\^`\pageduration``[<duration>]`, where duration is in seconds (default is no auto
+advancement, i.e. $\infty$).
+Examples:
+
+\begtt
+% unless stated otherwise all pages will have Wipe animation
+% with 1 second duration
+\transitions[Wipe:1]
+
+% but this page has a 1 second Fade animation
+\transition[Fade]
+
+\pg+ % (if using \slides)
+
+% and this page has 3 second Split animation
+% with vertical direction and inward motion
+\transition[Split:3:/Dm /V /M /I]
+\endtt
+
+Note that transitions are only displayed when in {\em full-screen mode}. You
+can use \~`\fullscreen` to have the document automatically open in full-screen
+mode.
+
+* Additional actions. It is possible to define actions which will respond to
+page events: page open (`/O`) and page close (`/C`). They can be set using
+\^`\defaultpageactions``[<additional actions spec>]` (the default for all pages) and
+\^`\pageactions``[<additional actions spec>]` (current page override).
+<additional actions spec> consists of braced pairs of \"event" (O or C in this
+case) and <action spec>. Example:
+
+\begtt
+\pageactions[
+ {O} {js:{app.alert("Page open, random = " + getRandomNumber());}}
+ {C} {js:{app.alert("Page close!");}}
+]
+\endtt
+
+\enditems
+
+\sec Attachments
+
+Every file embedded into a PDF file may optionally be presented in the user
+interface as an embedded file. This allows readers of the document to save or
+open the file.
+
+PDF allows two ways of presenting attachments -- using annotations (the
+attachments is represented by a rectangular icon on a page) or global array of
+attachments (attachments are visible in PDF viewers toolbar). The first method
+is intended more for document reviewers than for primary insertion. Hence this
+package supports only the second type.
+
+You may add an embedded file to the global attachments array using
+\^`\attach``[<name>]`. As usual, name is either a <name> defined with
+`\filedef` or alternatively a path to file which will be embedded (and
+`\filedef`d) automatically. It is not possible to `\attach` files referenced by
+path or URL.
+
+If you want to automatically display toolbar with embedded files, consider
+using `\showattached` (see section~\ref[user:document-view]).
+
+\label[user:document-view]
+\sec Document view
+
+You can choose what is shown when document is opened with commands:
+
+\begitems
+* \^`\fullscreen` (the document is opened in full-screen mode),
+* \^`\showoutlines` (show bookmarks/outlines toolbar)
+* \^`\showattached` (show attachments in toolbar)
+\enditems
+
+The commands are mutually exclusive and only the first appearing one will be respected.
+
+You can set request two page view (odd pages on the right) using
+\^`\duplexdisplay`. It is useful for more natural display of double sided
+documents. Because it may not be desirable to automatically apply this, it is
+independent of `\margins`.
+
+\chap Technical documentation
+
+\printdoctail pdfextra.opm
+\printdoc pdfextra.opm
+
+\bye
diff --git a/macros/luatex/optex/pdfextra/pdfextra.opm b/macros/luatex/optex/pdfextra/pdfextra.opm
new file mode 100644
index 0000000000..b7cf70a981
--- /dev/null
+++ b/macros/luatex/optex/pdfextra/pdfextra.opm
@@ -0,0 +1,1702 @@
+% vim: tw=80
+\_def\_pdfextra_version{0.1}
+\_codedecl \RM {Extra PDF features (v\_pdfextra_version)}
+ \_doc
+ \sec Package initialization
+
+ We are in the \OpTeX/ package namespace. A couple of shortcuts are defined
+ here: \`\.isdefined`, \`\.trycs`, \`\.cs` \`\.slet`, \`\.slet`, \`\.sdef` and
+ \`\.xdef`. They all hard code the package name, because we already have too
+ many levels of indirection.
+ \_cod
+
+\_namespace{pdfextra}
+
+\_def\.isdefined#1{\_isdefined{_pdfextra_#1}}
+\_def\.trycs#1{\_trycs{_pdfextra_#1}}
+\_def\.cs#1{\_cs{_pdfextra_#1}}
+\_def\.slet#1#2{\_slet{_pdfextra_#1}{_pdfextra_#2}}
+\_def\.sdef#1{\_sdef{_pdfextra_#1}}
+\_def\.sxdef#1{\_sxdef{_pdfextra_#1}}
+
+ \_doc
+ \sec Helper macros
+ The macros here are just helpers for the macros to follow. They are not
+ useful generally, but proved useful in the expandable context of writing to
+ PDF files.
+
+ Already the first one limits the use to \LuaTeX/ (but who needs other engines
+ anyways :). \`\.emptyor`<possibly empty text><text to use when first argument is
+ nonempty> checks whether the first argument is empty, if not it expands the
+ second argument which can use the text from the first argument with
+ \`\.nonempty`. \`\.attrorempty`<attribute name><value> builds upon the first
+ one and is really useful for PDF dictionaries, when we don't want to write an
+ attribute without a value (a default specified by standard will be used instead).
+ \_cod
+
+\_def\.emptyor#1#2{%
+ \_immediateassignment\_edef\.nonempty{#1}%
+ \_ifx\.nonempty\_empty\_else #2\_fi
+}
+\_def\.attrorempty#1#2{\.emptyor{#2}{/#1 \.nonempty}}
+
+ \_doc
+ There is a dillema for handling colors. While typesetting it is possible to
+ use greyscale, CMYK or RGB colors. But there are contexts where it is
+ possible to only use RGB colors. We want to provide the user with two
+ possibilities of specifying colors:
+
+ \begitems
+ * RGB color using PDF triplet (e.g. `1 0 0`),
+ * \OpTeX/ color using control sequence (e.g. `\Blue`)
+ \enditems
+
+ Both are handled by \`\.colortorgbdef`<cs><color specification>, which
+ defines <cs> to the corresponding PDF RGB triplet. The indirection with
+ defining a macro is because we want to use the processed color within
+ expansion only contexts where grouping is not possible.
+ \_cod
+
+\_def\.colortorgbdef#1#2{\_bgroup
+ \_def\_setrgbcolor##1{##1}%
+ \_def\_setcmykcolor##1{\_cmyktorgb ##1 ;}%
+ \_def\_setgreycolor##1{##1 ##1 ##1}%
+ \_xdef#1{#2}%
+ \_egroup
+}
+
+ \_doc
+ \`\.xaddto``\macro`{<text>} is a natural extension of \OpTeX's `\addto` that
+ expands <text> and is global.
+ \_cod
+
+\_def\.xaddto#1#2{\_edef\.tmp{#2}%
+ \_global\_ea\_addto\_ea#1\_ea{\.tmp}%
+}
+
+ \_doc
+ This package defines a few commands in the form
+ `\macro[<name>][<optional arguments>]{<text>}`. To make it possible to omit
+ the `[<optional arguments>]` \`\.secondoptdef` is defined.
+
+ `\.secondoptdef\<macro><parameters>{<body>}`
+ defines `\macro` with first mandatory argument in brackets (saved to
+ \`\.name`). Second optional argument in brackets is scanned using helper
+ macro defined with `\optdef` and is saved to `\_opt` token list). Additional
+ <parameters> can be specified as with `\optdef` (numbered from `#1`).
+ \_cod
+
+\_def\.secondoptdef#1{%
+ \_def#1[##1]{\_def\.name{##1}\.cs{sopt:\_string#1}}%
+ \_ea\_optdef\_csname _pdfextra_sopt:\_string#1\_endcsname[]%
+}
+
+ \_doc
+ When processing comma separated lists sometimes it is needed to ignore the
+ remaining text. For this we use \`\.untilend` macro which ignores everything
+ up to dummy \`\.end`. This is analogous to \OpTeX/'s `\_finbody` used for the
+ same purpose. Sometimes `\.end` is used as sentinel and compared in `\ifx`
+ tests, hence we define it to a unique value.
+ \_cod
+
+\_def\.untilend#1\.end{}
+\_def\.end{_pdfextra_end}
+
+ \_doc
+ For various uses it is necessary to know the number of page where something
+ happens. This has to be handled asynchronously with `\write`. Here we use
+ \OpTeX/ specific `.ref` file and associated macros, but this could be
+ replaced as long as the same interface is exposed.
+
+ \`\.setpageof`<name> writes \`\.Xpageof`<name> to the `.ref` file. In the next
+ \TeX/ run `\.Xpageof` finds out the page number (`\gpageno`) from \OpTeX/'s
+ `\_currpage` and saves it so that \`\.pageof`<name> can retrieve it. In the
+ first run we can't be sure of the page where the content will end up. As a
+ rough estimate we take the current page~-- this actually works well for
+ slides where page breaks are manual.
+
+ `\.pageof` is expandable, but we want to let the user know, that the document
+ needs to be processed twice. Therefore we use \LuaTeX's
+ `\immediateassignment` to increment the counter of unresolved references.
+
+ When `.ref` file is read along with the defintion of `\.Xpageof` this package
+ has not been loaded yet. Hence we can't use namespaced variants of
+ `\.isdefined`, etc.
+ \_cod
+
+\_refdecl{%
+ \_def\.Xpageof#1{\_isdefined{_pdfextra_pageof:#1}\_iffalse
+ \_sxdef{_pdfextra_pageof:#1}{\_ea\_ignoresecond\_currpage}\_fi
+ }%
+}
+
+\_def\.setpageof#1{\_openref \_ewref\.Xpageof{{#1}}}
+
+\_def\.pageof#1{%
+ \.trycs{pageof:#1}{%
+ \_immediateassignment\_incr\_unresolvedrefs
+ \_the\_numexpr\_gpageno+1\_relax % best effort = current page num
+ }%
+}
+
+ \_doc
+ \label[files]
+ \sec Handling of files
+
+ Handling of files is a big topic of this package. Files are everywhere~--
+ files containing multimedia, JavaScript script files, attachments, externally
+ referred files\dots Therefore a more sophisticated mechanism for handling
+ files is needed. The mechanism introduced in this section handles all three
+ cases of a {\em file specification}:
+
+ \begitems
+ * files embedded in the PDF (\"e", embedded file),
+ * files determined by path (\"x", external file),
+ * files determined by URL (\"u", url file).
+ \enditems
+
+ Although ideally all three would be interchangible this is not always the
+ case, because e.g. some media files must be embedded and linking to external
+ resources does not work with embedded files.
+
+ In most cases there are two many names and other associated values involved:
+ \begitems
+ * Some kind of a \"friendly" name. This one is sometimes shown by PDF viewers.
+ * The real name of the file. Also shown but in different contexts.
+ * The path or URL used to determine the file.
+ * MIME type of the file.
+ \enditems
+
+ For example when talking about \OpTeX/'s documentation we might have a
+ friendly name of \"opdoc", file name of \"`optex-doc.pdf`", URL of
+ \"\url{http://petr.olsak.net/ftp/olsak/optex/optex-doc.pdf}" and MIME type of
+ \"application/pdf". Different subset of them is required in different
+ contexts, but the user should only have to specify the friendly name (by
+ which they will refer to the file) and the path/URL of the file. The rest
+ will be deduced. The friendly name is used as a handle and {\em is usable}
+ in all places where file specification is required (although it may not
+ produce conforming output, see above).
+
+ In this two step process~-- definition and (re)use~-- we introduce a command
+ for defining files: \`\filedef``/<type> [<friendly name>]{<path or URL>}`. The
+ macro itself does general definitions and dispatches the type dependant work
+ to other macros in the form `_filedef:<type>`.
+ \_cod
+
+\_def\.filedef/#1#2[#3]#4{%
+ \.sxdef{filename:#3}{(\.filename{#4})}%
+ \_edef\.tmp{\.exttomime{\.fileext{#4}}}%
+ \_ifx\.tmp\_empty
+ \_opwarning{MIME type of '#4' unknown, using '\.defaultmimetype'}%
+ \_edef\.tmp{\.defaultmimetype}%
+ \_fi
+ \.sxdef{filemime:#3}{\.tmp}%
+ \.cs{filedef:#1}{#3}{#4}%
+}
+\_nspublic \filedef ;
+
+ \_doc
+ Types \"e", \"x", \"u" are predefined, anything else would essentialy be a
+ variant of these.
+
+ External file (\"x") is determined only by path.
+ \_cod
+
+\.sdef{filedef:x}#1#2{%
+ \.slet{filespec:#1}{filename:#1}%
+}
+
+ \_doc
+ URL file (\"u") is determined by URL. Using all sorts of characters is
+ allowed by using `\_detokenize`. This time it is necessary to create full
+ {\em file specification}~-- a dictionary, where the \"file system" is URL.
+ \_cod
+
+\.sdef{filedef:u}#1#2{%
+ \.sdef{filespec:#1}{<</FS /URL /F (\_detokenize{#2})>>}%
+}
+
+ \_doc
+ Embedded files (\"e") are the most interesting ones. For further use (e.g.
+ for displaying the embedded files as attachments) MIME type is required. It
+ is saved in the stream as a `\Subtype`, encoded as a PDF name (e.g.
+ `/video#2Fmp4`). The embedded file stream must be wrapped in a full {\em file
+ specification}, which has the `/EF` (\"embedded file") entry. Also the
+ friendly name is used for some purpose by PDF viewers, so it set in `/Desc`
+ (description).
+ \_cod
+
+\.sdef{filedef:e}#1#2{%
+ \_edef\.tmp{\.cs{filemime:#1}}%
+ \_isfile{#2}\_iffalse
+ \_opwarning{file '#2' not found}%
+ \_fi
+ \_pdfobj stream
+ attr{/Type /EmbeddedFile /Subtype \_ea\.mimetoname\_ea[\.tmp]}
+ file {#2}%
+ \_pdfrefobj\_pdflastobj
+ \.sxdef{filestream:#1}{\_the\_pdflastobj\_space 0 R}%
+ \_pdfobj {<</Type /Filespec
+ /F \.cs{filename:#1}
+ /Desc (#1)
+ /EF << /F \_the\_pdflastobj \_space 0 R >>%
+ >>}%
+ \_pdfrefobj\_pdflastobj
+ \.sxdef{filespec:#1}{\_the\_pdflastobj\_space 0 R}%
+}
+
+ \_doc
+ Now the less interesting part~-- determining the file names from paths and
+ determining MIME types. The file name is the part after the last \"`/`" (if
+ any). The file extension is the part after last \"`.`" (if any).
+ \_cod
+
+\_def\.filename#1{\_ea\.filenameA#1/\.end}
+\_def\.filenameA#1/#2{\_ifx\.end#2#1\_else\_afterfi{\.filenameA#2}\_fi}
+
+\_def\.fileext#1{\_ea\.fileextA#1.\.end}
+\_def\.fileextA#1.#2{\_ifx\.end#2#1\_else\_afterfi{\.fileextA#2}\_fi}
+
+ \_doc
+ MIME type is determined from file extension (e.g. `mp4` is \"video/mp4"). For
+ mapping of file extensions to MIME types we abuse \TeX/'s hash table which
+ gets populated with \"known MIME types". This necessarily means that the
+ database is incomplete. Users can define their own additional mappings, or
+ they can contribute generally useful ones to this package.
+
+ The default MIME type (used for unknown file extensions) is
+ \"application/octet-stream"~-- binary data.
+
+ The uninteresting MIME type database itself is at the very end (\ref[mime]).
+ \_cod
+
+\_def\.mimetoname[#1/#2]{/#1\_csstring\#2F#2}
+
+\_def\.defaultmimetype{application/octet-stream}
+\_def\.exttomime#1{\.trycs{mimetype:#1}{}}
+
+ \_doc
+ Here we define an \OpTeX/ style \"is-macro" that checks whether the file has
+ already been defined~-- \`\.isfiledefined``{<name>}\iftrue` (or `\iffalse`).
+ The case where the file has not
+ been defined using `\filedef` can be handled in a lot of ways. As a default
+ we interpret <name> as path and try to embed it. Because the path from <name>
+ is used as the \"friendly name" the file will be embedded only once even when
+ requested more times.
+ \_cod
+
+\_def\.isfiledefined#1#2{\.isdefined{filespec:#1}\_iftrue\_else
+ \_afterfi{\.fileundefined{#1}}\_fi#2%
+}
+
+\_def\.fileundefined#1{\_isfile{#1}\_iftrue\.filedef/e[#1]{#1}\_else
+ \_opwarning{file '#1' not found, ignored}\_ea\_unless\_fi
+}
+
+% strict requirement of preceeding `\filedef` can be set like this:
+%\_def\.fileundefined#1{\_opwarning{file '#1' is not defined, ignored}\_unless}
+
+ \_doc
+ \label[actions]
+ \sec PDF actions
+
+ The core of interactivity in PDF are actions. They are all initialy handled
+ by \`\pdfaction``[<action spec>]`. <action spec> is a comma separated list of
+ `<type>:<arguments>`. Leading spaces in the elements of the list are ignored
+ using undelimited-delimited argument pair trick.
+
+ An invocation could look like this:
+
+ \begtt
+ \pdfaction[
+ js:{app.alert("Yay JavaScript, going to page 5");},
+ ilink:pg:5,
+ transition:Wipe,
+ ]
+ \endtt
+
+ This is why we have to be very careful when loading the contents between `[]`
+ to arguments. In particular, we can't split immediatly using `[#1:#2]`,
+ because this would discard the braces guarding the comma in the JavaScript
+ code. However we also need to find out the {\em type} of action which is
+ taken as a type of the first action (`js` in this case).
+ \`\.pdfactiontype``[<action spec>]` does this~-- we don't mind that there the
+ braces are lost.
+
+ `\pdfaction` processes the list, to create a chain of actions using `/Next`
+ field. The handling of each action type is up to macro
+ `\_pdfextra_<type>action`, which receives `[<type>:<arguments>]`. Because of
+ this a single type handler can handle multiple different actions, as is the
+ case with `\.ilinkaction` which is the fallback for unknown action types.
+ \_cod
+
+\_def\.pdfaction[#1#2]{\.pdfactionA#1#2,\.stop\.end}
+\_def\.pdfactionA#1,#2#3\.end{%
+ <<%
+ \.pdfactionB[#1]%
+ % next action
+ \_ifx\.stop#3\_else\_space
+ /Next \_afterfi{\.pdfactionA#2#3\.end} % intentional space
+ \_fi
+ >>
+}
+\_def\.pdfactionB[#1:#2]{\.trycs{#1action}{\_ea\.ilinkaction}[#1:#2]}
+\_nspublic \pdfaction ;
+
+\_def\.pdfactiontype[#1:#2]{#1}
+
+ \_doc
+ \label[actions-additional]
+ \secc Additional actions
+ Some PDF objects, like pages and some annotations, can also have \"additional
+ actions". These are actions which will be executed when an event happens~--
+ like page getting opened for `/O` action in page's additonal actions or `/PO`
+ in annotation's additional actions. For constructing these additional actions
+ we define a helper macro \`\.pdfaactions`. The use is as something follows:
+ \begtt \catcode`<=13 \adef|{\csstring<}
+ /AA || \.pdfaactions{ {O} {<action spec 1>} {C} {<action spec 2>} } >>
+ \endtt
+ To produce something this:
+ \begtt \catcode`<=13 \adef|{\csstring<}
+ /AA || /O ||<action 1>>> /C ||<action 2>>> >>
+ \endtt
+ \_cod
+
+\_def\.pdfaactions#1{<<\.pdfaactionsA #1\.end\.end>>}
+\_def\.pdfaactionsA#1#2{\_ifx\.end#1\_else /#1 \_ea\.pdfaction\_ea[#2]\_ea\.pdfaactionsA\_fi}
+
+ \_doc
+ \label[actions-link]
+ \secc Link annotations
+ The main use of actions~-- annotations of `/Subtype /Link`.
+ Annotation of this type creates an active rectangular area on the page that
+ executes a PDF action (or chain of them in the general case).
+ \`\hlinkactive``[<action spec>]<text>` is a natural extension of \OpTeX/'s
+ `\linkactive`, that supports the classic \"jump" actions of types `ref`,
+ `bib`, etc. But also other types of actions. No distinction between
+ \"internal" (`\ilink`) and external (`\ulink`) links is made. The mechanism is
+ completely generic.
+
+ The `\pdfstartlink`/`\pdfendlink` primitives are used to denote the part of
+ the page where <text> appears as active. \LuaTeX/ will then handle even the
+ situations where <text> gets broken across multiple lines (by creating
+ multiple rectangular annotations to cover all `\hbox`es).
+ \_cod
+
+\_def\.hlinkactive[#1]#2{\_bgroup\_def\#{\_csstring\#}%
+ \_edef\.type{\.pdfactiontype[#1]}%
+ \_quitvmode\_pdfstartlink \.linkdimens
+ attr{\_pdfborder{\.type}}%
+ user{/Subtype /Link /A \.pdfaction[#1]}\_relax
+ \_localcolor\.linkcolor{\.type}#2\_pdfendlink\_egroup
+}
+
+ \_doc
+ `\hlinkactive` itself is dormant before `\hyperlinks` occurs. Until then, a
+ dummy \`\hlink` is used. \OpTeX/'s `\hyperlinks` is extended to hook `\hlink`
+ activation. The colors of internal/external links are remembered for
+ compatibility with \OpTeX/.
+ \_cod
+
+\_def\.hlink[#1]#2{\_quitvmode{#2}}
+\_nspublic \hlink ;
+
+\_let\.oldhyperlinks\_hyperlinks
+\_def\_hyperlinks#1#2{%
+ \.oldhyperlinks#1#2
+ \_let\.ilinkcolor=#1%
+ \_let\.elinkcolor=#2%
+ \_let\.hlink=\.hlinkactive
+ \_let\hlink=\.hlink
+}
+\_public \hyperlinks ;
+
+ \_doc
+ Two customizations of `\hlinks` are possible:
+ \begitems
+ * Dimensions of rectangular areas created by
+ `\pdfstartlink`/`\pdfendlink`. This is done using \`\.linkdimens`
+ (analogous to \OpTeX's `\linkdimens`). Dimensions that are unset are taken
+ from the respective `\hbox`es. \`\lininglinks` sets the dimensions for
+ running text~-- it covers all space of a line using `\baselineskip`.
+ \`\nolininglinks` sets no dimensions, this is useful for buttons, that may
+ have larger height/depth than a line.
+ * The color is determined from the type of link (that is the first action in
+ <action spec>) by checking `\_<type>linkcolor` (compatible with \OpTeX/) or
+ `\_pdfextra_<type>linkcolor`.
+ As a fallback \`\.ilinkcolor` is used (set by `\hyperlinks`).
+ \enditems
+ \_cod
+
+\_def\.lininglinks{%
+ \_def\.linkdimens{height.75\_baselineskip depth.25\_baselineskip}%
+}
+\_def\.nolininglinks{\_def\.linkdimens{}}
+\.lininglinks
+
+\_nspublic \lininglinks \nolininglinks ;
+
+\_def\.linkcolor#1{\_trycs{_#1linkcolor}{\.trycs{#1linkcolor}{\.ilinkcolor}}}
+\_def\.ilinkcolor{}
+
+ \_doc
+ \secc Open action
+ The document itself has one action defined in the document catalog. It is
+ called `/OpenAction`. We allow the user to set it using the familiar
+ <action spec> syntax with the command \`\openaction``[<action spec>]`.
+
+ Internally we could directly set it by appending to the catalog
+ using the primitive `\pdfcatalog`, but \LuaTeX/ (pdf\TeX/ really) allows
+ setting the action with special syntax. This has the benefit that it is not
+ allowed to set the action more than once.
+ \_cod
+
+\_def\.openaction[#1]{\_pdfcatalog{} openaction user{\.pdfaction[#1]}\_relax}
+\_nspublic \openaction ;
+
+ \_doc
+ \label[actions-jump]
+ \secc Jump actions
+
+ These are the most typical actions. Even \LuaTeX/ itself handles them,
+ although we don't use the possibility for maintaining generality. There are a
+ few types of jump actions:
+ \begitems
+ * `/GoTo` actions are the classic internal links to named destinations in the
+ PDF file (created by `\pdfdest` primitive or \OpTeX/'s `\dest`). The
+ destination names include also the type of internal link (e.g.
+ `ref:section1`). They are handled by \`\.ilinkaction``[<type>:<name>]`.
+ * `/URI` actions which are in most cases used as \"goto URL" actions. These
+ are not that useful directly, because special characters should be handled
+ before this actions is used (like with `\url`). The low level use is
+ \`\.urlaction``[url:<url>]`.
+ * \"Goto remote" actions, which can jump to a destination in another PDF file~--
+ either determined by name, or by page number. The external files are
+ expected to be defined by `\filedef` (but not the embedded variant). The
+ use is either \`\.extrefaction``[extref:<name>:<named destination>]` for
+ links to named destination or \`\.extpgrefaction``[extpgref:<name>:<page number>]`
+ for page destinations. Customization is possible with \`\.extrefextra`, by
+ default opening in a new windows is requested.
+ \enditems
+ \_cod
+
+\_def\.ilinkaction[#1:#2]{/S /GoTo /D (#1:#2)}
+
+\_def\.urlaction[#1:#2]{/S /URI /URI (#2)}
+
+\_def\.extrefaction[#1:#2:#3]{/S /GoToR
+ /F \.cs{filespec:#2}
+ /D (#3)
+ \.extrefextra
+}
+\_def\.extpgrefaction[#1:#2:#3]{/S /GoToR
+ /F \.cs{filespec:#2}
+ /D [\_the\_numexpr#3-1\_relax\_space /Fit]
+ \.extrefextra
+}
+
+\_def\.extrefextra{/NewWindow true}
+
+
+ \_doc
+ Transition action is not really a jump action in of itself, but is only
+ useful when chained after jump actions, so we define it here. Transitions
+ (as page attributes) are handled more thoroughly in section~\ref[transitions].
+
+ The use would look something like:\nl
+ \`\.transitionaction`%
+ `[transition:<animation type>:<duration>:<raw PDF attributes>]`, where all fields
+ omitted from right take the default values.
+ \_cod
+
+\_def\.transitionaction[#1:#2]{/S /Trans \.attrorempty{Trans}{\.maketrans[#2]}}
+
+ \_doc
+ \secc Named actions
+
+ User can request arbitrary \"named" action with
+ \`\.namedaction``[named:<name>]`. See user documentation for details.
+ \_cod
+
+\_def\.namedaction[#1:#2]{/S /Named /N /#2}
+
+ \_doc
+ \secc JavaScript actions
+
+ JavaScript actions have two forms, either \`\.jsaction``[js:<name>]` or
+ `\.jsaction``[js:<script>]`. The first variant uses contents of `\filedef`'d
+ <name>, the second one uses <script> directly. There is no special catcode
+ handling.
+
+ \_cod
+
+\_def\.jsaction[#1:#2]{/S /JavaScript
+ /JS \_ifcsname _pdfextra_filestream:#2\_endcsname \_lastnamedcs \_else
+ (#2)
+ \_fi
+}
+
+ \_doc
+ \sec Page attributes
+
+ PDF represents pages as dictionaries. The dictionaries get generated by \LuaTeX/,
+ which fills in some attributes {\em attributes} (like `/Content` with
+ contents of the page and `/Annots` with array of annotations). We can add
+ more using `\pdfpageattr` primitive token list register. While not that many
+ are generally useful, there are a few interesting ones. For example
+ transitions can be set using page attributes, or we might want to set
+ additional actions (`/AA`) to listen for page events.
+
+ While the so called \"page objects" are in a tree structure (for fast lookup),
+ only the leaves are real \"pages". PDF allows some attributes to be inherited
+ from parent page objects, but not all of them and certainly not those we are
+ interested in.
+
+ The mechanism introduced in this section is optional, because it takes
+ complete control over `\pdfpageattr`. It gets activated when
+ \`\initpageattributes` is first used (which happens automatically for some
+ functionality exposed by this package), but may be activated by the user for
+ any other purpose. Only attributes listed in \`\pageattributes` are
+ processed.
+
+ We set the attributes anew for each page, by hooking into \OpTeX/'s
+ `\_begoutput`. Because `\pdfpageattr` token list doesn't get expanded before
+ written out to PDF, we expand it using the assignment in `\edef` trick. The
+ token list gets expanded, but the assignment is not made until it reaches
+ main processor when the temporary control sequence gets expanded.
+ \_cod
+
+% pdfpagattr managament (default for all pages vs current page override)
+\_def\.pageattributes{{Trans}{Dur}{Rotate}{AA}}
+\_def\.initpageattributes{%
+ % add hook for setting primitive \pdfpageattr
+ \_addto\_begoutput{\_edef\.tmp{\_pdfpageattr={\.pdfpageattributes}}\.tmp}%
+ % no need to do this twice
+ \_let\.initpageattributes=\_relax
+}
+\_nspublic \pageattributes \initpageattributes ;
+
+ \_doc
+ The user interface we want to expose has two parts:
+ \begitems
+ * setting the page attribute for just this one page (\`\.pdfcurrentpageattr`),
+ * setting the default attribute (used when current page value is not set)
+ (\`\.pdfdefaultpageattr`).
+ \enditems
+
+ The first one of course brings in the typical \TeX/ problem of knowing the
+ page where something occurs. As always, the page number contained in
+ `\gpageno` during processing of said content may of course not actually be
+ the number of the page where the content ends up! Hence, we need to note the
+ page number with a delayed write, using `\.setpageof` and later `\.pageof`.
+ The different settings of page attributes should have distinct names, we use
+ the \`\.pageattrcount` counter for this.
+ \_cod
+
+\_newcount\.pageattrcount
+\_def\.pdfcurrentpageattr#1#2{\.initpageattributes
+ \_incr\.pageattrcount
+ \.setpageof{pageattr:\_the\.pageattrcount}%
+ \.sxdef{pdfpgattr:\.pageof{pageattr:\_the\.pageattrcount}:#1}{#2}%
+}
+\_def\.pdfdefaultpageattr#1#2{\.initpageattributes
+ \.sxdef{pdfpgattr:#1}{#2}%
+}
+
+ \_doc
+ Finally, the macro \`\pdfpageattributes` takes care of setting generating the
+ contents of `\pdfpageattr`. For each attribute in `\pageattributes` it first
+ checks its current page value, only then the default value. If neither is
+ set, nothing is added.
+ \_cod
+
+\_def\.pdfpageattributes{\_ea\.pdfpageattributesA\.pageattributes\.end}
+\_def\.pdfpageattributesA#1{\_ifx\.end#1\_else
+ % use current page override or "default"
+ % don't emit anything if the value is empty
+ \.attrorempty{#1}{%
+ \.trycs{pdfpgattr:\_the\_gpageno:#1}{\.trycs{pdfpgattr:#1}{}}%
+ }%
+ \_ea\.pdfpageattributesA\_fi
+}
+
+ \_doc
+ Each attributes then has two switches for the respective default and current
+ values. For defining a few of them a helper is introduced:\nl\indent
+ \`\.pdfpageattributesetters`` <attribute> \<default setter> \<current setter> {<value>}`,
+ \nl
+ where <attribute> is name of the attribute without the slash
+ (e.g. `MediaBox`), the two control sequences name the future user setters,
+ which will take single argument in brackets
+ (e.g. `\mediabox` and `\thismediabox`) and the <value> can use the
+ argument.
+ \_cod
+
+\_def\.pdfpageattributesetters#1 #2#3#4{%
+ \.sdef{\_csstring#2}[##1]{\.pdfdefaultpageattr{#1}{#4}}%
+ \.sdef{\_csstring#3}[##1]{\.pdfcurrentpageattr{#1}{#4}}%
+ \_nspublic #2 #3 ;
+}
+
+ \_doc
+ Some of the useful attributes are `/Rotate`, which rotates the pages visually
+ (can be set with \`\defaultpagerotate` and \`\pagerotate`), and the additional
+ actions (`/AA`, see section~\ref[actions-additional], set using
+ \`\defaultpageactions` \`\pageactions`).
+ \_cod
+
+\.pdfpageattributesetters Rotate \defaultpagerotate \pagerotate {#1}
+
+\.pdfpageattributesetters AA \defaultpageactions \pageactions {\.pdfaactions{#1}}
+
+ \_doc
+ \label[transitions]
+ \secc Transitions, page durations
+
+ There are predefined types of transitions, like `/Wipe`, `/Box`, `/Split`,
+ etc. Most have other customizible attributes~-- usually directions set in
+ different ways depending on the animation type at hand, but the most
+ important attribute is the duration of the animation. Parsing friendly user
+ notation in the form of
+ `[<animation type>:<duration>:<other raw attributes>]`, where fields from the
+ right may be omitted to produce the default value, is handled by
+ \`\.maketrans`. This macro is also used by transition actions
+ (see~\ref[actions-jump]). The defaults are simply those defined by PDF
+ standard (no transition, 1 second duration and the respective default
+ directions).
+ \_cod
+
+\_def\.maketrans[#1]{\.maketransA#1:::\.end}
+\_def\.maketransA#1:#2:#3:#4\.end{%
+ \.emptyor{#1}{<</S /\.nonempty \.attrorempty{D}{#2} #3>>}
+}
+
+ \_doc
+ The attribute setters for transitions (\`\transitions`, \`\transition`) are a
+ simple wrappers. Similiar is the
+ setting of page duration in seconds after which PDF viewer automatically
+ advances to the next page (\`\defaultpageduration`, \`\pageduration`).
+ \_cod
+
+\.pdfpageattributesetters Trans \transitions \transition {\.maketrans[#1]}
+
+\.pdfpageattributesetters Dur \defaultpageduration \pageduration {#1}
+
+ \_doc
+ \sec Attachments and document level JavaScript
+
+ These don't have any last place to be in, so they are documented separately,
+ here. Attaching files using `/FileAttachment` annotations:
+ \begitems \style n
+ * is intended more towards viewers of the document for extra additions and
+ * doesn't work in the viewers as well as one would like.
+ \enditems
+
+ That is why instead embed files using normal `\filedef` and then allow them
+ to be added to the document level `/EmbeddedFiles` entry, which means they
+ will be shown in the user interface by PDF viewers. `/EmbeddedFiles` is a
+ document level name tree (contained inside `/Names` entry of `/Catalog`) that
+ maps names of files to their objects. Although we simplify matters by
+ constructing more of an array.
+
+ What works very similiarly is document level JavaScript. It is a name tree
+ within `/JavaScript` field. It maps names of JavaScript actions to their
+ object numbers. The names aren't very useful, but the actions have their
+ purpose. They are executed in turn after the document is opened. Hence they
+ can be used to predefine JavaScript functions in the global context, to be
+ used later within actions explicitly activated by the user.
+
+ The user level commands are \`\attach``[<name>]` (to attach a previously
+ `\filedef`'d name with fallback to embedding now if it is a valid path) and
+ \`\dljavascript``[<name>]{<script>}` (adds action that executes <script>
+ after document is opened, <name> is more or less meaningless).
+
+ Internally both commands construct lists of what ends up in the resulting name
+ array, i.e. pairs {\visiblesp `(<name>) <object number> 0 R `}. Intermediate
+ macros \`\.embeddedfiles` and \`\.dljavascripts` are used for this.
+
+ In the case of file attachments, nothing happens if file is defined and not
+ found by the fallback.
+
+ \_cod
+
+% file attachment
+\_def\.embeddedfiles{}
+\_def\.attach[#1]{\.isfiledefined{\.name}\_iftrue
+ \.xaddto\.embeddedfiles{(#1) \.cs{filespec:#1} }\_fi
+}
+\_nspublic \attach ;
+
+\_def\.dljavascripts{}
+\_def\.dljavascript[#1]#2{%
+ \_immediate\_pdfobj{<< \.jsaction[js:{#2}] >>}%
+ \.xaddto\.dljavascripts{(#1) \_the\_pdflastobj \_space 0 R }%
+}
+\_nspublic \dljavascript ;
+
+ \_doc
+ Object creation, which is common to both, is handled by\nl\indent
+ \`\.makenamearray``<name tree name><name tree content>`.\nl
+ It doesn't do anything
+ for empty lists, to not bloat PDF files when this mechanism isn't used.
+ \_cod
+
+\_def\.makenamearray#1#2{\_ifx#2\_empty\_else
+ \_immediate\_pdfobj {<< /Names [ #2 ] >>}%
+ \_pdfnames{/#1 \_the\_pdflastobj \_space 0 R }\_fi
+}
+
+ \_doc
+ The lists themselves can only be written out to the PDF file at the very end
+ of the run. We use \OpTeX/'s `\_byehook`, which is run in `\_bye`. But `\bye`
+ itself may be predefined by the user, for example when using some of the
+ \OpTeX/ tricks. We just hope that user keeps `\_byehook`.
+ \_cod
+
+\_addto\_byehook{%
+ \.makenamearray{EmbeddedFiles}\.embeddedfiles
+ \.makenamearray{JavaScript}\.dljavascripts
+}
+
+ \_doc
+ \sec Viewer preferences
+
+ There are a few customizations of display (and other preferences of PDF
+ viewers) possible in the document catalog or its subdictionary
+ `/ViewerPreferences`. Most are not that useful. The interesting
+ ones are implemented by \`\fullscreen`, \`\showoutlines`, \`\showattached`.
+ They all set the page mode using \`\.setpagemode`. We don't handle respecting
+ the last setting (using \`\_byehook`). To prevent invalid PDF files, we set
+ `\.setpagemode` to `\_relax` after use.
+ \_cod
+
+\_def\.setpagemode#1{\_pdfcatalog{/PageMode /#1}\_glet\.setpagemode=\_relax}
+
+\_def\.fullscreen{\.setpagemode{FullScreen}}
+\_def\.showoutlines{\.setpagemode{UseOutlines}}
+\_def\.showattached{\.setpagemode{UseAttachments}}
+
+\_nspublic \fullscreen \showoutlines \showattached ;
+
+ \_doc
+ Only the setting of duplex / double sided printing and display is in the
+ nested dictionary. It is handled by \`\duplexdisplay`. The simplistic version
+ does not handle more attributes in `/ViewerPreferences`. We also set the
+ meaning to `\_relax` to prevent more (erroneous) uses.
+ \_cod
+
+\_def\.duplexdisplay{\_pdfcatalog{%
+ /PageLayout /TwoPageRight
+ /ViewerPreferences <<
+ /Duplex /DuplexFlipLongEdge
+ >>}%
+ \_glet\.duplexdisplay=\_relax
+}
+
+\_def\duplexdisplay{\.duplexdisplay}
+
+ \_doc
+ \sec Multimedia
+
+ PDF essentially allows insertion of different types of multimedia:
+ \begitems
+ * images,
+ * audio/video,
+ * 3D art.
+ \enditems
+
+ The first is pretty standard and handled normally by the engine (\LuaTeX).
+ Others are possible, but have to be done manually according to one of the
+ mechanisms specified by PDF standard:
+
+ \begitems
+ * Sounds (audio only),
+ * Movies (video and/or audio),
+ * Renditions (video and/or audio),
+ * 3D annotations (3D art),
+ * Rich Media (video and/or audio, 3D art)
+ \enditems
+
+ Sadly all these mechanisms are badly flawed, each in different ways. At least
+ we try to use the one that works in the viewers.
+
+ For audio/video \"Movies" are the simplest mechanism, but they have been
+ deprecated in PDF 2.0 and no longer work in Acrobat/Foxit (same for
+ \"Sounds").
+
+ \"Renditions" are complicated, partly dependant on JavaScript, but at least
+ supported by Acrobat, Foxit, Evince and Okular.
+
+ \"Rich media" annotations were designed for Flash. This use case is no longer possible
+ today, but the obscurities remain. They are unnecessiraly complicated, but can
+ be used without Flash too. Although the result is very plain for audio/video~--
+ no controls can be displayed and there are no associated actions.
+
+ \"3D annotations" are reasonably simple, but also flawed. They cannot reuse
+ embedded file as a source for 3D data. Hence it is better and more consistent
+ to use Rich Media for 3D annotations. It even has additional benefits, like
+ the possibility of using multiple initialization scripts.
+
+ In the end, this package exposes two user commands corresponding to two
+ mechanisms~-- first are Renditions (`\render`) for audio/video that works in most
+ browsers and Rich Media (`\RM`) mainly for 3D art, but also for audio/video
+ with limited possibilities.
+
+ Both mechanisms have an annotation at their core. Annotations is essentially
+ a rectangular area on page. The area corresponds to where the
+ multimedium will show up. After activating the area somehow (by user click,
+ or action) the multimedium will start playing. Before annotations the
+ rectangular area will show something that is called \"normal appearance".
+ This appearance is of type form XObject. Those are really similiar to pages~--
+ they have dimensions, contents made up of PDF graphics operators, \dots,
+ but they are reusable. Not that useful for annotations where we will need the
+ form only once, but nice anyways. pdf\TeX/ has primitives for creating them~--
+ `\pdfxform` and friends. They essentially do the same code like `\shipout`
+ does, but instead of page, they make this reusable object. One can then
+ either use this reusable object in another page/form, but we will indirectly
+ refer to it for the appearance.
+
+ Important aspect of annotations is that they are really only rectangular
+ areas on the page, but they are not really part of the page. They sort of sit
+ on another level and are not influenced by PDF graphic operators which make
+ the page. In pdf\TeX/ annotations are handled by {\em whatsit} nodes. While
+ most nodes map to known primitive \TeX/ concepts (like typeset characters,
+ boxes, rules, etc.) Whatsits are essentially commands for \TeX/ that are
+ delayed until page is being shipped out (written to PDF file). `\write`,
+ `\special`, and most pdf\TeX/ commands create whatsits. For annotationos this
+ is important, because this means that the engine only stores the information
+ about annotation that we specify, but creates it at due time, when it should
+ be written to PDF.
+
+ Because whatsits are essentially dimensionless and we want it to be a part of
+ normal \TeX/ typesetting material we create the annotation (whatsit) in
+ `\hbox`. This box will be otherwise empty, because the apperance of the
+ rectangular area is determined by the normal appearance field (`/N` in
+ `/AP`). We set the dimensions of the box to the dimensions of normal
+ appearance. Everything will line up nicely, because when processed, the
+ annotation will take dimensions from the box.
+
+ All of these concepts are implemented in:\nl\indent
+ \`\.boxedannot``[<type>:<name>]{<appearance>}{<special text>}{<annotation attributes>}`\nl
+ <type> is used to determine the annotation border (same principle as with
+ Link annotations, section~\ref[actions-link]), <name> will be used as the
+ annotation name (`/NM`), <special text> is used for influencing the
+ `\pdfannot` primitive, and <annotation attributes> will become the body of
+ the annotation.
+
+ \_cod
+
+\_def\.boxedannot[#1:#2]#3#4#5{%
+ \_setbox0=\_hbox{#3}\_setbox2=\_null
+ \_ht2=\_ht0 \_wd2=\_wd0 \_dp2=\_dp0
+ \_immediate\_pdfxform0
+ % box with annotation both stretching to dimensions of appearance
+ \_hbox{\.setpageof{#1:#2}%
+ \_pdfannot #4 {#5
+ /AP <</N \_the\_pdflastxform \_space 0 R>>
+ \_pdfborder{#1}
+ /NM (#2)
+ /Contents (#1 '#2')
+ }%
+ \_copy2
+ }%
+}
+
+ \_doc
+ There is another weird thing common to both multimedia mechanisms~--
+ the redefinition of `\.name`. It is initially
+ set by `\.secondoptdef` to <name>, but may be redefined by user supplied
+ `name` key-value parameter. This should be used when there are multiple uses
+ of the same content. Otherwise samely named annotations would be
+ indistinguishable both for PDF viewer and our handling of actions (which
+ would all refer only to the first instance).
+
+ To somewhat overcome this, trying to use the same <name> (within the same
+ type of annotaiton) will use dummy name from \`\.unnamedannotcount` (for
+ uniqueness). This means that <name> will always refer to the first instance.
+ \`\.redefinename` handles this.
+ \_cod
+
+\_newcount\.unnamedannotcount
+\_def\.redefinename#1{%
+ \.isdefined{#1:\.name}\_iftrue
+ \_incr\.unnamedannotcount
+ \_edef\.name{\_the\.unnamedannotcount}%
+ \_else
+ \_edef\.name{\_kv{name}}%
+ \_fi
+}
+
+ \_doc
+ \label[mm-renditions]
+ \secc Renditions (audio/video)
+
+ There are three main types of PDF objects involved in the Renditions
+ (\"Multimedia") mechanism:
+
+ \begitems
+ * Screen annotations define the area for playing multimedia.
+ * Rendition objects define the multimedia to play.
+ * Rendition actions associate Rendition objects with Screen annotations.
+ \enditems
+
+ You can theoretically arbitrarily mix and match rendition objects and screen
+ annotations by invoking different actions. In practice Evince and Okular do
+ really simplistic parsing and don't fully support the actions fully. But by
+ keeping it simple it is possible to make it work almost the same in all
+ viewers that support renditions.
+
+ Different sources of audio/video should be possible. In fact all three file
+ specifications (embedded files, files specified by URL/path) could work.
+ Again in practice embedded file is the safest bet, that works in all viewers
+ that support renditions.
+
+ The user facing command is:\nl\indent
+ \`\render``[<name>][<optional key-value paramers>]{<horizontal material>}`\nl\noindent
+ <name> is the friendly name set using `\filedef` or file path if <name> isn't
+ `\filedef`d and is to be embedded. The key-value parameters in brackets
+ can be entirely omitted. They can influence the playback (except for `controls`
+ most are not well supported). Default values are taken from
+ `\.renderdefaults`.
+
+ `\render` doesn't do anything (except print warning) if file <name> isn't
+ defined and <name> isn't a path to file that can be embedded.
+
+ The first PDF object it defines is Rendition, which specifies information
+ about the multimedium (name, file specification, MIME type and options from
+ key-value parameters). Some of the fields are in `/BE` (\"best effort")
+ dictionaries. This is due to the very general design of Renditions, which
+ theoretically allows the PDF viewer to choose from multiple Renditions if
+ they know they can't support some of the requested features. But that is not
+ much useful in practice, so we just don't complicate it.
+
+ Next defined object is Screen annotation, which complicates thing by
+ requiring (`/P`) reference to the page where the annotation is (handled by
+ `\setpageof` and `\pageof` pair). Important field is `/A` which specifies
+ actions that shall be executed when the screen area is clicked. We let the
+ user change the action, but the sensible default of starting to play the
+ multimedium is used (and this is the only thing that works in some viewers
+ anyways). Additional actions `/AA` may be used to react to events like mouse
+ over or page open/close~-- the most probable use case is autoplay on page
+ open, for which shortcut of \`\renditionautoplay` is defined.
+
+ The code is slightly complicated by the fact, that actions need to reference
+ the Rendition and Screen objects. In the case of the action contained in
+ Screen annotation this essentialy involves a self reference. Hence it is
+ needed to first reserve an object number and later use it for the annotation.
+ Because the object numbers may also be needed by actions defined later, we need
+ to save them to `\_pdfextra_rendition:<name>` and `\_pdfextra_screen:<name>`
+ respectively, but also define aliases with empty names, so users can easily
+ reference the latest rendition.
+
+ \_cod
+
+\.secondoptdef\.render#1{\.isfiledefined{\.name}\_iftrue\_bgroup
+ \_ea\_readkv\_ea{\_ea\.renderdefaults\_ea,\_the\_opt}%
+ \.colortorgbdef\.bgcolor{\_kv{background}}%
+ % rendition object ("media specifaction")
+ \_pdfobj {<</Type /Rendition
+ /S /MR
+ /N \.cs{filename:\.name}
+ /C <<%/Type /MediaClip
+ /S /MCD % subtype MediaClipData
+ /D \.cs{filespec:\.name}
+ /CT (\.cs{filemime:\.name})
+ /P << /TF (TEMPALWAYS) >> % allow creating temporary files
+ >>
+ /P <<%/Type /MediaPlayParams
+ /BE << /C \_kv{controls} /V \_kv{volume} /RC \_kv{repeat} >>
+ >>
+ /SP <<%/Type /MediaScreenParams
+ /BE << /O \_kv{opacity} /B [\.bgcolor] >>
+ >>
+ >>}\_pdfrefobj\_pdflastobj
+ \.redefinename{rendition}%
+ \.sxdef{rendition:\.name}{\_the\_pdflastobj}%
+ % screen annotation ("screen space allocation")
+ \_pdfannot reserveobjnum% "self" reference will be needed inside screen annot.
+ \.sxdef{screen:\.name}{\_the\_pdflastannot}%
+ % aliases to latest rendition/screen with empty name
+ \_global\.slet{rendition:}{rendition:\.name}%
+ \_global\.slet{screen:}{screen:\.name}%
+ \_edef\.action{\_kv{action}}\_edef\.aactions{\_kv{aactions}}%
+ \.boxedannot[rendition:\.name]{#1}{useobjnum\_the\_pdflastannot}{%
+ /Subtype /Screen
+ % reference to page of the rendition (\setpageof done by \.boxedannot)
+ % the spaces are weird, but \pdfpageref eats them
+ /P \_pdfpageref\.pageof{rendition:\.name} \_space 0 R
+ /A \_ea\.pdfaction\_ea[\.action]
+ /AA \_ea\.pdfaactions\_ea{\.aactions}
+ }%
+ \_egroup\_fi
+}
+\_nspublic \render ;
+
+ \_doc
+ Here are the defaults used for `\render`~-- \`\.renderdefaults`. Users can
+ redefine them all together or override as needed with key-value parameters.
+ The defaults correspond to values specified by PDF standard. Other values may
+ not be respected by all viewers.
+ \_cod
+
+\_def\.renderdefaults{%
+ name=\.name,
+ controls=false,
+ volume=100,
+ repeat=1,
+ opacity=1.0,
+ background=1 1 1,
+ action=rendition::play,
+ aactions={},
+}
+
+ \_doc
+ Most probable use of additional actions is to start auto-start playing of the
+ multimedium. For this purpose \`\renditionautoplay` is defined as a shorthand
+ for action to play the lastly defined rendition on page visible event.
+ \_cod
+
+\_def\.renditionautoplay{{PV}{rendition::play}}
+\_nspublic \renditionautoplay ;
+
+ \_doc
+ \seccc Rendition actions
+
+ Rendition actions unfortunately use cryptic symbolic numbers (`0`, `1`, `2`
+ and `3`) for actions that could be called `play`, `stop`, `pause` and
+ `resume` respectively. Except for these predefined actions (that use `/OP`)
+ running of JavaScript is possible using `/JS (<script>)` with potential
+ fallback to `/OP`. This is dangerous teritory, because support of the right
+ API in the viewer is very low. Although it is possible to define such action
+ type by:
+
+ \begtt
+\.sdef{renditionaction:myaction}{/JS (app.alert("something useful");) /OP 0}
+ \endtt
+
+ The use of rendition action is:
+ \`\.renditionaction``[rendition:<name>:<action type>]`. Empty name refers to
+ last rendition, so e.g.`\.renditionaction``[rendition::pause]` is possible.
+ \_cod
+
+\.sdef{renditionaction:play}{/OP 0}
+\.sdef{renditionaction:stop}{/OP 1}
+\.sdef{renditionaction:pause}{/OP 2}
+\.sdef{renditionaction:resume}{/OP 3}
+\_def\.renditionaction[#1:#2:#3]{/S /Rendition
+ \.cs{renditionaction:#3}
+ /R \.cs{rendition:#2} 0 R
+ /AN \.cs{screen:#2} 0 R%
+}
+
+ \_doc
+ \secc Rich Media (3D/audio/video)
+
+ Some principles seen with Renditions (section~\ref[mm-renditions]) apply here
+ too. But additionally we deal with 3D specifics and unfortunate Flash
+ leftovers.
+
+ Unlike Renditions both page area and multimedium specifaction are handled in
+ a single annotation~-- the Rich Media annotation. The code is unfortunately
+ obscured due to the weird requirements, but this is essentially what we are
+ trying to create with \`\RM`:
+\begtt
+/Type /Annot
+/Subtype /RichMedia
+/RichMediaSettings <<
+ /Activation <<
+ /Condition /PV
+ /Scripts [ 14 0 R ]
+ >>
+ /Deactivation << /Condition /XD >>
+>>
+/RichMediaContent <<
+ /Assets << /Names [ (kladka.prc) 2 0 R (wireframe.js) 14 0 R ] >>
+ /Configurations [ <<
+ /Type /RichMediaConfiguration
+ /Subtype /3D
+ /Instances [ <<
+ /Type /RichMediaInstance
+ /Subtype /3D
+ /Asset 2 0 R
+ >> ]
+ >> ]
+>>
+\endtt
+
+ The activation/deactivation will be dealt with later. But we see that to
+ insert a simple 3D file, we have to pack it inside a file specification
+ (indirect reference to object `2 0 R`), then in \"instance", inside a
+ \"configuration" inside \"content". As if it wasn't enough the names
+ (normally contained in the file specification) have to be specified again in
+ `Assets` name tree that uselessly maps names to file specifications. Because
+ this is a 3D Rich Media annotation there are other files at play~--
+ initialization scripts. These are specified in `/Scripts` and are executed in
+ turn when the annotation is activated. Not shown is, that some
+ \"configurations" and \"instances" actually have to be specified indirectly.
+
+ If it wasn't for Flash we could do with something like:
+
+\begtt
+/Type /Annot
+/Subtype /RichMedia
+/Activation /PV
+/Scripts [ 14 0 R ]
+/Deactivation /XD
+/Content 2 0 R
+\endtt
+
+ Which contains equivalent information. But unfortunately here we are\dots
+ \_cod
+
+\.secondoptdef\.RM#1{\.isfiledefined{\.name}\_iftrue
+ \_edef\.tmp{\.cs{filemime:\.name}}%
+ \_edef\.subtype{\_ea\.mimetormsubtype\_ea[\.tmp]\_space}%
+ \_ifx\.subtype\_space
+ \_opwarning{unknown rich media type for '\.name', ignored}\_else
+ \_bgroup
+ \_ea\_readkv\_ea{\_ea\.RMdefaults\_ea,\_the\_opt}%
+ % Instance that has the media file as an asset
+ \_pdfobj {<</Type /RichMediaInstance
+ /Subtype /\.subtype
+ /Asset \.cs{filespec:\.name}
+ >>}\_pdfrefobj\_pdflastobj
+ % Configuration with one single instance (the above)
+ \_pdfobj {<</Type /RichMediaConfiguration
+ /Subtype /\.subtype
+ /Instances [ \_the\_pdflastobj \_space 0 R ]
+ >>}\_pdfrefobj\_pdflastobj \_edef\.configuration{\_the\_pdflastobj}%
+ \_edef\.names{\.cs{filename:\.name} \.cs{filespec:\.name} }% initial asset
+ \.redefinename{rm}%
+ \_def\.scriptfilespecs{}%
+ \_edef\.views{\_kv{views}}\_edef\.scripts{\_kv{scripts}}%
+ \_ifx\.views\_empty \_edef\.views{\.name}\_fi
+ \_ea\.DDDscripts\_ea{\.scripts}%
+ % annotation in hbox
+ \.boxedannot[rm:\.name]{#1}{}{%
+ /Subtype /RichMedia
+ /RichMediaSettings <<
+ /Activation <<
+ /Condition \.cs{activation:\_kv{activation}}
+ \.emptyor{\.scriptfilespecs}{/Scripts [ \.nonempty ]}
+ /Presentation << /Toolbar \_kv{toolbar} \.RMpresentationextra >>
+ >>
+ /Deactivation << /Condition \.cs{deactivation:\_kv{deactivation}} >>
+ >>
+ /RichMediaContent <<
+ /Assets << /Names [ \.names ] >>
+ /Configurations [ \.configuration \_space 0 R ]
+ \.emptyor{\_ea\.DDDviews\_ea{\.views}}{/Views [ \.nonempty ]}
+ >>
+ }%
+ \.sxdef{rm:\.name}{\_the\_pdflastannot}%
+ \_global\.slet{rm:}{rm:\.name}%
+ \_egroup\_fi\_fi
+}
+\_nspublic \RM ;
+
+ \_doc
+ The code is similiar to `\render`, but we also ignore everything if we don't
+ recognize the type of media (`Video`, `Sound` or `3D`). For that we use a
+ simple mapping from MIME types with \`\.mimetormsubtype`. This means that
+ although we aim Rich Media mostly for 3D art it may also be used for Video
+ and Sound.
+ \_cod
+
+\_def\.mimetormsubtype[#1/#2]{\.cs{rmtype:#1}}
+
+\.sdef{rmtype:model}{3D}
+\.sdef{rmtype:video}{Video}
+\.sdef{rmtype:audio}{Sound}
+
+ \_doc
+ Then we also need to construct the weird name \"tree" (essentialy an array in
+ our case) and script array. \`\.DDDscripts` and \`\.DDDviews` do this.
+ Name tree is accumulated in `\.names`, and starts with the media file. After
+ that each script is added to \`\.names` and \`\.scriptfilespecs`. The scripts
+ are passed as a comma separated array. Ignoring initial spaces is done using
+ undelimited-delimited argument pair trick.
+ \_cod
+
+\_def\.DDDscripts#1{\.DDDscriptsA#1,,,\.end}
+\_def\.DDDscriptsA#1#2,{\_ifx,#1\_ea\.untilend\_else
+ \.isfiledefined{#1#2}\_iftrue%
+ \_addto\.scriptfilespecs{\.cs{filespec:#1#2} }%
+ \_addto\.names{\.cs{filename:#1#2} \.cs{filespec:#1#2} }%
+ \_fi
+ \_ea\.DDDscriptsA\_fi
+}
+
+ \_doc
+ For 3D views we need to process yet another comma separated list, this time
+ with \`\.DDDviews`. The result has to be separated by spaces and we also
+ don't want to emit something if the specified view was invalid. Unfortunately
+ this is expansion only context, so we can't issue a warning.
+
+ As a user convenience, before `\.DDDview` is executed, view with the name of
+ `\.name` is tried instead of empty view array. This means that for simple 3D
+ art with one view, one can create view with the same name as the 3D object
+ and not have to specify anything. We also take the name only after it is
+ redefined from optional key-value parameters~-- this is so we can support
+ even the case of e.g. `screw` 3D model used twice, once with `name=screw1`,
+ another time with `name=screw2` (with the corresponding `screw1` and `screw2`
+ views). This is probably less useful, but\dots
+ \_cod
+
+\_def\.DDDviews#1{\.DDDviewsA#1,,,\.end}
+\_def\.DDDviewsA#1#2,{\_ifx,#1\_ea\.untilend\_else
+ \.isdefined{3dview:#1#2}\_iftrue
+ \_lastnamedcs\_space \_fi
+ \_ea\.DDDviewsA\_fi
+}
+
+ \_doc
+ The activation/deactivation names are kind of cryptic, so we give them
+ descriptive names. Default is explicit (de)activation. Instead of `/PV` (page
+ visible) and `/PI` (page invisible) it would be possible to use \"page open"
+ and \"page close". These are slightly different in cases when more pages are
+ shown on screen at once, because only one page is \"open", while multiple are
+ \"visible".
+ \_cod
+
+\.sdef{activation:explicit}{/XA}
+\.sdef{activation:auto}{/PV}
+\.sdef{deactivation:explicit}{/XD}
+\.sdef{deactivation:auto}{/PI}
+
+ \_doc
+ Additional means of customization are here. \`\.RMdefaults` contains the
+ default key-value parameters. \`\.RMpresentationextra` can be used to set
+ more attributes in `/RichMediaPresentation` dictionary (although those are
+ more specific and not generally useful).
+ \_cod
+
+\_def\.RMdefaults{%
+ name=\.name,
+ activation=explicit,
+ deactivation=explicit,
+ toolbar=true,
+ views=,
+ scripts=,
+}
+\_def\.RMpresentationextra{}
+
+ \_doc
+ For scripting using JavaScript actions one needs to access the 3D context of
+ the 3D / Rich Media annotation. This requires the page number. We can't use
+ `this.pageNum` from [TODO], because the script strictly doesn't have to be on
+ the same page. We use `\.pageof` (`\.setpageof` was done in `\.boxedannot`)
+ to retrieve the page number in next run. Also PDF indexes page numbers from
+ 0. \`\DDDannot``{<name>}`. and \`\DDDcontext``{<name>}` allow this.
+ \_cod
+
+\_def\.DDDannot#1{%
+ this.getAnnotRichMedia(\_the\_numexpr\.pageof{rm:#1}-1\_relax, '#1')%
+}
+\_def\.DDDcontext#1{\.DDDannot{#1}.context3D}
+
+\_nspublic \DDDannot \DDDcontext ;
+
+ \_doc
+ \label[mm-3dviews]
+ \secc 3D views
+
+ This is the interesting part about 3D art. They can have a set of predefined
+ views~-- although a user may start from one, they can interactively change
+ all the aspects by dragging with mouse or messing with the settings shown by
+ right click menu.
+
+ There are several transformations that have to be done before it is possible
+ to display 3D scene on a computer screen:
+
+ \begitems \style n
+ * 3D transformation from the coordinate system of 3D artwork (\"model") to the \"world
+ coordinate system".
+ * 3D transformation from the world coordinate system to camera coordinate
+ system.
+ * projection to 2D (3D to 2D transformation).
+ \enditems
+
+ When talking about PDF, positive $x$ goes to the right, positive $y$ up, and
+ positive $z$ \"away" from us (\"into the page"). This means we are working
+ with a left handed coordinate system. In camera space, the camera sits at
+ $(0, 0, 0)$ facing towards positive $z$ with positive $x$ and $y$ going right
+ and up respectively. Projection (one way or another) discards the $z$
+ coordinate.
+
+ Although the transformations are not strictly linear, they are essentially
+ done using multiplication by {\em transformation matrices}. The matrix for
+ \"model to world" (or \"model") transformation is part of the 3D art file and can't
+ be changed. However, we can make it up, because we can fully control the
+ second transformation (\"world to camera" or \"view" transformation)~--
+ although we don't specify the \"world to camera" matrix but rather its
+ inverse, the \"camera to world" matrix (`/C2W`). This matrix has the $4 \times 4$
+ form, which also allows {\em linear transformation} and {\em translation}:
+
+ $$
+ M_{c2w} = \pmatrix{a & d & g & t_x \cr b & e & h & t_y \cr c & f & i & t_z \cr 0 & 0 & 0 & 1}
+ $$
+
+ Here we use the column major convention, which is also the order how we would
+ write the matrix to PDF file, where it is an array of 12 elements:
+
+ \begtt \catcode`\$=3
+ /C2W [$a$ $b$ $c$ $d$ $e$ $f$ $g$ $h$ $i$ $t_x$ $t_y$ $t_z$]
+ \endtt
+
+ In the rendering pipeline everything is transformed from world coordinates to
+ camera space coordinates. We can think about the process also in the other
+ way. Using $M_{c2w}$ we specify camera's position and orientation in the
+ world coordinate system. Due to how transformation using matrix
+ multiplication works, the first column in the $M_{c2w}$ matrix (vector $(a,
+ b, c)^T$) specifies how \"positive $x$ direcetion" (\"right") from camera
+ space ends up in world coordinate system. Similiarly for $(d, e, f)^T$ being
+ the image of positive $y$ (\"up") and $(g, h, i)^T$ being the image of
+ positive $z$ (\"forward"). The last column, $(t_x, t_y, t_z)^T$ represents
+ translation from camera space to world. Translation of origin (camera
+ position) will leave it in the point with coordinates $(t_x, t_y, t_z)$.
+ Because of these associations with the intuitive meanings of $x$,
+ $y$, $z$ in camera space we also sometimes call the vectors in the first
+ three columns of $M_{c2w}$ \"right", \"up" and \"forward" and the last one
+ \"eye":
+
+ $$
+ \vec{R} = \pmatrix{a \cr b \cr c}\!, \quad
+ \vec{U} = \pmatrix{d \cr e \cr f}\!, \quad
+ \vec{F} = \pmatrix{g \cr h \cr i}\!, \quad
+ \vec{E} = \pmatrix{t_x \cr t_y \cr t_z}\!.
+ $$
+
+ We usually want $\vec{R}$, $\vec{U}$ and $\vec{F}$ to form an orthonormal set
+ of vectors, i.e. all of unit length and each pair is orthogonal. The
+ orthoganility will come from the way we calculate them, but the normality has
+ to be ensured by normalizing the vectors after computing them, which will not
+ be explicitly written out in the following text. $\vec{E}$ is a positional,
+ not directional, vector and it's length will be preserved.
+
+ Now we only need a convenient way to calculate all four vectors. A wide spread
+ method is sometimes called \"look at". It essentially involves having two
+ points: \"eye" ($E$, position of the camera) and \"target" ($T$, the point
+ where the camera is pointing at). The camera position is already provided:
+ $$
+ \vec{E} = E
+ $$
+ From these two points alone we can easily calculate the forward vector, which
+ corresponds to the direction of the camera:
+ $$
+ \vec{F} = \overrightarrow{ET} = T - E
+ $$
+ When we now imagine the point $E$ and vector $\vec{F}$ looking towards $T$ we
+ can see that there is a degree of freedom~-- the camera can rotate about the
+ forward vector. There is no other way than to arbitrarily choose
+ either up or right vector. Usually we choose an arbitrary \"global up" vector
+ $U_G$, which will influence the general direction of the final up vector.
+ This is because we use it to calculate the right vector:
+ $$
+ \vec{R} = \vec{U}_G \times \vec{F}
+ $$
+ The cross product makes it so that:
+ \begitems \style n
+ * $\vec{R}$ is perpendicular to $\vec{F}$
+ * it is also perpendicular to global up vector ($\vec{U}_G$) which we used to
+ get rid of remaining degree of freedom.
+ \enditems
+ Now that we have two orthonormal vectors (with the normalization not being
+ explicit) we can calculate the remaining up vector:
+ $$
+ \vec{U} = \vec{F} \times \vec{R}
+ $$
+
+ The last mysterious part about the calculation are the cross products. They
+ are of course not commutitative, so why e.g. $\vec{U}_G \times \vec{F}$ and
+ not the other way around? This is because we have to preserve the relations
+ these vectors had as directions of positive axes of the original camera
+ space. There we had positive $x$ going right, positive $y$ up and positive
+ $z$ forward in a left handed coordinate system. This means that following
+ holds (according the left hand rule):
+
+ $$\eqalign{
+ \vec{R} &= \vec{U} \times \vec{F} \cr % j * k = i
+ \vec{U} &= \vec{F} \times \vec{R} \cr % k * i = j
+ \vec{F} &= \vec{R} \times \vec{U} \cr % i * j = k
+ }$$
+
+ The scheme has one flaw though. When the directions of global up vector
+ $\vec{U}_G$ and forward vector $\vec{F}$ are linearly dependent the computed
+ right vector will be $(0, 0, 0)$. Hence some handling of this special case is
+ needed.
+
+ The \"look at" method is essentially what is used in Alexander Grahn's
+ package movie15\fnote{\url{https://www.ctan.org/pkg/movie15}}. Although the
+ input aren't two points, but rather a \"center of orbit" point ($COO$, our
+ \"target"), \"center of orbit to camera vector" ($\overrightarrow{C2C}$,
+ default is $(0, -1, 0)$) and distance of camera from the center of orbit
+ ($ROO$). The value used for the arbitrary \"global up" vector is $(0, 0, 1)$.
+ When forward vector is $(0, 0, z)$, then global up is chosen to be $(0, -1,
+ 0)$ or $(0, 1, 0)$ to handle the \"0 right vector" issue.
+
+ Because the movie15 method of providing the parameters is used in essentially
+ all packages that handle PDF 3D art (movie15, media9, rmannot, Con\TeX/t) we
+ also follow the suite.
+
+ \`\DDDview`[<view name>][<key-value parameters>] is the command for defining
+ 3D views. These have to be saved into separate PDF objects anyways, using
+ this interface we allow their reuse. If <view name> is same as <name> of
+ `\RM` argument and no other views are specified <view name> view is
+ automatically used (see `\RM` for details).
+
+ Key-value parameters are not optional this time, because rarely one suffices
+ with default values~-- different 3D views are about customization. Handling
+ of them is not as straightforward as before. We initially read the key-value
+ parameters only to determine the `method` used for calculating the `/C2W`
+ matrix. Then we reread key-value parameters again, this time with also with
+ the default values for this particular method. Not that the general 3d views
+ details are changed, but the methods themselves have key-value parameters of
+ their own, and we support specifying them in this \"flat" way.
+
+ Additionally we allow the different methods used to compute `/C2W` to not be
+ expandable. Hence they are executed outside of expansion only context and are
+ fully processed~-- the text they add to 3D view PDF object is temporarily
+ stored in \`\.viewparams`.
+
+ The rest is simply setting sensible defaults (or user overrides) for
+ internal/external name of the view (`/IN` and `/XN`, one is used for
+ scripting, one is shown by the PDF viewer), background color, rendering mode,
+ and lighting. Cross sections and nodes are currently not supported, although
+ users can hook in their own code using `\.DDDviewextra`,
+ `\.DDDrendermodeextra` or `\.DDDprojectionextra`.
+
+ We have to be careful about setting rendering mode and lighting scheme,
+ because they normally fall back to the values specified in 3D art file, which
+ we can't access, so better not set them to anything if they are empty.
+ \_cod
+
+\_def\.DDDview[#1][#2]{\_bgroup
+ \_readkv{\.DDDviewdefaults,#2}%
+ \_edef\.tmp{\.DDDviewdefaults,\.cs{3dview:\_kv{method}:defaults}}%
+ \_readkv{\.tmp,#2}%
+ \.colortorgbdef\.bgcolor{\_kv{background}}%
+ \.cs{3dview:\_kv{method}}% sets \.viewparams (/MS, /C2W, /CO)
+ \_pdfobj {<</Type /3DView
+ /XN (#1)
+ /IN (#1)
+ \.viewparams % /MS, /C2W, /CO
+ /P <<
+ \.cs{3dprojection:\_kv{projection}}
+ \.DDDprojectionextra
+ >>
+ /BG <<%/Type /3DBG
+ /Subtype /SC
+ /C [\.bgcolor]
+ >>
+ \.emptyor{\_kv{rendermode}}{%
+ /RM <<%/Type /3DRenderMode
+ /Subtype /\.nonempty
+ \.DDDrendermodeextra >> }%
+ \.emptyor{\_kv{lighting}}{%
+ /LS <<%/Type /3DLightingScheme
+ /Subtype /\.nonempty >> }%
+ >>}%
+ \_pdfrefobj\_pdflastobj
+ \.sxdef{3dview:#1}{\_the\_pdflastobj \_space 0 R}%
+ \_egroup
+}
+
+\_nspublic \DDDview ;
+
+
+ \_doc
+ \`\.DDDviewdefaults` stores default key-value parameters for 3D views. They
+ are mostly the PDF standard defaults or what movie15/media9 uses (for
+ compatibility).\`\.DDDviewextra`, \`\.DDDrendermodeextra` or
+ \`\.DDDprojectionextra` can be used by the users to hook themself into 3D
+ view object creation.
+ \_cod
+
+\_def\.DDDviewdefaults{
+ projection=perspective,
+ scale=1,
+ ps=Min,
+ FOV=30,
+ background=1 1 1,
+ rendermode=,
+ lighting=,
+ method=media9,
+}
+\_def\.DDDprojectionextra{}
+\_def\.DDDrendermodeextra{}
+\_def\.DDDviewextra{}
+
+ \_doc
+ There are two different projection methods:
+ \begitems
+ * Orthographic: $z$ coordinate is simply thrown away, `scale` is used for scaling
+ the result. For technical parts where we want lines that are parallel stay
+ parallel in the view.
+ * Perspective: is the way human eye sees. `FOV` can be used to set field of
+ view. (`ps` parameter for additonal scaling to fit width/height is also
+ available, but the default is fine for casual users).
+ \enditems
+ \_cod
+
+\.sdef{3dprojection:ortho}{/Subtype /O /OS \_kv{scale}}
+\.sdef{3dprojection:perspective}{/Subtype /P /FOV \_kv{FOV} /PS /\_kv{ps}}
+
+
+ \_doc
+ We offer the possibility of setting`/C2W` matrix and `/CO` (distance from
+ camera to center of orbit) directly using `method=manual`.
+ \_cod
+
+\.sdef{3dview:manual:defaults}{
+ matrix=1 0 0 0 1 0 0 0 1 0 0 0 ,
+ centeroforbit=0,
+}
+\.sdef{3dview:manual}{\_edef\.viewparams{
+ /MS /M
+ /C2W [\_kv{matrix}]
+ /CO \_kv{centeroforbit}
+}}
+
+ \_doc
+ Another simple way of specifying camera position/orientation is to use a
+ named setting of U3D file using a U3D path with `method=u3d`.
+ \_cod
+
+\.sdef{3dview:u3d:defaults}{
+ u3dpath=,
+}
+\.sdef{3dview:u3d}{%
+ \_pdfunidef\.tmp{\_kv{u3dpath}}%
+ \_edef\.viewparams{
+ /MS /U3D
+ /U3DPath \.tmp \_space
+}}
+
+ \_doc
+ The most advanced method of setting `/C2W` matrix and `/CO` is
+ `method=media9`. It is thoroughly explained above, the few differences are
+ because the input values are not two points. Also for conciseness \"x", \"y"
+ and \"z" are used instead of right, up and forward. The calculations are
+ done in Lua, for simplicity.
+
+ We expect the user to supply the numbers in the form \"`1 2 3`", but in Lua we
+ need them comma separated (\"1, 2, 3"). \`\.luatriplet` does this. Just in
+ case the code is somehow adapted without ensuring that $x$ and $z$ are
+ orthonormal, we normalize also $y$ after the second cross product.
+ \_cod
+
+\_def\.luatriplet#1 #2 #3 {#1, #2, #3}
+
+\.sdef{3dview:media9:defaults}{%
+ roo=0,
+ coo=0 0 0,
+ c2c=0 -1 0,
+}
+\.sdef{3dview:media9}{\_edef\.coo{\_kv{coo}}\_edef\.c2c{\_kv{c2c}}\_edef\.viewparams{
+ /MS /M
+ /C2W [\_directlua{
+ local function normalize(x, y, z)
+ local len = math.sqrt(x*x + y*y + z*z)
+ if len ~= 0 then return x/len, y/len, z/len else return 0, 0, 0 end
+ end
+ local function cross(ux, uy, uz, vx, vy, vz)
+ return uy*vz - uz*vy, uz*vx - ux*vz, ux*vy - uy*vx
+ end
+ local function printmat(...)
+ local arr = table.pack(...)
+ for k, v in ipairs(arr) do
+ arr[k] = string.format("\_pcent.6f", v)
+ end
+ tex.print(table.concat(arr, " "))
+ end
+
+ local roo = \_kv{roo}
+ local coo_x, coo_y, coo_z = \_ea\.luatriplet\_expanded{\_kv{coo}}
+ local c2c_x, c2c_y, c2c_z = normalize(\_ea\.luatriplet\_expanded{\_kv{c2c}})
+
+ local eye_x, eye_y, eye_z = coo_x + c2c_x*roo, coo_y + c2c_y*roo, coo_z + c2c_z*roo
+
+ local z_x, z_y, z_z = -c2c_x, -c2c_y, -c2c_z
+
+ local up_x, up_y, up_z = 0, 0, 1
+ if math.abs(z_x) + math.abs(z_y) < 0.0000001 then % z_x == 0 and z_y == 0
+ if z_z < 0.0000001 then % z_z <= 0
+ up_x, up_y, up_z = 0, 1, 0
+ else
+ up_x, up_y, up_z = 0, -1, 0
+ end
+ end
+
+ local x_x, x_y, x_z = normalize(cross(up_x, up_y, up_z, z_x, z_y, z_z))
+ local y_x, y_y, y_z = normalize(cross(z_x, z_y, z_z, x_x, x_y, x_z))
+
+ local eye_x, eye_y, eye_z = coo_x - z_x*roo, coo_y - z_y*roo, coo_z - z_z*roo
+
+ printmat(x_x, x_y, x_z, y_x, y_y, y_z, z_x, z_y, z_z, eye_x, eye_y, eye_z)
+ }]
+ /CO \_kv{roo}
+}}
+
+ \_doc
+ Last, but not least, is an action for setting the 3D view of a 3D/RM annotation
+ using an action. \`\.goto3dviewaction``[goto3dview:<name>:<view>]`. <name> is
+ name of the annotation which will be influenced. <view> is passed directly to
+ PDF. Therefore it can be either an index to the view array (starting at 0) or name
+ of view in parentheses~-- \"`(<view name>)`".
+ \_cod
+
+\.sdef{goto3dviewaction}[#1:#2:#3]{/S /GoTo3DView
+ /TA \.cs{rm:#2} 0 R
+ /V #3
+}
+
+ \_doc
+ \label[mime]
+ \sec MIME type database
+
+ This is the uninteresting MIME type database teased in section~\ref[files].
+ Ideally this would only be a subset of what IANA defines at
+ \url{https://www.iana.org/assignments/media-types/media-types.xhtml}.
+ But there are additions like `model/u3d` and `model/prc`, which don't
+ seem to be official, yet. Other \"unofficial" MIME types are taken from
+ Mozilla's \"common" lists:
+ \begitems
+ * \url{https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types}.
+ * \url{https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types}
+ \enditems
+
+
+ \`\.mimetype``{<extension>}{<MIME type>}` is a shortcut of mapping
+ <extension> to <MIME type>.
+ \_cod
+
+\_def\.mimetype#1#2{\_sdef{_pdfextra_mimetype:#1}{#2}}
+
+\.mimetype{js}{application/javascript}
+\.mimetype{pdf}{application/pdf}
+
+\.mimetype{prc}{model/prc}
+\.mimetype{u3d}{model/u3d}
+
+\.mimetype{wav}{audio/x-wav}
+\.mimetype{mp3}{audio/mpeg}
+\.mimetype{opus}{audio/opus}
+
+\.mimetype{avi}{video/x-msvideo}
+\.mimetype{mp4}{video/mp4}
+\.mimetype{webm}{video/webm}
+
+\_endnamespace
+\_endcode
+
+This is the technical documentation. It is intended for those who want to know
+how this package works internally. Casual users shouldn't need to read this. But
+if you would like to customize anything or perhaps just use some part of this
+package, feel free to copy paste and use anything you want in \OpTeX/'s spirit.
+
+This documentation is interleaved within the source itself, both are contained
+in a single file, `pdfextra.opm` (according to \OpTeX/ conventions). The user
+documentation is instead contained in `pdfextra-doc.tex`, which itself
+`\input`'s the documented source file `pdfextra.opm` so that the user and
+technical documentation is available in a single PDF file, `pdfextra-doc.pdf`.
diff --git a/macros/musixtex/README b/macros/musixtex/README
index 248beeb18b..257051bce4 100644
--- a/macros/musixtex/README
+++ b/macros/musixtex/README
@@ -1,4 +1,4 @@
-This is MusiXTeX, version 1.31 (2021-01-07).
+This is MusiXTeX, version 1.32 (2021-05-13).
MusiXTeX is a TeX-based system for typesetting music.
The main author was Daniel Taupin, who died in a climbing
diff --git a/macros/musixtex/doc/ChangeLog-132.txt b/macros/musixtex/doc/ChangeLog-132.txt
new file mode 100644
index 0000000000..2d288c95bc
--- /dev/null
+++ b/macros/musixtex/doc/ChangeLog-132.txt
@@ -0,0 +1,6 @@
+
+Changes from MusiXTeX 131 to 132:
+
+ * commented out spurious \let\doublebar\doublebar@II
+ * forbid line-breaking at \zdoublebar
+ * new add-on musixvbm.tex to support vectorized beams
diff --git a/macros/musixtex/doc/musixdoc.pdf b/macros/musixtex/doc/musixdoc.pdf
index 6c62fbdec4..8503c82411 100644
--- a/macros/musixtex/doc/musixdoc.pdf
+++ b/macros/musixtex/doc/musixdoc.pdf
Binary files differ
diff --git a/macros/musixtex/doc/musixdoc/beams.tex b/macros/musixtex/doc/musixdoc/beams.tex
index 2805e0aff6..6cf562a9c3 100644
--- a/macros/musixtex/doc/musixdoc/beams.tex
+++ b/macros/musixtex/doc/musixdoc/beams.tex
@@ -620,3 +620,8 @@ In this example we see not only multiple uses of \keyindex{nextstaff} and
\keyindex{prevstaff}, but also the character \verb|*| to make virtual beam notes
(see Section~\ref{CollectiveCoding}).
+
+ \section{Discontinuities in Long Beams}
+Beams are normally produced by \texttt{musixtex} using special fonts. Unfortunately, very long beams may have
+unsightly discontinuities (gaps or bumps). See Section~\ref{musixvbm}
+for an experimental solution to this problem.
diff --git a/macros/musixtex/doc/musixdoc/extensions.tex b/macros/musixtex/doc/musixdoc/extensions.tex
index 7d60a4dbc5..5bf8dd667d 100644
--- a/macros/musixtex/doc/musixdoc/extensions.tex
+++ b/macros/musixtex/doc/musixdoc/extensions.tex
@@ -2176,6 +2176,40 @@ Available are:
\keyindex{qbppp} and
\keyindex{zqbppp}.
+ \section{musixvbm}\ixtt{musixvbm.tex}
+\label{musixvbm}
+Beams are normally produced by \texttt{musixtex} using special fonts. Unfortunately, very long beams may have
+unsightly discontinuities (gaps or bumps). This experimental add-on
+(by Hiroaki \textsc{Morimoto}) produces vectorized beams without these
+discontinuities. Compare
+\begin{description}
+\item{}
+\begin{music}
+\nostartrule
+\setclef1{\bass}
+\startextract
+\nnotes\ibbl0G1\qb0{GJKLMLMLMLMLMLMK}\tqb0L\en
+\endextract
+\end{music}
+\end{description}
+and
+\begin{description}
+\item{}
+\begin{music}
+\input musixvbm
+\nostartrule
+\setclef1{\bass}
+\startextract
+\nnotes\ibbl0G1\qb0{GJKLMLMLMLMLMLMK}\tqb0L\en
+\endextract
+\end{music}
+\end{description}
+especially when magnified.
+
+The only known disadvantage is that some \texttt{dvi} viewers
+including \texttt{xdvi} and \texttt{yap} do not support the \texttt{tpic} specials
+that implement the vectorized beams so that no beams are shown; however, Postscript and PDF
+output generated using \texttt{dvips} and \texttt{ps2pdf} (or \texttt{dvipdfm}) should be satisfactory.
\section{tuplet}
diff --git a/macros/musixtex/doc/musixdoc/frontmatter.tex b/macros/musixtex/doc/musixdoc/frontmatter.tex
index e1402cfb3e..e0d9515830 100644
--- a/macros/musixtex/doc/musixdoc/frontmatter.tex
+++ b/macros/musixtex/doc/musixdoc/frontmatter.tex
@@ -1,6 +1,6 @@
\title{\Huge\bfseries\musixtex\\[\bigskipamount]
\LARGE\bfseries Using \TeX{} to write polyphonic\\or
-instrumental music\\\Large\itshape Version 1.31}
+instrumental music\\\Large\itshape Version 1.32}
\author{}
@@ -68,7 +68,7 @@ Since then, the only significant update to \musixtex\ has been in version 1.15 (
takes advantage of the greater capacity of the e\TeX\ version of \TeX.
This manual
is the definitive reference to all features of
-\musixtex\ version~1.30.
+\musixtex\ version~1.32.
Novice users need not start here.
Most
diff --git a/macros/musixtex/doc/musixdoc/miscellaneous.tex b/macros/musixtex/doc/musixdoc/miscellaneous.tex
index f212b769d7..a9e8fad4bb 100644
--- a/macros/musixtex/doc/musixdoc/miscellaneous.tex
+++ b/macros/musixtex/doc/musixdoc/miscellaneous.tex
@@ -48,9 +48,9 @@ or
\section{Accents}
You may use\footnote{Note from the editor: the reason the names of some of
-these macros don't seem to be constructed to suggest the terms used in the
-descriptions is that whoever originally defined the macros had in mind terms
-that did not agree with normal English usage.}
+these macros don't seem to suggest the terms used in the
+descriptions is that apparently Daniel Taupin had in mind other terms,
+such as \emph{pizzicato}.}
\begin{itemize}\setlength{\itemsep}{0ex}
\item \keyindex{upz}\pitchp~(upper \itxem{staccato}) to put a dot above a note
head at pitch $p$,
diff --git a/macros/musixtex/doc/musixdoc/musixdoc.sty b/macros/musixtex/doc/musixdoc/musixdoc.sty
index d752fc8b02..95b9c5a291 100644
--- a/macros/musixtex/doc/musixdoc/musixdoc.sty
+++ b/macros/musixtex/doc/musixdoc/musixdoc.sty
@@ -47,6 +47,7 @@
\usepackage{textcomp}
\input musixtex
+%\input musixvbm % experimental vectorized beams
\input musixbm
\input musixcho
\input musixdat
diff --git a/macros/musixtex/doc/scripts/musixflx.pdf b/macros/musixtex/doc/scripts/musixflx.pdf
index 934b9097b9..0d6b152bc7 100644
--- a/macros/musixtex/doc/scripts/musixflx.pdf
+++ b/macros/musixtex/doc/scripts/musixflx.pdf
Binary files differ
diff --git a/macros/musixtex/tex/musixtex.tex b/macros/musixtex/tex/musixtex.tex
index ba5b4f3880..9cf493ca18 100644
--- a/macros/musixtex/tex/musixtex.tex
+++ b/macros/musixtex/tex/musixtex.tex
@@ -25,15 +25,20 @@
\def\mufl@x{0.83}%
\def\mxmajorvernumber{1}
-\def\mxminorvernumber{31}
+\def\mxminorvernumber{32}
\def\mxvernumber{\mxmajorvernumber\mxminorvernumber}% make it possible to compare with \ifnum
\def\mxversuffix{}%
\edef\mxversion{\mxmajorvernumber.\mxminorvernumber\mxversuffix}
-\def\mxdate{2021-01-07}
+\def\mxdate{2021-05-13}
\immediate\write16{MusiXTeX(c) \mxversion\space<\mxdate>}%
\everyjob{\immediate\write16{MusiXTeX(c) \mxversion\space<\mxdate>}}%
+% version 1.32
+
+% commented out spurious \let\doublebar\doublebar@II
+% forbid line-breaking at \zdoublebar
+
% version 1.31
%
% defined \zzdoublebar, \zzbar, \zendpiece
@@ -2307,7 +2312,7 @@
\let\T@bil\iftrue \let\everyst@ff\everystaff \let\fil@spc\empty
\let\fil@termskip\empty \let\fil@signs\empty \let\fil@barno\empty
\let\leftrepeat\leftrepeat@II \let\leftrightrepeat\leftrightrepeat@II
- \let\doublebar\doublebar@II
+% \let\doublebar\doublebar@II % commented out by RDT version 1.32
\piece@beginc\Writ@meters\lastbarpos\lin@pos\let\pdl@cut\empty\addspace\afterruleskip}
%%% 1.21: added \lastbarpos and \pdl@cut settings
@@ -2613,7 +2618,7 @@
\let\zleftrightrepeat\zleftrightrepeat@II % RDT 1.28
-\def\zdoublebar{\advance\barno\m@ne\doublebar} % RDT 1.30
+\def\zdoublebar{\advance\barno\m@ne\setdoublebar\xbar} % RDT revised 1.32
\def\zzdoublebar{% % RDT 1.31
\advance\barno\m@ne%
diff --git a/macros/musixtex/tex/musixvbm.tex b/macros/musixtex/tex/musixvbm.tex
new file mode 100644
index 0000000000..09fa03da42
--- /dev/null
+++ b/macros/musixtex/tex/musixvbm.tex
@@ -0,0 +1,211 @@
+%%
+%% musixvbm.tex - MusiXTeX Extention, Vectorized Beams (& crescendos)
+%% by tpic specials / pdfTeX raw literal
+%%
+%% Copyright (C) 2000-2007 Hiroaki MORIMOTO (Kuuku)
+%%
+%% This program is free software; you can redistribute it and/or
+%% modify it under the terms of the GNU General Public License
+%% as published by the Free Software Foundation; either version 2
+%% of the License, or any later version.
+%%
+%% This program is distributed in the hope that it will be useful,
+%% but WITHOUT ANY WARRANTY; without even the implied warranty of
+%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+%% GNU General Public License for more details.
+%%
+%% You should have received a copy of the GNU General Public License
+%% along with this program; if not, write to the Free Software
+%% Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+%%
+%% \def\domain{nifty.com}
+%% Author:
+%% Hiroaki MORIMOTO <CQX\relax05646@\domain>
+%% Tokyo, Japan
+%% URL: http://kuuku.no.coocan.jp/pub/musixtex/index-e.html
+%%
+%% based on musixtex.tex T.104, line 3255-3290.
+%% MusiXTeX : (C) Daniel Taupin et al.
+%%
+%% January 1, 2007 version 1.20-beta6
+%% This is a successor of `musixtpb.tex' ver.1.10.
+%%
+\ifx\ifvectorizedbeam\undefined\else\endinput\fi
+\immediate\write16{MusiXTeX Extention, Vectorized Beams and crescendos v1.20-beta6 <2007/01/01>}%
+%
+\edef\catcodeat{\the\catcode`\@}\catcode`\@=11
+%
+% Allocation of registers
+% No register is required except for scratch (\dimen@, \count@)
+%
+% Modes definition (default: true)
+\newif\ifvectorizedbeam \vectorizedbeamtrue
+%
+% Operation mode automatic selection (v1.20)
+%
+\let\@beammodesel\relax%
+\ifx\pdftexversion\undefined\else%
+ \ifnum\pdfoutput>0\relax
+ \immediate\write16{musixvbm: uses pdfTeX raw literal}%
+ \edef\@beammodesel{pdftex}%
+ \fi
+\fi
+\ifx\@beammodesel\relax
+ \immediate\write16{musixvbm: uses tpic specials}%
+ \edef\@beammodesel{tpic}%
+\fi
+%
+% Overriding beam termination code (v1.20)
+%
+\let\@beam@font=\@beam\relax
+\def\@beam{%
+ \ifvectorizedbeam
+ \csname @beam@\@beammodesel\endcsname
+ \else
+ \@beam@font
+ \fi
+}%
+%
+% Main routine for tpic-version beam
+% \y@ii : length, \b@p : slope, \y@i : altitude
+%
+\def\@beam@tpic{%
+ % X of end
+ \@dimentomil{\y@ii}{\@Xend}%
+ % Y of start
+ \y@iii\y@i
+ \advance\y@iii -\b@amthick
+ \@dimentomil{-\y@iii}{\@Ystart@l}%
+ \advance\y@iii \tw@\b@amthick
+ \@dimentomil{-\y@iii}{\@Ystart@u}%
+ % Y of end
+ \y@iv\y@i
+ \dimen@=\b@p\y@ii \divide\dimen@ \tw@nty% \tw@nty=20 def'd in musixtex.tex
+ \advance\y@iv \dimen@
+ \advance\y@iv -\b@amthick
+ \@dimentomil{-\y@iv}{\@Yend@l}%
+ \advance\y@iv \tw@\b@amthick
+ \@dimentomil{-\y@iv}{\@Yend@u}%
+% \special{pn 1}%
+ \special{sh 1}%
+ \@addbeampath{0}{\@Ystart@l}%
+ \@addbeampath{\@Xend}{\@Yend@l}%
+ \@addbeampath{\@Xend}{\@Yend@u}%
+ \@addbeampath{0}{\@Ystart@u}%
+ \@addbeampath{0}{\@Ystart@l}%
+ \special{ip}%
+ \kern\y@ii
+}%
+%
+%
+% Subroutines for tpic-version beam
+%
+\def\@dimentomil#1#2{{%
+ % 1m-in = 0.07227pt, 1pt = 13.837m-in
+ % \count@=\count255 \dimen@=\dimen0 def'd in plain
+ \dimen@=#1\relax\dimen@=13.837\dimen@\relax
+ \count@\dimen@
+ \ifnum\count@>0
+ \advance\count@ by 32768
+ \else
+ \advance\count@ by -32768
+ \fi
+ \divide\count@ by 65536
+ \xdef#2{\the\count@}}}%
+%
+\def\@addbeampath#1#2{\special{pa #1 #2}}%
+%
+%
+% Main routine for pdfTeX
+%
+\def\@beam@pdftex{%
+ % X of end
+ \edef\@Xend{\strip@pt\y@ii}%
+ % Y of start
+ \y@iii\y@i
+ \advance\y@iii -\b@amthick
+ \edef\@Ystart@l{\strip@pt\y@iii}%
+ \advance\y@iii \tw@\b@amthick
+ \edef\@Ystart@u{\strip@pt\y@iii}%
+ % Y of end
+ \y@iv\y@i
+ \dimen@=\b@p\y@ii \divide\dimen@ \tw@nty% \tw@nty=20 def'd in musixtex.tex
+ \advance\y@iv \dimen@
+ \advance\y@iv -\b@amthick
+ \edef\@Yend@l{\strip@pt\y@iv}%
+ \advance\y@iv \tw@\b@amthick
+ \edef\@Yend@u{\strip@pt\y@iv}%
+ \pdfliteral{q 0 g 0 \@Ystart@l\space m \@Xend\space\@Yend@l\space l \@Xend\space\@Yend@u\space l 0 \@Ystart@u\space l 0 \@Ystart@l\space l f Q}%
+ \kern\y@ii
+}%
+%
+% Subroutines for pdfTeX
+% (taken from latex.ltx 2003/12/01)
+\begingroup
+ \catcode`P=12
+ \catcode`T=12
+ \lowercase{%
+ \def\x{\def\rem@pt##1.##2PT{##1\ifnum##2>\z@.##2\fi}}}%
+ \expandafter\endgroup\x
+\def\strip@pt{\expandafter\rem@pt\the}%
+%
+%
+% vectorized version of crescendo, decrescendo (under construction)
+%
+\let\C@cresc@font=\C@cresc\relax
+%
+% for tpic-version crescendo
+% #1=length (any TeX dimension, no limit))
+\def\C@cresc@tpic#1{%
+ \y@iv#1\relax
+% \rlap{\vrule width\y@iv height1pt}%
+ \@dimentomil{\y@iv}{\@Xend}%
+ \dimen@=2.5pt \advance\dimen@ by.00125\y@iv\relax% see musixspx.mf
+ \@dimentomil{\dimen@}{\@Yend@l}%
+ \special{pn 6}% 0.4pt=5.5348mil see musixspx.mf
+ \ifnum\n@ii=\@cxv% decrescendo see musixtex.tex T.112 line 3870
+ \@addbeampath{0}{\@Yend@l}%
+ \@addbeampath{\@Xend}{0}%
+ \special{fp}%
+ \@addbeampath{0}{-\@Yend@l}%
+ \@addbeampath{\@Xend}{0}%
+ \special{fp}%
+ \else
+ \@addbeampath{\@Xend}{\@Yend@l}%
+ \@addbeampath{0}{0}%
+ \special{fp}%
+ \@addbeampath{\@Xend}{-\@Yend@l}%
+ \@addbeampath{0}{0}%
+ \special{fp}%
+ \fi
+% \C@cresc@font#1%
+}%
+%
+% for pdfTeX-version crescendo
+% #1=length (any TeX dimension, no limit))
+\def\C@cresc@pdftex#1{%
+ \y@iv#1\relax
+% \rlap{\vrule width\y@iv height1pt}%
+ \edef\@Xend{\strip@pt\y@iv}%
+ \dimen@=2.5pt \advance\dimen@ by.00125\y@iv\relax% see musixspx.mf
+ \edef\@Yend@l{\strip@pt\dimen@}%
+ \ifnum\n@ii=\@cxv% decrescendo see musixtex.tex T.112 line 3870
+ \pdfliteral{.4 w q 0 g 0 \@Yend@l\space m \@Xend\space 0 l S Q q 0 g 0 -\@Yend@l\space m \@Xend\space 0 l S Q}%
+ \else
+ \pdfliteral{.4 w q 0 g \@Xend\space \@Yend@l\space m 0 0 l S Q q 0 g \@Xend\space -\@Yend@l\space m 0 0 l S Q}%
+ \fi
+% \C@cresc@font#1%
+}%
+%
+% Overriding crescendo (v1.20)
+%
+\def\C@cresc#1{%
+ \ifvectorizedbeam
+ \csname C@cresc@\@beammodesel\endcsname#1
+ \else
+ \C@cresc@font#1
+ \fi
+}%
+%
+\catcode`\@=\catcodeat
+\endinput
diff --git a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
index 2f98157259..eb78699624 100644
--- a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+++ b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
@@ -3,9 +3,6 @@ $mirrors = {
'Algeria' => {
'http://ctan.epst-tlemcen.dz/tex-archive/' => 1,
},
- 'Morocco' => {
- 'https://mirror.marwan.ma/ctan/' => 1,
- },
'South Africa' => {
'http://ftp.sun.ac.za/ftp/CTAN/' => 1,
'http://mirror.ufs.ac.za/ctan/' => 1,
@@ -55,6 +52,9 @@ $mirrors = {
'https://mirror.navercorp.com/CTAN/' => 1,
'https://mirror.yongbok.net/ctan/' => 1,
},
+ 'Philippines' => {
+ 'https://mirror.pregi.net/tex-archive/' => 1,
+ },
'Singapore' => {
'https://download.nus.edu.sg/mirror/ctan/' => 1,
},
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
index e9b6484b9a..0b84dab8d7 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/2021
-depend revision/59176
+depend revision/59188
name 00texlive.image
category TLCore
-revision 59176
+revision 59188
shortdesc TeX Live files only in the source repository
longdesc The files here are not copied by the installer and containers
longdesc are not built for them; they exist only in the source
@@ -40,7 +40,7 @@ longdesc IgnorePatterns in the check_files routine in tlmgr.pl augment
longdesc this list. Those are not included in the source/ tarball. For
longdesc information on the 00texlive prefix see
longdesc 00texlive.installation(.tlpsrc)
-runfiles size=13871
+runfiles size=13872
.mkisofsrc
autorun.inf
texmf-dist/README
@@ -72,6 +72,7 @@ runfiles size=13871
tlpkg/bin/cmp-textfiles
tlpkg/bin/ctan2tl
tlpkg/bin/deref-symlinks
+ tlpkg/bin/etex-answer-y
tlpkg/bin/htmltext
tlpkg/bin/pdflatex-preserve-pdf
tlpkg/bin/tl-check-files-by-format
@@ -3032,6 +3033,7 @@ runfiles size=13871
tlpkg/tlpsrc/pdfcprot.tlpsrc
tlpkg/tlpsrc/pdfcrop.tlpsrc
tlpkg/tlpsrc/pdfescape.tlpsrc
+ tlpkg/tlpsrc/pdfextra.tlpsrc
tlpkg/tlpsrc/pdfjam.tlpsrc
tlpkg/tlpsrc/pdflatexpicscale.tlpsrc
tlpkg/tlpsrc/pdflscape.tlpsrc
@@ -3764,6 +3766,7 @@ runfiles size=13871
tlpkg/tlpsrc/tabularborder.tlpsrc
tlpkg/tlpsrc/tabularcalc.tlpsrc
tlpkg/tlpsrc/tabularew.tlpsrc
+ tlpkg/tlpsrc/tabularray.tlpsrc
tlpkg/tlpsrc/tabulary.tlpsrc
tlpkg/tlpsrc/tabvar.tlpsrc
tlpkg/tlpsrc/tagging.tlpsrc
@@ -4384,7 +4387,7 @@ depend setting_available_architectures:aarch64-linux amd64-freebsd amd64-netbsd
name 00texlive.installer
category TLCore
-revision 59168
+revision 59178
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
@@ -34001,16 +34004,16 @@ catalogue-topics class book-pub chinese
name beebe
category Package
-revision 58983
+revision 59178
catalogue biblio
shortdesc A collection of bibliographies
relocated 1
longdesc A collection of BibTeX bibliographies on TeX-related topics
longdesc (including, for example, spell-checking and SGML). Each
longdesc includes a LaTeX wrapper file to typeset the bibliography.
-containersize 876100
-containerchecksum 88a01fd42056ca3581ff9178e8313fa20e0339277aa133076b7af425a90cc133ea768ab132058e4e70dcb0850fd0eedf44248d459ad7a5a2366ab06d4a1a0636
-runfiles size=2173
+containersize 878160
+containerchecksum 47ecb36c7451e99f30e3e44209de076f44f30d4a62d23b708fa92229b101a4a2e43547adcb6a5c2089ab39ec18210e55dc70477bec85cddd13716c9193ea02ae
+runfiles size=2180
RELOC/bibtex/bib/beebe/epodd.bib
RELOC/bibtex/bib/beebe/font.bib
RELOC/bibtex/bib/beebe/printing-history.bib
@@ -40962,34 +40965,32 @@ catalogue-version 2.51
name bnumexpr
category Package
-revision 49643
+revision 59182
shortdesc Extends eTeX's \numexpr...\relax construct to big integers
relocated 1
longdesc The package extends e-TeX \numexpr...\relax operation to allow
longdesc big integers, powers, factorials, truncated division and its
longdesc associated modulo. By default, bnumexpr loads package xintcore
longdesc (part of the xint bundle) and uses its arithmetic macros.
-containersize 3720
-containerchecksum c4bf69cf261c8545aeffe69c22e0a018afab5f919aa186efbdae0d0eff6728f36f0ca94831cbef7828e9df349bc2e7eed22c284cb41924b83464efa51418b22e
-doccontainersize 90596
-doccontainerchecksum 2e1430651869f89d3b1ecd146858b004ea04e6506cad29bcc131761b975a89671504b22e7bbe8bdd9e6be1d513f28f85e073a0f123e21e12584782db5242a50c
-docfiles size=27
- RELOC/doc/latex/bnumexpr/README details="Readme"
- RELOC/doc/latex/bnumexpr/README.md
+containersize 3676
+containerchecksum 789c111ca703bff3cae7a2d952eb857a622cf5749e39aeb3676945ea5b580aa827bc6211cd621d0222c2fa180ba19f3f819a19f63f93aad270469e548b45b3f7
+doccontainersize 90388
+doccontainerchecksum 39f10000c31dd4f31a09359a35187a238a5df01fe9243b66397c5be8e68a2f1778bc5a83480fccc45cb452e033b95a20651d2f7352cde01ce89bb722edf8b8d2
+docfiles size=26
+ RELOC/doc/latex/bnumexpr/README.md details="Readme"
RELOC/doc/latex/bnumexpr/bnumexpr.pdf details="Package documentation"
RELOC/doc/latex/bnumexpr/bnumexpr.tex
RELOC/doc/latex/bnumexpr/bnumexprchanges.tex
-srccontainersize 16944
-srccontainerchecksum 25488522b3ad578b8c2fe5e418c5a6d1bf6295de7f16e743dbe90417ca36a8888309a8b6e56bcd93f72c89b02841f0b1326351f6d47840a1fc59042d11641186
-srcfiles size=14
+srccontainersize 14532
+srccontainerchecksum 4dfa6ac675018d8cc54cb9ffd6c4df5889b525af9f03b3a976922779a825ef7aeef7d8729355b02932358b47acbcc7716d52400ec6d0c59324286a16e94c10e3
+srcfiles size=12
RELOC/source/latex/bnumexpr/bnumexpr.dtx
- RELOC/source/latex/bnumexpr/bnumexpr.ins
runfiles size=4
RELOC/tex/latex/bnumexpr/bnumexpr.sty
catalogue-ctan /macros/latex/contrib/bnumexpr
catalogue-license lppl1.3c
catalogue-topics arithmetic calculation
-catalogue-version 1.2d
+catalogue-version 1.4a
name bodegraph
category Package
@@ -67054,7 +67055,7 @@ containerchecksum 0568a3251d71fb3106fbb3961427200419ae1df22d39b5e72c608e2d94fc35
name collection-latexextra
category Collection
-revision 59173
+revision 59183
shortdesc LaTeX additional packages
relocated 1
longdesc A very large collection of add-on packages for LaTeX.
@@ -68248,6 +68249,7 @@ depend tabu
depend tabularborder
depend tabularcalc
depend tabularew
+depend tabularray
depend tabulary
depend tagging
depend tagpair
@@ -68427,8 +68429,8 @@ depend ziffer
depend zref
depend zwgetfdate
depend zwpagelayout
-containersize 6344
-containerchecksum af4125bba56947272f5c019d33554ad18ddeace2323611e2d7e38793425ce3f9f5c0c1f0130639933193e8e7cb003ea3655217217d3b9b7348620758aeea25a2
+containersize 6348
+containerchecksum 1f7fee3a55f439e4927bc0edfc07d3285f1f687b79bf50de15972c2670bce7c2b58237480a6b8ef085191b19a38517d558564c436276336afd8d6772abadac07
name collection-latexrecommended
category Collection
@@ -68515,7 +68517,7 @@ containerchecksum f763ff9a6832abce7a148bc5e8b9e5860f883ce0a56ad2119d9e18e7fb4dad
name collection-luatex
category Collection
-revision 58124
+revision 59184
shortdesc LuaTeX packages
relocated 1
longdesc Packages for LuaTeX, a Unicode-aware extension of pdfTeX, using
@@ -68573,6 +68575,7 @@ depend nodetree
depend odsfile
depend optex
depend pdfarticle
+depend pdfextra
depend placeat
depend plantuml
depend selnolig
@@ -68580,8 +68583,8 @@ depend spelling
depend stricttex
depend typewriter
depend uninormalize
-containersize 716
-containerchecksum 9534a3381a1dcbe324bb6a7f01645c92a2e922dbfe5787692ae8b10d1668be87120419e4cac48f68db9fe0d1f1c3dd396792ddf221253cc290b86564b87d322d
+containersize 724
+containerchecksum a2407366eb3f8c1532a5a532ec44535f360aee851d73d0b7b3592200d9ec4b2306808f664e3ac1b69132862cdb6ed7baa65761ffabb739d7e4227cd1f141f046
name collection-mathscience
category Collection
@@ -137214,28 +137217,27 @@ catalogue-version 1.1.1
name huawei
category Package
-revision 58907
+revision 59180
shortdesc Template for Huawei documents
relocated 1
longdesc This unofficial package provides a class for creating documents
longdesc for people working with Huawei Technologies Co., Ltd..
-containersize 5668
-containerchecksum d6aba70a005d5902c55cdcee90f903d11f8ff337f0fec8966add4a5ed0e03f72b466542b7e40422a83016569d808cf1ec5c04ee1e729b96492140ff356ca9a95
-doccontainersize 366952
-doccontainerchecksum 8131787a0f84aa0b54072f1a20f0c397b5e48c0168a4df993b9ee542e2444db40b4a1cb2c4da7263c492db511a74f03d858f47b287f9db803d997553f88885ed
+containersize 5860
+containerchecksum da26025f1d8bd717be2f1956646f4b5be2a4756f5a35248a10d2b5ba96e27521b41c4b1b9cbd25969dbc69a14419a583f8a03df3d9af37e42285a501b486877a
+doccontainersize 367124
+doccontainerchecksum 4b422aec65412c5fcf61810d9771f2cba544415e43f8b7b0c16beef53f74ce265dc80cd0fff053f70c669e7ab41e0b127c5568be383ed0e2e161f8963e54abdd
docfiles size=92
RELOC/doc/latex/huawei/README.md details="Readme"
RELOC/doc/latex/huawei/huawei.pdf details="Package documentation"
RELOC/doc/latex/huawei/huawei.tex
-runfiles size=4
+runfiles size=5
RELOC/tex/latex/huawei/huawei.cls
catalogue-contact-bugs http://github.com/yegor256/huawei.cls/issues
-catalogue-contact-home http://github.com/yegor256/huawei.cls
catalogue-contact-repository http://github.com/yegor256/huawei.cls
catalogue-ctan /macros/latex/contrib/huawei
catalogue-license mit
-catalogue-topics class
-catalogue-version 0.1.0
+catalogue-topics class misc-paper
+catalogue-version 0.2.0
name hulipsum
category Package
@@ -137331,7 +137333,7 @@ catalogue-version 0.01
name hvfloat
category Package
-revision 59104
+revision 59181
shortdesc Rotating caption and object of floats independently
relocated 1
longdesc This package defines a macro to place objects (tables and
@@ -137343,11 +137345,11 @@ longdesc \hvFloat{figure}{\includegraphics{rose}}{Caption}{fig:0}.
longdesc Options are provided to place captions to the right or left,
longdesc and rotated. Setting nonFloat=true results in placing the float
longdesc here.
-containersize 8548
-containerchecksum 2db54315134572bf83c48863502d9c94fcb85329413622524f21543d7e7ae4ec7952ce2531c9c057200933bd10dd953792b4c6ecd68c2c6c3bae7e48b94e36b2
-doccontainersize 19151668
-doccontainerchecksum 12dce3b932ae81f967a2c630d1814381b6344543bef58cfdad7f063fd83c90b4f502dd0f43d340868b7beb73526209f1c2ccff771cc02547c001413fec5c1517
-docfiles size=5894
+containersize 9192
+containerchecksum 95501e3683e618d82750c1030acb62c9edc032b91ab4f9ffa9247ca68c632be7fd88782ad09a69ebc6c5fbe1880d15e0b29a00428cf296ab575bbf87087ecfac
+doccontainersize 8827024
+doccontainerchecksum 93b89299569dbd2ac8d31d74cadc7c0329e366271dab59043523717a4b02e0d7ccdfc9da45cd03f707b1ca550e3e529713f073a4096d44e002120992141820a4
+docfiles size=3720
RELOC/doc/latex/hvfloat/CTAN.png
RELOC/doc/latex/hvfloat/Changes
RELOC/doc/latex/hvfloat/README details="Readme"
@@ -137367,6 +137369,8 @@ docfiles size=5894
RELOC/doc/latex/hvfloat/default2s1c.tex
RELOC/doc/latex/hvfloat/default2s2c.pdf
RELOC/doc/latex/hvfloat/default2s2c.tex
+ RELOC/doc/latex/hvfloat/doublepage2s1c.pdf
+ RELOC/doc/latex/hvfloat/doublepage2s1c.tex
RELOC/doc/latex/hvfloat/even1s1c.pdf
RELOC/doc/latex/hvfloat/even1s1c.tex
RELOC/doc/latex/hvfloat/even1s2c.pdf
@@ -137459,14 +137463,14 @@ docfiles size=5894
RELOC/doc/latex/hvfloat/sub-right1s2c.tex
RELOC/doc/latex/hvfloat/sub-right2s2c.pdf
RELOC/doc/latex/hvfloat/sub-right2s2c.tex
-runfiles size=13
+runfiles size=15
RELOC/tex/latex/hvfloat/hvfloat-fps.sty
RELOC/tex/latex/hvfloat/hvfloat.sty
catalogue-also rotating
catalogue-ctan /macros/latex/contrib/hvfloat
catalogue-license lppl
catalogue-topics float box-manip
-catalogue-version 2.22
+catalogue-version 2.24
name hvindex
category Package
@@ -183731,7 +183735,7 @@ catalogue-version 0.1
name lua-ul
category Package
-revision 58988
+revision 59186
shortdesc Underlining for LuaLaTeX
relocated 1
longdesc This package provides underlining, strikethough, and
@@ -183740,19 +183744,20 @@ longdesc restrictions imposed by other methods. In particular, kerning
longdesc is not affected, the underlined text can use arbitrary
longdesc commands, hyphenation works etc. The package requires LuaTeX
longdesc version [?] 1.12.0.
-containersize 6192
-containerchecksum 5af2e9d3a5c14321e10427de36cfc04a5f209fe2bec2e7a71704594fbdbf6ed57c36c1009b39f12f91e548d23d8202c345a3d49670e3305465ac5910f0c226e3
-doccontainersize 98028
-doccontainerchecksum 46c317b8a60050a292bd7cf9499dd4ed25384708f85b7f51457867305d417d1acf924f8d24ba93fa3ffbeffb00bc453e74c87fb3692627a7c30c872a3fc28fb4
-docfiles size=26
+containersize 6676
+containerchecksum e45cbc82eaa8dcab320675cf1f1f1ab515552e1c87f96c46b58e435067a694490d574561d6ade407b498bc66216d3d46b3eb4248644bea742e4ba8b86097eabe
+doccontainersize 100604
+doccontainerchecksum e436d3a618e368103dca705e0809d0d91b6df6c874a25ae06d249d0eface818bc519b4c19255a613be58b2fc53aa1331553c78731dc6d6e74fbd4867ab9f9ddf
+docfiles size=27
RELOC/doc/lualatex/lua-ul/README details="Readme"
RELOC/doc/lualatex/lua-ul/lua-ul.pdf details="Package documentation"
-srccontainersize 9836
-srccontainerchecksum 3df3e88520075d96d04826d82e83f3914d21dfaf962a42312d1b4f1c51ce01e5bbfd8a12a21df468476ff4c511cabb087ffe1de62a9b10d0a6a7b3670da596eb
-srcfiles size=9
+srccontainersize 10640
+srccontainerchecksum 09a1d976065455a47e98cdd3bae7cc3ff2c2dfa3ecbe9177eb5cb89f8be87f9e5da16f11130d492efb23e4e928f9dba243755b377e3eaef63c440db57f4f3b74
+srcfiles size=10
RELOC/source/lualatex/lua-ul/lua-ul.dtx
-runfiles size=7
+runfiles size=8
RELOC/tex/lualatex/lua-ul/docstrip-luacode.sty
+ RELOC/tex/lualatex/lua-ul/lua-ul-patches-preserve-attr.lua
RELOC/tex/lualatex/lua-ul/lua-ul.lua
RELOC/tex/lualatex/lua-ul/lua-ul.sty
RELOC/tex/lualatex/lua-ul/pre_append_to_vlist_filter.lua
@@ -183761,7 +183766,7 @@ catalogue-contact-repository https://github.com/zauguin/luaul
catalogue-ctan /macros/luatex/latex/lua-ul
catalogue-license lppl1.3c
catalogue-topics underline luatex
-catalogue-version 0.1.3
+catalogue-version 0.1.4
name lua-uni-algos
category Package
@@ -232636,7 +232641,7 @@ catalogue-version 1.0
name optex
category Package
-revision 59055
+revision 59184
shortdesc LuaTeX format based on Plain TeX and OPmac
longdesc OpTeX is a LuaTeX format based on Plain TeX macros with power
longdesc from OPmac (fonts selection system, colors, external graphics,
@@ -232651,10 +232656,10 @@ depend optex.ARCH
depend rsfs
depend unicode-data
execute AddFormat name=optex engine=luatex patterns=hyphen-lan.opm options="optex.ini" fmttriggers=amsfonts,cm,ec,hyphen-base,lm,rsfs,unicode-data
-containersize 787868
-containerchecksum 031c152c493db2c4ca9c7481eb9dbe5d66b44eb1db31e461912008a4ff22aedf3f37c41b18fa31e77654e94eb840d47c14048848b353e7ded30b61a21617f401
-doccontainersize 1438720
-doccontainerchecksum 8ed1fc8acbc3dcac224f6a6ddac8538eca1c6979015a7ef70cce5f5fee78cfa75074d8567c40dc3bff157ef424bf51abd5eaa59fb2ec02b8d7cde3a4b56ebf8f
+containersize 807724
+containerchecksum d28f76669ae4da48edbdc9ed52bb7624461494da829f1a7f7b97f217167d6a8ee6fe3fbd23ba15729275f6f8b347387d5331168615b4d399923d2bfb0d7bda9f
+doccontainersize 1438716
+doccontainerchecksum 7755ca9a97399dd6ef073dab4002e068725906869bde803d6689753cb1c628d993bdbcde5fc789eda80e3531d0c6829d22cef9586849b9723ed24e1226e3adfc
docfiles size=402
texmf-dist/doc/man/man1/optex.1
texmf-dist/doc/man/man1/optex.man1.pdf
@@ -232665,7 +232670,7 @@ docfiles size=402
texmf-dist/doc/optex/optex-math.tex
texmf-dist/doc/optex/optex-techdoc.tex
texmf-dist/doc/optex/optex-userdoc.tex
-runfiles size=482
+runfiles size=499
texmf-dist/tex/optex/base/alloc.opm
texmf-dist/tex/optex/base/basic-macros.opm
texmf-dist/tex/optex/base/bib-iso690.opm
@@ -232761,6 +232766,7 @@ runfiles size=482
texmf-dist/tex/optex/demo/op-ring.png
texmf-dist/tex/optex/demo/op-slides-bg.png
texmf-dist/tex/optex/demo/op-slides.tex
+ texmf-dist/tex/optex/pdfextra/pdfextra.opm
texmf-dist/tex/optex/pkg/emoji.opm
texmf-dist/tex/optex/pkg/plain-at.opm
texmf-dist/tex/optex/pkg/qrcode.opm
@@ -237183,6 +237189,37 @@ catalogue-license lppl1.3
catalogue-topics macro-supp
catalogue-version 1.15
+name pdfextra
+category Package
+revision 59184
+shortdesc Extra PDF features for OpTeX
+relocated 1
+longdesc As a minimalistic format, OpTeX does not support "advanced"
+longdesc features of the PDF file format in its base. This third party
+longdesc package aims to provide them. Summary of supported features:
+longdesc insertion of multimedia (audio, video, 3D), hyperlinks and
+longdesc other actions, triggering events, transitions, attachments.
+containersize 22320
+containerchecksum cee29ef2993e3ac07b6fedf90834998cfea2e3beb86e42ca4e56c83cf649e844fdfba67bbfac8f1883cc2f72e0360cce7dd91ebc458bbacd72962ecd11a2d121
+doccontainersize 625108
+doccontainerchecksum 4b649f0cf967795cdd106818b454f6b01971ce68d196d71745cabb89d62866addf3b9f2bd8e05f6c7f1f01eae2ecfd34675545de910d90e1c770ac2bafbacc41
+docfiles size=180
+ RELOC/doc/latex/pdfextra/LICENSE
+ RELOC/doc/latex/pdfextra/README.md details="Readme"
+ RELOC/doc/latex/pdfextra/examples/pdfextra-example-part.prc
+ RELOC/doc/latex/pdfextra/examples/pdfextra-example.pdf details="Example of use"
+ RELOC/doc/latex/pdfextra/examples/pdfextra-example.tex
+ RELOC/doc/latex/pdfextra/pdfextra-doc.pdf details="Package documentation"
+ RELOC/doc/latex/pdfextra/pdfextra-doc.tex
+runfiles size=17
+ RELOC/tex/optex/pdfextra/pdfextra.opm
+catalogue-contact-bugs https://github.com/vlasakm/pdfextra/issues
+catalogue-contact-repository https://github.com/vlasakm/pdfextra
+catalogue-ctan /macros/luatex/optex/pdfextra
+catalogue-license other-free
+catalogue-topics pdf-feat
+catalogue-version 0.1
+
name pdfjam
category Package
revision 56991
@@ -286299,6 +286336,42 @@ catalogue-license lppl
catalogue-topics table
catalogue-version 0.1
+name tabularray
+category Package
+revision 59183
+shortdesc Typeset tabulars and arrays with LaTeX3
+relocated 1
+longdesc LaTeX tables are implemented using TeX commands such as
+longdesc \halign, \noalign, \span, and \omit. In order to implement new
+longdesc features, many macro packages have modified the inner table
+longdesc commands inside LaTeX. This makes package code complicated,
+longdesc difficult to maintain, and often conflicts with each other. At
+longdesc present, the LaTeX3 programming layer is basically mature. This
+longdesc tabularray package will discard the old \halign commands and
+longdesc directly use LaTeX3 functions to parse the table, and then
+longdesc typeset the entire table. Under the premise of being compatible
+longdesc with the basic syntax of LaTeX2 tables, this macro package will
+longdesc completely separate the content and style of the table, and the
+longdesc style of the table can be completely set in keyval way.
+containersize 17664
+containerchecksum 90dd10214674db00d84f50fd1587428810b3d18e2fb461a0231ae61390700a124084915600d0396bfa409906e21c50aac25831cc4406fec749f638e0a96e0f89
+doccontainersize 326028
+doccontainerchecksum c4bb6004e84320bd14c65872beae3da1a64719f72c006336e07feb198d94e1b6b3f71270d14ad7b96a18982d00e4365fe08c9ba8c66fd78f7698e212a2d1748a
+docfiles size=100
+ RELOC/doc/latex/tabularray/README details="Readme"
+ RELOC/doc/latex/tabularray/tabularray.pdf details="Package documentation"
+ RELOC/doc/latex/tabularray/tabularray.tex
+runfiles size=33
+ RELOC/tex/latex/tabularray/tabularray.sty
+catalogue-contact-bugs https://github.com/lvjr/tabularray/issues
+catalogue-contact-home https://lvjr.bitbucket.io/tabularray.html
+catalogue-contact-repository https://github.com/lvjr/tabularray
+catalogue-contact-support https://github.com/lvjr/tabularray/discussions
+catalogue-ctan /macros/latex/contrib/tabularray
+catalogue-license lppl1.3
+catalogue-topics table expl3
+catalogue-version 2021H
+
name tabulary
category Package
revision 34368
@@ -299150,7 +299223,7 @@ docfiles size=376
name texlive-scripts
category TLCore
-revision 59168
+revision 59178
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.
@@ -299158,10 +299231,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 107980
-containerchecksum 018f3f34b2fe74d8f8ff961da642e1d6548fda94ee60964fa930f3846d1e2f57823f141ca4ea57f2183d9d98645e8f670d12381101c56db66d933bcf01126e55
-doccontainersize 396960
-doccontainerchecksum 2ec8b5dc9c66c33d9dcd04bf900ddda7decfd118ba278db769615eb0ccdfe71f1644335cd12f66f7b629ece335e603fdd937ea64cee92c087ed220fe17405a44
+containersize 107992
+containerchecksum 41edadee235e69af8b38ba30579c488af9b32803b0ba5a2db9ae39ae7b4aa9a763ac9fb5c85bf1b4ddf2c830b642866fcb04c3e396a21ae0be2a447f5f0fa269
+doccontainersize 397096
+doccontainerchecksum 81c786d8e8d6fb8339a4aa48bfe916142340ec47642ec29ea94f542fbd43bc0b4fdef05420b9f92c00da7c0ec07a3035aceb0cc79a4751760a1c1dd5604a59e2
docfiles size=490
doc.html
texmf-dist/doc/man/man1/fmtutil-sys.1
@@ -325865,7 +325938,7 @@ catalogue-topics dissertation
name vancouver
category Package
-revision 55423
+revision 59179
shortdesc Bibliographic style file for Biomedical Journals
relocated 1
longdesc This BibTeX style file is generated with the docstrip utility
@@ -325874,10 +325947,10 @@ longdesc Manuscripts Submitted to Biomedical Journals as published in N
longdesc Engl J Med 1997;336:309-315 (also known as the Vancouver
longdesc style). The complete set of requirements may be viewed on the
longdesc ICMJE web site.
-containersize 8328
-containerchecksum 2dd41dd96607ecbb4c4bde1f6ff3c63a3e79efe7d025fce510e1b0dfc5b8d5bb19826042c04819f1d84178fce7d077e8f7b25fa9beccc4ed88db2683e716444e
-doccontainersize 136436
-doccontainerchecksum 18069bd05809a9c8dc6a5e45af304dc74f40b5304c34064c7de67a961804d540a4cd892b4de380cb6c59a334b09cc165c2aa81749be1d4b2fe56e7fc7528e0f9
+containersize 8704
+containerchecksum a5b3cb732761fe5987982328bc38fc4b7c6ac4fccc64b64df945a92687cbcc6f1223a87ff0cfeb129bcacebb573d03dce7e7517a3ae79f3e1f87f88ac52328a2
+doccontainersize 136664
+doccontainerchecksum 57fb5079ef37821faf8a9146a2cc3c7ab5d5fd128be771a36257b1ef3209d86ea44eb6e6df28345769d6ec534a721fa237d849217b435924020d61d363b8613c
docfiles size=45
RELOC/doc/bibtex/vancouver/FAQ
RELOC/doc/bibtex/vancouver/LICENSE
@@ -325891,7 +325964,7 @@ catalogue-contact-repository https://gitlab.com/fvdbeek/vancouver.bst
catalogue-ctan /biblio/bibtex/contrib/vancouver
catalogue-license lppl1.3
catalogue-topics biomedical journalpub bibtex-sty
-catalogue-version 0.8
+catalogue-version 1.0
name variablelm
category Package
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
index 589c50ed7f..776b16e69f 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
@@ -1 +1 @@
-fecbc0d67fa9c52fa1d10352088f897f texlive.tlpdb
+cdcf78c879ea8ac46a598325a9c3fd82 texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
index 3a4e5dac35..cec16b217c 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
@@ -1 +1 @@
-8437705ea22d220779ae778beb2da4f1d14655cab5a7f90b31bfde91b5a462a26c5ec430c5129f0d442f5779c3c4f65dddb40c6fbab87d83153b431cb9faf4e7 texlive.tlpdb
+5ab9e471d5cf58720f0bdc848cd707e5ede3daaed4e60c39e626133fc456861c06d40f7d060fa8c96e3a6190202fae24f1c1654281e6b647dda85de748ca9d85 texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
index 78655146d8..a559927114 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-----
-iQEcBAEBCgAGBQJgnGqDAAoJEEzhh34ZQ4xw/R4H/is0zZLq59MrQSt9k31gOlxM
-XpASmBPgnUmbXjLk5yGMiGJJehsicHKGphqhOUurLedBFYf+7DxMxUWCUd0/p3Im
-iMzMWoTx4N6b2cDfBa06szczzObwsODv38tlsGWCUYJCfcSdJ6WRnJQ9YFmQAL/h
-voIqAHYLt/OfrazfTpHBmk2p4OIwu3PYHvQnIbRKd9D79cee9dT3rmuZuzBscdt4
-y1OBBhsT3t0gknKHMEUQfwIcQY5M26r/5zCe+srCP1pyv6LTC9dGu1tCQigsc6my
-I6KsNTxc9l2RMztwgEfGu/Eme9J3zBthzkE3ga3K9nDQvyOoTDmnKPAxqpCdGNg=
-=zfLa
+iQEcBAEBCgAGBQJgnbvCAAoJEEzhh34ZQ4xw7UYIAJs/6o+0sWPkTpzq44tZ2xOB
+7uDPbxJA9CZxOB7HYF5r1XLzd+pGQVfDMJCwoxtiS4FGGvWXScJUsKficlpF8Nt9
+74ZDc0o8Ot6erLKkvKKzUMbDERfIIhFBDDHeFAra/2zb6n4saAmqgrRIXgbNLWoa
+ZcfadiV5D/vPSSFB5gKh5GCKPMyu7wc1eE9U6nOlc7/KvEKRfxA/nqS4ZRhTx02C
+P1Eq14qrPrMmVYdtnwbSM/uJc13wiBQ6jJqUAN0A3d/8+9zmzRW7qtklimuwtTgE
+QGhqlscEPRRpRBTKPWU/maNKdNTGiEj26GL6nO65N0EBEM/R0LvSjlSsznNEpXg=
+=XHk7
-----END PGP SIGNATURE-----
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
index 278ff7c5bd..f0069d861d 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
Binary files differ
diff --git a/systems/win32/miktex/tm/packages/next/pr.ini b/systems/win32/miktex/tm/packages/next/pr.ini
index ee4e3b4a9e..658db43efa 100644
--- a/systems/win32/miktex/tm/packages/next/pr.ini
+++ b/systems/win32/miktex/tm/packages/next/pr.ini
@@ -1,13 +1,13 @@
[repository]
-date=1620850472
+date=1620936869
lastupd=miktex-arctrl-bin-2.9 miktex-arctrl-bin-x64-2.9 miktex-asymptote-bin-2.9 miktex-asymptote-bin-x64-2.9 miktex-autosp-bin-2.9 miktex-autosp-bin-x64-2.9 miktex-axohelp-bin-2.9 miktex-axohelp-bin-x64-2.9 miktex-bibarts-bin-2.9 miktex-bibarts-bin-x64-2.9 miktex-bibtex-bin-2.9 miktex-bibtex-bin-x64-2.9 miktex-bibtex8bit-bin-2.9 miktex-bibtex8bit-bin-x64-2.9 miktex-bzip2-bin-2.9 miktex-bzip2-bin-x64-2.9 miktex-cairo-bin-2.9 miktex-cairo-bin-x64-2.9 miktex-chktex-bin-2.9 miktex-chktex-bin-x64-2.9
-lstdigest=273691c365295f90c6f43639f25977cf
+lstdigest=27961abefd77402ed1ea63cebd118588
numpkg=4095
relstate=next
-version=7802
+version=7803
;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows.
;;;;-----BEGIN MIKTEX SIGNATURE-----
-;;;; signature/miktex: GPP9c4aY0ThTAa0NusPgsVpJbG0TuceOkhY87Qr/lDqVrR1jiZ2PL7NQLyAhmHQmdRONfSkg1aRj8IbCfyyDPcsmtK6VSNId0EcVFrp7nLZTrhb1LTyCshRXgDcC84aaQv/bEnLMDkcz81WiQYbuQUWo9C9QUSJHJEp4LzxJSjYa94Dw5t4JnIAlG/g/r6fh9GNJm7+udq/2NqXhI59egQtVoFaXbZo62NNjMGSMJn0PovP5CTOkKnNDs9d7MU6SSUt2k3U5mxwnqA1wev9jBQ3yK2vbjIoT1XzU+qfScAptWEE57H6qxdqcoENKCckXflYWiFLVLIibQKHUANjWPg==
+;;;; signature/miktex: AsXIAYJ3WFf/eE3MsK1KAzLgYrJe1fHzfCpDZiOO7Zofk5df8sugRK50xL32FDl/PgShdYpwVy1ohx9gdvt0it/LJ0Gvu04Xh8Lrx8wOhzDX+YzIJv6mM/OmXRTF4++r964anR5JfkzEEtdzRe9WWkYVosjMELVVfM9vn8SRGuUPvZ8vjf3Xj5sNZVmC+pk9tiYD2lqddP16MjQxIWWhiGquNKVvQowDnKgvOEPMaX9Z8qutYv4bNmKMnjwJllqmbe2nlW0w7b4ss07UCJzjfSLyt7C3QHlOlRMjh0onmE6lvbPp6+vy9N9yDSLbV1ER6lk+w/AoM8AA7gGiISypOQ==
;;;;-----END MIKTEX SIGNATURE-----
diff --git a/systems/win32/miktex/tm/packages/pr.ini b/systems/win32/miktex/tm/packages/pr.ini
index 802d082a99..3c24a1abd1 100644
--- a/systems/win32/miktex/tm/packages/pr.ini
+++ b/systems/win32/miktex/tm/packages/pr.ini
@@ -1,13 +1,13 @@
[repository]
-date=1620850274
+date=1620936666
lastupd=mparhack newcomputermodern nicematrix ninecolors onedown pbalance pgf-pie pm-isomath polexpr pst-circ pxjahyper rmannot texfot tipauni ut-thesis vcell windycity worldflags xint xintsession
-lstdigest=1b7933df6da832221f8181838519d73f
+lstdigest=2b33abec0b26550600530c94ec73c936
numpkg=4095
relstate=stable
-version=7802
+version=7803
;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows.
;;;;-----BEGIN MIKTEX SIGNATURE-----
-;;;; signature/miktex: YiSuWa5ZcFd5RyNKXTMkhqHg8aE0PfMLbOhh2TfajnjSgyS/l2RL9EndtSa1u3DKR9FY/VE44mttxojWbVSIAEXJHWoeWTtxV3O3YZCQzu4qorFvo2xXmGoKoIILJz/M+5I1h+EOT4p+KCkBPNjgxmDcfCGAaCu0+ga3dE0KJ/MU7XUYs51297lvHvzsmYM7MkoxeNogmzT0vN1lKxADD75IXroNoFAjG5s8ACZ7JW7LtHcQpftP5Uh7TZbtOSJ92M0tfqRKFPTkbsFdnsrt0TMPEwTJWxSuXosuzdmzD53bSHy8jMzeN/9mjhQJrUYzT5RllHpbY74+V8ETAAPTVw==
+;;;; signature/miktex: MrY4YFkSLDeH7Az0IAjCDofKmRa70AqebB2Uv4Bb40GDNhk1TKl0in7E81kMRGnqN+Q2MO6fZw+OTBOYJ4JBYbyfnJXsB2bGKorTsy5D9pvHBVWNMob2Ou1j6YkzqUDC+IQ0tY4mi7Lr6QEP5Uqgkk8TYPpKoFMofoSiuAT3noz5jGBnlW/EtIQPDhzL+XC0g1PZhEMDJk/9anBqNuojL3dCF+Eo7ZiY+tmBi91gGqaisZhnw187zTtJH7JTqGhYjYhep95io0d6J+iK9e8t8Uv9QwvUYf/8TjFfL4+U5GwmWiSrh+s0/du/P4ACU6TEmirkGiA2UmCivNVNpYpV4w==
;;;;-----END MIKTEX SIGNATURE-----
diff --git a/systems/win32/w32tex/ChangeLog b/systems/win32/w32tex/ChangeLog
index 70064fcc74..156dc88f78 100644
--- a/systems/win32/w32tex/ChangeLog
+++ b/systems/win32/w32tex/ChangeLog
@@ -1,5 +1,15 @@
W32TeX (x86 & x64) ChangeLog
+[2021/05/13]
+(01) ltxpkgs.tar.xz
+ Update bnumexpr, hvfloat and unravel.
+(02) makeindex-w32.tar.xz
+ Rebuild upmendex.exe.
+(03) pgfcontrib.tar.xz
+ Update worldflags.
+(04) win64/makeindex-w64.tar.xz
+ Rebuild upmendex.exe.
+
[2021/05/12]
(01) cjkzr.tar.xz
Update pxjahyper.
diff --git a/timestamp b/timestamp
index f037a206e0..f8b0937087 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:
-2021-05-13-02-02
+2021-05-14-02-02