summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2020-04-30 03:01:50 +0000
committerNorbert Preining <norbert@preining.info>2020-04-30 03:01:50 +0000
commitb273a879fbed76480fb7368ad555010024f3e411 (patch)
tree8c29aac231a89dfd7f5de12355da70f573b70d6d
parent817ecb96eab4ed6494ddb6b8d0f17c2947a91196 (diff)
CTAN sync 202004300301
-rw-r--r--FILES.byname704
-rw-r--r--FILES.byname.gzbin2216377 -> 2216648 bytes
-rw-r--r--FILES.last07days728
-rw-r--r--macros/context/contrib/context-vim/VERSION2
-rw-r--r--macros/context/contrib/context-vim/doc/context/third/vim/vim.txt26
-rw-r--r--macros/context/contrib/context-vim/tex/context/third/vim/t-vim.tex16
-rw-r--r--macros/generic/expkv-cs/README.md2
-rw-r--r--macros/generic/expkv-cs/expkv-cs.dtx52
-rw-r--r--macros/generic/expkv-cs/expkv-cs.pdfbin311391 -> 313486 bytes
-rw-r--r--macros/generic/expkv-def/README.md2
-rw-r--r--macros/generic/expkv-def/expkv-def.dtx32
-rw-r--r--macros/generic/expkv-def/expkv-def.pdfbin302355 -> 303450 bytes
-rw-r--r--macros/generic/xlop/LISEZMOI61
-rw-r--r--macros/generic/xlop/README5
-rw-r--r--macros/generic/xlop/doc/manual.sty48
-rw-r--r--macros/generic/xlop/doc/xlop-doc-fr.pdfbin346691 -> 394072 bytes
-rw-r--r--macros/generic/xlop/doc/xlop-doc-fr.tex1953
-rw-r--r--macros/generic/xlop/doc/xlop-doc.pdfbin328002 -> 373942 bytes
-rw-r--r--macros/generic/xlop/doc/xlop-doc.tex261
-rw-r--r--macros/generic/xlop/tex/xlop.sty2
-rw-r--r--macros/generic/xlop/tex/xlop.tex236
-rw-r--r--macros/latex/contrib/acro/README42
-rw-r--r--macros/latex/contrib/acro/acro-manual.cls391
-rw-r--r--macros/latex/contrib/acro/acro-manual.pdfbin576765 -> 851941 bytes
-rw-r--r--macros/latex/contrib/acro/acro-manual.tex3927
-rw-r--r--macros/latex/contrib/acro/acro.definitions.tex581
-rw-r--r--macros/latex/contrib/acro/acro.history286
-rw-r--r--macros/latex/contrib/acro/acro.sty7599
-rw-r--r--macros/latex/contrib/acro/acro2.sty4640
-rw-r--r--macros/latex/contrib/acro/examples/acro.example.acflike.pdfbin0 -> 21224 bytes
-rw-r--r--macros/latex/contrib/acro/examples/acro.example.acflike.tex17
-rw-r--r--macros/latex/contrib/acro/examples/acro.example.basic.pdfbin0 -> 125351 bytes
-rw-r--r--macros/latex/contrib/acro/examples/acro.example.basic.tex (renamed from macros/latex/contrib/acro/example_two.tex)11
-rw-r--r--macros/latex/contrib/acro/examples/acro.example.issue-109.pdfbin0 -> 30275 bytes
-rw-r--r--macros/latex/contrib/acro/examples/acro.example.issue-109.tex25
-rw-r--r--macros/latex/contrib/acro/examples/acro.example.issue-111.pdfbin0 -> 15733 bytes
-rw-r--r--macros/latex/contrib/acro/examples/acro.example.issue-111.tex27
-rw-r--r--macros/latex/contrib/acro/examples/acro.example.issue-119.pdfbin0 -> 8175 bytes
-rw-r--r--macros/latex/contrib/acro/examples/acro.example.issue-119.tex49
-rw-r--r--macros/latex/contrib/acro/examples/acro.example.issue-154.pdfbin0 -> 24224 bytes
-rw-r--r--macros/latex/contrib/acro/examples/acro.example.issue-154.tex17
-rw-r--r--macros/latex/contrib/acro/examples/acro.example.possessive.pdfbin0 -> 13686 bytes
-rw-r--r--macros/latex/contrib/acro/examples/acro.example.possessive.tex36
-rw-r--r--macros/latex/contrib/acro/examples/acro.example.texsx-505891.pdfbin0 -> 32429 bytes
-rw-r--r--macros/latex/contrib/acro/examples/acro.example.texsx-505891.tex46
-rw-r--r--macros/latex/contrib/acro/examples/acro.example.texsx-507726.pdfbin0 -> 33721 bytes
-rw-r--r--macros/latex/contrib/acro/examples/acro.example.texsx-507726.tex63
-rw-r--r--macros/latex/contrib/acro/examples/acro.example.units.pdfbin0 -> 65310 bytes
-rw-r--r--macros/latex/contrib/acro/examples/acro.example.units.tex (renamed from macros/latex/contrib/acro/example_one.tex)64
-rw-r--r--macros/latex/contrib/tkz/tkz-tab/README.md2
-rw-r--r--macros/latex/contrib/tkz/tkz-tab/doc/TKZdoc-tab.pdfbin346431 -> 346429 bytes
-rw-r--r--macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-main.tex51
-rw-r--r--macros/latex/contrib/tkz/tkz-tab/latex/tkz-tab.sty2
-rw-r--r--systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl2
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb310
-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.xzbin2195032 -> 2194152 bytes
-rw-r--r--systems/texlive/tlnet/tlpkg/translations/cs.po18
-rw-r--r--systems/texlive/tlnet/tlpkg/translations/de.po18
-rw-r--r--systems/texlive/tlnet/tlpkg/translations/es.po18
-rw-r--r--systems/texlive/tlnet/tlpkg/translations/fr.po18
-rw-r--r--systems/texlive/tlnet/tlpkg/translations/it.po18
-rw-r--r--systems/texlive/tlnet/tlpkg/translations/ja.po18
-rw-r--r--systems/texlive/tlnet/tlpkg/translations/messages.pot18
-rw-r--r--systems/texlive/tlnet/tlpkg/translations/nl.po18
-rw-r--r--systems/texlive/tlnet/tlpkg/translations/pl.po18
-rw-r--r--systems/texlive/tlnet/tlpkg/translations/pt_BR.po18
-rw-r--r--systems/texlive/tlnet/tlpkg/translations/ru.po18
-rw-r--r--systems/texlive/tlnet/tlpkg/translations/sk.po18
-rw-r--r--systems/texlive/tlnet/tlpkg/translations/sl.po18
-rw-r--r--systems/texlive/tlnet/tlpkg/translations/sr.po18
-rw-r--r--systems/texlive/tlnet/tlpkg/translations/uk.po18
-rw-r--r--systems/texlive/tlnet/tlpkg/translations/vi.po18
-rw-r--r--systems/texlive/tlnet/tlpkg/translations/zh_CN.po18
-rw-r--r--systems/texlive/tlnet/tlpkg/translations/zh_TW.po18
-rw-r--r--systems/win32/miktex/setup/deb/dists/bionic/InRelease40
-rw-r--r--systems/win32/miktex/setup/deb/dists/bionic/Release26
-rw-r--r--systems/win32/miktex/setup/deb/dists/bionic/Release.gpg14
-rw-r--r--systems/win32/miktex/setup/deb/dists/bionic/universe/Contents-amd64.gzbin1361 -> 1395 bytes
-rw-r--r--systems/win32/miktex/setup/deb/dists/bionic/universe/binary-amd64/Packages16
-rw-r--r--systems/win32/miktex/setup/deb/dists/bionic/universe/binary-amd64/Packages.bz2bin769 -> 1038 bytes
-rw-r--r--systems/win32/miktex/setup/deb/dists/bionic/universe/binary-amd64/Packages.gzbin736 -> 871 bytes
-rw-r--r--systems/win32/miktex/setup/deb/dists/buster/InRelease40
-rw-r--r--systems/win32/miktex/setup/deb/dists/buster/Release26
-rw-r--r--systems/win32/miktex/setup/deb/dists/buster/Release.gpg14
-rw-r--r--systems/win32/miktex/setup/deb/dists/buster/universe/Contents-amd64.gzbin1361 -> 1395 bytes
-rw-r--r--systems/win32/miktex/setup/deb/dists/buster/universe/binary-amd64/Packages16
-rw-r--r--systems/win32/miktex/setup/deb/dists/buster/universe/binary-amd64/Packages.bz2bin794 -> 1084 bytes
-rw-r--r--systems/win32/miktex/setup/deb/dists/buster/universe/binary-amd64/Packages.gzbin764 -> 898 bytes
-rw-r--r--systems/win32/miktex/setup/deb/dists/stretch/InRelease40
-rw-r--r--systems/win32/miktex/setup/deb/dists/stretch/Release26
-rw-r--r--systems/win32/miktex/setup/deb/dists/stretch/Release.gpg14
-rw-r--r--systems/win32/miktex/setup/deb/dists/stretch/universe/Contents-amd64.gzbin1361 -> 1395 bytes
-rw-r--r--systems/win32/miktex/setup/deb/dists/stretch/universe/binary-amd64/Packages16
-rw-r--r--systems/win32/miktex/setup/deb/dists/stretch/universe/binary-amd64/Packages.bz2bin796 -> 1069 bytes
-rw-r--r--systems/win32/miktex/setup/deb/dists/stretch/universe/binary-amd64/Packages.gzbin756 -> 890 bytes
-rw-r--r--systems/win32/miktex/setup/deb/dists/xenial/InRelease40
-rw-r--r--systems/win32/miktex/setup/deb/dists/xenial/Release26
-rw-r--r--systems/win32/miktex/setup/deb/dists/xenial/Release.gpg14
-rw-r--r--systems/win32/miktex/setup/deb/dists/xenial/universe/Contents-amd64.gzbin1361 -> 1395 bytes
-rw-r--r--systems/win32/miktex/setup/deb/dists/xenial/universe/binary-amd64/Packages16
-rw-r--r--systems/win32/miktex/setup/deb/dists/xenial/universe/binary-amd64/Packages.bz2bin771 -> 1043 bytes
-rw-r--r--systems/win32/miktex/setup/deb/dists/xenial/universe/binary-amd64/Packages.gzbin735 -> 871 bytes
-rw-r--r--systems/win32/miktex/setup/rpm/fedora/28/repodata/377274b5e41ff2b41b1dc7dd33d404947c6370b24a585e8ba64d72886c6d7e78-filelists.sqlite.bz2bin8512 -> 0 bytes
-rw-r--r--systems/win32/miktex/setup/rpm/fedora/28/repodata/6da87e174699f0405723275cd0850f21062d5e8715b3f3204f9c9d938a148860-filelists.xml.gzbin0 -> 10074 bytes
-rw-r--r--systems/win32/miktex/setup/rpm/fedora/28/repodata/7ffad73d25c8e04c4768a599c84553eb5acdb1c6b35dd5cf4ec7ff262b4859ab-other.xml.gzbin345 -> 0 bytes
-rw-r--r--systems/win32/miktex/setup/rpm/fedora/28/repodata/8d2495520d907b62581db4ee1d81efc9e55ff387c66e433376bde385724d0eea-other.xml.gzbin0 -> 406 bytes
-rw-r--r--systems/win32/miktex/setup/rpm/fedora/28/repodata/9f5f776f90002b63ac58865d84fb17e66a5a484de9fbf5696dfdbae9700382cc-primary.sqlite.bz2bin7082 -> 0 bytes
-rw-r--r--systems/win32/miktex/setup/rpm/fedora/28/repodata/b2adeb7f59747951b8caa932abaabf8d76891c3354865869e0e48bce305bbc61-primary.sqlite.bz2bin0 -> 11606 bytes
-rw-r--r--systems/win32/miktex/setup/rpm/fedora/28/repodata/dbfc947d0bec68ebf53085813d746202dc60498e4b8151346062ccdabc030f7c-primary.xml.gzbin0 -> 2365 bytes
-rw-r--r--systems/win32/miktex/setup/rpm/fedora/28/repodata/e27417bed8dcf25abc18ca9ad20510691ea9398e9a6a4601cfdccc2bec31f312-other.sqlite.bz2bin780 -> 0 bytes
-rw-r--r--systems/win32/miktex/setup/rpm/fedora/28/repodata/e92de39e364e57e7e44a0e3bd72033db3add06101534bdabbb9cfb4d714e955b-primary.xml.gzbin2088 -> 0 bytes
-rw-r--r--systems/win32/miktex/setup/rpm/fedora/28/repodata/ea186766bcba0ddc6a28b5f9a81c6724f219e952e92e13653d4e527f689fbda7-other.sqlite.bz2bin0 -> 911 bytes
-rw-r--r--systems/win32/miktex/setup/rpm/fedora/28/repodata/f06bf7319515ee35ca32c5459616f419a8d22b9766ea5f1105a8e644242fc0c7-filelists.sqlite.bz2bin0 -> 14494 bytes
-rw-r--r--systems/win32/miktex/setup/rpm/fedora/28/repodata/f174c00e2b6866ebfd0bcfa845e504317d10a9cdf774e5abe43d8a34e810868d-filelists.xml.gzbin6164 -> 0 bytes
-rw-r--r--systems/win32/miktex/setup/rpm/fedora/28/repodata/repomd.xml72
-rw-r--r--systems/win32/miktex/setup/rpm/fedora/28/repodata/repomd.xml.asc16
-rw-r--r--systems/win32/miktex/setup/rpm/fedora/30/repodata/06258324fb706bd9ece7eca5e904bbbe4a74cc579ef5fb94b1e139d415c7f09d-primary.sqlite.bz2bin0 -> 11638 bytes
-rw-r--r--systems/win32/miktex/setup/rpm/fedora/30/repodata/09b4e487e5b27bc18cdafe05dd6738fbe0be38ab0403216be6ed23e8707ac5de-other.sqlite.bz2bin672 -> 0 bytes
-rw-r--r--systems/win32/miktex/setup/rpm/fedora/30/repodata/0b709d64429c0867232b5ab7317c8aa7ca4084ded02c7f7ecb7cb1d8a94e8fcd-primary.sqlite.bz2bin7107 -> 0 bytes
-rw-r--r--systems/win32/miktex/setup/rpm/fedora/30/repodata/769f8c2809ab8c8f9ef0abce50980bcf60346b7f374c39129f8e5056237bbbfd-other.xml.gzbin0 -> 286 bytes
-rw-r--r--systems/win32/miktex/setup/rpm/fedora/30/repodata/79b50dca9abd8d87f67b24c029fa043508b72fc64ebe9bdedc42124f41a43d21-filelists.sqlite.bz2bin0 -> 14618 bytes
-rw-r--r--systems/win32/miktex/setup/rpm/fedora/30/repodata/943501c6a4e4abe4313efe772fa1d6ab80d932d5c96d37be9711399ae247168a-filelists.sqlite.bz2bin8439 -> 0 bytes
-rw-r--r--systems/win32/miktex/setup/rpm/fedora/30/repodata/9830106c8d5bfa0b45a08f387fd6bddc4b7938e1131b44cec5c03f056fc8a39b-filelists.xml.gzbin6108 -> 0 bytes
-rw-r--r--systems/win32/miktex/setup/rpm/fedora/30/repodata/9bac34f4b39721b5479d733999471aea9804b7c53eae52b91287cb911bb6f49b-primary.xml.gzbin0 -> 2361 bytes
-rw-r--r--systems/win32/miktex/setup/rpm/fedora/30/repodata/b2f7cf50c39d36ea88b98bc01986fad2600d07f0a53aa7a4f2817a694b23cd91-other.xml.gzbin234 -> 0 bytes
-rw-r--r--systems/win32/miktex/setup/rpm/fedora/30/repodata/c29d0d6ccf64b5d56b27e28df6242cf643552a526e8d10658e5f8f632f8b3097-other.sqlite.bz2bin0 -> 743 bytes
-rw-r--r--systems/win32/miktex/setup/rpm/fedora/30/repodata/d38c95c8f6b286641bce3939f5d29dbd6a79e16eda87b1b5f75cbfbb97f3231c-filelists.xml.gzbin0 -> 10046 bytes
-rw-r--r--systems/win32/miktex/setup/rpm/fedora/30/repodata/d39b3d1c72d8844081495e91dcdda11743305260b2b3ec2446b7cb5d44484be5-primary.xml.gzbin2086 -> 0 bytes
-rw-r--r--systems/win32/miktex/setup/rpm/fedora/30/repodata/repomd.xml72
-rw-r--r--systems/win32/miktex/setup/rpm/fedora/30/repodata/repomd.xml.asc16
-rw-r--r--systems/win32/miktex/setup/rpm/opensuse/15/repodata/04fdc2a5893d5d7a7a9786b2835611f03450a293aa51590c27add5ac4be3e89c-primary.sqlite.bz2bin7031 -> 0 bytes
-rw-r--r--systems/win32/miktex/setup/rpm/opensuse/15/repodata/16331f160f05f229eb85d1d446f95ef241f6288d499bb440f96433319fa645b1-primary.sqlite.bz2bin0 -> 11533 bytes
-rw-r--r--systems/win32/miktex/setup/rpm/opensuse/15/repodata/195a6dbab59fe6724013e2f10d0104f52fc468bd120412a502ef71e57e2218fa-primary.xml.gzbin0 -> 2343 bytes
-rw-r--r--systems/win32/miktex/setup/rpm/opensuse/15/repodata/280a3e5276d80e6481dc48b2fc02ab4a5309b1b9137ff1c16fe0416dffb9b5b5-filelists.sqlite.bz2bin0 -> 3502 bytes
-rw-r--r--systems/win32/miktex/setup/rpm/opensuse/15/repodata/451eef3fe3bf0b83899d547ba053ab9582c5bdcf0f964ef580a801a9c1df1256-other.sqlite.bz2bin783 -> 0 bytes
-rw-r--r--systems/win32/miktex/setup/rpm/opensuse/15/repodata/52be9f00f78d1c643206be8889ca16300463e8bcb6d681aef2754400934a98d3-primary.xml.gzbin2069 -> 0 bytes
-rw-r--r--systems/win32/miktex/setup/rpm/opensuse/15/repodata/6946ddbc519f9a3c9ddf1423af1ada9f5a12d5582f4a101d5e6e87facdfb8a21-filelists.xml.gzbin1588 -> 0 bytes
-rw-r--r--systems/win32/miktex/setup/rpm/opensuse/15/repodata/804205ce3e52cf50d9551a6b86dcb35f3d0ad5aedeb6783d6731393a8e6b2344-filelists.sqlite.bz2bin2634 -> 0 bytes
-rw-r--r--systems/win32/miktex/setup/rpm/opensuse/15/repodata/903db07028bbf6ef6c56d7a0d3822e422e560deab9dcac1ce773bf95a5c8b9ac-other.xml.gzbin343 -> 0 bytes
-rw-r--r--systems/win32/miktex/setup/rpm/opensuse/15/repodata/c303e5ca93bd0e6be7c07b97be6d29a57de04beb39a11713f8fc72da5e888070-filelists.xml.gzbin0 -> 1795 bytes
-rw-r--r--systems/win32/miktex/setup/rpm/opensuse/15/repodata/fb94789dd7da1d23dffa0931b4bc95c25f31995c9a5149bd09ccc6ad5b25fcf5-other.sqlite.bz2bin0 -> 892 bytes
-rw-r--r--systems/win32/miktex/setup/rpm/opensuse/15/repodata/fcde7e11d2dfc8233ba28ce3a7301f53cc6bdee7cf1eeceb3759384652d60b2e-other.xml.gzbin0 -> 404 bytes
-rw-r--r--systems/win32/miktex/setup/rpm/opensuse/15/repodata/repomd.xml72
-rw-r--r--systems/win32/miktex/setup/rpm/opensuse/15/repodata/repomd.xml.asc16
-rw-r--r--systems/win32/miktex/tm/packages/next/pr.ini6
-rw-r--r--systems/win32/miktex/tm/packages/pr.ini6
-rw-r--r--systems/win32/w32tex/ChangeLog67
-rw-r--r--timestamp2
151 files changed, 14605 insertions, 8784 deletions
diff --git a/FILES.byname b/FILES.byname
index 7cd48290a8..863e26ce9d 100644
--- a/FILES.byname
+++ b/FILES.byname
@@ -5001,7 +5001,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
-2020/04/28 | 302691 | FILES.last07days
+2020/04/29 | 309527 | FILES.last07days
2018/06/27 | 99883 | fonts/academicons/academicons.pdf
2018/06/27 | 10779 | fonts/academicons/academicons.sty
2018/06/27 | 5774 | fonts/academicons/academicons.tex
@@ -162201,8 +162201,8 @@
2015/11/14 | 558928 | install/macros/generic/catcodes.tds.zip
2015/11/16 | 603358 | install/macros/generic/commado.tds.zip
2015/11/14 | 1248858 | install/macros/generic/dowith.tds.zip
-2020/04/05 | 323918 | install/macros/generic/expkv-cs.tds.zip
-2020/04/04 | 313693 | install/macros/generic/expkv-def.tds.zip
+2020/04/29 | 326277 | install/macros/generic/expkv-cs.tds.zip
+2020/04/29 | 314842 | install/macros/generic/expkv-def.tds.zip
2020/04/10 | 404002 | install/macros/generic/expkv.tds.zip
2012/09/20 | 321508 | install/macros/generic/langcode.tds.zip
2020/03/21 | 601137 | install/macros/generic/markdown.tds.zip
@@ -175976,14 +175976,14 @@
2017/05/25 | 50653 | macros/generic/expex/expex.tex
2017/05/25 | 1673 | macros/generic/expex/README
2017/05/26 | 498764 | macros/generic/expex.zip
-2020/04/05 | 55857 | macros/generic/expkv-cs/expkv-cs.dtx
-2020/04/05 | 311391 | macros/generic/expkv-cs/expkv-cs.pdf
-2020/04/05 | 1291 | macros/generic/expkv-cs/README.md
-2020/04/05 | 319171 | macros/generic/expkv-cs.zip
-2020/04/04 | 52953 | macros/generic/expkv-def/expkv-def.dtx
-2020/04/04 | 302355 | macros/generic/expkv-def/expkv-def.pdf
-2020/04/04 | 1264 | macros/generic/expkv-def/README.md
-2020/04/04 | 308634 | macros/generic/expkv-def.zip
+2020/04/29 | 57073 | macros/generic/expkv-cs/expkv-cs.dtx
+2020/04/29 | 313486 | macros/generic/expkv-cs/expkv-cs.pdf
+2020/04/29 | 1291 | macros/generic/expkv-cs/README.md
+2020/04/29 | 321458 | macros/generic/expkv-cs.zip
+2020/04/29 | 53160 | macros/generic/expkv-def/expkv-def.dtx
+2020/04/29 | 303450 | macros/generic/expkv-def/expkv-def.pdf
+2020/04/29 | 1263 | macros/generic/expkv-def/README.md
+2020/04/29 | 309788 | macros/generic/expkv-def.zip
2020/04/10 | 65611 | macros/generic/expkv/expkv.dtx
2020/04/10 | 389159 | macros/generic/expkv/expkv.pdf
2020/04/10 | 1425 | macros/generic/expkv/README.md
@@ -176715,16 +176715,15 @@
2020/02/25 | 1640535 | macros/generic/xint/xint.dtx
2020/02/25 | 993300 | macros/generic/xint/xint.pdf
2020/02/26 | 2385887 | macros/generic/xint.zip
-2017/01/07 | 1247 | macros/generic/xlop/doc/manual.sty
-2017/01/07 | 346691 | macros/generic/xlop/doc/xlop-doc-fr.pdf
-2017/01/07 | 101015 | macros/generic/xlop/doc/xlop-doc-fr.tex
-2017/01/07 | 328002 | macros/generic/xlop/doc/xlop-doc.pdf
-2017/01/07 | 90839 | macros/generic/xlop/doc/xlop-doc.tex
-2017/01/07 | 2819 | macros/generic/xlop/LISEZMOI
-2017/01/07 | 1982 | macros/generic/xlop/README
-2017/01/07 | 90 | macros/generic/xlop/tex/xlop.sty
-2017/01/07 | 123174 | macros/generic/xlop/tex/xlop.tex
-2017/01/08 | 591966 | macros/generic/xlop.zip
+2020/04/29 | 394072 | macros/generic/xlop/doc/xlop-doc-fr.pdf
+2020/04/29 | 107439 | macros/generic/xlop/doc/xlop-doc-fr.tex
+2020/04/29 | 373942 | macros/generic/xlop/doc/xlop-doc.pdf
+2020/04/29 | 95137 | macros/generic/xlop/doc/xlop-doc.tex
+2020/04/29 | 2749 | macros/generic/xlop/LISEZMOI
+2020/04/29 | 1917 | macros/generic/xlop/README
+2020/04/29 | 90 | macros/generic/xlop/tex/xlop.sty
+2020/04/29 | 126738 | macros/generic/xlop/tex/xlop.tex
+2020/04/29 | 608836 | macros/generic/xlop.zip
2019/02/04 | 3828 | macros/generic/xstring/README
2019/02/01 | 99780 | macros/generic/xstring/test_etex.pdf
2019/02/01 | 37798 | macros/generic/xstring/test_etex.tex
@@ -178491,14 +178490,30 @@
2000/05/18 | 2170 | macros/latex/contrib/acmconf/README
2000/05/18 | 30 | macros/latex/contrib/acmconf/THIS-IS-VERSION-1.3
2008/05/14 | 105778 | macros/latex/contrib/acmconf.zip
-2020/03/07 | 12268 | macros/latex/contrib/acro/acro.definitions.tex
-2020/03/07 | 16043 | macros/latex/contrib/acro/acro.history
-2020/03/07 | 12169 | macros/latex/contrib/acro/acro-manual.cls
-2020/03/07 | 576765 | macros/latex/contrib/acro/acro-manual.pdf
-2020/03/07 | 86622 | macros/latex/contrib/acro/acro-manual.tex
-2020/03/07 | 134133 | macros/latex/contrib/acro/acro.sty
-2020/03/07 | 1969 | macros/latex/contrib/acro/example_one.tex
-2020/03/07 | 3251 | macros/latex/contrib/acro/example_two.tex
+2020/04/12 | 144058 | macros/latex/contrib/acro/acro2.sty
+2020/04/29 | 851941 | macros/latex/contrib/acro/acro-manual.pdf
+2020/04/29 | 95845 | macros/latex/contrib/acro/acro-manual.tex
+2020/04/29 | 158998 | macros/latex/contrib/acro/acro.sty
+2020/04/29 | 21224 | macros/latex/contrib/acro/examples/acro.example.acflike.pdf
+2020/04/29 | 315 | macros/latex/contrib/acro/examples/acro.example.acflike.tex
+2020/04/29 | 125351 | macros/latex/contrib/acro/examples/acro.example.basic.pdf
+2020/04/29 | 3214 | macros/latex/contrib/acro/examples/acro.example.basic.tex
+2020/04/29 | 30275 | macros/latex/contrib/acro/examples/acro.example.issue-109.pdf
+2020/04/29 | 329 | macros/latex/contrib/acro/examples/acro.example.issue-109.tex
+2020/04/29 | 15733 | macros/latex/contrib/acro/examples/acro.example.issue-111.pdf
+2020/04/29 | 706 | macros/latex/contrib/acro/examples/acro.example.issue-111.tex
+2020/04/29 | 8175 | macros/latex/contrib/acro/examples/acro.example.issue-119.pdf
+2020/04/29 | 983 | macros/latex/contrib/acro/examples/acro.example.issue-119.tex
+2020/04/29 | 24224 | macros/latex/contrib/acro/examples/acro.example.issue-154.pdf
+2020/04/29 | 286 | macros/latex/contrib/acro/examples/acro.example.issue-154.tex
+2020/04/29 | 13686 | macros/latex/contrib/acro/examples/acro.example.possessive.pdf
+2020/04/29 | 779 | macros/latex/contrib/acro/examples/acro.example.possessive.tex
+2020/04/29 | 32429 | macros/latex/contrib/acro/examples/acro.example.texsx-505891.pdf
+2020/04/29 | 1139 | macros/latex/contrib/acro/examples/acro.example.texsx-505891.tex
+2020/04/29 | 33721 | macros/latex/contrib/acro/examples/acro.example.texsx-507726.pdf
+2020/04/29 | 1449 | macros/latex/contrib/acro/examples/acro.example.texsx-507726.tex
+2020/04/29 | 65310 | macros/latex/contrib/acro/examples/acro.example.units.pdf
+2020/04/29 | 2050 | macros/latex/contrib/acro/examples/acro.example.units.tex
2016/02/02 | 329 | macros/latex/contrib/acroflex/acroflex.cfg
2016/08/29 | 80056 | macros/latex/contrib/acroflex/acroflex.dtx
2008/07/02 | 1842 | macros/latex/contrib/acroflex/acroflex.ins
@@ -178527,7 +178542,7 @@
2020/04/11 | 9214 | macros/latex/contrib/acronym/CHANGES
2020/04/11 | 1017 | macros/latex/contrib/acronym/README
2020/04/11 | 295778 | macros/latex/contrib/acronym.zip
-2020/03/07 | 1368 | macros/latex/contrib/acro/README
+2020/04/29 | 1904 | macros/latex/contrib/acro/README
2010/11/19 | 11356 | macros/latex/contrib/acroterm/acroterm.dtx
2010/11/19 | 1394 | macros/latex/contrib/acroterm/acroterm.ins
2010/11/19 | 172447 | macros/latex/contrib/acroterm/acroterm.pdf
@@ -178567,7 +178582,7 @@
2019/12/30 | 216157 | macros/latex/contrib/acrotex/web.dtx
2018/07/14 | 2338 | macros/latex/contrib/acrotex/web.ins
2020/04/10 | 3355560 | macros/latex/contrib/acrotex.zip
-2020/03/07 | 631663 | macros/latex/contrib/acro.zip
+2020/04/29 | 1287730 | macros/latex/contrib/acro.zip
2019/06/13 | 26799 | macros/latex/contrib/actuarialangle/actuarialangle.dtx
2019/06/13 | 120479 | macros/latex/contrib/actuarialangle/actuarialangle.pdf
2019/06/13 | 1176 | macros/latex/contrib/actuarialangle/README.md
@@ -204703,7 +204718,7 @@
2020/04/10 | 17897 | macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-examples.tex
2020/04/08 | 7965 | macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-image.tex
2020/04/08 | 9125 | macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-init.tex
-2020/04/27 | 6278 | macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-main.tex
+2020/04/29 | 5881 | macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-main.tex
2020/04/10 | 12206 | macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-sign.tex
2020/04/08 | 1429 | macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-slope.tex
2020/04/08 | 11887 | macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-style.tex
@@ -204711,10 +204726,10 @@
2011/04/18 | 3100 | macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-tv.tex
2020/04/08 | 7683 | macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-valeurs.tex
2020/04/08 | 28365 | macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-variation.tex
-2020/04/27 | 346431 | macros/latex/contrib/tkz/tkz-tab/doc/TKZdoc-tab.pdf
-2020/04/27 | 48513 | macros/latex/contrib/tkz/tkz-tab/latex/tkz-tab.sty
-2020/04/27 | 1401 | macros/latex/contrib/tkz/tkz-tab/README.md
-2020/04/27 | 381342 | macros/latex/contrib/tkz/tkz-tab.zip
+2020/04/29 | 346429 | macros/latex/contrib/tkz/tkz-tab/doc/TKZdoc-tab.pdf
+2020/04/29 | 48513 | macros/latex/contrib/tkz/tkz-tab/latex/tkz-tab.sty
+2020/04/29 | 1401 | macros/latex/contrib/tkz/tkz-tab/README.md
+2020/04/29 | 381096 | macros/latex/contrib/tkz/tkz-tab.zip
2019/06/20 | 646 | macros/latex/contrib/tlc-article/bin/deploy
2019/06/20 | 2158 | macros/latex/contrib/tlc-article/data/additional-layout.tex
2019/06/20 | 6798 | macros/latex/contrib/tlc-article/data/logo.png
@@ -252981,10 +252996,10 @@
2019/02/28 | 281848 | systems/texlive/tlnet/archive/abc.doc.r41157.tar.xz
2019/02/28 | 2608 | systems/texlive/tlnet/archive/abc.r41157.tar.xz
2019/02/28 | 9616 | systems/texlive/tlnet/archive/abc.source.r41157.tar.xz
-2019/12/15 | 116944 | systems/texlive/tlnet/archive/abnt.doc.r53128.tar.xz
+2020/04/29 | 120432 | systems/texlive/tlnet/archive/abnt.doc.r54927.tar.xz
2019/02/28 | 4585444 | systems/texlive/tlnet/archive/abntex2.doc.r49248.tar.xz
2019/02/28 | 29920 | systems/texlive/tlnet/archive/abntex2.r49248.tar.xz
-2019/12/15 | 2516 | systems/texlive/tlnet/archive/abnt.r53128.tar.xz
+2020/04/29 | 2788 | systems/texlive/tlnet/archive/abnt.r54927.tar.xz
2019/02/28 | 199148 | systems/texlive/tlnet/archive/abraces.doc.r27880.tar.xz
2019/02/28 | 1956 | systems/texlive/tlnet/archive/abraces.r27880.tar.xz
2019/02/28 | 146720 | systems/texlive/tlnet/archive/abstract.doc.r15878.tar.xz
@@ -253631,7 +253646,7 @@
2019/02/28 | 127824 | systems/texlive/tlnet/archive/babel-danish.doc.r30262.tar.xz
2019/02/28 | 2464 | systems/texlive/tlnet/archive/babel-danish.r30262.tar.xz
2019/02/28 | 5704 | systems/texlive/tlnet/archive/babel-danish.source.r30262.tar.xz
-2020/03/23 | 758880 | systems/texlive/tlnet/archive/babel.doc.r54487.tar.xz
+2020/04/29 | 763428 | systems/texlive/tlnet/archive/babel.doc.r54930.tar.xz
2019/02/28 | 154000 | systems/texlive/tlnet/archive/babel-dutch.doc.r30263.tar.xz
2019/02/28 | 2848 | systems/texlive/tlnet/archive/babel-dutch.r30263.tar.xz
2019/02/28 | 7936 | systems/texlive/tlnet/archive/babel-dutch.source.r30263.tar.xz
@@ -253717,7 +253732,7 @@
2019/02/28 | 146188 | systems/texlive/tlnet/archive/babel-portuges.doc.r30284.tar.xz
2019/02/28 | 2704 | systems/texlive/tlnet/archive/babel-portuges.r30284.tar.xz
2019/02/28 | 6648 | systems/texlive/tlnet/archive/babel-portuges.source.r30284.tar.xz
-2020/03/23 | 162468 | systems/texlive/tlnet/archive/babel.r54487.tar.xz
+2020/04/29 | 163824 | systems/texlive/tlnet/archive/babel.r54930.tar.xz
2019/02/28 | 113084 | systems/texlive/tlnet/archive/babel-romanian.doc.r30285.tar.xz
2019/02/28 | 2176 | systems/texlive/tlnet/archive/babel-romanian.r30285.tar.xz
2019/02/28 | 4340 | systems/texlive/tlnet/archive/babel-romanian.source.r30285.tar.xz
@@ -253748,7 +253763,7 @@
2019/02/28 | 215620 | systems/texlive/tlnet/archive/babel-sorbian.doc.r30294.tar.xz
2019/02/28 | 3156 | systems/texlive/tlnet/archive/babel-sorbian.r30294.tar.xz
2019/02/28 | 6236 | systems/texlive/tlnet/archive/babel-sorbian.source.r30294.tar.xz
-2020/03/23 | 643800 | systems/texlive/tlnet/archive/babel.source.r54487.tar.xz
+2020/04/29 | 644544 | systems/texlive/tlnet/archive/babel.source.r54930.tar.xz
2020/03/04 | 183488 | systems/texlive/tlnet/archive/babel-spanish.doc.r54080.tar.xz
2020/03/04 | 8652 | systems/texlive/tlnet/archive/babel-spanish.r54080.tar.xz
2020/03/04 | 29552 | systems/texlive/tlnet/archive/babel-spanish.source.r54080.tar.xz
@@ -257236,13 +257251,13 @@
2019/02/28 | 388 | systems/texlive/tlnet/archive/fontools.amd64-freebsd.r25997.tar.xz
2019/02/28 | 388 | systems/texlive/tlnet/archive/fontools.amd64-netbsd.r30191.tar.xz
2019/02/28 | 384 | systems/texlive/tlnet/archive/fontools.armhf-linux.r30015.tar.xz
-2020/01/30 | 126696 | systems/texlive/tlnet/archive/fontools.doc.r53593.tar.xz
+2020/04/29 | 126776 | systems/texlive/tlnet/archive/fontools.doc.r54926.tar.xz
2019/02/28 | 384 | systems/texlive/tlnet/archive/fontools.i386-cygwin.r25997.tar.xz
2019/02/28 | 388 | systems/texlive/tlnet/archive/fontools.i386-freebsd.r25997.tar.xz
2019/02/28 | 384 | systems/texlive/tlnet/archive/fontools.i386-linux.r25997.tar.xz
2019/02/28 | 384 | systems/texlive/tlnet/archive/fontools.i386-netbsd.r30191.tar.xz
2019/02/28 | 384 | systems/texlive/tlnet/archive/fontools.i386-solaris.r25997.tar.xz
-2020/01/30 | 43828 | systems/texlive/tlnet/archive/fontools.r53593.tar.xz
+2020/04/29 | 44004 | systems/texlive/tlnet/archive/fontools.r54926.tar.xz
2019/02/28 | 728 | systems/texlive/tlnet/archive/fontools.win32.r25997.tar.xz
2019/02/28 | 388 | systems/texlive/tlnet/archive/fontools.x86_64-cygwin.r33557.tar.xz
2019/02/28 | 396 | systems/texlive/tlnet/archive/fontools.x86_64-darwinlegacy.r43871.tar.xz
@@ -263312,8 +263327,8 @@
2019/02/28 | 462992 | systems/texlive/tlnet/archive/tcldoc.doc.r22018.tar.xz
2019/02/28 | 7004 | systems/texlive/tlnet/archive/tcldoc.r22018.tar.xz
2019/02/28 | 41140 | systems/texlive/tlnet/archive/tcldoc.source.r22018.tar.xz
-2019/11/16 | 4651140 | systems/texlive/tlnet/archive/tcolorbox.doc.r52809.tar.xz
-2019/11/16 | 229044 | systems/texlive/tlnet/archive/tcolorbox.r52809.tar.xz
+2020/04/29 | 4697184 | systems/texlive/tlnet/archive/tcolorbox.doc.r54928.tar.xz
+2020/04/29 | 229868 | systems/texlive/tlnet/archive/tcolorbox.r54928.tar.xz
2019/02/28 | 244100 | systems/texlive/tlnet/archive/tdclock.doc.r33043.tar.xz
2019/02/28 | 3944 | systems/texlive/tlnet/archive/tdclock.r33043.tar.xz
2019/02/28 | 232652 | systems/texlive/tlnet/archive/tds.doc.r15878.tar.xz
@@ -263604,7 +263619,7 @@
2020/03/25 | 276 | systems/texlive/tlnet/archive/texlive-it.r54534.tar.xz
2020/03/16 | 1522924 | systems/texlive/tlnet/archive/texlive-ja.doc.r54334.tar.xz
2020/03/16 | 276 | systems/texlive/tlnet/archive/texlive-ja.r54334.tar.xz
-2020/04/26 | 141280 | systems/texlive/tlnet/archive/texlive-msg-translations.r54870.tar.xz
+2020/04/29 | 141256 | systems/texlive/tlnet/archive/texlive-msg-translations.r54919.tar.xz
2019/02/28 | 344 | systems/texlive/tlnet/archive/texliveonfly.aarch64-linux.r46208.tar.xz
2019/02/28 | 344 | systems/texlive/tlnet/archive/texliveonfly.amd64-freebsd.r24062.tar.xz
2019/02/28 | 344 | systems/texlive/tlnet/archive/texliveonfly.amd64-netbsd.r30191.tar.xz
@@ -263631,7 +263646,7 @@
2020/04/20 | 564 | systems/texlive/tlnet/archive/texlive-scripts.amd64-freebsd.r54807.tar.xz
2020/04/20 | 568 | systems/texlive/tlnet/archive/texlive-scripts.amd64-netbsd.r54807.tar.xz
2020/04/20 | 568 | systems/texlive/tlnet/archive/texlive-scripts.armhf-linux.r54807.tar.xz
-2020/04/28 | 219376 | systems/texlive/tlnet/archive/texlive-scripts.doc.r54910.tar.xz
+2020/04/29 | 219376 | systems/texlive/tlnet/archive/texlive-scripts.doc.r54921.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
@@ -263655,7 +263670,7 @@
2020/04/20 | 564 | systems/texlive/tlnet/archive/texlive-scripts.i386-linux.r54807.tar.xz
2020/04/20 | 564 | systems/texlive/tlnet/archive/texlive-scripts.i386-netbsd.r54807.tar.xz
2020/04/20 | 568 | systems/texlive/tlnet/archive/texlive-scripts.i386-solaris.r54807.tar.xz
-2020/04/28 | 132412 | systems/texlive/tlnet/archive/texlive-scripts.r54910.tar.xz
+2020/04/29 | 132432 | systems/texlive/tlnet/archive/texlive-scripts.r54921.tar.xz
2020/04/20 | 36232 | systems/texlive/tlnet/archive/texlive-scripts.win32.r54807.tar.xz
2020/04/20 | 564 | systems/texlive/tlnet/archive/texlive-scripts.x86_64-cygwin.r54807.tar.xz
2020/04/20 | 592 | systems/texlive/tlnet/archive/texlive-scripts.x86_64-darwinlegacy.r54807.tar.xz
@@ -264093,13 +264108,13 @@
2019/07/06 | 344 | systems/texlive/tlnet/archive/tlshell.amd64-freebsd.r45015.tar.xz
2019/07/06 | 340 | systems/texlive/tlnet/archive/tlshell.amd64-netbsd.r45015.tar.xz
2019/07/06 | 340 | systems/texlive/tlnet/archive/tlshell.armhf-linux.r45015.tar.xz
-2020/04/28 | 440 | systems/texlive/tlnet/archive/tlshell.doc.r54910.tar.xz
+2020/04/29 | 440 | systems/texlive/tlnet/archive/tlshell.doc.r54921.tar.xz
2019/07/06 | 340 | systems/texlive/tlnet/archive/tlshell.i386-cygwin.r45015.tar.xz
2019/07/06 | 340 | systems/texlive/tlnet/archive/tlshell.i386-freebsd.r45015.tar.xz
2019/07/06 | 340 | systems/texlive/tlnet/archive/tlshell.i386-linux.r45015.tar.xz
2019/07/06 | 340 | systems/texlive/tlnet/archive/tlshell.i386-netbsd.r45015.tar.xz
2019/07/06 | 340 | systems/texlive/tlnet/archive/tlshell.i386-solaris.r45015.tar.xz
-2020/04/28 | 26756 | systems/texlive/tlnet/archive/tlshell.r54910.tar.xz
+2020/04/29 | 26776 | systems/texlive/tlnet/archive/tlshell.r54921.tar.xz
2020/03/19 | 2660792 | systems/texlive/tlnet/archive/tlshell.win32.r54395.tar.xz
2019/07/06 | 340 | systems/texlive/tlnet/archive/tlshell.x86_64-cygwin.r45015.tar.xz
2019/07/06 | 348 | systems/texlive/tlnet/archive/tlshell.x86_64-darwinlegacy.r45015.tar.xz
@@ -264204,8 +264219,8 @@
2019/02/28 | 396 | systems/texlive/tlnet/archive/translation-moreverb-de.r23957.tar.xz
2019/02/28 | 687888 | systems/texlive/tlnet/archive/translation-natbib-fr.doc.r25105.tar.xz
2019/02/28 | 384 | systems/texlive/tlnet/archive/translation-natbib-fr.r25105.tar.xz
-2020/04/27 | 506928 | systems/texlive/tlnet/archive/translations.doc.r54899.tar.xz
-2020/04/27 | 12216 | systems/texlive/tlnet/archive/translations.r54899.tar.xz
+2020/04/29 | 506904 | systems/texlive/tlnet/archive/translations.doc.r54929.tar.xz
+2020/04/29 | 12256 | systems/texlive/tlnet/archive/translations.r54929.tar.xz
2019/02/28 | 355420 | systems/texlive/tlnet/archive/translation-tabbing-fr.doc.r24228.tar.xz
2019/02/28 | 404 | systems/texlive/tlnet/archive/translation-tabbing-fr.r24228.tar.xz
2020/03/24 | 210748 | systems/texlive/tlnet/archive/translator.doc.r54512.tar.xz
@@ -265263,23 +265278,23 @@
2020/01/24 | 138180 | systems/texlive/tlnet/archive/zxjatype.doc.r53500.tar.xz
2020/01/24 | 8760 | systems/texlive/tlnet/archive/zxjatype.r53500.tar.xz
2020/04/06 | 107773 | systems/texlive/tlnet/install-tl
-2020/04/28 | 5502507 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2020/04/28 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2020/04/28 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2020/04/29 | 5502810 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2020/04/29 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2020/04/29 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2020/03/17 | 4641 | systems/texlive/tlnet/install-tl-windows.bat
-2020/04/28 | 19389585 | systems/texlive/tlnet/install-tl-windows.exe
-2020/04/28 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2020/04/28 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2020/04/28 | 24269080 | systems/texlive/tlnet/install-tl.zip
-2020/04/28 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2020/04/28 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2020/04/29 | 19385726 | systems/texlive/tlnet/install-tl-windows.exe
+2020/04/29 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2020/04/29 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2020/04/29 | 24269410 | systems/texlive/tlnet/install-tl.zip
+2020/04/29 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2020/04/29 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
2020/03/05 | 1215 | systems/texlive/tlnet/README.md
2020/04/06 | 5961 | systems/texlive/tlnet/tlpkg/gpg/pubring.gpg
2016/04/12 | 600 | systems/texlive/tlnet/tlpkg/gpg/random_seed
2016/04/12 | 0 | systems/texlive/tlnet/tlpkg/gpg/secring.gpg
2020/04/06 | 1071 | systems/texlive/tlnet/tlpkg/gpg/tl-key-extension.txt
2020/04/06 | 1280 | systems/texlive/tlnet/tlpkg/gpg/trustdb.gpg
-2020/01/06 | 48441 | systems/texlive/tlnet/tlpkg/installer/config.guess
+2020/04/28 | 48588 | systems/texlive/tlnet/tlpkg/installer/config.guess
2010/11/11 | 11651 | systems/texlive/tlnet/tlpkg/installer/COPYING.MinGW-runtime.txt
2020/04/27 | 6293 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2020/04/15 | 223687 | systems/texlive/tlnet/tlpkg/installer/curl/curl-ca-bundle.crt
@@ -265290,7 +265305,7 @@
2020/01/17 | 43304 | systems/texlive/tlnet/tlpkg/installer/install-menu-perltk.pl
2020/01/17 | 33253 | systems/texlive/tlnet/tlpkg/installer/install-menu-text.pl
2018/09/27 | 19281 | systems/texlive/tlnet/tlpkg/installer/install-menu-wizard.pl
-2020/04/27 | 67832 | systems/texlive/tlnet/tlpkg/installer/install-tl-gui.tcl
+2020/04/28 | 67958 | systems/texlive/tlnet/tlpkg/installer/install-tl-gui.tcl
2020/03/16 | 240640 | systems/texlive/tlnet/tlpkg/installer/tar.exe
2018/04/29 | 7927 | systems/texlive/tlnet/tlpkg/installer/texdirsel.pl
2018/07/06 | 26224 | systems/texlive/tlnet/tlpkg/installer/texlion.gif
@@ -265328,12 +265343,12 @@
2020/03/04 | 20330 | systems/texlive/tlnet/tlpkg/TeXLive/TLCrypto.pm
2020/04/25 | 4790 | systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm
2017/11/14 | 27560 | systems/texlive/tlnet/tlpkg/TeXLive/TLPaper.pm
-2020/04/28 | 16372335 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
-2020/04/28 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2020/04/29 | 16372335 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2020/04/29 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
2020/04/06 | 86396 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm
-2020/04/28 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
-2020/04/28 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2020/04/28 | 2194336 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2020/04/29 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2020/04/29 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2020/04/29 | 2195032 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
2020/04/15 | 58761 | systems/texlive/tlnet/tlpkg/TeXLive/TLPOBJ.pm
2020/03/20 | 41736 | systems/texlive/tlnet/tlpkg/TeXLive/TLPSRC.pm
2020/03/04 | 14970 | systems/texlive/tlnet/tlpkg/TeXLive/TLTREE.pm
@@ -267977,26 +267992,26 @@
2020/03/17 | 3466 | systems/texlive/tlnet/tlpkg/tltcl/lib/tkConfig.sh
2018/11/30 | 1310 | systems/texlive/tlnet/tlpkg/tltcl/tlmgr.gif
2020/04/27 | 22152 | systems/texlive/tlnet/tlpkg/tltcl/tltcl.tcl
-2020/04/25 | 87025 | systems/texlive/tlnet/tlpkg/translations/cs.po
-2020/04/25 | 95550 | systems/texlive/tlnet/tlpkg/translations/de.po
-2020/04/25 | 86063 | systems/texlive/tlnet/tlpkg/translations/es.po
-2020/04/25 | 99860 | systems/texlive/tlnet/tlpkg/translations/fr.po
-2020/04/25 | 93150 | systems/texlive/tlnet/tlpkg/translations/it.po
-2020/04/25 | 77712 | systems/texlive/tlnet/tlpkg/translations/ja.po
-2020/04/25 | 58612 | systems/texlive/tlnet/tlpkg/translations/messages.pot
-2020/04/25 | 74778 | systems/texlive/tlnet/tlpkg/translations/nl.po
-2020/04/25 | 72950 | systems/texlive/tlnet/tlpkg/translations/pl.po
-2020/04/25 | 88434 | systems/texlive/tlnet/tlpkg/translations/pt_BR.po
+2020/04/28 | 87098 | systems/texlive/tlnet/tlpkg/translations/cs.po
+2020/04/28 | 95623 | systems/texlive/tlnet/tlpkg/translations/de.po
+2020/04/28 | 86136 | systems/texlive/tlnet/tlpkg/translations/es.po
+2020/04/28 | 99933 | systems/texlive/tlnet/tlpkg/translations/fr.po
+2020/04/28 | 93223 | systems/texlive/tlnet/tlpkg/translations/it.po
+2020/04/28 | 77785 | systems/texlive/tlnet/tlpkg/translations/ja.po
+2020/04/28 | 58685 | systems/texlive/tlnet/tlpkg/translations/messages.pot
+2020/04/28 | 74851 | systems/texlive/tlnet/tlpkg/translations/nl.po
+2020/04/28 | 73023 | systems/texlive/tlnet/tlpkg/translations/pl.po
+2020/04/28 | 88507 | systems/texlive/tlnet/tlpkg/translations/pt_BR.po
2019/03/25 | 430 | systems/texlive/tlnet/tlpkg/translations/README
-2020/04/25 | 112587 | systems/texlive/tlnet/tlpkg/translations/ru.po
-2020/04/25 | 94227 | systems/texlive/tlnet/tlpkg/translations/sk.po
-2020/04/25 | 75356 | systems/texlive/tlnet/tlpkg/translations/sl.po
-2020/04/25 | 109975 | systems/texlive/tlnet/tlpkg/translations/sr.po
+2020/04/28 | 112660 | systems/texlive/tlnet/tlpkg/translations/ru.po
+2020/04/28 | 94300 | systems/texlive/tlnet/tlpkg/translations/sk.po
+2020/04/28 | 75429 | systems/texlive/tlnet/tlpkg/translations/sl.po
+2020/04/28 | 110048 | systems/texlive/tlnet/tlpkg/translations/sr.po
2019/03/28 | 847 | systems/texlive/tlnet/tlpkg/translations/translators
-2020/04/25 | 87092 | systems/texlive/tlnet/tlpkg/translations/uk.po
-2020/04/25 | 96278 | systems/texlive/tlnet/tlpkg/translations/vi.po
-2020/04/25 | 72728 | systems/texlive/tlnet/tlpkg/translations/zh_CN.po
-2020/04/25 | 63287 | systems/texlive/tlnet/tlpkg/translations/zh_TW.po
+2020/04/28 | 87165 | systems/texlive/tlnet/tlpkg/translations/uk.po
+2020/04/28 | 96351 | systems/texlive/tlnet/tlpkg/translations/vi.po
+2020/04/28 | 72801 | systems/texlive/tlnet/tlpkg/translations/zh_CN.po
+2020/04/28 | 63360 | systems/texlive/tlnet/tlpkg/translations/zh_TW.po
2020/04/06 | 2453936 | systems/texlive/tlnet/update-tlmgr-r54630.exe
2020/04/06 | 154 | systems/texlive/tlnet/update-tlmgr-r54630.exe.sha512
2020/04/06 | 455 | systems/texlive/tlnet/update-tlmgr-r54630.exe.sha512.asc
@@ -268400,76 +268415,83 @@
2005/01/06 | 587 | systems/win32/micropress/eqmlite/whats-really-new
2020/04/19 | 511918 | systems/win32/miktex/doc/2.9/miktex.pdf
2019/05/28 | 101 | systems/win32/miktex/README.md
-2020/02/23 | 56092487 | systems/win32/miktex/setup/darwin-x86_64/miktex-2.9.7300-1-darwin-x86_64.dmg
2020/03/22 | 55427424 | systems/win32/miktex/setup/darwin-x86_64/miktex-2.9.7350-1-darwin-x86_64.dmg
-2020/03/22 | 2034 | systems/win32/miktex/setup/deb/dists/bionic/InRelease
-2020/03/22 | 1512 | systems/win32/miktex/setup/deb/dists/bionic/Release
-2020/03/22 | 473 | systems/win32/miktex/setup/deb/dists/bionic/Release.gpg
-2020/03/22 | 1322 | systems/win32/miktex/setup/deb/dists/bionic/universe/binary-amd64/Packages
-2020/03/22 | 769 | systems/win32/miktex/setup/deb/dists/bionic/universe/binary-amd64/Packages.bz2
-2020/03/22 | 736 | systems/win32/miktex/setup/deb/dists/bionic/universe/binary-amd64/Packages.gz
-2020/03/22 | 89 | systems/win32/miktex/setup/deb/dists/bionic/universe/binary-amd64/Release
-2020/03/22 | 1361 | systems/win32/miktex/setup/deb/dists/bionic/universe/Contents-amd64.gz
-2020/03/22 | 2034 | systems/win32/miktex/setup/deb/dists/buster/InRelease
-2020/03/22 | 1512 | systems/win32/miktex/setup/deb/dists/buster/Release
-2020/03/22 | 473 | systems/win32/miktex/setup/deb/dists/buster/Release.gpg
-2020/03/22 | 1384 | systems/win32/miktex/setup/deb/dists/buster/universe/binary-amd64/Packages
-2020/03/22 | 794 | systems/win32/miktex/setup/deb/dists/buster/universe/binary-amd64/Packages.bz2
-2020/03/22 | 764 | systems/win32/miktex/setup/deb/dists/buster/universe/binary-amd64/Packages.gz
-2020/03/22 | 89 | systems/win32/miktex/setup/deb/dists/buster/universe/binary-amd64/Release
-2020/03/22 | 1361 | systems/win32/miktex/setup/deb/dists/buster/universe/Contents-amd64.gz
-2020/03/22 | 2038 | systems/win32/miktex/setup/deb/dists/stretch/InRelease
-2020/03/22 | 1516 | systems/win32/miktex/setup/deb/dists/stretch/Release
-2020/03/22 | 473 | systems/win32/miktex/setup/deb/dists/stretch/Release.gpg
-2020/03/22 | 1374 | systems/win32/miktex/setup/deb/dists/stretch/universe/binary-amd64/Packages
-2020/03/22 | 796 | systems/win32/miktex/setup/deb/dists/stretch/universe/binary-amd64/Packages.bz2
-2020/03/22 | 756 | systems/win32/miktex/setup/deb/dists/stretch/universe/binary-amd64/Packages.gz
-2020/03/22 | 92 | systems/win32/miktex/setup/deb/dists/stretch/universe/binary-amd64/Release
-2020/03/22 | 1361 | systems/win32/miktex/setup/deb/dists/stretch/universe/Contents-amd64.gz
-2020/03/22 | 2034 | systems/win32/miktex/setup/deb/dists/xenial/InRelease
-2020/03/22 | 1512 | systems/win32/miktex/setup/deb/dists/xenial/Release
-2020/03/22 | 473 | systems/win32/miktex/setup/deb/dists/xenial/Release.gpg
-2020/03/22 | 1351 | systems/win32/miktex/setup/deb/dists/xenial/universe/binary-amd64/Packages
-2020/03/22 | 771 | systems/win32/miktex/setup/deb/dists/xenial/universe/binary-amd64/Packages.bz2
-2020/03/22 | 735 | systems/win32/miktex/setup/deb/dists/xenial/universe/binary-amd64/Packages.gz
-2020/03/22 | 89 | systems/win32/miktex/setup/deb/dists/xenial/universe/binary-amd64/Release
-2020/03/22 | 1361 | systems/win32/miktex/setup/deb/dists/xenial/universe/Contents-amd64.gz
+2020/04/29 | 56023568 | systems/win32/miktex/setup/darwin-x86_64/miktex-2.9.7400-1-darwin-x86_64.dmg
+2020/04/29 | 2034 | systems/win32/miktex/setup/deb/dists/bionic/InRelease
+2020/04/29 | 1512 | systems/win32/miktex/setup/deb/dists/bionic/Release
+2020/04/29 | 473 | systems/win32/miktex/setup/deb/dists/bionic/Release.gpg
+2020/04/29 | 2644 | systems/win32/miktex/setup/deb/dists/bionic/universe/binary-amd64/Packages
+2020/04/29 | 1038 | systems/win32/miktex/setup/deb/dists/bionic/universe/binary-amd64/Packages.bz2
+2020/04/29 | 871 | systems/win32/miktex/setup/deb/dists/bionic/universe/binary-amd64/Packages.gz
+2020/04/29 | 89 | systems/win32/miktex/setup/deb/dists/bionic/universe/binary-amd64/Release
+2020/04/29 | 1395 | systems/win32/miktex/setup/deb/dists/bionic/universe/Contents-amd64.gz
+2020/04/29 | 2034 | systems/win32/miktex/setup/deb/dists/buster/InRelease
+2020/04/29 | 1512 | systems/win32/miktex/setup/deb/dists/buster/Release
+2020/04/29 | 473 | systems/win32/miktex/setup/deb/dists/buster/Release.gpg
+2020/04/29 | 2768 | systems/win32/miktex/setup/deb/dists/buster/universe/binary-amd64/Packages
+2020/04/29 | 1084 | systems/win32/miktex/setup/deb/dists/buster/universe/binary-amd64/Packages.bz2
+2020/04/29 | 898 | systems/win32/miktex/setup/deb/dists/buster/universe/binary-amd64/Packages.gz
+2020/04/29 | 89 | systems/win32/miktex/setup/deb/dists/buster/universe/binary-amd64/Release
+2020/04/29 | 1395 | systems/win32/miktex/setup/deb/dists/buster/universe/Contents-amd64.gz
+2020/04/29 | 2038 | systems/win32/miktex/setup/deb/dists/stretch/InRelease
+2020/04/29 | 1516 | systems/win32/miktex/setup/deb/dists/stretch/Release
+2020/04/29 | 473 | systems/win32/miktex/setup/deb/dists/stretch/Release.gpg
+2020/04/29 | 2748 | systems/win32/miktex/setup/deb/dists/stretch/universe/binary-amd64/Packages
+2020/04/29 | 1069 | systems/win32/miktex/setup/deb/dists/stretch/universe/binary-amd64/Packages.bz2
+2020/04/29 | 890 | systems/win32/miktex/setup/deb/dists/stretch/universe/binary-amd64/Packages.gz
+2020/04/29 | 92 | systems/win32/miktex/setup/deb/dists/stretch/universe/binary-amd64/Release
+2020/04/29 | 1395 | systems/win32/miktex/setup/deb/dists/stretch/universe/Contents-amd64.gz
+2020/04/29 | 2034 | systems/win32/miktex/setup/deb/dists/xenial/InRelease
+2020/04/29 | 1512 | systems/win32/miktex/setup/deb/dists/xenial/Release
+2020/04/29 | 473 | systems/win32/miktex/setup/deb/dists/xenial/Release.gpg
+2020/04/29 | 2702 | systems/win32/miktex/setup/deb/dists/xenial/universe/binary-amd64/Packages
+2020/04/29 | 1043 | systems/win32/miktex/setup/deb/dists/xenial/universe/binary-amd64/Packages.bz2
+2020/04/29 | 871 | systems/win32/miktex/setup/deb/dists/xenial/universe/binary-amd64/Packages.gz
+2020/04/29 | 89 | systems/win32/miktex/setup/deb/dists/xenial/universe/binary-amd64/Release
+2020/04/29 | 1395 | systems/win32/miktex/setup/deb/dists/xenial/universe/Contents-amd64.gz
2020/03/22 | 29810262 | systems/win32/miktex/setup/deb/pool/universe/m/miktex/miktex_2.9.7350-bionic1_amd64.deb
2020/03/22 | 29213170 | systems/win32/miktex/setup/deb/pool/universe/m/miktex/miktex_2.9.7350-buster1_amd64.deb
2020/03/22 | 29324886 | systems/win32/miktex/setup/deb/pool/universe/m/miktex/miktex_2.9.7350-stretch1_amd64.deb
2020/03/22 | 28764416 | systems/win32/miktex/setup/deb/pool/universe/m/miktex/miktex_2.9.7350-xenial1_amd64.deb
+2020/04/29 | 29935332 | systems/win32/miktex/setup/deb/pool/universe/m/miktex/miktex_2.9.7400-bionic1_amd64.deb
+2020/04/29 | 29369466 | systems/win32/miktex/setup/deb/pool/universe/m/miktex/miktex_2.9.7400-buster1_amd64.deb
+2020/04/29 | 29464796 | systems/win32/miktex/setup/deb/pool/universe/m/miktex/miktex_2.9.7400-stretch1_amd64.deb
+2020/04/29 | 28898388 | systems/win32/miktex/setup/deb/pool/universe/m/miktex/miktex_2.9.7400-xenial1_amd64.deb
2018/08/21 | 242 | systems/win32/miktex/setup/README.md
2020/01/26 | 107 | systems/win32/miktex/setup/rpm/centos-8.repo
2020/03/22 | 22802648 | systems/win32/miktex/setup/rpm/fedora/28/miktex-2.9.7350-1.fc28.x86_64.rpm
+2020/04/29 | 22919244 | systems/win32/miktex/setup/rpm/fedora/28/miktex-2.9.7400-1.fc28.x86_64.rpm
2018/07/28 | 109 | systems/win32/miktex/setup/rpm/fedora-28.repo
-2020/03/22 | 8512 | systems/win32/miktex/setup/rpm/fedora/28/repodata/377274b5e41ff2b41b1dc7dd33d404947c6370b24a585e8ba64d72886c6d7e78-filelists.sqlite.bz2
-2020/03/22 | 345 | systems/win32/miktex/setup/rpm/fedora/28/repodata/7ffad73d25c8e04c4768a599c84553eb5acdb1c6b35dd5cf4ec7ff262b4859ab-other.xml.gz
-2020/03/22 | 7082 | systems/win32/miktex/setup/rpm/fedora/28/repodata/9f5f776f90002b63ac58865d84fb17e66a5a484de9fbf5696dfdbae9700382cc-primary.sqlite.bz2
-2020/03/22 | 780 | systems/win32/miktex/setup/rpm/fedora/28/repodata/e27417bed8dcf25abc18ca9ad20510691ea9398e9a6a4601cfdccc2bec31f312-other.sqlite.bz2
-2020/03/22 | 2088 | systems/win32/miktex/setup/rpm/fedora/28/repodata/e92de39e364e57e7e44a0e3bd72033db3add06101534bdabbb9cfb4d714e955b-primary.xml.gz
-2020/03/22 | 6164 | systems/win32/miktex/setup/rpm/fedora/28/repodata/f174c00e2b6866ebfd0bcfa845e504317d10a9cdf774e5abe43d8a34e810868d-filelists.xml.gz
-2020/03/22 | 2972 | systems/win32/miktex/setup/rpm/fedora/28/repodata/repomd.xml
-2020/03/22 | 488 | systems/win32/miktex/setup/rpm/fedora/28/repodata/repomd.xml.asc
+2020/04/29 | 10074 | systems/win32/miktex/setup/rpm/fedora/28/repodata/6da87e174699f0405723275cd0850f21062d5e8715b3f3204f9c9d938a148860-filelists.xml.gz
+2020/04/29 | 406 | systems/win32/miktex/setup/rpm/fedora/28/repodata/8d2495520d907b62581db4ee1d81efc9e55ff387c66e433376bde385724d0eea-other.xml.gz
+2020/04/29 | 11606 | systems/win32/miktex/setup/rpm/fedora/28/repodata/b2adeb7f59747951b8caa932abaabf8d76891c3354865869e0e48bce305bbc61-primary.sqlite.bz2
+2020/04/29 | 2365 | systems/win32/miktex/setup/rpm/fedora/28/repodata/dbfc947d0bec68ebf53085813d746202dc60498e4b8151346062ccdabc030f7c-primary.xml.gz
+2020/04/29 | 911 | systems/win32/miktex/setup/rpm/fedora/28/repodata/ea186766bcba0ddc6a28b5f9a81c6724f219e952e92e13653d4e527f689fbda7-other.sqlite.bz2
+2020/04/29 | 14494 | systems/win32/miktex/setup/rpm/fedora/28/repodata/f06bf7319515ee35ca32c5459616f419a8d22b9766ea5f1105a8e644242fc0c7-filelists.sqlite.bz2
+2020/04/29 | 2975 | systems/win32/miktex/setup/rpm/fedora/28/repodata/repomd.xml
+2020/04/29 | 488 | systems/win32/miktex/setup/rpm/fedora/28/repodata/repomd.xml.asc
2020/03/22 | 20678668 | systems/win32/miktex/setup/rpm/fedora/30/miktex-2.9.7350-1.fc30.x86_64.rpm
+2020/04/29 | 20811036 | systems/win32/miktex/setup/rpm/fedora/30/miktex-2.9.7400-1.fc30.x86_64.rpm
2019/05/25 | 109 | systems/win32/miktex/setup/rpm/fedora-30.repo
-2020/03/22 | 672 | systems/win32/miktex/setup/rpm/fedora/30/repodata/09b4e487e5b27bc18cdafe05dd6738fbe0be38ab0403216be6ed23e8707ac5de-other.sqlite.bz2
-2020/03/22 | 7107 | systems/win32/miktex/setup/rpm/fedora/30/repodata/0b709d64429c0867232b5ab7317c8aa7ca4084ded02c7f7ecb7cb1d8a94e8fcd-primary.sqlite.bz2
-2020/03/22 | 8439 | systems/win32/miktex/setup/rpm/fedora/30/repodata/943501c6a4e4abe4313efe772fa1d6ab80d932d5c96d37be9711399ae247168a-filelists.sqlite.bz2
-2020/03/22 | 6108 | systems/win32/miktex/setup/rpm/fedora/30/repodata/9830106c8d5bfa0b45a08f387fd6bddc4b7938e1131b44cec5c03f056fc8a39b-filelists.xml.gz
-2020/03/22 | 234 | systems/win32/miktex/setup/rpm/fedora/30/repodata/b2f7cf50c39d36ea88b98bc01986fad2600d07f0a53aa7a4f2817a694b23cd91-other.xml.gz
-2020/03/22 | 2086 | systems/win32/miktex/setup/rpm/fedora/30/repodata/d39b3d1c72d8844081495e91dcdda11743305260b2b3ec2446b7cb5d44484be5-primary.xml.gz
-2020/03/22 | 2972 | systems/win32/miktex/setup/rpm/fedora/30/repodata/repomd.xml
-2020/03/22 | 488 | systems/win32/miktex/setup/rpm/fedora/30/repodata/repomd.xml.asc
+2020/04/29 | 11638 | systems/win32/miktex/setup/rpm/fedora/30/repodata/06258324fb706bd9ece7eca5e904bbbe4a74cc579ef5fb94b1e139d415c7f09d-primary.sqlite.bz2
+2020/04/29 | 286 | systems/win32/miktex/setup/rpm/fedora/30/repodata/769f8c2809ab8c8f9ef0abce50980bcf60346b7f374c39129f8e5056237bbbfd-other.xml.gz
+2020/04/29 | 14618 | systems/win32/miktex/setup/rpm/fedora/30/repodata/79b50dca9abd8d87f67b24c029fa043508b72fc64ebe9bdedc42124f41a43d21-filelists.sqlite.bz2
+2020/04/29 | 2361 | systems/win32/miktex/setup/rpm/fedora/30/repodata/9bac34f4b39721b5479d733999471aea9804b7c53eae52b91287cb911bb6f49b-primary.xml.gz
+2020/04/29 | 743 | systems/win32/miktex/setup/rpm/fedora/30/repodata/c29d0d6ccf64b5d56b27e28df6242cf643552a526e8d10658e5f8f632f8b3097-other.sqlite.bz2
+2020/04/29 | 10046 | systems/win32/miktex/setup/rpm/fedora/30/repodata/d38c95c8f6b286641bce3939f5d29dbd6a79e16eda87b1b5f75cbfbb97f3231c-filelists.xml.gz
+2020/04/29 | 2975 | systems/win32/miktex/setup/rpm/fedora/30/repodata/repomd.xml
+2020/04/29 | 488 | systems/win32/miktex/setup/rpm/fedora/30/repodata/repomd.xml.asc
2020/03/22 | 21057768 | systems/win32/miktex/setup/rpm/opensuse/15/miktex-2.9.7350-1.x86_64.rpm
+2020/04/29 | 21151664 | systems/win32/miktex/setup/rpm/opensuse/15/miktex-2.9.7400-1.x86_64.rpm
2018/07/28 | 120 | systems/win32/miktex/setup/rpm/opensuse-15.repo
-2020/03/22 | 7031 | systems/win32/miktex/setup/rpm/opensuse/15/repodata/04fdc2a5893d5d7a7a9786b2835611f03450a293aa51590c27add5ac4be3e89c-primary.sqlite.bz2
-2020/03/22 | 783 | systems/win32/miktex/setup/rpm/opensuse/15/repodata/451eef3fe3bf0b83899d547ba053ab9582c5bdcf0f964ef580a801a9c1df1256-other.sqlite.bz2
-2020/03/22 | 2069 | systems/win32/miktex/setup/rpm/opensuse/15/repodata/52be9f00f78d1c643206be8889ca16300463e8bcb6d681aef2754400934a98d3-primary.xml.gz
-2020/03/22 | 1588 | systems/win32/miktex/setup/rpm/opensuse/15/repodata/6946ddbc519f9a3c9ddf1423af1ada9f5a12d5582f4a101d5e6e87facdfb8a21-filelists.xml.gz
-2020/03/22 | 2634 | systems/win32/miktex/setup/rpm/opensuse/15/repodata/804205ce3e52cf50d9551a6b86dcb35f3d0ad5aedeb6783d6731393a8e6b2344-filelists.sqlite.bz2
-2020/03/22 | 343 | systems/win32/miktex/setup/rpm/opensuse/15/repodata/903db07028bbf6ef6c56d7a0d3822e422e560deab9dcac1ce773bf95a5c8b9ac-other.xml.gz
-2020/03/22 | 2972 | systems/win32/miktex/setup/rpm/opensuse/15/repodata/repomd.xml
-2020/03/22 | 488 | systems/win32/miktex/setup/rpm/opensuse/15/repodata/repomd.xml.asc
+2020/04/29 | 11533 | systems/win32/miktex/setup/rpm/opensuse/15/repodata/16331f160f05f229eb85d1d446f95ef241f6288d499bb440f96433319fa645b1-primary.sqlite.bz2
+2020/04/29 | 2343 | systems/win32/miktex/setup/rpm/opensuse/15/repodata/195a6dbab59fe6724013e2f10d0104f52fc468bd120412a502ef71e57e2218fa-primary.xml.gz
+2020/04/29 | 3502 | systems/win32/miktex/setup/rpm/opensuse/15/repodata/280a3e5276d80e6481dc48b2fc02ab4a5309b1b9137ff1c16fe0416dffb9b5b5-filelists.sqlite.bz2
+2020/04/29 | 1795 | systems/win32/miktex/setup/rpm/opensuse/15/repodata/c303e5ca93bd0e6be7c07b97be6d29a57de04beb39a11713f8fc72da5e888070-filelists.xml.gz
+2020/04/29 | 892 | systems/win32/miktex/setup/rpm/opensuse/15/repodata/fb94789dd7da1d23dffa0931b4bc95c25f31995c9a5149bd09ccc6ad5b25fcf5-other.sqlite.bz2
+2020/04/29 | 404 | systems/win32/miktex/setup/rpm/opensuse/15/repodata/fcde7e11d2dfc8233ba28ce3a7301f53cc6bdee7cf1eeceb3759384652d60b2e-other.xml.gz
+2020/04/29 | 2973 | systems/win32/miktex/setup/rpm/opensuse/15/repodata/repomd.xml
+2020/04/29 | 488 | systems/win32/miktex/setup/rpm/opensuse/15/repodata/repomd.xml.asc
2020/03/22 | 243304712 | systems/win32/miktex/setup/windows-x64/basic-miktex-2.9.7386-x64.exe
2020/04/22 | 243769608 | systems/win32/miktex/setup/windows-x64/basic-miktex-2.9.7417-x64.exe
2019/12/20 | 2508472 | systems/win32/miktex/setup/windows-x64/miktexsetup-2.9.6942_2-x64.zip
@@ -269730,7 +269752,7 @@
2020/02/04 | 281488 | 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
-2020/04/28 | 531674 | systems/win32/miktex/tm/packages/files.csv.lzma
+2020/04/29 | 531674 | 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
@@ -270871,9 +270893,9 @@
2018/01/12 | 157226 | systems/win32/miktex/tm/packages/miktex-zip-bin-x64.tar.lzma
2020/04/19 | 39206 | systems/win32/miktex/tm/packages/miktex-zlib-bin-2.9.tar.lzma
2020/04/19 | 42920 | systems/win32/miktex/tm/packages/miktex-zlib-bin-x64-2.9.tar.lzma
-2020/04/28 | 198824 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
-2020/04/28 | 1188861 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
-2020/04/28 | 1108566 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2020/04/29 | 198857 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2020/04/29 | 1189493 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2020/04/29 | 1109113 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
2020/04/19 | 13027 | systems/win32/miktex/tm/packages/miktex-zzip-bin-2.9.tar.lzma
2020/04/19 | 14026 | 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
@@ -271025,183 +271047,183 @@
2018/04/09 | 400132 | systems/win32/miktex/tm/packages/newunicodechar.tar.lzma
2011/09/19 | 101312 | systems/win32/miktex/tm/packages/newvbtm.tar.lzma
2019/09/11 | 231430 | systems/win32/miktex/tm/packages/newverbs.tar.lzma
-2020/04/28 | 531714 | systems/win32/miktex/tm/packages/next/files.csv.lzma
-2020/04/28 | 29318 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
-2020/04/28 | 33430 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
-2020/04/28 | 941991 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
-2020/04/28 | 1048378 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
-2020/04/28 | 28564 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
-2020/04/28 | 30777 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
-2020/04/28 | 29333 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
-2020/04/28 | 34893 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
-2020/04/28 | 49777 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
-2020/04/28 | 57244 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
-2020/04/28 | 84673 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
-2020/04/28 | 94360 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
-2020/04/28 | 63007 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
-2020/04/28 | 70760 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
-2020/04/28 | 26646 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
-2020/04/28 | 30231 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
-2020/04/28 | 328718 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
-2020/04/28 | 391545 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
-2020/04/28 | 32361 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
-2020/04/28 | 36440 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
-2020/04/28 | 49330 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
-2020/04/28 | 53986 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
-2020/04/28 | 203046 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
-2020/04/28 | 222824 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
-2020/04/28 | 169320 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
-2020/04/28 | 184184 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
-2020/04/28 | 52143 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
-2020/04/28 | 58840 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
-2020/04/28 | 20746 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
-2020/04/28 | 22987 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
-2020/04/28 | 461127 | systems/win32/miktex/tm/packages/next/miktex-doc-2.9.tar.lzma
-2020/04/28 | 41145 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
-2020/04/28 | 45857 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
-2020/04/28 | 272883 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
-2020/04/28 | 310427 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
-2020/04/28 | 40748 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
-2020/04/28 | 45005 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
-2020/04/28 | 115873 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
-2020/04/28 | 130557 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
-2020/04/28 | 1255693 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
-2020/04/28 | 1393302 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
-2020/04/28 | 95187 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
-2020/04/28 | 110185 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
-2020/04/28 | 43439 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
-2020/04/28 | 47971 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
-2020/04/28 | 45603 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
-2020/04/28 | 50525 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
-2020/04/28 | 56645 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
-2020/04/28 | 61672 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
-2020/04/28 | 133161 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
-2020/04/28 | 152024 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
-2020/04/28 | 69793 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
-2020/04/28 | 72764 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
-2020/04/28 | 68850 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
-2020/04/28 | 77444 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
-2020/04/28 | 246464 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
-2020/04/28 | 281655 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
-2020/04/28 | 25424 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
-2020/04/28 | 28777 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
-2020/04/28 | 100614 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
-2020/04/28 | 116425 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
-2020/04/28 | 63292 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
-2020/04/28 | 72537 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
-2020/04/28 | 94256 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
-2020/04/28 | 111081 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
-2020/04/28 | 57804 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
-2020/04/28 | 64459 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
-2020/04/28 | 457889 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
-2020/04/28 | 545002 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
-2020/04/28 | 137096 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
-2020/04/28 | 150030 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
-2020/04/28 | 92926 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
-2020/04/28 | 108887 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
-2020/04/28 | 15956 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
-2020/04/28 | 17736 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
-2020/04/28 | 27840 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
-2020/04/28 | 29734 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
-2020/04/28 | 615708 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
-2020/04/28 | 669804 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
-2020/04/28 | 498650 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
-2020/04/28 | 560787 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
-2020/04/28 | 539768 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
-2020/04/28 | 576471 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
-2020/04/28 | 93535 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
-2020/04/28 | 102473 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
-2020/04/28 | 1698895 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
-2020/04/28 | 1983880 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
-2020/04/28 | 67254 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
-2020/04/28 | 73583 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
-2020/04/28 | 26935 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
-2020/04/28 | 31351 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
-2020/04/28 | 7504 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
-2020/04/28 | 8471 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
-2020/04/28 | 167862 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
-2020/04/28 | 182844 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
-2020/04/28 | 247854 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
-2020/04/28 | 281389 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
-2020/04/28 | 87333 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
-2020/04/28 | 92023 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
-2020/04/28 | 77885 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
-2020/04/28 | 86682 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
-2020/04/28 | 164808 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
-2020/04/28 | 184654 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
-2020/04/28 | 148346 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
-2020/04/28 | 167945 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
-2020/04/28 | 194975 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
-2020/04/28 | 177698 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
-2020/04/28 | 81387 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
-2020/04/28 | 92745 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
-2020/04/28 | 30987 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
-2020/04/28 | 34818 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
-2020/04/28 | 55657 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
-2020/04/28 | 62800 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
-2020/04/28 | 42173 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
-2020/04/28 | 45903 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
-2020/04/28 | 45663 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
-2020/04/28 | 52110 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
-2020/04/28 | 354654 | systems/win32/miktex/tm/packages/next/miktex-omega-bin-2.9.tar.lzma
-2020/04/28 | 387642 | systems/win32/miktex/tm/packages/next/miktex-omega-bin-x64-2.9.tar.lzma
-2020/04/28 | 321983 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
-2020/04/28 | 356405 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
-2020/04/28 | 186881 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
-2020/04/28 | 193701 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
-2020/04/28 | 207032 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
-2020/04/28 | 243094 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
-2020/04/28 | 77984 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
-2020/04/28 | 87139 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
-2020/04/28 | 932669 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
-2020/04/28 | 1042550 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
-2020/04/28 | 19890 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
-2020/04/28 | 23502 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
-2020/04/28 | 31155 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
-2020/04/28 | 36613 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
-2020/04/28 | 63267 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
-2020/04/28 | 71673 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
-2020/04/28 | 42638 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
-2020/04/28 | 50896 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
-2020/04/28 | 1123776 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
-2020/04/28 | 1255976 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
-2020/04/28 | 41927 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
-2020/04/28 | 50949 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
-2020/04/28 | 53374 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-2.9.tar.lzma
-2020/04/28 | 59494 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64-2.9.tar.lzma
-2020/04/28 | 26809 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
-2020/04/28 | 29142 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
-2020/04/28 | 16113 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
-2020/04/28 | 17826 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
-2020/04/28 | 63315 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
-2020/04/28 | 69227 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
-2020/04/28 | 147401 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
-2020/04/28 | 160738 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
-2020/04/28 | 74684 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
-2020/04/28 | 84613 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
-2020/04/28 | 91290 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
-2020/04/28 | 96299 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
-2020/04/28 | 2555294 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
-2020/04/28 | 2684808 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
-2020/04/28 | 54842 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
-2020/04/28 | 61218 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
-2020/04/28 | 26516 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
-2020/04/28 | 32344 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
-2020/04/28 | 61637 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
-2020/04/28 | 65199 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
-2020/04/28 | 247464 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
-2020/04/28 | 277093 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
-2020/04/28 | 575630 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
-2020/04/28 | 612250 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
-2020/04/28 | 38798 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
-2020/04/28 | 42922 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
-2020/04/28 | 198798 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
-2020/04/28 | 1188987 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
-2020/04/28 | 1109761 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
-2020/04/28 | 13053 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
-2020/04/28 | 14037 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
+2020/04/29 | 531714 | systems/win32/miktex/tm/packages/next/files.csv.lzma
+2020/04/29 | 29319 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
+2020/04/29 | 33431 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
+2020/04/29 | 941992 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
+2020/04/29 | 1048378 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2020/04/29 | 28562 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
+2020/04/29 | 30776 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
+2020/04/29 | 29334 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
+2020/04/29 | 34893 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2020/04/29 | 49777 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
+2020/04/29 | 57244 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
+2020/04/29 | 84672 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
+2020/04/29 | 94359 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
+2020/04/29 | 63009 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
+2020/04/29 | 70760 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
+2020/04/29 | 26649 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
+2020/04/29 | 30231 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2020/04/29 | 328719 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
+2020/04/29 | 391543 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
+2020/04/29 | 32363 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
+2020/04/29 | 36441 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
+2020/04/29 | 49329 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
+2020/04/29 | 53987 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
+2020/04/29 | 203048 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
+2020/04/29 | 222825 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
+2020/04/29 | 169320 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
+2020/04/29 | 184182 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2020/04/29 | 52145 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
+2020/04/29 | 58840 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2020/04/29 | 20748 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
+2020/04/29 | 22988 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
+2020/04/29 | 461129 | systems/win32/miktex/tm/packages/next/miktex-doc-2.9.tar.lzma
+2020/04/29 | 41147 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
+2020/04/29 | 45858 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
+2020/04/29 | 272881 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
+2020/04/29 | 310428 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
+2020/04/29 | 40748 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
+2020/04/29 | 45007 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
+2020/04/29 | 115871 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
+2020/04/29 | 130557 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
+2020/04/29 | 1255696 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
+2020/04/29 | 1393304 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2020/04/29 | 95188 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
+2020/04/29 | 110184 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2020/04/29 | 43440 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
+2020/04/29 | 47971 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
+2020/04/29 | 45603 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
+2020/04/29 | 50526 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
+2020/04/29 | 56645 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
+2020/04/29 | 61673 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2020/04/29 | 133160 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
+2020/04/29 | 152024 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
+2020/04/29 | 69795 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
+2020/04/29 | 72765 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
+2020/04/29 | 68850 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
+2020/04/29 | 77447 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2020/04/29 | 246465 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
+2020/04/29 | 281655 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
+2020/04/29 | 25426 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
+2020/04/29 | 28777 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
+2020/04/29 | 100615 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
+2020/04/29 | 116425 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
+2020/04/29 | 63292 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
+2020/04/29 | 72537 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
+2020/04/29 | 94255 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
+2020/04/29 | 111081 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2020/04/29 | 57804 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
+2020/04/29 | 64460 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
+2020/04/29 | 457892 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
+2020/04/29 | 545005 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
+2020/04/29 | 137099 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
+2020/04/29 | 150029 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
+2020/04/29 | 92929 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
+2020/04/29 | 108888 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2020/04/29 | 15955 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
+2020/04/29 | 17736 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2020/04/29 | 27840 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
+2020/04/29 | 29734 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2020/04/29 | 615709 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
+2020/04/29 | 669804 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
+2020/04/29 | 498651 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
+2020/04/29 | 560789 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2020/04/29 | 539767 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
+2020/04/29 | 576472 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
+2020/04/29 | 93535 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
+2020/04/29 | 102474 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
+2020/04/29 | 1698895 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
+2020/04/29 | 1983877 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
+2020/04/29 | 67254 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
+2020/04/29 | 73583 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2020/04/29 | 26935 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
+2020/04/29 | 31351 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
+2020/04/29 | 7505 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
+2020/04/29 | 8471 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
+2020/04/29 | 167862 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
+2020/04/29 | 182844 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2020/04/29 | 247855 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
+2020/04/29 | 281388 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
+2020/04/29 | 87334 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
+2020/04/29 | 92021 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
+2020/04/29 | 77887 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
+2020/04/29 | 86682 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
+2020/04/29 | 164812 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
+2020/04/29 | 184655 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
+2020/04/29 | 148347 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
+2020/04/29 | 167944 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
+2020/04/29 | 194977 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
+2020/04/29 | 177699 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
+2020/04/29 | 81390 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
+2020/04/29 | 92745 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
+2020/04/29 | 30988 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
+2020/04/29 | 34819 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
+2020/04/29 | 55659 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
+2020/04/29 | 62800 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
+2020/04/29 | 42174 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
+2020/04/29 | 45903 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
+2020/04/29 | 45664 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
+2020/04/29 | 52110 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
+2020/04/29 | 354654 | systems/win32/miktex/tm/packages/next/miktex-omega-bin-2.9.tar.lzma
+2020/04/29 | 387641 | systems/win32/miktex/tm/packages/next/miktex-omega-bin-x64-2.9.tar.lzma
+2020/04/29 | 321987 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
+2020/04/29 | 356406 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2020/04/29 | 186882 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
+2020/04/29 | 193699 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
+2020/04/29 | 207035 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
+2020/04/29 | 243095 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
+2020/04/29 | 77986 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
+2020/04/29 | 87139 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2020/04/29 | 932670 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
+2020/04/29 | 1042547 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2020/04/29 | 19890 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
+2020/04/29 | 23501 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2020/04/29 | 31155 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
+2020/04/29 | 36614 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
+2020/04/29 | 63269 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
+2020/04/29 | 71673 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2020/04/29 | 42639 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
+2020/04/29 | 50894 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
+2020/04/29 | 1123775 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
+2020/04/29 | 1255976 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
+2020/04/29 | 41928 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
+2020/04/29 | 50951 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
+2020/04/29 | 53376 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-2.9.tar.lzma
+2020/04/29 | 59494 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64-2.9.tar.lzma
+2020/04/29 | 26809 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
+2020/04/29 | 29143 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
+2020/04/29 | 16116 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
+2020/04/29 | 17827 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
+2020/04/29 | 63316 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
+2020/04/29 | 69227 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
+2020/04/29 | 147403 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
+2020/04/29 | 160739 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2020/04/29 | 74686 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
+2020/04/29 | 84611 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2020/04/29 | 91290 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
+2020/04/29 | 96297 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
+2020/04/29 | 2555294 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
+2020/04/29 | 2684809 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
+2020/04/29 | 54842 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
+2020/04/29 | 61217 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2020/04/29 | 26517 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
+2020/04/29 | 32344 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2020/04/29 | 61637 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
+2020/04/29 | 65195 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
+2020/04/29 | 247466 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
+2020/04/29 | 277094 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
+2020/04/29 | 575631 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
+2020/04/29 | 612251 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
+2020/04/29 | 38799 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
+2020/04/29 | 42922 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2020/04/29 | 198848 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
+2020/04/29 | 1189815 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
+2020/04/29 | 1109539 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
+2020/04/29 | 13052 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
+2020/04/29 | 14038 | 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
-2020/04/28 | 652 | systems/win32/miktex/tm/packages/next/pr.ini
+2020/04/29 | 652 | 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
@@ -271517,7 +271539,7 @@
2008/11/07 | 35981 | systems/win32/miktex/tm/packages/prettyref.tar.lzma
2017/07/26 | 201385 | systems/win32/miktex/tm/packages/preview.tar.lzma
2019/06/20 | 375963 | systems/win32/miktex/tm/packages/prftree.tar.lzma
-2020/04/28 | 411 | systems/win32/miktex/tm/packages/pr.ini
+2020/04/29 | 411 | 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
@@ -272652,7 +272674,7 @@
2020/04/26 | 4935208 | systems/win32/w32tex/aleph-w32.tar.xz
2020/04/27 | 66174732 | systems/win32/w32tex/biblatex-biber.tar.xz
2016/12/13 | 65971452 | systems/win32/w32tex/cbfonts.tar.xz
-2020/04/27 | 633708 | systems/win32/w32tex/ChangeLog
+2020/04/28 | 634807 | 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
@@ -272660,7 +272682,7 @@
2017/06/24 | 644754 | systems/win32/w32tex/ChangeLog.4
2020/04/27 | 22433136 | systems/win32/w32tex/cjkzr.tar.xz
2013/04/27 | 15858676 | systems/win32/w32tex/context-doc.tar.xz
-2020/04/27 | 139829728 | systems/win32/w32tex/context.tar.xz
+2020/04/28 | 139820736 | systems/win32/w32tex/context.tar.xz
2020/04/26 | 902872 | systems/win32/w32tex/cweb-w32.tar.xz
2020/03/02 | 6281164 | systems/win32/w32tex/datetime2.tar.xz
2020/04/26 | 838256 | systems/win32/w32tex/dvi2ps-w32.tar.xz
@@ -272676,14 +272698,14 @@
2020/04/03 | 29248268 | systems/win32/w32tex/latex.tar.xz
2020/04/26 | 997128 | systems/win32/w32tex/lcdf-typetools-w32.tar.xz
2020/04/05 | 393872496 | systems/win32/w32tex/ltxpkgdocs.tar.xz
-2020/04/27 | 34519792 | systems/win32/w32tex/ltxpkgs.tar.xz
-2020/04/27 | 3848760 | systems/win32/w32tex/luajittex-dev-w32.tar.xz
-2020/04/27 | 3844172 | systems/win32/w32tex/luajittex-exp-w32.tar.xz
-2020/04/27 | 3851056 | systems/win32/w32tex/luajittex-w32.tar.xz
-2020/04/27 | 17951820 | systems/win32/w32tex/luatex-dev-w32.tar.xz
-2020/04/27 | 17953812 | systems/win32/w32tex/luatex-exp-w32.tar.xz
+2020/04/28 | 34520780 | systems/win32/w32tex/ltxpkgs.tar.xz
+2020/04/28 | 3844212 | systems/win32/w32tex/luajittex-dev-w32.tar.xz
+2020/04/28 | 3839160 | systems/win32/w32tex/luajittex-exp-w32.tar.xz
+2020/04/28 | 3846672 | systems/win32/w32tex/luajittex-w32.tar.xz
+2020/04/28 | 17952720 | systems/win32/w32tex/luatex-dev-w32.tar.xz
+2020/04/28 | 17955200 | systems/win32/w32tex/luatex-exp-w32.tar.xz
2020/04/19 | 69190432 | systems/win32/w32tex/luatexja.tar.xz
-2020/04/27 | 17944004 | systems/win32/w32tex/luatex-w32.tar.xz
+2020/04/28 | 17945116 | systems/win32/w32tex/luatex-w32.tar.xz
2020/04/26 | 1599884 | systems/win32/w32tex/makeindex-w32.tar.xz
2015/05/26 | 1542676 | systems/win32/w32tex/manual.tar.xz
2020/04/26 | 439120 | systems/win32/w32tex/mftools.tar.xz
@@ -272694,7 +272716,7 @@
2020/04/26 | 1220008 | systems/win32/w32tex/omegaj-w32.tar.xz
2020/03/01 | 355876 | systems/win32/w32tex/otfbeta.tar.xz
2020/04/26 | 20651244 | systems/win32/w32tex/pdftex-w32.tar.xz
-2020/04/27 | 80597664 | systems/win32/w32tex/pgfcontrib.tar.xz
+2020/04/28 | 80601424 | systems/win32/w32tex/pgfcontrib.tar.xz
2015/01/26 | 189072 | systems/win32/w32tex/plain2-2.54-w32.tar.xz
2020/04/13 | 2820836 | systems/win32/w32tex/platex.tar.xz
2020/03/20 | 1598792 | systems/win32/w32tex/pmx.tar.xz
@@ -272742,12 +272764,12 @@
2020/04/26 | 587520 | systems/win32/w32tex/win64/jtex-w64.tar.xz
2019/11/11 | 2568 | systems/win32/w32tex/win64/latex-dev-w64.tar.xz
2020/04/26 | 799984 | systems/win32/w32tex/win64/lcdf-typetools-w64.tar.xz
-2020/04/27 | 3470548 | systems/win32/w32tex/win64/luajittex-dev-w64.tar.xz
-2020/04/27 | 3473412 | systems/win32/w32tex/win64/luajittex-exp-w64.tar.xz
-2020/04/27 | 3469964 | systems/win32/w32tex/win64/luajittex-w64.tar.xz
-2020/04/27 | 3113668 | systems/win32/w32tex/win64/luatex-dev-w64.tar.xz
-2020/04/27 | 3110892 | systems/win32/w32tex/win64/luatex-exp-w64.tar.xz
-2020/04/27 | 3111876 | systems/win32/w32tex/win64/luatex-w64.tar.xz
+2020/04/28 | 3467288 | systems/win32/w32tex/win64/luajittex-dev-w64.tar.xz
+2020/04/28 | 3464916 | systems/win32/w32tex/win64/luajittex-exp-w64.tar.xz
+2020/04/28 | 3479260 | systems/win32/w32tex/win64/luajittex-w64.tar.xz
+2020/04/28 | 3107500 | systems/win32/w32tex/win64/luatex-dev-w64.tar.xz
+2020/04/28 | 3119424 | systems/win32/w32tex/win64/luatex-exp-w64.tar.xz
+2020/04/28 | 3107716 | systems/win32/w32tex/win64/luatex-w64.tar.xz
2020/04/26 | 1070124 | systems/win32/w32tex/win64/makeindex-w64.tar.xz
2020/04/26 | 431024 | systems/win32/w32tex/win64/mftools-w64.tar.xz
2020/04/26 | 376524 | systems/win32/w32tex/win64/mftrace-w64.tar.xz
@@ -272866,7 +272888,7 @@
2004/06/04 | 404 | tds/tds.sed
2004/06/23 | 65418 | tds/tds.tex
2019/05/29 | 304264 | tds.zip
-2020/04/29 | 186 | timestamp
+2020/04/30 | 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
diff --git a/FILES.byname.gz b/FILES.byname.gz
index f424586f02..9cd899c9d2 100644
--- a/FILES.byname.gz
+++ b/FILES.byname.gz
Binary files differ
diff --git a/FILES.last07days b/FILES.last07days
index 7c04f4aad6..5214e2b6c1 100644
--- a/FILES.last07days
+++ b/FILES.last07days
@@ -1,348 +1,505 @@
+2020/04/29 | 983 | macros/latex/contrib/acro/examples/acro.example.issue-119.tex
+2020/04/29 | 96297 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
+2020/04/29 | 95845 | macros/latex/contrib/acro/acro-manual.tex
+2020/04/29 | 95188 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
+2020/04/29 | 95137 | macros/generic/xlop/doc/xlop-doc.tex
+2020/04/29 | 94359 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
+2020/04/29 | 94255 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
+2020/04/29 | 941992 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
+2020/04/29 | 93535 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
+2020/04/29 | 932670 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
+2020/04/29 | 92 | systems/win32/miktex/setup/deb/dists/stretch/universe/binary-amd64/Release
+2020/04/29 | 92929 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
+2020/04/29 | 92745 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
+2020/04/29 | 92021 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
+2020/04/29 | 91290 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
+2020/04/29 | 911 | systems/win32/miktex/setup/rpm/fedora/28/repodata/ea186766bcba0ddc6a28b5f9a81c6724f219e952e92e13653d4e527f689fbda7-other.sqlite.bz2
+2020/04/29 | 90 | macros/generic/xlop/tex/xlop.sty
+2020/04/29 | 89 | systems/win32/miktex/setup/deb/dists/xenial/universe/binary-amd64/Release
+2020/04/29 | 89 | systems/win32/miktex/setup/deb/dists/buster/universe/binary-amd64/Release
+2020/04/29 | 89 | systems/win32/miktex/setup/deb/dists/bionic/universe/binary-amd64/Release
+2020/04/29 | 898 | systems/win32/miktex/setup/deb/dists/buster/universe/binary-amd64/Packages.gz
+2020/04/29 | 892 | systems/win32/miktex/setup/rpm/opensuse/15/repodata/fb94789dd7da1d23dffa0931b4bc95c25f31995c9a5149bd09ccc6ad5b25fcf5-other.sqlite.bz2
+2020/04/29 | 890 | systems/win32/miktex/setup/deb/dists/stretch/universe/binary-amd64/Packages.gz
+2020/04/29 | 87334 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
+2020/04/29 | 871 | systems/win32/miktex/setup/deb/dists/xenial/universe/binary-amd64/Packages.gz
+2020/04/29 | 871 | systems/win32/miktex/setup/deb/dists/bionic/universe/binary-amd64/Packages.gz
+2020/04/29 | 87139 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2020/04/29 | 86682 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
+2020/04/29 | 851941 | macros/latex/contrib/acro/acro-manual.pdf
+2020/04/29 | 8471 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
+2020/04/29 | 84672 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
+2020/04/29 | 84611 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2020/04/29 | 8175 | macros/latex/contrib/acro/examples/acro.example.issue-119.pdf
+2020/04/29 | 81390 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
+2020/04/29 | 779 | macros/latex/contrib/acro/examples/acro.example.possessive.tex
+2020/04/29 | 77986 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
+2020/04/29 | 77887 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
+2020/04/29 | 77447 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2020/04/29 | 763428 | systems/texlive/tlnet/archive/babel.doc.r54930.tar.xz
+2020/04/29 | 7505 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
+2020/04/29 | 74686 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
+2020/04/29 | 743 | systems/win32/miktex/setup/rpm/fedora/30/repodata/c29d0d6ccf64b5d56b27e28df6242cf643552a526e8d10658e5f8f632f8b3097-other.sqlite.bz2
+2020/04/29 | 73583 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2020/04/29 | 72765 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
+2020/04/29 | 72537 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
+2020/04/29 | 71673 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2020/04/29 | 70760 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
+2020/04/29 | 706 | macros/latex/contrib/acro/examples/acro.example.issue-111.tex
+2020/04/29 | 69795 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
+2020/04/29 | 69227 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
+2020/04/29 | 68850 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
+2020/04/29 | 67254 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
+2020/04/29 | 669804 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
+2020/04/29 | 65310 | macros/latex/contrib/acro/examples/acro.example.units.pdf
+2020/04/29 | 652 | systems/win32/miktex/tm/packages/next/pr.ini
+2020/04/29 | 65195 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
+2020/04/29 | 64460 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
+2020/04/29 | 644544 | systems/texlive/tlnet/archive/babel.source.r54930.tar.xz
+2020/04/29 | 63316 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
+2020/04/29 | 63292 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
+2020/04/29 | 63269 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
+2020/04/29 | 63009 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
+2020/04/29 | 62800 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
+2020/04/29 | 61673 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2020/04/29 | 61637 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
+2020/04/29 | 615709 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
+2020/04/29 | 612251 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
+2020/04/29 | 61217 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2020/04/29 | 608836 | macros/generic/xlop.zip
+2020/04/29 | 59494 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64-2.9.tar.lzma
+2020/04/29 | 58840 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2020/04/29 | 5881 | macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-main.tex
+2020/04/29 | 57804 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
+2020/04/29 | 576472 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
+2020/04/29 | 575631 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
+2020/04/29 | 57244 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
+2020/04/29 | 57073 | macros/generic/expkv-cs/expkv-cs.dtx
+2020/04/29 | 56645 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
+2020/04/29 | 560789 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2020/04/29 | 56023568 | systems/win32/miktex/setup/darwin-x86_64/miktex-2.9.7400-1-darwin-x86_64.dmg
+2020/04/29 | 55659 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
+2020/04/29 | 5502810 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2020/04/29 | 54842 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
+2020/04/29 | 545005 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
+2020/04/29 | 53987 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
+2020/04/29 | 539767 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
+2020/04/29 | 53376 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-2.9.tar.lzma
+2020/04/29 | 531714 | systems/win32/miktex/tm/packages/next/files.csv.lzma
+2020/04/29 | 531674 | systems/win32/miktex/tm/packages/files.csv.lzma
+2020/04/29 | 53160 | macros/generic/expkv-def/expkv-def.dtx
+2020/04/29 | 52145 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
+2020/04/29 | 52110 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
+2020/04/29 | 50951 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
+2020/04/29 | 50894 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
+2020/04/29 | 506904 | systems/texlive/tlnet/archive/translations.doc.r54929.tar.xz
+2020/04/29 | 50526 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
+2020/04/29 | 498651 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
+2020/04/29 | 49777 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
+2020/04/29 | 49329 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
+2020/04/29 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2020/04/29 | 488 | systems/win32/miktex/setup/rpm/opensuse/15/repodata/repomd.xml.asc
+2020/04/29 | 488 | systems/win32/miktex/setup/rpm/fedora/30/repodata/repomd.xml.asc
+2020/04/29 | 488 | systems/win32/miktex/setup/rpm/fedora/28/repodata/repomd.xml.asc
+2020/04/29 | 48513 | macros/latex/contrib/tkz/tkz-tab/latex/tkz-tab.sty
+2020/04/29 | 47971 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
+2020/04/29 | 473 | systems/win32/miktex/setup/deb/dists/xenial/Release.gpg
+2020/04/29 | 473 | systems/win32/miktex/setup/deb/dists/stretch/Release.gpg
+2020/04/29 | 473 | systems/win32/miktex/setup/deb/dists/buster/Release.gpg
+2020/04/29 | 473 | systems/win32/miktex/setup/deb/dists/bionic/Release.gpg
+2020/04/29 | 4697184 | systems/texlive/tlnet/archive/tcolorbox.doc.r54928.tar.xz
+2020/04/29 | 461129 | systems/win32/miktex/tm/packages/next/miktex-doc-2.9.tar.lzma
+2020/04/29 | 45903 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
+2020/04/29 | 45858 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
+2020/04/29 | 457892 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
+2020/04/29 | 45664 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
+2020/04/29 | 45603 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
+2020/04/29 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2020/04/29 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2020/04/29 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2020/04/29 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2020/04/29 | 45007 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
+2020/04/29 | 440 | systems/texlive/tlnet/archive/tlshell.doc.r54921.tar.xz
+2020/04/29 | 44004 | systems/texlive/tlnet/archive/fontools.r54926.tar.xz
+2020/04/29 | 43440 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
+2020/04/29 | 42922 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2020/04/29 | 42639 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
+2020/04/29 | 42174 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
+2020/04/29 | 41928 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
+2020/04/29 | 411 | systems/win32/miktex/tm/packages/pr.ini
+2020/04/29 | 41147 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
+2020/04/29 | 40748 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
+2020/04/29 | 406 | systems/win32/miktex/setup/rpm/fedora/28/repodata/8d2495520d907b62581db4ee1d81efc9e55ff387c66e433376bde385724d0eea-other.xml.gz
+2020/04/29 | 404 | systems/win32/miktex/setup/rpm/opensuse/15/repodata/fcde7e11d2dfc8233ba28ce3a7301f53cc6bdee7cf1eeceb3759384652d60b2e-other.xml.gz
+2020/04/29 | 394072 | macros/generic/xlop/doc/xlop-doc-fr.pdf
+2020/04/29 | 391543 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
+2020/04/29 | 38799 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
+2020/04/29 | 387641 | systems/win32/miktex/tm/packages/next/miktex-omega-bin-x64-2.9.tar.lzma
+2020/04/29 | 381096 | macros/latex/contrib/tkz/tkz-tab.zip
+2020/04/29 | 373942 | macros/generic/xlop/doc/xlop-doc.pdf
+2020/04/29 | 36614 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
+2020/04/29 | 36441 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
+2020/04/29 | 356406 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2020/04/29 | 354654 | systems/win32/miktex/tm/packages/next/miktex-omega-bin-2.9.tar.lzma
+2020/04/29 | 3502 | systems/win32/miktex/setup/rpm/opensuse/15/repodata/280a3e5276d80e6481dc48b2fc02ab4a5309b1b9137ff1c16fe0416dffb9b5b5-filelists.sqlite.bz2
+2020/04/29 | 34893 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2020/04/29 | 34819 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
+2020/04/29 | 346429 | macros/latex/contrib/tkz/tkz-tab/doc/TKZdoc-tab.pdf
+2020/04/29 | 33721 | macros/latex/contrib/acro/examples/acro.example.texsx-507726.pdf
+2020/04/29 | 33431 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
+2020/04/29 | 329 | macros/latex/contrib/acro/examples/acro.example.issue-109.tex
+2020/04/29 | 328719 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
+2020/04/29 | 326277 | install/macros/generic/expkv-cs.tds.zip
+2020/04/29 | 32429 | macros/latex/contrib/acro/examples/acro.example.texsx-505891.pdf
+2020/04/29 | 32363 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
+2020/04/29 | 32344 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2020/04/29 | 321987 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
+2020/04/29 | 3214 | macros/latex/contrib/acro/examples/acro.example.basic.tex
+2020/04/29 | 321458 | macros/generic/expkv-cs.zip
+2020/04/29 | 315 | macros/latex/contrib/acro/examples/acro.example.acflike.tex
+2020/04/29 | 314842 | install/macros/generic/expkv-def.tds.zip
+2020/04/29 | 31351 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
+2020/04/29 | 313486 | macros/generic/expkv-cs/expkv-cs.pdf
+2020/04/29 | 31155 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
+2020/04/29 | 310428 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
+2020/04/29 | 30988 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
+2020/04/29 | 309788 | macros/generic/expkv-def.zip
+2020/04/29 | 30776 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
+2020/04/29 | 303450 | macros/generic/expkv-def/expkv-def.pdf
+2020/04/29 | 30275 | macros/latex/contrib/acro/examples/acro.example.issue-109.pdf
+2020/04/29 | 30231 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2020/04/29 | 29935332 | systems/win32/miktex/setup/deb/pool/universe/m/miktex/miktex_2.9.7400-bionic1_amd64.deb
+2020/04/29 | 2975 | systems/win32/miktex/setup/rpm/fedora/30/repodata/repomd.xml
+2020/04/29 | 2975 | systems/win32/miktex/setup/rpm/fedora/28/repodata/repomd.xml
+2020/04/29 | 2973 | systems/win32/miktex/setup/rpm/opensuse/15/repodata/repomd.xml
+2020/04/29 | 29734 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2020/04/29 | 29464796 | systems/win32/miktex/setup/deb/pool/universe/m/miktex/miktex_2.9.7400-stretch1_amd64.deb
+2020/04/29 | 29369466 | systems/win32/miktex/setup/deb/pool/universe/m/miktex/miktex_2.9.7400-buster1_amd64.deb
+2020/04/29 | 29334 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
+2020/04/29 | 29319 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
+2020/04/29 | 29143 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
+2020/04/29 | 28898388 | systems/win32/miktex/setup/deb/pool/universe/m/miktex/miktex_2.9.7400-xenial1_amd64.deb
+2020/04/29 | 28777 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
+2020/04/29 | 286 | systems/win32/miktex/setup/rpm/fedora/30/repodata/769f8c2809ab8c8f9ef0abce50980bcf60346b7f374c39129f8e5056237bbbfd-other.xml.gz
+2020/04/29 | 286 | macros/latex/contrib/acro/examples/acro.example.issue-154.tex
+2020/04/29 | 28562 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
+2020/04/29 | 281655 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
+2020/04/29 | 281388 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
+2020/04/29 | 2788 | systems/texlive/tlnet/archive/abnt.r54927.tar.xz
+2020/04/29 | 27840 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
+2020/04/29 | 277094 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
+2020/04/29 | 2768 | systems/win32/miktex/setup/deb/dists/buster/universe/binary-amd64/Packages
+2020/04/29 | 2749 | macros/generic/xlop/LISEZMOI
+2020/04/29 | 2748 | systems/win32/miktex/setup/deb/dists/stretch/universe/binary-amd64/Packages
+2020/04/29 | 272881 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
+2020/04/29 | 2702 | systems/win32/miktex/setup/deb/dists/xenial/universe/binary-amd64/Packages
+2020/04/29 | 26935 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
+2020/04/29 | 2684809 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
+2020/04/29 | 26809 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
+2020/04/29 | 26776 | systems/texlive/tlnet/archive/tlshell.r54921.tar.xz
+2020/04/29 | 26649 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
+2020/04/29 | 26517 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
+2020/04/29 | 2644 | systems/win32/miktex/setup/deb/dists/bionic/universe/binary-amd64/Packages
+2020/04/29 | 2555294 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
+2020/04/29 | 25426 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
+2020/04/29 | 247855 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
+2020/04/29 | 247466 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
+2020/04/29 | 246465 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
+2020/04/29 | 243095 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
+2020/04/29 | 24269410 | systems/texlive/tlnet/install-tl.zip
+2020/04/29 | 24224 | macros/latex/contrib/acro/examples/acro.example.issue-154.pdf
+2020/04/29 | 2365 | systems/win32/miktex/setup/rpm/fedora/28/repodata/dbfc947d0bec68ebf53085813d746202dc60498e4b8151346062ccdabc030f7c-primary.xml.gz
+2020/04/29 | 2361 | systems/win32/miktex/setup/rpm/fedora/30/repodata/9bac34f4b39721b5479d733999471aea9804b7c53eae52b91287cb911bb6f49b-primary.xml.gz
+2020/04/29 | 23501 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2020/04/29 | 2343 | systems/win32/miktex/setup/rpm/opensuse/15/repodata/195a6dbab59fe6724013e2f10d0104f52fc468bd120412a502ef71e57e2218fa-primary.xml.gz
+2020/04/29 | 22988 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
+2020/04/29 | 229868 | systems/texlive/tlnet/archive/tcolorbox.r54928.tar.xz
+2020/04/29 | 22919244 | systems/win32/miktex/setup/rpm/fedora/28/miktex-2.9.7400-1.fc28.x86_64.rpm
+2020/04/29 | 222825 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
+2020/04/29 | 2195032 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2020/04/29 | 219376 | systems/texlive/tlnet/archive/texlive-scripts.doc.r54921.tar.xz
+2020/04/29 | 21224 | macros/latex/contrib/acro/examples/acro.example.acflike.pdf
+2020/04/29 | 21151664 | systems/win32/miktex/setup/rpm/opensuse/15/miktex-2.9.7400-1.x86_64.rpm
+2020/04/29 | 20811036 | systems/win32/miktex/setup/rpm/fedora/30/miktex-2.9.7400-1.fc30.x86_64.rpm
+2020/04/29 | 20748 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
+2020/04/29 | 207035 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
+2020/04/29 | 2050 | macros/latex/contrib/acro/examples/acro.example.units.tex
+2020/04/29 | 2038 | systems/win32/miktex/setup/deb/dists/stretch/InRelease
+2020/04/29 | 2034 | systems/win32/miktex/setup/deb/dists/xenial/InRelease
+2020/04/29 | 2034 | systems/win32/miktex/setup/deb/dists/buster/InRelease
+2020/04/29 | 2034 | systems/win32/miktex/setup/deb/dists/bionic/InRelease
+2020/04/29 | 203048 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
+2020/04/29 | 19890 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
+2020/04/29 | 198857 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2020/04/29 | 198848 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
+2020/04/29 | 1983877 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
+2020/04/29 | 194977 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
+2020/04/29 | 19385726 | systems/texlive/tlnet/install-tl-windows.exe
+2020/04/29 | 193699 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
+2020/04/29 | 1917 | macros/generic/xlop/README
+2020/04/29 | 1904 | macros/latex/contrib/acro/README
+2020/04/29 | 186882 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
+2020/04/29 | 184655 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
+2020/04/29 | 184182 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2020/04/29 | 182844 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2020/04/29 | 1795 | systems/win32/miktex/setup/rpm/opensuse/15/repodata/c303e5ca93bd0e6be7c07b97be6d29a57de04beb39a11713f8fc72da5e888070-filelists.xml.gz
+2020/04/29 | 17827 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
+2020/04/29 | 177699 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
+2020/04/29 | 17736 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2020/04/29 | 1698895 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
+2020/04/29 | 169320 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
+2020/04/29 | 167944 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
+2020/04/29 | 167862 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
+2020/04/29 | 164812 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
+2020/04/29 | 163824 | systems/texlive/tlnet/archive/babel.r54930.tar.xz
+2020/04/29 | 16372335 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2020/04/29 | 16116 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
+2020/04/29 | 160739 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2020/04/29 | 15955 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
+2020/04/29 | 158998 | macros/latex/contrib/acro/acro.sty
+2020/04/29 | 15733 | macros/latex/contrib/acro/examples/acro.example.issue-111.pdf
+2020/04/29 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2020/04/29 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2020/04/29 | 152024 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
+2020/04/29 | 1516 | systems/win32/miktex/setup/deb/dists/stretch/Release
+2020/04/29 | 1512 | systems/win32/miktex/setup/deb/dists/xenial/Release
+2020/04/29 | 1512 | systems/win32/miktex/setup/deb/dists/buster/Release
+2020/04/29 | 1512 | systems/win32/miktex/setup/deb/dists/bionic/Release
+2020/04/29 | 150029 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
+2020/04/29 | 148347 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
+2020/04/29 | 147403 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
+2020/04/29 | 14618 | systems/win32/miktex/setup/rpm/fedora/30/repodata/79b50dca9abd8d87f67b24c029fa043508b72fc64ebe9bdedc42124f41a43d21-filelists.sqlite.bz2
+2020/04/29 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2020/04/29 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2020/04/29 | 1449 | macros/latex/contrib/acro/examples/acro.example.texsx-507726.tex
+2020/04/29 | 14494 | systems/win32/miktex/setup/rpm/fedora/28/repodata/f06bf7319515ee35ca32c5459616f419a8d22b9766ea5f1105a8e644242fc0c7-filelists.sqlite.bz2
+2020/04/29 | 141256 | systems/texlive/tlnet/archive/texlive-msg-translations.r54919.tar.xz
+2020/04/29 | 14038 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
+2020/04/29 | 1401 | macros/latex/contrib/tkz/tkz-tab/README.md
+2020/04/29 | 1395 | systems/win32/miktex/setup/deb/dists/xenial/universe/Contents-amd64.gz
+2020/04/29 | 1395 | systems/win32/miktex/setup/deb/dists/stretch/universe/Contents-amd64.gz
+2020/04/29 | 1395 | systems/win32/miktex/setup/deb/dists/buster/universe/Contents-amd64.gz
+2020/04/29 | 1395 | systems/win32/miktex/setup/deb/dists/bionic/universe/Contents-amd64.gz
+2020/04/29 | 1393304 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2020/04/29 | 137099 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
+2020/04/29 | 13686 | macros/latex/contrib/acro/examples/acro.example.possessive.pdf
+2020/04/29 | 133160 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
+2020/04/29 | 132432 | systems/texlive/tlnet/archive/texlive-scripts.r54921.tar.xz
+2020/04/29 | 130557 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
+2020/04/29 | 13052 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
+2020/04/29 | 1291 | macros/generic/expkv-cs/README.md
+2020/04/29 | 1287730 | macros/latex/contrib/acro.zip
+2020/04/29 | 126776 | systems/texlive/tlnet/archive/fontools.doc.r54926.tar.xz
+2020/04/29 | 126738 | macros/generic/xlop/tex/xlop.tex
+2020/04/29 | 1263 | macros/generic/expkv-def/README.md
+2020/04/29 | 1255976 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
+2020/04/29 | 1255696 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
+2020/04/29 | 125351 | macros/latex/contrib/acro/examples/acro.example.basic.pdf
+2020/04/29 | 12256 | systems/texlive/tlnet/archive/translations.r54929.tar.xz
+2020/04/29 | 120432 | systems/texlive/tlnet/archive/abnt.doc.r54927.tar.xz
+2020/04/29 | 1189815 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
+2020/04/29 | 1189493 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2020/04/29 | 116425 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
+2020/04/29 | 11638 | systems/win32/miktex/setup/rpm/fedora/30/repodata/06258324fb706bd9ece7eca5e904bbbe4a74cc579ef5fb94b1e139d415c7f09d-primary.sqlite.bz2
+2020/04/29 | 11606 | systems/win32/miktex/setup/rpm/fedora/28/repodata/b2adeb7f59747951b8caa932abaabf8d76891c3354865869e0e48bce305bbc61-primary.sqlite.bz2
+2020/04/29 | 115871 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
+2020/04/29 | 11533 | systems/win32/miktex/setup/rpm/opensuse/15/repodata/16331f160f05f229eb85d1d446f95ef241f6288d499bb440f96433319fa645b1-primary.sqlite.bz2
+2020/04/29 | 1139 | macros/latex/contrib/acro/examples/acro.example.texsx-505891.tex
+2020/04/29 | 1123775 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
+2020/04/29 | 111081 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2020/04/29 | 1109539 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
+2020/04/29 | 1109113 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2020/04/29 | 110184 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2020/04/29 | 108888 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2020/04/29 | 1084 | systems/win32/miktex/setup/deb/dists/buster/universe/binary-amd64/Packages.bz2
+2020/04/29 | 107439 | macros/generic/xlop/doc/xlop-doc-fr.tex
+2020/04/29 | 1069 | systems/win32/miktex/setup/deb/dists/stretch/universe/binary-amd64/Packages.bz2
+2020/04/29 | 1048378 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2020/04/29 | 1043 | systems/win32/miktex/setup/deb/dists/xenial/universe/binary-amd64/Packages.bz2
+2020/04/29 | 1042547 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2020/04/29 | 1038 | systems/win32/miktex/setup/deb/dists/bionic/universe/binary-amd64/Packages.bz2
+2020/04/29 | 102474 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
+2020/04/29 | 10074 | systems/win32/miktex/setup/rpm/fedora/28/repodata/6da87e174699f0405723275cd0850f21062d5e8715b3f3204f9c9d938a148860-filelists.xml.gz
+2020/04/29 | 100615 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
+2020/04/29 | 10046 | systems/win32/miktex/setup/rpm/fedora/30/repodata/d38c95c8f6b286641bce3939f5d29dbd6a79e16eda87b1b5f75cbfbb97f3231c-filelists.xml.gz
+2020/04/28 | 99933 | systems/texlive/tlnet/tlpkg/translations/fr.po
2020/04/28 | 9899 | macros/latex/contrib/tcolorbox/tcolorbox.doc.coremacros.tex
2020/04/28 | 9792 | systems/texlive/tlnet/archive/quantikz.r54911.tar.xz
-2020/04/28 | 96299 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
-2020/04/28 | 95187 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
-2020/04/28 | 94360 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
-2020/04/28 | 94256 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
-2020/04/28 | 941991 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
-2020/04/28 | 93535 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
-2020/04/28 | 932669 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
-2020/04/28 | 92926 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
-2020/04/28 | 92745 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
-2020/04/28 | 92023 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
-2020/04/28 | 91290 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
+2020/04/28 | 96351 | systems/texlive/tlnet/tlpkg/translations/vi.po
+2020/04/28 | 95623 | systems/texlive/tlnet/tlpkg/translations/de.po
+2020/04/28 | 94300 | systems/texlive/tlnet/tlpkg/translations/sk.po
+2020/04/28 | 93223 | systems/texlive/tlnet/tlpkg/translations/it.po
2020/04/28 | 9020 | macros/latex/contrib/tcolorbox/tcbskinsjigsaw.code.tex
2020/04/28 | 9002 | macros/latex/contrib/tcolorbox/tcbexternal.code.tex
2020/04/28 | 8922 | macros/latex/contrib/tcolorbox/tcbraster.code.tex
-2020/04/28 | 87333 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
-2020/04/28 | 87139 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2020/04/28 | 88507 | systems/texlive/tlnet/tlpkg/translations/pt_BR.po
+2020/04/28 | 87165 | systems/texlive/tlnet/tlpkg/translations/uk.po
+2020/04/28 | 87098 | systems/texlive/tlnet/tlpkg/translations/cs.po
2020/04/28 | 8706 | macros/latex/contrib/tcolorbox/tcolorbox.doc.intro.tex
2020/04/28 | 8676 | systems/texlive/tlnet/archive/scratch3.r54916.tar.xz
-2020/04/28 | 86682 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
+2020/04/28 | 86136 | systems/texlive/tlnet/tlpkg/translations/es.po
2020/04/28 | 85438 | macros/latex/contrib/tcolorbox/tcolorbox.sty
2020/04/28 | 8512 | macros/latex/contrib/tcolorbox/tcbtheorems.code.tex
2020/04/28 | 84989 | macros/latex/contrib/tcolorbox/tcbskins.code.tex
-2020/04/28 | 8471 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
2020/04/28 | 8468 | systems/texlive/tlnet/archive/context-vim.r54913.tar.xz
-2020/04/28 | 84673 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
-2020/04/28 | 84613 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
2020/04/28 | 8354 | macros/latex/contrib/tcolorbox/tcolorbox-example.tex
-2020/04/28 | 81387 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
2020/04/28 | 8118 | macros/latex/contrib/tcolorbox/tcbhooks.code.tex
+2020/04/28 | 80601424 | systems/win32/w32tex/pgfcontrib.tar.xz
2020/04/28 | 8032 | fonts/utilities/fontools/share/fontools_lgr.enc
2020/04/28 | 7928 | macros/latex/contrib/tcolorbox/tcolorbox.doc.graphics.tex
-2020/04/28 | 77984 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
-2020/04/28 | 77885 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
-2020/04/28 | 77444 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2020/04/28 | 77785 | systems/texlive/tlnet/tlpkg/translations/ja.po
2020/04/28 | 773032 | macros/latex/required/babel/base/babel.pdf
2020/04/28 | 76829 | macros/latex/contrib/tcolorbox/goldshade.png
2020/04/28 | 7628 | fonts/utilities/fontools/bin/splitttc
2020/04/28 | 7576 | systems/texlive/tlnet/archive/context-vim.doc.r54913.tar.xz
2020/04/28 | 755233 | macros/latex/required/babel/base/locale.zip
-2020/04/28 | 7504 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
-2020/04/28 | 74684 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
+2020/04/28 | 75429 | systems/texlive/tlnet/tlpkg/translations/sl.po
+2020/04/28 | 74851 | systems/texlive/tlnet/tlpkg/translations/nl.po
2020/04/28 | 7392 | macros/latex/required/babel/base/babel.ins
-2020/04/28 | 73583 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2020/04/28 | 73023 | systems/texlive/tlnet/tlpkg/translations/pl.po
2020/04/28 | 7285 | macros/latex/contrib/abnt/abnt.sty
-2020/04/28 | 72764 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
-2020/04/28 | 72537 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
-2020/04/28 | 71673 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2020/04/28 | 72801 | systems/texlive/tlnet/tlpkg/translations/zh_CN.po
2020/04/28 | 715 | macros/latex/contrib/abnt/README.md
2020/04/28 | 7151414 | macros/latex/contrib/tcolorbox/tcolorbox.pdf
-2020/04/28 | 70760 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
2020/04/28 | 70001 | fonts/utilities/fontools/doc/autoinst.pdf
-2020/04/28 | 69793 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
2020/04/28 | 6950 | macros/latex/required/babel/base/README.md
-2020/04/28 | 69227 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
-2020/04/28 | 68850 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
-2020/04/28 | 67254 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
-2020/04/28 | 669804 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
+2020/04/28 | 67958 | systems/texlive/tlnet/tlpkg/installer/install-tl-gui.tcl
2020/04/28 | 6656 | macros/latex/contrib/tcolorbox/tcolorbox.doc.s_snippet.sty
-2020/04/28 | 652 | systems/win32/miktex/tm/packages/next/pr.ini
-2020/04/28 | 65199 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
2020/04/28 | 6484 | systems/texlive/tlnet/archive/context-filter.r54912.tar.xz
2020/04/28 | 647028 | macros/latex/required/babel/base/babel.dtx
-2020/04/28 | 64459 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
2020/04/28 | 6424 | macros/latex/contrib/tcolorbox/tcolorbox.doc.beamer.tex
2020/04/28 | 6386 | macros/latex/contrib/tcolorbox/tcolorbox.doc.recording.tex
-2020/04/28 | 63315 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
-2020/04/28 | 63292 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
-2020/04/28 | 63267 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
-2020/04/28 | 63007 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
+2020/04/28 | 634807 | systems/win32/w32tex/ChangeLog
+2020/04/28 | 63360 | systems/texlive/tlnet/tlpkg/translations/zh_TW.po
2020/04/28 | 62882 | macros/latex/contrib/tcolorbox/blueshade.png
-2020/04/28 | 62800 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
2020/04/28 | 62648 | macros/latex/contrib/hu-berlin-bundle/hu-berlin-bundle.dtx
-2020/04/28 | 61672 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
-2020/04/28 | 61637 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
-2020/04/28 | 615708 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
2020/04/28 | 6140897 | macros/latex/contrib/tcolorbox.zip
2020/04/28 | 6129 | macros/latex/contrib/translations/dicts/translations-basic-dictionary-catalan.trsl
-2020/04/28 | 612250 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
-2020/04/28 | 61218 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
2020/04/28 | 6111597 | install/macros/latex/contrib/tcolorbox.tds.zip
2020/04/28 | 6102 | macros/latex/contrib/tcolorbox/tcolorbox.doc.bib
2020/04/28 | 6032 | macros/latex/contrib/translations/dicts/translations-basic-dictionary-spanish.trsl
2020/04/28 | 5989 | macros/latex/contrib/tcolorbox/tcolorbox-example-poster.tex
-2020/04/28 | 59494 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64-2.9.tar.lzma
2020/04/28 | 5906 | macros/latex/contrib/translations/dicts/translations-basic-dictionary-german.trsl
2020/04/28 | 5905 | macros/latex/contrib/translations/dicts/translations-basic-dictionary-french.trsl
-2020/04/28 | 58840 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2020/04/28 | 58685 | systems/texlive/tlnet/tlpkg/translations/messages.pot
2020/04/28 | 5864 | macros/latex/contrib/translations/dicts/translations-basic-dictionary-dutch.trsl
2020/04/28 | 5799 | macros/latex/contrib/hu-berlin-bundle/README.md
-2020/04/28 | 57804 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
2020/04/28 | 5770 | macros/latex/contrib/translations/dicts/translations-basic-dictionary-english.trsl
-2020/04/28 | 576471 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
-2020/04/28 | 575630 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
-2020/04/28 | 57244 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
2020/04/28 | 57157 | macros/latex/contrib/tcolorbox/tcolorbox.doc.listings.tex
-2020/04/28 | 56645 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
2020/04/28 | 5630 | macros/latex/contrib/tcolorbox/tcbmagazine.code.tex
2020/04/28 | 56219 | macros/latex/contrib/tcolorbox/tcolorbox.doc.documentation.tex
-2020/04/28 | 560787 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
2020/04/28 | 5577 | macros/latex/contrib/tcolorbox/tcolorbox.doc.quickref.tex
-2020/04/28 | 55657 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
-2020/04/28 | 5502507 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2020/04/28 | 54842 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
-2020/04/28 | 545002 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
2020/04/28 | 5404 | macros/latex/contrib/tcolorbox/tcolorbox.doc.abstract.tex
-2020/04/28 | 53986 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
-2020/04/28 | 539768 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
2020/04/28 | 53602 | macros/latex/contrib/tcolorbox/CHANGES
-2020/04/28 | 53374 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-2.9.tar.lzma
-2020/04/28 | 531714 | systems/win32/miktex/tm/packages/next/files.csv.lzma
-2020/04/28 | 531674 | systems/win32/miktex/tm/packages/files.csv.lzma
2020/04/28 | 5277 | macros/latex/contrib/tcolorbox/README
2020/04/28 | 525716 | macros/latex/contrib/translations.zip
-2020/04/28 | 52143 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
-2020/04/28 | 52110 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
2020/04/28 | 518456 | systems/texlive/tlnet/archive/scratch3.doc.r54916.tar.xz
-2020/04/28 | 50949 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
-2020/04/28 | 50896 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
-2020/04/28 | 50525 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
2020/04/28 | 500132 | macros/latex/contrib/translations/translations_en.pdf
-2020/04/28 | 498650 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
-2020/04/28 | 49777 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
-2020/04/28 | 49330 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
-2020/04/28 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
-2020/04/28 | 47971 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
-2020/04/28 | 461127 | systems/win32/miktex/tm/packages/next/miktex-doc-2.9.tar.lzma
-2020/04/28 | 45903 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
-2020/04/28 | 45857 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
-2020/04/28 | 457889 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
+2020/04/28 | 48588 | systems/texlive/tlnet/tlpkg/installer/config.guess
2020/04/28 | 457493 | macros/latex/contrib/tcolorbox/tcolorbox-example.pdf
2020/04/28 | 457104 | systems/texlive/tlnet/archive/quantikz.doc.r54911.tar.xz
-2020/04/28 | 45663 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
-2020/04/28 | 45603 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
-2020/04/28 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2020/04/28 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
-2020/04/28 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2020/04/28 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
-2020/04/28 | 45005 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
2020/04/28 | 442583 | macros/latex/contrib/tcolorbox/tcolorbox-tutorial-poster.pdf
-2020/04/28 | 440 | systems/texlive/tlnet/archive/tlshell.doc.r54910.tar.xz
2020/04/28 | 44097 | macros/latex/contrib/tcolorbox/tcolorbox-tutorial-poster.tex
-2020/04/28 | 43439 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
-2020/04/28 | 42922 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
2020/04/28 | 42907 | macros/latex/contrib/translations/translations.sty
-2020/04/28 | 42638 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
-2020/04/28 | 42173 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
-2020/04/28 | 41927 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
-2020/04/28 | 411 | systems/win32/miktex/tm/packages/pr.ini
-2020/04/28 | 41145 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
-2020/04/28 | 40748 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
-2020/04/28 | 391545 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
2020/04/28 | 388 | systems/texlive/tlnet/archive/texlive-docindex.r54903.tar.xz
-2020/04/28 | 38798 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
-2020/04/28 | 387642 | systems/win32/miktex/tm/packages/next/miktex-omega-bin-x64-2.9.tar.lzma
+2020/04/28 | 3846672 | systems/win32/w32tex/luajittex-w32.tar.xz
+2020/04/28 | 3844212 | systems/win32/w32tex/luajittex-dev-w32.tar.xz
+2020/04/28 | 3839160 | systems/win32/w32tex/luajittex-exp-w32.tar.xz
2020/04/28 | 38317 | macros/latex/contrib/tcolorbox/tcolorbox.doc.theorems.tex
2020/04/28 | 3760 | macros/latex/contrib/hu-berlin-bundle/makefile
2020/04/28 | 3729 | fonts/utilities/fontools/share/fontools_t2b.enc
2020/04/28 | 37045 | macros/latex/contrib/hu-berlin-bundle/img/hu-berlin-logo.pdf
2020/04/28 | 36734 | macros/latex/contrib/tcolorbox/tcolorbox.doc.breakable.tex
-2020/04/28 | 36613 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
2020/04/28 | 3651 | fonts/utilities/fontools/share/fontools_t2c.enc
-2020/04/28 | 36440 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
-2020/04/28 | 356405 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
-2020/04/28 | 354654 | systems/win32/miktex/tm/packages/next/miktex-omega-bin-2.9.tar.lzma
2020/04/28 | 35436 | macros/latex/contrib/translations/translations_en.tex
2020/04/28 | 3526 | macros/latex/required/babel/base/bbidxglo.dtx
2020/04/28 | 35224 | macros/latex/contrib/tcolorbox/lichtspiel.jpg
-2020/04/28 | 34893 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
-2020/04/28 | 34818 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
+2020/04/28 | 3479260 | systems/win32/w32tex/win64/luajittex-w64.tar.xz
+2020/04/28 | 3467288 | systems/win32/w32tex/win64/luajittex-dev-w64.tar.xz
+2020/04/28 | 3464916 | systems/win32/w32tex/win64/luajittex-exp-w64.tar.xz
+2020/04/28 | 34520780 | systems/win32/w32tex/ltxpkgs.tar.xz
2020/04/28 | 3448 | macros/latex/contrib/tcolorbox/tcolorbox.doc.verbatim.tex
2020/04/28 | 343797 | macros/latex/contrib/hu-berlin-bundle.zip
2020/04/28 | 3412 | macros/latex/contrib/tcolorbox/tcblistings.code.tex
-2020/04/28 | 33430 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
2020/04/28 | 33368 | macros/latex/contrib/tcolorbox/tcbbreakable.code.tex
2020/04/28 | 332620 | systems/texlive/tlnet/archive/simplekv.doc.r54915.tar.xz
2020/04/28 | 32893 | macros/latex/contrib/tcolorbox/tcolorbox.doc.raster.tex
-2020/04/28 | 328718 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
2020/04/28 | 3251 | macros/latex/contrib/tcolorbox/tcolorbox.tex
-2020/04/28 | 32361 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
-2020/04/28 | 32344 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
-2020/04/28 | 321983 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
-2020/04/28 | 31351 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
-2020/04/28 | 31155 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
-2020/04/28 | 310427 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
-2020/04/28 | 30987 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
+2020/04/28 | 3119424 | systems/win32/w32tex/win64/luatex-exp-w64.tar.xz
+2020/04/28 | 3107716 | systems/win32/w32tex/win64/luatex-w64.tar.xz
+2020/04/28 | 3107500 | systems/win32/w32tex/win64/luatex-dev-w64.tar.xz
2020/04/28 | 3080 | fonts/utilities/fontools/share/fontools_ts1.enc
-2020/04/28 | 30777 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
2020/04/28 | 307158 | macros/latex/contrib/hu-berlin-bundle/hu-berlin-bundle.pdf
-2020/04/28 | 30231 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
2020/04/28 | 29861 | macros/latex/contrib/tcolorbox/tcolorbox.doc.technical.tex
-2020/04/28 | 29734 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
-2020/04/28 | 29333 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
-2020/04/28 | 29318 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
-2020/04/28 | 29142 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
2020/04/28 | 2908 | systems/texlive/tlnet/archive/simplekv.r54915.tar.xz
2020/04/28 | 2907 | fonts/utilities/fontools/share/fontools_t2a.enc
2020/04/28 | 2906 | fonts/utilities/fontools/README
-2020/04/28 | 28777 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
-2020/04/28 | 28564 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
2020/04/28 | 2855 | fonts/utilities/fontools/share/fontools_ly1.enc
-2020/04/28 | 281655 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
2020/04/28 | 2815 | fonts/utilities/fontools/share/fontools_t1.enc
-2020/04/28 | 281389 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
-2020/04/28 | 27840 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
2020/04/28 | 27727 | macros/latex/contrib/tcolorbox/tcbdocumentation.code.tex
-2020/04/28 | 277093 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
2020/04/28 | 27582 | fonts/utilities/fontools/bin/ot2kpx
2020/04/28 | 2751 | fonts/utilities/fontools/share/fontools_ts3.enc
2020/04/28 | 27417 | fonts/utilities/fontools/doc/ot2kpx.pdf
2020/04/28 | 273848 | macros/latex/contrib/tcolorbox/tcolorbox-example-poster.pdf
-2020/04/28 | 272883 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
2020/04/28 | 27222 | macros/latex/contrib/tcolorbox/tcolorbox.doc.vignette.tex
2020/04/28 | 27040 | fonts/utilities/fontools/doc/afm2afm.pdf
-2020/04/28 | 26935 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
-2020/04/28 | 2684808 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
-2020/04/28 | 26809 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
-2020/04/28 | 26756 | systems/texlive/tlnet/archive/tlshell.r54910.tar.xz
-2020/04/28 | 26646 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
2020/04/28 | 2657526 | install/macros/latex/required/babel-base.tds.zip
2020/04/28 | 2656 | fonts/utilities/fontools/share/fontools_t3.enc
-2020/04/28 | 26516 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
2020/04/28 | 25913 | macros/latex/contrib/tcolorbox/tcolorbox.doc.xparse.tex
2020/04/28 | 2587 | fonts/utilities/fontools/share/fontools_ot1.enc
2020/04/28 | 25815 | macros/latex/contrib/tcolorbox/tcolorbox.doc.external.tex
2020/04/28 | 2564 | macros/latex/contrib/tcolorbox/tcbprocessing.code.tex
2020/04/28 | 25588 | systems/texlive/tlnet/archive/chemfig.r54914.tar.xz
2020/04/28 | 25565 | macros/latex/contrib/tcolorbox/tcolorbox.doc.poster.tex
-2020/04/28 | 2555294 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
-2020/04/28 | 25424 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
-2020/04/28 | 247854 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
-2020/04/28 | 247464 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
-2020/04/28 | 246464 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
2020/04/28 | 2459 | macros/latex/contrib/tcolorbox/tcbminted.code.tex
2020/04/28 | 24525 | macros/latex/contrib/tcolorbox/tcolorbox.doc.hooks.tex
-2020/04/28 | 243094 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
-2020/04/28 | 24269080 | systems/texlive/tlnet/install-tl.zip
-2020/04/28 | 23502 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
-2020/04/28 | 22987 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
2020/04/28 | 22407 | macros/latex/contrib/tcolorbox/Basilica_5.png
-2020/04/28 | 222824 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
-2020/04/28 | 2194336 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
-2020/04/28 | 219376 | systems/texlive/tlnet/archive/texlive-scripts.doc.r54910.tar.xz
2020/04/28 | 21932 | macros/latex/required/babel/base/bbcompat.dtx
2020/04/28 | 21663 | macros/latex/contrib/tcolorbox/crinklepaper.png
-2020/04/28 | 20746 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
-2020/04/28 | 207032 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
2020/04/28 | 2065340 | systems/texlive/tlnet/archive/chemfig.doc.r54914.tar.xz
2020/04/28 | 20529 | fonts/utilities/fontools/doc/splitttc.pdf
-2020/04/28 | 203046 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
2020/04/28 | 20274 | macros/latex/contrib/tcolorbox/tcolorbox.doc.magazine.tex
2020/04/28 | 20178 | macros/latex/contrib/tcolorbox/tcolorbox.doc.filling.tex
2020/04/28 | 19944 | macros/latex/contrib/tcolorbox/tcolorbox.doc.fitting.tex
-2020/04/28 | 19890 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
-2020/04/28 | 198824 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
-2020/04/28 | 198798 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
-2020/04/28 | 1983880 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
2020/04/28 | 195706 | fonts/utilities/fontools.zip
-2020/04/28 | 194975 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
-2020/04/28 | 19389585 | systems/texlive/tlnet/install-tl-windows.exe
-2020/04/28 | 193701 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
-2020/04/28 | 186881 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
-2020/04/28 | 184654 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
-2020/04/28 | 184184 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
-2020/04/28 | 182844 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
2020/04/28 | 17997 | fonts/utilities/fontools/GPLv2.txt
-2020/04/28 | 17826 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
-2020/04/28 | 177698 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
-2020/04/28 | 17736 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2020/04/28 | 17955200 | systems/win32/w32tex/luatex-exp-w32.tar.xz
+2020/04/28 | 17952720 | systems/win32/w32tex/luatex-dev-w32.tar.xz
+2020/04/28 | 17945116 | systems/win32/w32tex/luatex-w32.tar.xz
2020/04/28 | 175350 | macros/latex/contrib/tcolorbox/tcolorbox.doc.skins.tex
2020/04/28 | 1700101 | macros/latex/required/babel/base.zip
-2020/04/28 | 1698895 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
-2020/04/28 | 169320 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
-2020/04/28 | 167945 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
-2020/04/28 | 167862 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
2020/04/28 | 164925 | macros/latex/contrib/tcolorbox/tcolorbox.doc.coreoptions.tex
-2020/04/28 | 164808 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
2020/04/28 | 1645 | macros/latex/contrib/translations/README
-2020/04/28 | 16372335 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
2020/04/28 | 161528 | systems/texlive/tlnet/archive/texlive-docindex.doc.r54903.tar.xz
-2020/04/28 | 16113 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
-2020/04/28 | 160738 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
-2020/04/28 | 15956 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
-2020/04/28 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2020/04/28 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2020/04/28 | 152024 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
2020/04/28 | 15166 | macros/latex/contrib/tcolorbox/pink_marble.png
-2020/04/28 | 150030 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
2020/04/28 | 14903 | macros/latex/contrib/hu-berlin-bundle/img/texografie-logo.pdf
2020/04/28 | 148 | macros/latex/contrib/tcolorbox/tcolorbox.doc.references.tex
-2020/04/28 | 148346 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
-2020/04/28 | 147401 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
2020/04/28 | 14602 | macros/latex/contrib/tcolorbox/tcbfitting.code.tex
-2020/04/28 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2020/04/28 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
2020/04/28 | 14415 | macros/latex/contrib/tcolorbox/tcolorbox.doc.initoptions.tex
2020/04/28 | 1412 | macros/latex/contrib/tcolorbox/tcblistingsutf8.code.tex
-2020/04/28 | 14037 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
-2020/04/28 | 1393302 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2020/04/28 | 139820736 | systems/win32/w32tex/context.tar.xz
2020/04/28 | 13905 | macros/latex/contrib/tcolorbox/tcblistingscore.code.tex
-2020/04/28 | 137096 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
2020/04/28 | 13613 | macros/latex/contrib/tcolorbox/tcolorbox.doc.sidebyside.tex
2020/04/28 | 13334 | fonts/utilities/fontools/bin/afm2afm
-2020/04/28 | 133161 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
-2020/04/28 | 132412 | systems/texlive/tlnet/archive/texlive-scripts.r54910.tar.xz
-2020/04/28 | 130557 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
-2020/04/28 | 13053 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
2020/04/28 | 12745 | macros/latex/contrib/tcolorbox/tcbvignette.code.tex
-2020/04/28 | 1255976 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
-2020/04/28 | 1255693 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
2020/04/28 | 12451 | macros/latex/contrib/tcolorbox/tcbposter.code.tex
2020/04/28 | 122550 | macros/latex/contrib/abnt.zip
-2020/04/28 | 1188987 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
-2020/04/28 | 1188861 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
-2020/04/28 | 116425 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
-2020/04/28 | 115873 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
2020/04/28 | 115700 | fonts/utilities/fontools/bin/autoinst
2020/04/28 | 112 | macros/latex/contrib/tcolorbox/tcolorbox.doc.index.tex
-2020/04/28 | 1123776 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
+2020/04/28 | 112660 | systems/texlive/tlnet/tlpkg/translations/ru.po
2020/04/28 | 11163 | macros/latex/contrib/tcolorbox/tcolorbox.doc.s_main.sty
-2020/04/28 | 111081 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
-2020/04/28 | 1109761 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
-2020/04/28 | 1108566 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
2020/04/28 | 1106 | macros/latex/contrib/tcolorbox/tcolorbox.doc.picturecredits.tex
-2020/04/28 | 110185 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
-2020/04/28 | 108887 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
-2020/04/28 | 1048378 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
-2020/04/28 | 1042550 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2020/04/28 | 110048 | systems/texlive/tlnet/tlpkg/translations/sr.po
2020/04/28 | 10328 | systems/texlive/tlnet/archive/context-filter.doc.r54912.tar.xz
-2020/04/28 | 102473 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
-2020/04/28 | 100614 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
2020/04/28 | 10004 | macros/latex/contrib/tcolorbox/tcbxparse.code.tex
2020/04/27 | 8905 | macros/generic/simplekv/simplekv.tex
2020/04/27 | 872884 | systems/texlive/tlnet/archive/comicneue.r54891.tar.xz
2020/04/27 | 8660 | systems/texlive/tlnet/archive/kvmap.source.r54898.tar.xz
-2020/04/27 | 80597664 | systems/win32/w32tex/pgfcontrib.tar.xz
2020/04/27 | 6789 | macros/latex/contrib/abnt/abnt-doc.tex
-2020/04/27 | 67832 | systems/texlive/tlnet/tlpkg/installer/install-tl-gui.tcl
2020/04/27 | 671484 | systems/texlive/tlnet/archive/sourcesanspro.doc.r54892.tar.xz
2020/04/27 | 66174732 | systems/win32/w32tex/biblatex-biber.tar.xz
2020/04/27 | 6492 | systems/texlive/tlnet/archive/xepersian-hm.source.r54900.tar.xz
-2020/04/27 | 633708 | systems/win32/w32tex/ChangeLog
2020/04/27 | 6293 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
-2020/04/27 | 6278 | macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-main.tex
2020/04/27 | 620 | systems/texlive/tlnet/archive/collection-langjapanese.r54894.tar.xz
2020/04/27 | 61780 | systems/texlive/tlnet/archive/jlreq-deluxe.doc.r54894.tar.xz
2020/04/27 | 613 | macros/generic/simplekv/README
@@ -354,30 +511,16 @@
2020/04/27 | 5153396 | systems/texlive/tlnet/archive/sourcesanspro.r54892.tar.xz
2020/04/27 | 510921 | graphics/pgf/contrib/quantikz/quantikz.pdf
2020/04/27 | 508759 | macros/latex/contrib/scratch3/scratch3-fr.pdf
-2020/04/27 | 506928 | systems/texlive/tlnet/archive/translations.doc.r54899.tar.xz
-2020/04/27 | 48513 | macros/latex/contrib/tkz/tkz-tab/latex/tkz-tab.sty
2020/04/27 | 474272 | graphics/pgf/contrib/quantikz.zip
2020/04/27 | 46614 | macros/latex/contrib/scratch3/scratch3.sty
2020/04/27 | 4348 | systems/texlive/tlnet/archive/xepersian-hm.r54900.tar.xz
2020/04/27 | 42627 | graphics/pgf/contrib/quantikz/tikzlibraryquantikz.code.tex
-2020/04/27 | 3851056 | systems/win32/w32tex/luajittex-w32.tar.xz
-2020/04/27 | 3848760 | systems/win32/w32tex/luajittex-dev-w32.tar.xz
-2020/04/27 | 3844172 | systems/win32/w32tex/luajittex-exp-w32.tar.xz
-2020/04/27 | 381342 | macros/latex/contrib/tkz/tkz-tab.zip
2020/04/27 | 371 | macros/generic/chemfig/chemfig.sty
-2020/04/27 | 3473412 | systems/win32/w32tex/win64/luajittex-exp-w64.tar.xz
-2020/04/27 | 3470548 | systems/win32/w32tex/win64/luajittex-dev-w64.tar.xz
-2020/04/27 | 3469964 | systems/win32/w32tex/win64/luajittex-w64.tar.xz
-2020/04/27 | 346431 | macros/latex/contrib/tkz/tkz-tab/doc/TKZdoc-tab.pdf
-2020/04/27 | 34519792 | systems/win32/w32tex/ltxpkgs.tar.xz
2020/04/27 | 334685 | macros/generic/simplekv.zip
2020/04/27 | 326887 | macros/generic/simplekv/simplekv-fr.pdf
2020/04/27 | 31885 | macros/latex/contrib/scratch3/scratch3-fr.tex
2020/04/27 | 317772 | systems/texlive/tlnet/archive/biblatex-apa.doc.r54896.tar.xz
2020/04/27 | 312784 | systems/texlive/tlnet/archive/pxchfon.doc.r54895.tar.xz
-2020/04/27 | 3113668 | systems/win32/w32tex/win64/luatex-dev-w64.tar.xz
-2020/04/27 | 3111876 | systems/win32/w32tex/win64/luatex-w64.tar.xz
-2020/04/27 | 3110892 | systems/win32/w32tex/win64/luatex-exp-w64.tar.xz
2020/04/27 | 294656 | systems/texlive/tlnet/archive/jlreq-deluxe.r54894.tar.xz
2020/04/27 | 2672 | systems/texlive/tlnet/archive/kvmap.r54898.tar.xz
2020/04/27 | 23972 | systems/texlive/tlnet/archive/biblatex-apa.r54896.tar.xz
@@ -392,17 +535,11 @@
2020/04/27 | 200049 | macros/generic/chemfig/chemfig-fr.tex
2020/04/27 | 19012 | systems/texlive/tlnet/archive/pxchfon.r54895.tar.xz
2020/04/27 | 185808 | macros/generic/chemfig/chemfig-en.tex
-2020/04/27 | 17953812 | systems/win32/w32tex/luatex-exp-w32.tar.xz
-2020/04/27 | 17951820 | systems/win32/w32tex/luatex-dev-w32.tar.xz
-2020/04/27 | 17944004 | systems/win32/w32tex/luatex-w32.tar.xz
2020/04/27 | 1728160 | systems/texlive/tlnet/archive/optex.doc.r54893.tar.xz
2020/04/27 | 161 | macros/generic/simplekv/simplekv.sty
2020/04/27 | 161268 | systems/texlive/tlnet/archive/optex.r54893.tar.xz
2020/04/27 | 151552 | systems/texlive/tlnet/archive/xepersian-hm.doc.r54900.tar.xz
2020/04/27 | 14396 | macros/generic/simplekv/simplekv-fr.tex
-2020/04/27 | 1401 | macros/latex/contrib/tkz/tkz-tab/README.md
-2020/04/27 | 139829728 | systems/win32/w32tex/context.tar.xz
-2020/04/27 | 12216 | systems/texlive/tlnet/archive/translations.r54899.tar.xz
2020/04/27 | 119879 | macros/latex/contrib/abnt/abnt-doc.pdf
2020/04/27 | 119798 | macros/generic/chemfig/chemfig.tex
2020/04/27 | 1125 | macros/generic/chemfig/README
@@ -2172,7 +2309,6 @@
2020/04/26 | 1412 | fonts/sourcesanspro/fonts/SourceSansPro-Light-lf-ts1--base.tfm
2020/04/26 | 1412 | fonts/sourcesanspro/fonts/SourceSansPro-It-inf-ot1.tfm
2020/04/26 | 1412 | fonts/sourcesanspro/fonts/SourceSansPro-It-dnom-ot1.tfm
-2020/04/26 | 141280 | systems/texlive/tlnet/archive/texlive-msg-translations.r54870.tar.xz
2020/04/26 | 1408 | fonts/sourcesanspro/fonts/SourceSansPro-LightIt-numr-ot1.tfm
2020/04/26 | 1408 | fonts/sourcesanspro/fonts/SourceSansPro-Black-tosf-ts1--base.tfm
2020/04/26 | 1408 | fonts/sourcesanspro/fonts/SourceSansPro-Black-tlf-ts1--base.tfm
@@ -2290,23 +2426,14 @@
2020/04/26 | 10018 | macros/latex/contrib/biblatex-contrib/biblatex-apa/galician-apa.lbx
2020/04/26 | 10016 | macros/latex/contrib/biblatex-contrib/biblatex-apa/spanish-apa.lbx
2020/04/26 | 1000 | fonts/comicneue/README.md
-2020/04/25 | 99860 | systems/texlive/tlnet/tlpkg/translations/fr.po
2020/04/25 | 9872 | macros/latex/contrib/tuda-ci/README.md
2020/04/25 | 9736 | macros/luatex/optex/if-macros.opm
-2020/04/25 | 96278 | systems/texlive/tlnet/tlpkg/translations/vi.po
-2020/04/25 | 95550 | systems/texlive/tlnet/tlpkg/translations/de.po
-2020/04/25 | 94227 | systems/texlive/tlnet/tlpkg/translations/sk.po
2020/04/25 | 9383 | macros/latex/contrib/biblatex-contrib/biblatex-software/software-biblatex.tex
2020/04/25 | 931 | macros/latex/contrib/biblatex-contrib/biblatex-software/LICENSE
-2020/04/25 | 93150 | systems/texlive/tlnet/tlpkg/translations/it.po
2020/04/25 | 9231 | macros/luatex/optex/math-preload.opm
2020/04/25 | 9000 | macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa.sty
2020/04/25 | 89 | macros/latex/contrib/lwarp/lwarp_baseline_marker.png
-2020/04/25 | 88434 | systems/texlive/tlnet/tlpkg/translations/pt_BR.po
-2020/04/25 | 87092 | systems/texlive/tlnet/tlpkg/translations/uk.po
-2020/04/25 | 87025 | systems/texlive/tlnet/tlpkg/translations/cs.po
2020/04/25 | 86852 | systems/texlive/tlnet/archive/pxjahyper.doc.r54863.tar.xz
-2020/04/25 | 86063 | systems/texlive/tlnet/tlpkg/translations/es.po
2020/04/25 | 848530 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPub.pdf
2020/04/25 | 8467 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaExercise.tex
2020/04/25 | 83630 | macros/latex/contrib/animate/animate.tex
@@ -2315,15 +2442,10 @@
2020/04/25 | 819233 | macros/latex/contrib/knowledge.zip
2020/04/25 | 815850 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaThesis.pdf
2020/04/25 | 7936 | macros/latex/contrib/knowledge/knowledge-configuration.dtx
-2020/04/25 | 77712 | systems/texlive/tlnet/tlpkg/translations/ja.po
2020/04/25 | 758 | macros/latex/contrib/biblatex-contrib/biblatex-software/french-software.lbx
2020/04/25 | 755 | macros/latex/contrib/biblatex-contrib/biblatex-software/english-software.lbx
2020/04/25 | 7553 | macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa.sty
-2020/04/25 | 75356 | systems/texlive/tlnet/tlpkg/translations/sl.po
-2020/04/25 | 74778 | systems/texlive/tlnet/tlpkg/translations/nl.po
2020/04/25 | 729897 | macros/latex/contrib/knowledge/knowledge.pdf
-2020/04/25 | 72950 | systems/texlive/tlnet/tlpkg/translations/pl.po
-2020/04/25 | 72728 | systems/texlive/tlnet/tlpkg/translations/zh_CN.po
2020/04/25 | 719 | macros/latex/contrib/lwarp/lwarp_baseline_marker.eps
2020/04/25 | 6914959 | macros/latex/contrib/tuda-ci.zip
2020/04/25 | 688 | macros/latex/contrib/kvmap/README.md
@@ -2336,7 +2458,6 @@
2020/04/25 | 6550 | macros/latex/contrib/biblatex-contrib/biblatex-software/software.bbx
2020/04/25 | 654 | macros/latex/contrib/biblatex-contrib/biblatex-software/mkbiblatexstubs.sh
2020/04/25 | 639 | macros/latex/contrib/biblatex-contrib/biblatex-software/software-biblatex.sty
-2020/04/25 | 63287 | systems/texlive/tlnet/tlpkg/translations/zh_TW.po
2020/04/25 | 6284 | systems/texlive/tlnet/archive/willowtreebook.r54866.tar.xz
2020/04/25 | 618688 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer.pdf
2020/04/25 | 6036 | macros/latex/contrib/tuda-ci/tex/tudabeamer.cls
@@ -2345,7 +2466,6 @@
2020/04/25 | 58704 | fonts/libertinus-otf/doc/libertinus-otf-doc.tex
2020/04/25 | 586726 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaSciPoster.pdf
2020/04/25 | 5861 | macros/luatex/optex/alloc.opm
-2020/04/25 | 58612 | systems/texlive/tlnet/tlpkg/translations/messages.pot
2020/04/25 | 5839 | language/japanese/pxjahyper/pxjahyper.tex
2020/04/25 | 583232 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLeaflet.pdf
2020/04/25 | 5817 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer.tex
@@ -3343,9 +3463,7 @@
2020/04/25 | 1167 | macros/latex/contrib/biblatex-contrib/biblatex-software/history.tex
2020/04/25 | 11663 | macros/latex/contrib/animate/ChangeLog
2020/04/25 | 1149383 | systems/win32/miktex/tm/packages/circuitikz.tar.lzma
-2020/04/25 | 112587 | systems/texlive/tlnet/tlpkg/translations/ru.po
2020/04/25 | 110023 | macros/latex/contrib/kvmap/kvmap.pdf
-2020/04/25 | 109975 | systems/texlive/tlnet/tlpkg/translations/sr.po
2020/04/25 | 109881 | macros/latex/contrib/biblatex-contrib/biblatex-software/sample-use-sty.pdf
2020/04/25 | 1091 | language/japanese/pxjahyper/LICENSE
2020/04/25 | 10474 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaSciPoster.tex
@@ -3594,129 +3712,3 @@
2020/04/23 | 1050 | support/arara/scripts/rules/tex.yaml
2020/04/23 | 1032 | support/arara/doc/rules/manual.yaml
2020/04/23 | 1026644 | systems/texlive/tlnet/archive/ctex.doc.r54841.tar.xz
-2020/04/22 | 99903 | graphics/pgf/contrib/tikzducks/tikzducks.sty
-2020/04/22 | 966 | support/tlcockpit/build.sbt-jdk8
-2020/04/22 | 9572 | macros/luatex/optex/math-unicode.opm
-2020/04/22 | 9337 | graphics/pgf/contrib/tikzlings/tikzlings-koalas.sty
-2020/04/22 | 9146 | graphics/pgf/contrib/tikzlings/tikzlings-mice.sty
-2020/04/22 | 8966 | graphics/pgf/contrib/tikzlings/tikzlings-pigs.sty
-2020/04/22 | 860 | support/tlcockpit/src/main/scala/TLCockpit/Utils.scala
-2020/04/22 | 8252 | graphics/pgf/contrib/tikzlings/tikzlings-penguins.sty
-2020/04/22 | 8235 | graphics/pgf/contrib/tikzlings/tikzlings-squirrels.sty
-2020/04/22 | 8033 | graphics/pgf/contrib/tikzlings/tikzlings-moles.sty
-2020/04/22 | 794111 | systems/win32/miktex/tm/packages/bearwear.tar.lzma
-2020/04/22 | 787504 | systems/texlive/tlnet/archive/bearwear.doc.r54826.tar.xz
-2020/04/22 | 7830 | graphics/pgf/contrib/tikzlings/tikzlings-rhinos.sty
-2020/04/22 | 7674 | graphics/pgf/contrib/tikzlings/tikzlings-snowmans.sty
-2020/04/22 | 73589643 | support/tlcockpit.zip
-2020/04/22 | 7128 | graphics/pgf/contrib/tikzlings/tikzlings-owls.sty
-2020/04/22 | 7067 | graphics/pgf/contrib/tikzlings/tikzlings-hippos.sty
-2020/04/22 | 6874 | graphics/pgf/contrib/tikzlings/tikzlings-bees.sty
-2020/04/22 | 668 | support/tlcockpit/src/main/scala/TeXLive/JsonProtocol.scala
-2020/04/22 | 64630 | support/tlcockpit/screenshots/tlcockpit-loading.jpg
-2020/04/22 | 6358 | graphics/pgf/contrib/tikzlings/tikzlings-pandas.sty
-2020/04/22 | 634 | support/tlcockpit/tlcockpit.man
-2020/04/22 | 6170 | support/tlcockpit/src/main/scala/TLCockpit/PkgInfoDialog.scala
-2020/04/22 | 612365 | systems/win32/miktex/tm/packages/miktex-yap-bin-x64-2.9.tar.lzma
-2020/04/22 | 60581 | support/tlcockpit/src/main/scala/TLCockpit/ApplicationMain.scala
-2020/04/22 | 60549 | support/tlcockpit/src/main/resources/TLCockpit/spinner.gif
-2020/04/22 | 5992 | systems/texlive/tlnet/archive/bearwear.source.r54826.tar.xz
-2020/04/22 | 5963 | graphics/pgf/contrib/tikzlings/tikzlings-bears.sty
-2020/04/22 | 590 | graphics/pgf/contrib/tikzducks/tikzlibraryducks.code.tex
-2020/04/22 | 59088211 | support/tlcockpit/jar/tlcockpit.jar
-2020/04/22 | 57 | support/tlcockpit/project/plugins.sbt
-2020/04/22 | 57 | support/tlcockpit/project/assembly.sbt
-2020/04/22 | 577480 | graphics/pgf/contrib/tikzlings.zip
-2020/04/22 | 576311 | systems/win32/miktex/tm/packages/miktex-yap-bin-2.9.tar.lzma
-2020/04/22 | 562 | graphics/pgf/contrib/tikzducks/README.md
-2020/04/22 | 55982 | support/tlcockpit/screenshots/tlcockpit-postactions.jpg
-2020/04/22 | 540 | support/tlcockpit/scripts/tlcockpit.sh
-2020/04/22 | 539609 | graphics/pgf/contrib/tikzlings/tikzlings-doc.pdf
-2020/04/22 | 525639 | dviware/dviljk/configure.texk
-2020/04/22 | 52452 | dviware/dviljk/Makefile.in
-2020/04/22 | 523331 | fonts/utilities/ps2pk/configure.texk
-2020/04/22 | 52010 | fonts/utilities/ps2pk/Makefile.in
-2020/04/22 | 518482 | indexing/makeindexk/configure.texk
-2020/04/22 | 516947 | dviware/dvidvi/configure.texk
-2020/04/22 | 47462 | indexing/makeindexk/Makefile.in
-2020/04/22 | 4744 | systems/texlive/tlnet/archive/boxedminipage.source.r54827.tar.xz
-2020/04/22 | 4675 | support/tlcockpit/src/main/scala/TLCockpit/OptionsDialog.scala
-2020/04/22 | 466091 | graphics/pgf/contrib/tikzducks.zip
-2020/04/22 | 45050 | dviware/dviljk/aclocal.m4
-2020/04/22 | 440630 | graphics/pgf/contrib/tikzducks/tikzducks-doc.pdf
-2020/04/22 | 44019 | indexing/makeindexk/aclocal.m4
-2020/04/22 | 44019 | dviware/dvidvi/aclocal.m4
-2020/04/22 | 43982 | fonts/utilities/ps2pk/aclocal.m4
-2020/04/22 | 43795 | graphics/tpic2pdftex/aclocal.m4
-2020/04/22 | 43758 | support/lacheck/aclocal.m4
-2020/04/22 | 43627 | dviware/dvidvi/Makefile.in
-2020/04/22 | 4254 | macros/latex/contrib/epigraph-keys/epigraph-keys.tex
-2020/04/22 | 4237 | support/tlcockpit/README.md
-2020/04/22 | 414 | macros/latex/contrib/epigraph-keys/README
-2020/04/22 | 41460896 | systems/win32/w32tex/latex-dev.tar.xz
-2020/04/22 | 41429 | support/lacheck/Makefile.in
-2020/04/22 | 4116 | support/tlcockpit/src/main/scala/TeXLive/TlmgrProcess.scala
-2020/04/22 | 4109 | support/tlcockpit/src/main/scala/TLCockpit/LocationDialog.scala
-2020/04/22 | 40943 | graphics/pgf/contrib/tikzducks/tikzducks-doc.tex
-2020/04/22 | 39930 | graphics/pgf/contrib/tikzlings/tikzlings-addons.sty
-2020/04/22 | 38731 | graphics/pgf/contrib/tikzlings/tikzlings-doc.tex
-2020/04/22 | 37865 | support/tlcockpit/screenshots/tlcockpit-config.jpg
-2020/04/22 | 3633 | macros/luatex/optex/margins.opm
-2020/04/22 | 36327 | support/tlcockpit/logo/tlcockpit-banner.jpg
-2020/04/22 | 356935 | support/tlcockpit/logo/tlcockpit-banner.xcf
-2020/04/22 | 35619 | graphics/tpic2pdftex/Makefile.in
-2020/04/22 | 35141 | support/tlcockpit/LICENSE
-2020/04/22 | 3479 | support/tlcockpit/src/main/resources/TLCockpit/tlcockpit-128.jpg
-2020/04/22 | 343682 | systems/win32/miktex/tm/packages/boxedminipage.tar.lzma
-2020/04/22 | 339 | support/tlcockpit/TODO
-2020/04/22 | 33667 | macros/xetex/latex/parsa/parsa.sty
-2020/04/22 | 336440 | systems/texlive/tlnet/archive/boxedminipage.doc.r54827.tar.xz
-2020/04/22 | 31873 | support/tlcockpit/ChangeLog
-2020/04/22 | 317 | support/tlcockpit/src/main/resources/logback.xml
-2020/04/22 | 308968 | macros/latex/contrib/epigraph-keys/epigraph-keys.pdf
-2020/04/22 | 304 | macros/latex/contrib/willowtreebook/willowtreebook.bib
-2020/04/22 | 243769608 | systems/win32/miktex/setup/windows-x64/basic-miktex-2.9.7417-x64.exe
-2020/04/22 | 2404 | support/tlcockpit/src/main/scala/TLCockpit/PaperDialog.scala
-2020/04/22 | 2376 | systems/texlive/tlnet/archive/bearwear.r54826.tar.xz
-2020/04/22 | 235081480 | systems/win32/miktex/setup/windows-x86/basic-miktex-2.9.7417.exe
-2020/04/22 | 210 | support/tlcockpit/src/main/scala/TeXLive/package.scala
-2020/04/22 | 2104 | graphics/pgf/contrib/tikzlings/tikzlings.sty
-2020/04/22 | 2101 | support/tlcockpit/NEWS
-2020/04/22 | 20 | support/tlcockpit/project/build.properties
-2020/04/22 | 20613 | dviware/dviljk/win32/Makefile.in
-2020/04/22 | 199863 | support/tlcockpit/logo/tlcockpit.xcf
-2020/04/22 | 1980078 | systems/win32/miktex/tm/packages/miktex-luatex-bin-x64-2.9.tar.lzma
-2020/04/22 | 194370 | support/tlcockpit/screenshots/tlcockpit-updates.jpg
-2020/04/22 | 1934 | support/tlcockpit/build.sbt-jdk14
-2020/04/22 | 1849 | support/tlcockpit/src/main/scala/TeXLive/TLClasses.scala
-2020/04/22 | 17365376 | support/tlcockpit/jar/tlcockpit-jdk8.jar
-2020/04/22 | 16959 | support/tlcockpit/screenshots/tlcockpit-paper.jpg
-2020/04/22 | 1694546 | systems/win32/miktex/tm/packages/miktex-luatex-bin-2.9.tar.lzma
-2020/04/22 | 1660 | support/tlcockpit/src/main/scala/TLCockpit/TLDisplayClasses.scala
-2020/04/22 | 16225 | support/tlcockpit/src/main/resources/TLCockpit/spinner-small.gif
-2020/04/22 | 156457 | support/lacheck/configure.texk
-2020/04/22 | 155627 | support/tlcockpit/screenshots/tlcockpit-menu-debug-expert.jpg
-2020/04/22 | 15210 | macros/luatex/optex/unimath-codes.opm
-2020/04/22 | 148860 | graphics/tpic2pdftex/configure.texk
-2020/04/22 | 1460 | systems/texlive/tlnet/archive/boxedminipage.r54827.tar.xz
-2020/04/22 | 143423 | support/tlcockpit/screenshots/tlcockpit-packages.jpg
-2020/04/22 | 136845 | support/tlcockpit/screenshots/tlcockpit-collections.jpg
-2020/04/22 | 136064 | macros/xetex/latex/parsa.zip
-2020/04/22 | 13386 | graphics/pgf/contrib/tikzlings/tikzlings-coatis.sty
-2020/04/22 | 13334972 | systems/texlive/tlnet/archive/koma-script.r54825.tar.xz
-2020/04/22 | 13079277 | systems/win32/miktex/tm/packages/koma-script.tar.lzma
-2020/04/22 | 1293 | support/tlcockpit/src/main/scala/TeXLive/OsTools.scala
-2020/04/22 | 12695 | graphics/pgf/contrib/tikzlings/tikzlings-cats.sty
-2020/04/22 | 1252496 | systems/win32/miktex/tm/packages/miktex-runtime-bin-x64-2.9.tar.lzma
-2020/04/22 | 12361 | graphics/pgf/contrib/tikzlings/tikzlings-sloths.sty
-2020/04/22 | 1228 | graphics/pgf/contrib/tikzlings/README.md
-2020/04/22 | 1166 | support/tlcockpit/src/main/resources/TLCockpit/tlcockpit-48.jpg
-2020/04/22 | 1132 | macros/xetex/latex/parsa/README.md
-2020/04/22 | 1121435 | systems/win32/miktex/tm/packages/miktex-runtime-bin-2.9.tar.lzma
-2020/04/22 | 10758 | graphics/pgf/contrib/tikzlings/tikzlings-anteaters.sty
-2020/04/22 | 107216 | support/tlcockpit/screenshots/tlcockpit-backups.jpg
-2020/04/22 | 106077 | support/tlcockpit/screenshots/tlcockpit-pkgdetails.jpg
-2020/04/22 | 10600 | graphics/pgf/contrib/tikzlings/tikzlings-marmots.sty
-2020/04/22 | 10556 | macros/luatex/optex/output.opm
-2020/04/22 | 10482937 | macros/latex/contrib/willowtreebook/willow.jpg
-2020/04/22 | 104751 | support/tlcockpit/screenshots/tlcockpit-repositories.jpg
diff --git a/macros/context/contrib/context-vim/VERSION b/macros/context/contrib/context-vim/VERSION
index 9e6f07d186..cf132c65ea 100644
--- a/macros/context/contrib/context-vim/VERSION
+++ b/macros/context/contrib/context-vim/VERSION
@@ -1 +1 @@
-2020.04.25
+2020.04.29
diff --git a/macros/context/contrib/context-vim/doc/context/third/vim/vim.txt b/macros/context/contrib/context-vim/doc/context/third/vim/vim.txt
index 11c17cf59e..43d55333c4 100644
--- a/macros/context/contrib/context-vim/doc/context/third/vim/vim.txt
+++ b/macros/context/contrib/context-vim/doc/context/third/vim/vim.txt
@@ -543,7 +543,9 @@ after the comma in the options to `\startframedtext` will result in an error.
Clearly, `/BTEX ... /ETEX` is not a valid syntax in any language, so if these
tags are used outside of a comment region (as is the case in the above
example), the code will not compile. So, if the code also needs to run, then
-these annotations have to be restricted to the comment region of the code.
+these annotations have to be restricted to the comment region of the code or
+the output typeset by ConTeXt has to be manually tested for correctness prior
+to the release of your document.
Although, in practice, the use of both escape mechanisms is restricted to
comments, the two mechanism have subtle differences. When using
@@ -677,6 +679,28 @@ a different meaning than `option=on`. To avoid confusion, I have made these
synonyms. Thus, whenever the documentation says `option=yes`, you may use
`option=on`. And vice-versa. One less thing to worry about!
+Name (and location) of the VIM executable
+-----------------------------------------
+
+By default, the `t-vim` module calls the program `vim` to do syntax
+highlighting. If the `vim` program is not in the `$PATH`, the `vimcommand`
+option may be used to specify the compete path of `vim`:
+
+ \setupvimtyping[vimcommand=/path/to/vim]
+
+This option may also be used to call [Neovim] instead of `vim` to do syntax
+highlighting, by either using
+
+ \setupvimtyping[vimcommand=nvim]
+
+or, if `nvim` is not in the `$PATH`, using
+
+ \setupvimtyping[vimcommand=/path/to/nvim]
+
+[Neovim]: https://neovim.io/
+
+As of 2020.04.29, `nvim` is about 10% faster than `vim`.
+
A bit of a history
------------------
diff --git a/macros/context/contrib/context-vim/tex/context/third/vim/t-vim.tex b/macros/context/contrib/context-vim/tex/context/third/vim/t-vim.tex
index eb0adbfe7b..4f1bd78b28 100644
--- a/macros/context/contrib/context-vim/tex/context/third/vim/t-vim.tex
+++ b/macros/context/contrib/context-vim/tex/context/third/vim/t-vim.tex
@@ -1,6 +1,6 @@
%D \module
%D [ file=t-vim,
-%D version=2020.04.25,
+%D version=2020.04.29,
%D title=\CONTEXT\ User Module,
%D subtitle=Vim syntax highlighting,
%D author=Aditya Mahajan,
@@ -9,7 +9,7 @@
%D email=adityam <at> ieee <dot> org,
%D license=Simplified BSD License]
-\writestatus{loading}{Vim syntax highlighting (ver: 2020.04.25)}
+\writestatus{loading}{Vim syntax highlighting (ver: 2020.04.29)}
\startmodule [vim]
\usemodule [filter] % loads module catcodes
@@ -17,6 +17,7 @@
\startinterface all
\setinterfaceconstant {vimrc} {vimrc}
+ \setinterfaceconstant {vimcommand} {vim\c!command}
\stopinterface
\unprotectmodulecatcodes
@@ -112,15 +113,15 @@
{\def\vimtyping@script_name{kpse:2context.vim}}}
\def\vimtyping@filter_command
- {vim -u \vimrc_filename\space % read global config file
+ {\externalfilterparameter\c!vimcommand\space
+ -u \vimrc_filename\space % read global config file
% --startuptime log
% -V3log
-X % dont connect to X server
-i NONE % dont use viminfo file
--noplugin % dont load plugins
- -e % run in ex mode
- -s % silent
- -C % set compatible
+ -es % run in ex mode in silent
+ % -C % set compatible
-n % no swap file
-c "syntax manual" % don't load filetype detection
-c "set syntax=\externalfilterparameter\c!syntax" %
@@ -157,7 +158,8 @@
\setvalue{\vimtyping@id-\c!escape-\v!yes}{1}
\setupvimtyping
- [% \c!tab=4,
+ [\c!vimcommand={vim},
+ % \c!tab=4,
% \c!start=1,
% \c!stop=0,
% \c!syntax=context,
diff --git a/macros/generic/expkv-cs/README.md b/macros/generic/expkv-cs/README.md
index f58d38f429..0a53bf994a 100644
--- a/macros/generic/expkv-cs/README.md
+++ b/macros/generic/expkv-cs/README.md
@@ -1,7 +1,7 @@
-------------------------------------------------------------------------------
# expkv-cs -- define expandable key=val macros using expkv
-Version 2020-04-05 v0.2
+Version 2020-04-29 v0.3
Released under the LaTeX Project Public License v1.3c or later
See http://www.latex-project.org/lppl.txt
diff --git a/macros/generic/expkv-cs/expkv-cs.dtx b/macros/generic/expkv-cs/expkv-cs.dtx
index c5325faee5..fe782e6d94 100644
--- a/macros/generic/expkv-cs/expkv-cs.dtx
+++ b/macros/generic/expkv-cs/expkv-cs.dtx
@@ -766,8 +766,8 @@ and the derived files expkv-cs.pdf
% \begin{macro}{\ekvcVersion,\ekvcDate}
% We're on our first input, so lets store the version and date in a macro.
% \begin{macrocode}
-\def\ekvcVersion{0.2}
-\def\ekvcDate{2020-04-05}
+\def\ekvcVersion{0.3}
+\def\ekvcDate{2020-04-29}
% \end{macrocode}
% \end{macro}
%
@@ -804,6 +804,34 @@ and the derived files expkv-cs.pdf
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}[internal]
+% {
+% \ekvc@ekvset@per@expander,
+% \ekvc@ekvset@per@expander@a,
+% \ekvc@ekvset@per@expander@b
+% }
+% This macro expands |\ekvset| twice so that the first two steps of expansion
+% don't have to be made every time the \expkvc\ macros are used. We have to do
+% a little magic trick to get the macro parameter |#1| for the macro
+% definition this is used in, even though we're calling |\unexpanded|. We do
+% that by splitting the expanded |\ekvset| at some marks and place |##1| in
+% between.
+% \begin{macrocode}
+\def\ekvc@ekvset@pre@expander#1%
+ {%
+ \expandafter\ekvc@ekvset@pre@expander@a\ekvset{#1}\ekvc@stop\ekvc@stop
+ }
+\def\ekvc@ekvset@pre@expander@a
+ {%
+ \expandafter\ekvc@ekvset@pre@expander@b
+ }
+\def\ekvc@ekvset@pre@expander@b#1\ekvc@stop#2\ekvc@stop
+ {%
+ \unexpanded{#1}##1\unexpanded{#2}%
+ }
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}{\ekvcSplitAndForward}
% The first user macro we want to set up can be reused for
% \cs[no-index]{ekvcSplit}. We'll split this one up so that the test whether
@@ -831,7 +859,7 @@ and the derived files expkv-cs.pdf
\ekvc@SetupSplitKeys{#3}%
\ekvc@any@long\edef#1##1%
{%
- \unexpanded{\ekvset}{\ekvc@set}{##1}%
+ \expandafter\ekvc@ekvset@pre@expander\expandafter{\ekvc@set}%
\unexpanded\expandafter
{\csname ekvc@split@\the\ekvc@keycount\endcsname}%
\unexpanded\expandafter{\ekvc@initials{}#2}%
@@ -1047,7 +1075,7 @@ and the derived files expkv-cs.pdf
\ekvc@SetupHashKeys{#3}%
\ekvc@any@long\edef#1##1%
{%
- \unexpanded{\ekvset}{\ekvc@set}{##1}%
+ \expandafter\ekvc@ekvset@pre@expander\expandafter{\ekvc@set}%
\unexpanded{\ekvc@hash@pack@argument}%
\unexpanded\expandafter{\ekvc@initials\ekvc@stop#2}%
}%
@@ -1386,7 +1414,11 @@ and the derived files expkv-cs.pdf
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[internal]{\ekvc@t@meta, \ekvc@t@nmeta, \ekvc@type@meta}
+% \begin{macro}[internal]
+% {
+% \ekvc@t@meta, \ekvc@t@nmeta,
+% \ekvc@type@meta, \ekvc@type@meta@a, \ekvc@type@meta@b
+% }
% The |meta| and |nmeta| key types use a nested |\ekvset| to set other keys in
% the same macro's \set.
% \begin{macrocode}
@@ -1403,9 +1435,17 @@ and the derived files expkv-cs.pdf
}
\protected\long\def\ekvc@type@meta#1#2#3#4#5#6%
{%
- #2\def\ekvc@tmp#3{\ekvset{#1}{#6}}%
+ \expandafter\ekvc@type@meta@a\expandafter{\ekvset{#1}{#6}}{#2}{#3}%
#4\ekvc@set{#5}\ekvc@tmp
}
+\protected\def\ekvc@type@meta@a
+ {%
+ \expandafter\ekvc@type@meta@b\expandafter
+ }
+\protected\long\def\ekvc@type@meta@b#1#2#3%
+ {%
+ #2\def\ekvc@tmp#3{#1}%
+ }
% \end{macrocode}
% \end{macro}
%
diff --git a/macros/generic/expkv-cs/expkv-cs.pdf b/macros/generic/expkv-cs/expkv-cs.pdf
index 3dd142ff9d..91f275fedd 100644
--- a/macros/generic/expkv-cs/expkv-cs.pdf
+++ b/macros/generic/expkv-cs/expkv-cs.pdf
Binary files differ
diff --git a/macros/generic/expkv-def/README.md b/macros/generic/expkv-def/README.md
index 5ebc62d7e8..554b5a6dcf 100644
--- a/macros/generic/expkv-def/README.md
+++ b/macros/generic/expkv-def/README.md
@@ -1,7 +1,7 @@
-------------------------------------------------------------------------------
# expkv-def -- a key-defining frontend for expkv
-Version 2020-04-04 v0.2a
+Version 2020-04-29 v0.3
Released under the LaTeX Project Public License v1.3c or later
See http://www.latex-project.org/lppl.txt
diff --git a/macros/generic/expkv-def/expkv-def.dtx b/macros/generic/expkv-def/expkv-def.dtx
index 2fa5b5a62a..437c296d14 100644
--- a/macros/generic/expkv-def/expkv-def.dtx
+++ b/macros/generic/expkv-def/expkv-def.dtx
@@ -450,7 +450,8 @@ and the derived files expkv-def.pdf
% This key type can set other keys, you can access the \val\ which was passed
% to \key\ inside the \kv\ list with |#1|. It works by calling a sub-|\ekvset|
% on the \kv\ list, so a |set| key will only affect that \kv\ list and not the
-% current |\ekvset|.
+% current |\ekvset|. Since it runs in a separate |\ekvset| you can't use
+% |\ekvsneak| using keys or similar macros in the way you normally could.
% \end{function}
%
% \begin{function}{nmeta}
@@ -668,8 +669,8 @@ and the derived files expkv-def.pdf
% \begin{macro}{\ekvdVersion,\ekvdDate}
% We're on our first input, so lets store the version and date in a macro.
% \begin{macrocode}
-\def\ekvdVersion{0.2a}
-\def\ekvdDate{2020-04-04}
+\def\ekvdVersion{0.3}
+\def\ekvdDate{2020-04-29}
% \end{macrocode}
% \end{macro}
%
@@ -1115,7 +1116,10 @@ and the derived files expkv-def.pdf
% \end{macro}
%
% \begin{macro}[internal]
-% {\ekvd@type@meta,\ekvd@type@meta@,\ekvd@t@meta,\ekvd@t@nmeta}
+% {
+% \ekvd@type@meta,\ekvd@type@meta@a,\ekvd@type@meta@b,\ekvd@type@meta@c,
+% \ekvd@t@meta,\ekvd@t@nmeta
+% }
% |meta| sets up things such that another instance of |\ekvset| will be run on
% the argument, with the same \set.
% \begin{macrocode}
@@ -1124,13 +1128,21 @@ and the derived files expkv-def.pdf
\ekvd@assert@filledarg{#1meta #4}{#5}%
{%
\edef\ekvd@tmp{\ekvd@set}%
- \expandafter\ekvd@type@meta@\expandafter{\ekvd@tmp}{#3}{#5}%
+ \expandafter\ekvd@type@meta@a\expandafter{\ekvd@tmp}{#5}{#3}%
#2\ekvd@set{#4}\ekvd@tmp
}%
}
-\protected\long\def\ekvd@type@meta@#1#2#3%
+\protected\long\def\ekvd@type@meta@a#1#2%
+ {%
+ \expandafter\ekvd@type@meta@b\expandafter{\ekvset{#1}{#2}}%
+ }
+\protected\def\ekvd@type@meta@b
{%
- \ekvd@prot\ekvd@long\def\ekvd@tmp#2{\ekvset{#1}{#3}}%
+ \expandafter\ekvd@type@meta@c\expandafter
+ }
+\protected\long\def\ekvd@type@meta@c#1#2%
+ {%
+ \ekvd@prot\ekvd@long\def\ekvd@tmp#2{#1}%
}
\protected\def\ekvd@t@meta{\ekvd@type@meta{}\ekvlet{##1}}
\protected\long\def\ekvd@t@nmeta#1#2%
@@ -1151,14 +1163,10 @@ and the derived files expkv-def.pdf
{%
\ekvd@assert@twoargs{s#1meta #4}{#5}%
{%
- \expandafter\ekvd@type@smeta@\expandafter{\@secondoftwo#5}{#5}{#3}
+ \ekvd@type@meta@a#5{#3}%
#2\ekvd@set{#4}\ekvd@tmp
}%
}
-\protected\long\def\ekvd@type@smeta@#1#2#3%
- {%
- \expandafter\ekvd@type@meta@\expandafter{\@firstoftwo#2}{#3}{#1}%
- }
\protected\def\ekvd@t@smeta{\ekvd@type@smeta{}\ekvlet{##1}}
\protected\long\def\ekvd@t@snmeta#1#2%
{%
diff --git a/macros/generic/expkv-def/expkv-def.pdf b/macros/generic/expkv-def/expkv-def.pdf
index 61d1a09cbe..ec3bf9fac9 100644
--- a/macros/generic/expkv-def/expkv-def.pdf
+++ b/macros/generic/expkv-def/expkv-def.pdf
Binary files differ
diff --git a/macros/generic/xlop/LISEZMOI b/macros/generic/xlop/LISEZMOI
index dac9121496..db50d05a19 100644
--- a/macros/generic/xlop/LISEZMOI
+++ b/macros/generic/xlop/LISEZMOI
@@ -1,15 +1,15 @@
-PRÉSENTATION RAPIDE
+PRÉSENTATION RAPIDE
-------------------
-L'extension xlop s'articule autour de deux fonctionnalités
-générales. La première consiste à afficher les opérations de façon
-automatique (posées ou en ligne), c'est-à-dire en ne fournissant que
-les opérandes de l'opération. La seconde consiste à permettre de
-manipuler des nombres de taille quelconque, la seule limitation étant
-la mémoire de TeX. Ces manipulations incluent toutes les opérations
-usuelles, les entrées-sorties, la notion de variable numérique, les
-tests et quelques opérations de haut niveau (sans permettre les
-opérations nécessitant un traitement infini telles l'exponentielle,
-les fonctions trigonométriques, etc.).
+L'extension xlop s'articule autour de deux fonctionnalités
+générales. La première consiste à afficher les opérations de façon
+automatique (posées ou en ligne), c'est-à-dire en ne fournissant que
+les opérandes de l'opération. La seconde consiste à permettre de
+manipuler des nombres de taille quelconque, la seule limitation étant
+la mémoire de TeX. Ces manipulations incluent toutes les opérations
+usuelles, les entrées-sorties, la notion de variable numérique, les
+tests et quelques opérations de haut niveau (sans permettre les
+opérations nécessitant un traitement infini telles l'exponentielle,
+les fonctions trigonométriques, etc.).
DISTRIBUTION
------------
@@ -20,16 +20,14 @@ Tous les fichiers sources sont sous licence lppl
Contenu
-------
La distribution comporte les fichiers suivants :
- - LISEZ.MOI (celui que vous êtes en train de lire) ;
- - README (le même en anglais) ;
+ - LISEZ.MOI (celui que vous êtes en train de lire) ;
+ - README (le même en anglais) ;
- history.txt qui retrace l'historique rapide du projet ;
- - manual.sty qui est le fichier de style nécessaire à la compilation
- des fichiers de documentation ;
- - xlop-doc-fr.tex qui est le source du manuel français de l'utilisateur
+ - xlop-doc-fr.tex qui est le source du manuel français de l'utilisateur
de xlop ;
- xlop-doc.tex qui est le source du manuel anglais de l'utilisateur de
xlop ;
- - xlop-doc-fr.pdf qui est le pdf du manuel français de l'utilisateur
+ - xlop-doc-fr.pdf qui est le pdf du manuel français de l'utilisateur
de xlop ;
- xlop-doc.pdf qui est le pdf du manuel anglais de l'utilisateur de
xlop ;
@@ -38,32 +36,31 @@ La distribution comporte les fichiers suivants :
Installation
------------
-L'extension étant prévue pour pouvoir fonctionner aussi bien sous TeX
+L'extension étant prévue pour pouvoir fonctionner aussi bien sous TeX
que sous LaTeX, les recommandations de la TDS indiquent que l'endroit
le plus correct pour placer le fichier xlop.tex est
[texmf]/tex/generic/xlop/
et celui pour placer le fichier xlop.sty est
[texmf]/tex/latex/xlop/
-Il reste les fichiers de documentation (LISEZ.MOI, README,
-history.txt, manual.sty et fr-user.*). Leur place normale devrait
-être [texmf]/doc/xlop/.
+Il reste les fichiers de documentation (LISEZ.MOI, README, history.txt
+et fr-user.*). Leur place normale devrait être [texmf]/doc/xlop/.
-Il reste à rafraichir la base en lançant la commande texhash (ou
-mktexlsr, ou ...) et tout devrait être opérationnel.
+Il reste à rafraichir la base en lançant la commande texhash (ou
+mktexlsr, ou ...) et tout devrait être opérationnel.
-BOGUES ET AUTRES DÉSAGREMENTS
+BOGUES ET AUTRES DÉSAGREMENTS
-----------------------------
-Si vous détectez un bogue, quel que soit sa gravité (cela peut
-simplement être des espaces parasites par exemple) essayez de réaliser
+Si vous détectez un bogue, quel que soit sa gravité (cela peut
+simplement être des espaces parasites par exemple) essayez de réaliser
un exemple le plus court possible reproduisant le bogue. En
-particulier, ne mettez aucune autre extension non nécessaire. Envoyez
-le source ainsi qu'une explication, éventuellement très courte, du
-problème rencontré à l'adresse suivante :
+particulier, ne mettez aucune autre extension non nécessaire. Envoyez
+le source ainsi qu'une explication, éventuellement très courte, du
+problème rencontré à l'adresse suivante :
Jean-Come.Charpentier@wanadoo.fr
-Si vous souhaitez une certaine fonctionnalité pour une version
-ultérieure de l'extension, n'hésitez pas à en faire part à
-l'auteur. Pour aider mon logiciel antispam, écrivez 'xlop' dans le
+Si vous souhaitez une certaine fonctionnalité pour une version
+ultérieure de l'extension, n'hésitez pas à en faire part à
+l'auteur. Pour aider mon logiciel antispam, écrivez 'xlop' dans le
sujet du message.
diff --git a/macros/generic/xlop/README b/macros/generic/xlop/README
index ca05f54983..549ecf233e 100644
--- a/macros/generic/xlop/README
+++ b/macros/generic/xlop/README
@@ -20,7 +20,6 @@ Distribution consists of files:
* README (the file you are reading)
* LISEZ.MOI (same in french)
* history.txt relates project history
- * manual.sty package file to compile documentation
* xlop-doc-fr.tex and xlop-doc-fr.pdf source and pdf of french user's
manual of xlop
* xlop-doc.tex and xlop-doc.pdf source and pdf of english user's
@@ -36,8 +35,8 @@ that the best place to put the file xlop.tex is
and that the best place to put xlop xlop.sty is
[texmf]/tex/latex/xlop/
-For documentation files (README, history.txt, manual.sty, and
-fr-user.*), best place should be [texmf]/doc/generic/xlop/.
+For documentation files (README, history.txt, and fr-user.*), best
+place should be [texmf]/doc/generic/xlop/.
You have just to run texhash command (or mktexlsr, or ...) to refresh
your texmf base and all should work fine.
diff --git a/macros/generic/xlop/doc/manual.sty b/macros/generic/xlop/doc/manual.sty
deleted file mode 100644
index e5f4f549d3..0000000000
--- a/macros/generic/xlop/doc/manual.sty
+++ /dev/null
@@ -1,48 +0,0 @@
-\usepackage[T1]{fontenc}
-\usepackage[latin1]{inputenc}
-\usepackage{fourier}
-\usepackage[scaled]{helvet}
-\usepackage[scaled]{luximono}
-\usepackage{makeidx}
-\usepackage{longtable}
-\usepackage{multicol}
-\usepackage{pst-node}
-\usepackage{fvrb-ex}
-\usepackage{geometry}
-\usepackage{hyperref}
-\usepackage{microtype}
-\usepackage{xlop}
-
-\fvset{xrightmargin=5cm,frame=single,fontsize=\small}
-\geometry{a4paper,left=4cm,right=4cm,top=3cm,bottom=3cm,nohead}
-
-\let\SBSori\SideBySideExample
-\def\SideBySideExample{%
- \par\bigbreak\SBSori
-}
-\let\endSBSori\endSideBySideExample
-\def\endSideBySideExample{%
- \endSBSori
- \par\bigskip\noindent}
-
-\newenvironment{syntaxBNF}{%
- \catcode`\_=12
- \def\*##1*{$\langle$##1$\rangle$}%
- \def\alt{\unskip~$|$~\ignorespaces}%
- \def\sameline{\multicolumn{1}{c}{} & \null\quad}%
- \ttfamily
- \begin{center}\begin{tabular}{r@{\quad:=\quad}l}}
-{\end{tabular}\end{center}}
-
-\setlongtables
-\newcommand\package[1]{\textsf{#1}}
-\newcommand\file[1]{\texttt{#1}}
-
-\newcommand\macro[1]{\texttt{$\backslash$#1}\index{#1@\texttt{\boi {#1}}}}
-\newcommand\parameter[1]{\texttt{#1}\index{#1@\texttt{#1}}%
- \index{parametre@paramètre!\texttt{#1}}}
-
-\newcommand\bull{\vrule width3pt height4pt depth-1pt}
-
-\newcounter{stuff}
-\makeindex
diff --git a/macros/generic/xlop/doc/xlop-doc-fr.pdf b/macros/generic/xlop/doc/xlop-doc-fr.pdf
index 04743ca0a2..0766e91477 100644
--- a/macros/generic/xlop/doc/xlop-doc-fr.pdf
+++ b/macros/generic/xlop/doc/xlop-doc-fr.pdf
Binary files differ
diff --git a/macros/generic/xlop/doc/xlop-doc-fr.tex b/macros/generic/xlop/doc/xlop-doc-fr.tex
index 060cde198b..de4a1b7785 100644
--- a/macros/generic/xlop/doc/xlop-doc-fr.tex
+++ b/macros/generic/xlop/doc/xlop-doc-fr.tex
@@ -1,8 +1,57 @@
\documentclass[12pt]{report}
-\usepackage{manual}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage{fourier}
+\usepackage[scaled]{helvet}
+\usepackage[scaled]{luximono}
+\usepackage{makeidx}
+\usepackage{longtable}
+\usepackage{multicol}
+\usepackage{pst-node}
+\usepackage{fancyvrb-ex}
+\usepackage{geometry}
+\usepackage{xlop}
\usepackage[frenchb]{babel}
\usepackage[autolanguage]{numprint}
-\fvset{label=source}% français
+\usepackage{dcolumn}
+\usepackage{hyperref}
+\usepackage{microtype}
+
+\fvset{label=source}% français
+
+\fvset{xrightmargin=5cm,frame=single,fontsize=\small}
+\geometry{a4paper,left=4cm,right=4cm,top=3cm,bottom=3cm,nohead}
+
+\let\SBSori\SideBySideExample
+\def\SideBySideExample{%
+ \par\bigbreak\SBSori
+}
+\let\endSBSori\endSideBySideExample
+\def\endSideBySideExample{%
+ \endSBSori
+ \par\bigskip\noindent}
+
+\newenvironment{syntaxBNF}{%
+ \catcode`\_=12
+ \def\*##1*{$\langle$##1$\rangle$}%
+ \def\alt{\unskip~$|$~\ignorespaces}%
+ \def\sameline{\multicolumn{1}{c}{} & \null\quad}%
+ \ttfamily
+ \begin{center}\begin{tabular}{r@{\quad:=\quad}l}}
+{\end{tabular}\end{center}}
+
+\setlongtables
+\newcommand\package[1]{\textsf{#1}}
+\newcommand\file[1]{\texttt{#1}}
+
+\newcommand\macro[1]{\texttt{$\backslash$#1}\index{#1@\texttt{\boi {#1}}}}
+\newcommand\parameter[1]{\texttt{#1}\index{#1@\texttt{#1}}%
+ \index{parametre@paramètre!\texttt{#1}}}
+
+\newcommand\bull{\vrule width3pt height4pt depth-1pt}
+
+\newcounter{stuff}
+\makeindex
\begin{document}
\begin{titlepage}
@@ -25,7 +74,7 @@
\end{center}
\vfill
\begin{center}
- Jean-Côme Charpentier\\
+ Jean-Côme Charpentier\\
\today
\end{center}
\vfill\null\par
@@ -36,59 +85,59 @@
\newpage
\pagenumbering{arabic}
-\chapter{Présentation}
-\label{chap:Présentation}
-L'extension \package{xlop} a été développée pour permettre de réaliser
-automatiquement des calculs arithmétiques sur des nombres de taille
-quelconque et d'afficher les résultats sous forme posée ou en
-ligne. Voici un premier exemple permettant de donner un aperçu de la
+\chapter{Présentation}
+\label{chap:Présentation}
+L'extension \package{xlop} a été développée pour permettre de réaliser
+automatiquement des calculs arithmétiques sur des nombres de taille
+quelconque et d'afficher les résultats sous forme posée ou en
+ligne. Voici un premier exemple permettant de donner un aperçu de la
syntaxe de base :
\begin{SideBySideExample}
\opadd{45,05}{78,4}
\end{SideBySideExample}
Ce premier exemple appelle quelques commentaires qui permettront de
-donner une idée sur la façon de manipuler l'extension.
+donner une idée sur la façon de manipuler l'extension.
-L'addition est posée \og comme à l'école \fg{} : il s'agit de la
-présentation par défaut. On a un alignement sur la virgule des
-opérandes et du résultat, le symbole opératoire placé à gauche est
-centrée verticalement entre les deux opérandes et le séparateur
-décimal est un point malgré le fait d'avoir indiquer les opérandes
+L'addition est posée \og comme à l'école \fg{} : il s'agit de la
+présentation par défaut. On a un alignement sur la virgule des
+opérandes et du résultat, le symbole opératoire placé à gauche est
+centrée verticalement entre les deux opérandes et le séparateur
+décimal est un point malgré le fait d'avoir indiquer les opérandes
avec une virgule dans l'appel de la macro. Enfin, on notera la
-présence d'une retenue au dessus de la première opérande.
-
-Mis à part l'alignement sur la virgule qui est obligatoire pour
-l'addition posée, toutes les autres caractéristiques décrites
-ci-dessus sont paramétrables. Certaines macros de l'extension et, en
-tout cas, toutes les macros affichant les opérations arithmétiques
-admettent un argument optionnel qui permettra de contrôler la
-présentation. Pour cela, on utilisera une syntaxe \og à la keyval
-\fg{} : on spécifie une suite de modifications de paramètres par une
-liste d'affectations séparées par des virgules. Une affectation a
+présence d'une retenue au dessus de la première opérande.
+
+Mis à part l'alignement sur la virgule qui est obligatoire pour
+l'addition posée, toutes les autres caractéristiques décrites
+ci-dessus sont paramétrables. Certaines macros de l'extension et, en
+tout cas, toutes les macros affichant les opérations arithmétiques
+admettent un argument optionnel qui permettra de contrôler la
+présentation. Pour cela, on utilisera une syntaxe \og à la keyval
+\fg{} : on spécifie une suite de modifications de paramètres par une
+liste d'affectations séparées par des virgules. Une affectation a
une des deux syntaxes possibles ci-dessous :
\begin{verbatim}
- <paramètres>=<valeur>
- <paramètre>
+ <paramètres>=<valeur>
+ <paramètre>
\end{verbatim}
-la seconde possibilité étant en fait un raccourci pour :
+la seconde possibilité étant en fait un raccourci pour :
\begin{verbatim}
- <paramètre>=true
+ <paramètre>=true
\end{verbatim}
Dans cette liste d'affectation, on peut faire suivre les virgules par
un ou plusieurs espaces mais il ne faut pas mettre d'espace de part et
-d'autre du signe égal ou avant la virgule : un paramètre ou une valeur
-pouvant (potentiellement) comporter le caractère espace.
+d'autre du signe égal ou avant la virgule : un paramètre ou une valeur
+pouvant (potentiellement) comporter le caractère espace.
-Ainsi, si l'on veut un séparateur décimal qui soit une virgule, un
-symbole opératoire placé en face de la seconde opérande et en
-supprimant la présence des retenues, il suffit d'indiquer :
+Ainsi, si l'on veut un séparateur décimal qui soit une virgule, un
+symbole opératoire placé en face de la seconde opérande et en
+supprimant la présence des retenues, il suffit d'indiquer :
\begin{SideBySideExample}
\opadd[decimalsepsymbol={,},
voperator=bottom,
carryadd=false]{45.05}{78.4}
\end{SideBySideExample}
-On notera la petite astuce consistant à mettre la virgule entre
-accolades dans la définition du symbole du séparateur décimal. En
+On notera la petite astuce consistant à mettre la virgule entre
+accolades dans la définition du symbole du séparateur décimal. En
effet, la syntaxe :
\begin{Verbatim}[xrightmargin=0pt]
\opadd[decimalsepsymbol=,,voperator=bottom,
@@ -98,12 +147,12 @@ est fautive : \package{xlop} ne comprenant plus trop bien ce qu'est
cette \og liste \fg{} !
Un autre point important quoique moins visible, est que les chiffres
-sont disposés à des emplacements très précis. Chaque chiffre est placé
-dans une boîte de largeur et de hauteur fixes (paramétrables), le
-séparateur décimal est, par défaut, placé dans une boîte de largeur
-nulle et toutes les lignes sont régulièrement espacées qu'il y ait ou
+sont disposés à des emplacements très précis. Chaque chiffre est placé
+dans une boîte de largeur et de hauteur fixes (paramétrables), le
+séparateur décimal est, par défaut, placé dans une boîte de largeur
+nulle et toutes les lignes sont régulièrement espacées qu'il y ait ou
non un trait horizontal. Cela permet d'obtenir des alignements
-rigoureux et permet également de placer ce que l'on veut à
+rigoureux et permet également de placer ce que l'on veut à
l'emplacement que l'on veut.
\begin{SideBySideExample}
\psset{xunit=\opcolumnwidth,
@@ -112,28 +161,28 @@ l'emplacement que l'on veut.
\oplput(1.5,3){retenue}
\psline{->}(1,3.15)(-3.25,3.15)
\end{SideBySideExample}
-Cet exemple a été réalisé en utilisant l'extension
+Cet exemple a été réalisé en utilisant l'extension
\package{pstricks}\index{pstricks@\package{pstricks}}
-Nous avons dit précédemment que \package{xlop} était capable de
+Nous avons dit précédemment que \package{xlop} était capable de
manipuler des nombres de taille quelconque. Nous reviendrons plus en
-détail sur cette possibilité et nous nous contenterons ici de ne donner
+détail sur cette possibilité et nous nous contenterons ici de ne donner
qu'un exemple de ce que cela peut offrir. Ne regardez pas trop le
-code, les explications seront données plus loin dans ce manuel, pour
-l'instant, admirez seulement le résultat !
+code, les explications seront données plus loin dans ce manuel, pour
+l'instant, admirez seulement le résultat !
\begin{CenterExample}[xrightmargin=0pt]
\opdiv[style=text,period]{1}{49}
\end{CenterExample}
-L'extension \package{xlop} offre quelques autres fonctionnalités. Il
-est ainsi possible de manipuler les nombres par l'intermédiaire de
-variables, ces variables pouvant être créées par une assignation
-simple ou bien comme résultat d'un calcul. On peut également manipuler
-les chiffres de façon individuelle :
+L'extension \package{xlop} offre quelques autres fonctionnalités. Il
+est ainsi possible de manipuler les nombres par l'intermédiaire de
+variables, ces variables pouvant être créées par une assignation
+simple ou bien comme résultat d'un calcul. On peut également manipuler
+les chiffres de façon individuelle :
\begin{SideBySideExample}
\opadd*{45.05}{78.4}{r}%
- Le premier chiffre après la virgule de
- $45.05+78.4$ est un
+ Le premier chiffre apr\`es la
+ virgule de $45.05+78.4$ est un
\opgetdecimaldigit{r}{1}{d}%
$\opprint{d}$.
\end{SideBySideExample}
@@ -142,18 +191,18 @@ effectuer des tests :
\opadd*{45.05}{78.4}{r}%
La somme $45.05+78.4$ est
\opcmp{r}{100}%
- \ifopgt strictement supérieure
- \else\ifoplt strictement inférieure
- \else égale
+ \ifopgt strictement sup\'erieure
+ \else\ifoplt strictement inf\'erieure
+ \else \'egale
\fi\fi
- à $100$.
+ \`a $100$.
\end{SideBySideExample}
-avoir accès à quelques opérations ou fonctions :
+avoir accès à quelques opérations ou fonctions :
\begin{SideBySideExample}
Le pgcd de $182$ et $442$ est
\opgcd{182}{442}{d}$\opprint{d}$
\end{SideBySideExample}
-pouvoir réaliser des calculs complexes sous forme infixe :
+pouvoir réaliser des calculs complexes sous forme infixe :
\begin{SideBySideExample}
\opexpr{(2+3^2)/(gcd(22,33))}{r}%
$$\frac{2+3^2}{\gcd(22,33)} =
@@ -161,31 +210,31 @@ pouvoir réaliser des calculs complexes sous forme infixe :
\end{SideBySideExample}
\chapter{Instruction \package{xlop}}
-\`A quelques exceptions près qui seront étudiées en temps voulu, les
-macros de \package{xlop} peuvent éventuellement avoir un argument
+\`A quelques exceptions près qui seront étudiées en temps voulu, les
+macros de \package{xlop} peuvent éventuellement avoir un argument
optionnel entre crochets pour modifier localement la valeur des
-paramètres de fonctionnement, les autres arguments (qui sont
-obligatoires) étant presque toujours des nombres. Les deux sections de
-ce chapitre décrivent en détail ce qu'est un nombre pour
-\package{xlop} et comment se servir des paramètres.
+paramètres de fonctionnement, les autres arguments (qui sont
+obligatoires) étant presque toujours des nombres. Les deux sections de
+ce chapitre décrivent en détail ce qu'est un nombre pour
+\package{xlop} et comment se servir des paramètres.
-\section{Au début était le nombre}
-\label{sec:Au début etait le nombre}
+\section{Au début était le nombre}
+\label{sec:Au début etait le nombre}
\subsection{Taille}
\label{subsec:Taille}
-Avant de voir la syntaxe générale d'un nombre, nous allons nous
-pencher sur la particularité de \package{xlop} qui est de pouvoir
+Avant de voir la syntaxe générale d'un nombre, nous allons nous
+pencher sur la particularité de \package{xlop} qui est de pouvoir
manipuler des nombres de taille quelconque.
-\index{nombre!taille}Pour être tout à fait précis, la taille théorique
+\index{nombre!taille}Pour être tout à fait précis, la taille théorique
maximum d'un nombre est de $2^{31}-1$ chiffres\index{nombre!limite}.
-En pratique, cette limite ne pourra pas être atteinte pour deux
-raisons essentielles. La première est qu'une multiplication avec deux
-opérandes ayant $2^{25}$ chiffres demanderait plus de $7\,000$ années
+En pratique, cette limite ne pourra pas être atteinte pour deux
+raisons essentielles. La première est qu'une multiplication avec deux
+opérandes ayant $2^{25}$ chiffres demanderait plus de $7\,000$ années
de calcul sur l'ordinateur de l'auteur ! La seconde est beaucoup plus
-restrictive car elle est liée aux limites de taille des piles de
+restrictive car elle est liée aux limites de taille des piles de
\TeX{}. Voici un tableau indiquant une compilation sous \TeX{} avec
-une multiplication de deux opérandes de même taille sur une machine
+une multiplication de deux opérandes de même taille sur une machine
Linux, pentium~II~600 et 256~Mo de RAM :
\begin{center}
\begin{tabular}{|l|*{6}{c|}}
@@ -194,24 +243,24 @@ Linux, pentium~II~600 et 256~Mo de RAM :
temps de compilation (s) & 2 & 8 & 18 & 32 & 36 & crash \\\hline
\end{tabular}
\end{center}
-Le \og crash \fg{} indiqué dans le tableau est dû au débordement de la
+Le \og crash \fg{} indiqué dans le tableau est dû au débordement de la
table de hachage (hash table). \index{hash table}%
-\index{depassement de capacite@dépassement de capacité}%
-Sous \LaTeX{}, la limite avant crash sera plus réduite. D'autre part,
-ces tests ont été effectués sur un fichier minimum : avec un document
+\index{depassement de capacite@dépassement de capacité}%
+Sous \LaTeX{}, la limite avant crash sera plus réduite. D'autre part,
+ces tests ont été effectués sur un fichier minimum : avec un document
source classique, cette limite sera un peu plus basse. Une autre
-limite qui risque d'être atteinte relativement rapidement est la
+limite qui risque d'être atteinte relativement rapidement est la
taille du spouleur (spool size). \index{spool size}%
Pour composer ce document qui contient un grand nombre d'appel aux
-macros de \package{xlop}, l'auteur a augmenté la taille du spouleur
-de~$125\,000$ à~$250\,000$ en éditant la ligne \verb+pool_size+ du
-fichier \file{texmf.cnf}. De même, la table de hachage a dû être
-augmentée en stipulant la valeur \texttt{1000} au niveau de la ligne
+macros de \package{xlop}, l'auteur a augmenté la taille du spouleur
+de~$125\,000$ à~$250\,000$ en éditant la ligne \verb+pool_size+ du
+fichier \file{texmf.cnf}. De même, la table de hachage a dû être
+augmentée en stipulant la valeur \texttt{1000} au niveau de la ligne
\verb+hash_extra+ du fichier \file{texmf.cnf}.
\subsection{Syntaxe}
\label{subsec:Syntaxe}
-Nous allons présenter cette syntaxe avec la grammaire BNF mais des
+Nous allons présenter cette syntaxe avec la grammaire BNF mais des
explications plus humaines suivront :
\begin{syntaxBNF}
\*nombre* & \{\*signe*\}\*nombre_positif* \alt \*nom* \\
@@ -220,21 +269,21 @@ explications plus humaines suivront :
\sameline \*entier*\*sep* \alt \*entier*\*sep*\*entier* \\
\*sep* & . \alt , \\
\*entier* & \*chiffre*\{\*chiffre*\} \\
- \*nom* & \*début*\{caractère\} \\
- \*début* & caractère \textnormal{autre que } \*signe*\textnormal{,}
+ \*nom* & \*début*\{caractère\} \\
+ \*début* & caractère \textnormal{autre que } \*signe*\textnormal{,}
\*sep* \\
\sameline \textnormal{et} \*chiffre*
\end{syntaxBNF}
\index{syntaxe BNF}\index{BNF}\index{grammaire BNF}
-Le symbole \texttt{caractère} désigne presque n'importe quel caractère
-accepté par \TeX{}. Les seules exceptions sont les caractères \verb+%+,
-et \verb+#+ qui sont totalement interdits. En fait, les caractères
-actifs risquent de poser des problèmes. Par exemple, la définition de
-\verb+~+ sous \LaTeX{} empêche ce caractère de pouvoir faire partie
-d'un nom. D'autre part, le caractère \verb+\ +conserve sont rôle de
-caractère d'échappement, c'est-à-dire que le nom sera celui obtenu
-après développement de la macro introduite. Il n'y a aucune autre
+Le symbole \texttt{caractère} désigne presque n'importe quel caractère
+accepté par \TeX{}. Les seules exceptions sont les caractères \verb+%+,
+et \verb+#+ qui sont totalement interdits. En fait, les caractères
+actifs risquent de poser des problèmes. Par exemple, la définition de
+\verb+~+ sous \LaTeX{} empêche ce caractère de pouvoir faire partie
+d'un nom. D'autre part, le caractère \verb+\ +conserve sont rôle de
+caractère d'échappement, c'est-à-dire que le nom sera celui obtenu
+après développement de la macro introduite. Il n'y a aucune autre
contrainte comme le montre le code suivant :
\begin{SideBySideExample}
\newcommand\prefix{a/b}
@@ -243,83 +292,83 @@ contrainte comme le montre le code suivant :
\end{SideBySideExample}
\index{nom de nombre}%
On notera que \verb+a/b_{^c}!&$+ et \verb+\prefix_{^c}!&$+
-représentent très exactement le même nom, si \verb+\prefix+ a la
-définition adéquate évidemment. Cette possibilité d'obtenir un nom en
+représentent très exactement le même nom, si \verb+\prefix+ a la
+définition adéquate évidemment. Cette possibilité d'obtenir un nom en
utilisant des macros peut sembler inutile mais il n'en est rien. On
-peut ainsi réaliser des boucles\index{boucle} avec des noms tels que
+peut ainsi réaliser des boucles\index{boucle} avec des noms tels que
\verb+r1+, \verb+r2+, \ldots, \verb+r<n>+ en utilisant le code
-\verb+r\the\cpt+ comme nom où \verb+cpt+ est un compteur au sens
-\TeX{}. Le mécanisme des compteurs avec \LaTeX{} donne un code un peu
-plus long avec \verb+r\number\value{cpt}+ où \verb+cpt+ est maintenant
+\verb+r\the\cpt+ comme nom où \verb+cpt+ est un compteur au sens
+\TeX{}. Le mécanisme des compteurs avec \LaTeX{} donne un code un peu
+plus long avec \verb+r\number\value{cpt}+ où \verb+cpt+ est maintenant
un compteur au sens \LaTeX. Nous verrons un exemple d'utilisation de
-cette forme à la section~\ref{sec:Creation d'operations complexes}
+cette forme à la section~\ref{sec:Creation d'operations complexes}
page~\pageref{sec:Creation d'operations complexes}.
-\index{nombre!valide}En pratique, que signifient toutes ces règles ?
-Elles indiquent d'abord qu'un nombre écrit sous forme décimale peut
-être précédé par n'importe quelle séquence de signes plus et moins.
-Évidemment, le nombre sera négatif lorsqu'il y aura un nombre impair
+\index{nombre!valide}En pratique, que signifient toutes ces règles ?
+Elles indiquent d'abord qu'un nombre écrit sous forme décimale peut
+être précédé par n'importe quelle séquence de signes plus et moins.
+Évidemment, le nombre sera négatif lorsqu'il y aura un nombre impair
de signes moins. Ensuite, un nombre ne peut comporter qu'un seul
-séparateur décimal qui peut être le point ou la virgule, celui-ci
-pouvant être placé n'importe où dans le nombre. Enfin, l'écriture d'un
-nombre s'effectue obligatoirement en base~10. Attention : ces règles
-signifient également que \verb+-a+ n'est pas valide.
+séparateur décimal qui peut être le point ou la virgule, celui-ci
+pouvant être placé n'importe où dans le nombre. Enfin, l'écriture d'un
+nombre s'effectue obligatoirement en base~10. Attention : ces règles
+signifient également que \verb+-a+ n'est pas valide.
-L'extension utilise quelques noms de façon interne et il est plus
-prudent de ne pas commencer un nom de variable par le caractère
+L'extension utilise quelques noms de façon interne et il est plus
+prudent de ne pas commencer un nom de variable par le caractère
\texttt{@}.
-\section{Paramètres de \package{xlop}}
+\section{Paramètres de \package{xlop}}
\label{sec:Parametres de xlop}
-\index{parametre@paramètre!syntaxe|(}
-Les affectations de paramètres restent locales à la macro lorsqu'elles
-sont indiquées au niveau de son argument optionnel. Pour rendre de
+\index{parametre@paramètre!syntaxe|(}
+Les affectations de paramètres restent locales à la macro lorsqu'elles
+sont indiquées au niveau de son argument optionnel. Pour rendre de
telles affectations globales, il faut utiliser la macro
\macro{opset}. Par exemple
\begin{Verbatim}[xrightmargin=0pt]
\opset{decimalsepsymbol={,}}
\end{Verbatim}
-fera que le symbole du séparateur décimal sera la virgule pour tout le
-reste du document, ou, du moins, jusqu'à une prochaine redéfinition
-par la macro \verb+\opset+. Dans ce manuel, ce sera le cas à partir de
+fera que le symbole du séparateur décimal sera la virgule pour tout le
+reste du document, ou, du moins, jusqu'à une prochaine redéfinition
+par la macro \verb+\opset+. Dans ce manuel, ce sera le cas à partir de
maintenant.\opset{decimalsepsymbol={,}}
\subsection{Symboles}
\label{subsecSymboles}
-Le paramètre \parameter{afterperiodsymbol} indique le symbole qui suit
-l'écriture d'un quotient en ligne lors d'une division avec recherche
-de période\index{division!période}. Sa valeur par défaut est
+Le paramètre \parameter{afterperiodsymbol} indique le symbole qui suit
+l'écriture d'un quotient en ligne lors d'une division avec recherche
+de période\index{division!période}. Sa valeur par défaut est
\verb+$\ldots$+
-Le paramètre \parameter{equalsymbol} indique le symbole utilisé pour
-l'égalité. Sa valeur par défaut est \verb+$=$+. En réalité, le
-paramètre est défini avec :
+Le paramètre \parameter{equalsymbol} indique le symbole utilisé pour
+l'égalité. Sa valeur par défaut est \verb+$=$+. En réalité, le
+paramètre est défini avec :
\begin{Verbatim}[xrightmargin=0pt]
\opset{equalsymbol={$=$}}
\end{Verbatim}
-c'est-à-dire avec des accolades pour protéger le signe égal. Sans les
-accolades, il y aurait une erreur à la compilation. On doit procéder
-de cette façon lorsque la valeur comporte le signe égal ou une
-virgule\index{parametre@paramètre!avec \og = \fg{} ou \og ,\fg}
+c'est-à-dire avec des accolades pour protéger le signe égal. Sans les
+accolades, il y aurait une erreur à la compilation. On doit procéder
+de cette façon lorsque la valeur comporte le signe égal ou une
+virgule\index{parametre@paramètre!avec \og = \fg{} ou \og ,\fg}
-Le paramètre \parameter{approxsymbol} indique le symbole utilisé pour
-les approximations. Sa valeur par défaut est \verb+$\approx$+.
+Le paramètre \parameter{approxsymbol} indique le symbole utilisé pour
+les approximations. Sa valeur par défaut est \verb+$\approx$+.
-Le paramètre \parameter{decimalsepsymbol} indique le symbole utilisé
-pour le séparateur décimal. Sa valeur par défaut est le point.
+Le paramètre \parameter{decimalsepsymbol} indique le symbole utilisé
+pour le séparateur décimal. Sa valeur par défaut est le point.
-Les paramètres \parameter{addsymbol}, \parameter{subsymbol},
+Les paramètres \parameter{addsymbol}, \parameter{subsymbol},
\parameter{mulsymbol} et \parameter{divsymbol} indiquent les symboles
-utilisés pour les quatre opérations arithmétiques. Les valeurs par
-défaut sont respectivement \verb!$+$!, \verb!$-$!, \verb!$\times$! et
+utilisés pour les quatre opérations arithmétiques. Les valeurs par
+défaut sont respectivement \verb!$+$!, \verb!$-$!, \verb!$\times$! et
\verb!$\div$!.
-\subsection{Présentation générale}
+\subsection{Présentation générale}
\label{subsec:Presentation generale}
-Le paramètre \parameter{voperation} indique la façon dont une
-opération posée sera placée par rapport à la ligne de base. Les
+Le paramètre \parameter{voperation} indique la façon dont une
+opération posée sera placée par rapport à la ligne de base. Les
valeurs possibles sont \verb+top+, \verb+center+ et \verb+bottom+
-(valeur par défaut).
+(valeur par défaut).
\begin{SideBySideExample}
top\quad
\opadd[voperation=top]{45}{172}\par
@@ -329,9 +378,9 @@ valeurs possibles sont \verb+top+, \verb+center+ et \verb+bottom+
\opadd[voperation=bottom]{45}{172}
\end{SideBySideExample}
-Le paramètre \parameter{voperator} indique comment sera placé le
-symbole opératoire par rapport aux opérandes. Les valeurs possibles
-sont \verb+top+, \verb+center+ (valeur par défaut) et \verb+bottom+.
+Le paramètre \parameter{voperator} indique comment sera placé le
+symbole opératoire par rapport aux opérandes. Les valeurs possibles
+sont \verb+top+, \verb+center+ (valeur par défaut) et \verb+bottom+.
\begin{SideBySideExample}
top\quad
\opadd[voperator=top]{45}{172}\par
@@ -341,43 +390,43 @@ sont \verb+top+, \verb+center+ (valeur par défaut) et \verb+bottom+.
\opadd[voperator=bottom]{45}{172}
\end{SideBySideExample}
-Le paramètre \parameter{deletezero} indique si certains nombres d'une
-opération doivent être affichés avec ou sans les zéros non
-significatifs. Le rôle exact de ce paramètre varie en fonction de
-l'opération et nous y reviendrons lors de la présentation des
-différentes opérations.
+Le paramètre \parameter{deletezero} indique si certains nombres d'une
+opération doivent être affichés avec ou sans les zéros non
+significatifs. Le rôle exact de ce paramètre varie en fonction de
+l'opération et nous y reviendrons lors de la présentation des
+différentes opérations.
-Le paramètre \parameter{style} indique si l'opération doit être posée
-(avec la valeur \verb+display+ qui est la valeur par défaut) ou bien
-être affichée en ligne (valeur \verb+text+). On reviendra sur ce
-paramètre lors de la présentation de la division car les possibilités
+Le paramètre \parameter{style} indique si l'opération doit être posée
+(avec la valeur \verb+display+ qui est la valeur par défaut) ou bien
+être affichée en ligne (valeur \verb+text+). On reviendra sur ce
+paramètre lors de la présentation de la division car les possibilités
sont alors un peu plus nombreuses.
\begin{SideBySideExample}
\opadd[style=text]{45}{172}
\end{SideBySideExample}
-Dans les opérations en ligne, \package{xlop} fait attention à ne pas
-composer la formule en mode mathématique de façon directe. Cela permet
-de spécifier ce que l'on veut comme dans l'exemple qui suit et c'est
-également pour cela qu'il faut indiquer les valeurs classiques des
-symboles entre délimiteurs mathématiques.
+Dans les opérations en ligne, \package{xlop} fait attention à ne pas
+composer la formule en mode mathématique de façon directe. Cela permet
+de spécifier ce que l'on veut comme dans l'exemple qui suit et c'est
+également pour cela qu'il faut indiquer les valeurs classiques des
+symboles entre délimiteurs mathématiques.
\begin{SideBySideExample}
\opadd[addsymbol=plus,
equalsymbol=\'egal,
style=text]{42}{172}
\end{SideBySideExample}
-Cependant, \package{xlop} introduit exactement les mêmes pénalités de
-coupures et exactement les mêmes espacements que pour une formule
-mathématique.
+Cependant, \package{xlop} introduit exactement les mêmes pénalités de
+coupures et exactement les mêmes espacements que pour une formule
+mathématique.
-Le paramètre \parameter{parenthesisnegative} indique comment composer
-les nombres négatifs dans les opérations en ligne. Les valeurs
+Le paramètre \parameter{parenthesisnegative} indique comment composer
+les nombres négatifs dans les opérations en ligne. Les valeurs
possibles sont :
\begin{itemize}
-\item \texttt{none} qui compose les nombres négatifs sans parenthèse ;
-\item \texttt{all} qui compose les nombres négatifs en les plaçant
- entre parenthèses ;
-\item \texttt{last} qui compose les nombres négatifs en les plaçant
- entre parenthèses s'il ne s'agit pas de la première opérande.
+\item \texttt{none} qui compose les nombres négatifs sans parenthèse ;
+\item \texttt{all} qui compose les nombres négatifs en les plaçant
+ entre parenthèses ;
+\item \texttt{last} qui compose les nombres négatifs en les plaçant
+ entre parenthèses s'il ne s'agit pas de la première opérande.
\end{itemize}
\begin{SideBySideExample}
\opadd[style=text,
@@ -393,76 +442,76 @@ possibles sont :
\subsection{Dimensions}
\label{subsec:Dimensions}
-Dans les opérations posées, les chiffres sont placés dans des boîtes
-de dimensions fixées. La largeur est donnée par le paramètre
-\parameter{columnwidth} et la hauteur par le paramètre
-\parameter{lineheight}. La valeur par défaut du paramètre
+Dans les opérations posées, les chiffres sont placés dans des boîtes
+de dimensions fixées. La largeur est donnée par le paramètre
+\parameter{columnwidth} et la hauteur par le paramètre
+\parameter{lineheight}. La valeur par défaut du paramètre
\texttt{lineheight} est \verb+\baselineskip+ ce qui fait que les
-lignes des opérations seront espacées, par défaut, comme les lignes
-d'un paragraphe. La valeur par défaut de \texttt{columnwidth} est de
+lignes des opérations seront espacées, par défaut, comme les lignes
+d'un paragraphe. La valeur par défaut de \texttt{columnwidth} est de
\texttt{2ex} car la largeur \og normale \fg{} des chiffres aurait
-donné des résultats peu lisibles.
+donné des résultats peu lisibles.
\begin{SideBySideExample}
\opadd[columnwidth=0.5em]
{45.89}{127.5}
\end{SideBySideExample}
-Ce piètre résultat est dû en partie au fait que la virgule est placé
-dans une boîte dont la largeur est contrôlée par le paramètre
-\parameter{decimalsepwidth} dont la valeur par défaut est nulle. Un
-essai d'amélioration peut être effectué en donnant à ce paramètre la
+Ce piètre résultat est dû en partie au fait que la virgule est placé
+dans une boîte dont la largeur est contrôlée par le paramètre
+\parameter{decimalsepwidth} dont la valeur par défaut est nulle. Un
+essai d'amélioration peut être effectué en donnant à ce paramètre la
largeur \og{} normale \fg d'une virgule.
\begin{SideBySideExample}
\opadd[columnwidth=0.5em,
decimalsepwidth=0.27778em]
{45.89}{127.5}
\end{SideBySideExample}
-C'est meilleur mais le fait de donner une largeur non nulle à la boîte
-contenant le séparateur décimal risque de poser des difficultés si
-l'on veut placer des éléments externes : cela va à l'encontre de
-l'idée de placer les chiffres dans une grille fixe. Ceci est donc à
-éviter en temps normal.
+C'est meilleur mais le fait de donner une largeur non nulle à la boîte
+contenant le séparateur décimal risque de poser des difficultés si
+l'on veut placer des éléments externes : cela va à l'encontre de
+l'idée de placer les chiffres dans une grille fixe. Ceci est donc à
+éviter en temps normal.
-Les deux paramètres \parameter{columnwidth} et \parameter{lineheight}
+Les deux paramètres \parameter{columnwidth} et \parameter{lineheight}
correspondent aux deux seules dimensions que l'extension rend
-publiques, à savoir respectivement
+publiques, à savoir respectivement
\verb+\opcolumnwidth+\index{opcolumnwidth@\texttt{$\backslash$opcolumnwidth}}
et
\verb+\oplineheight+\index{oplineheight@\texttt{$\backslash$oplineheight}}.
-Il est cependant dangereux de vouloir modifier ces dimensions de façon
+Il est cependant dangereux de vouloir modifier ces dimensions de façon
directe puisque une modification par voie normale n'a pas pour seule
-conséquence d'obtenir une nouvelle valeur pour ces
+conséquence d'obtenir une nouvelle valeur pour ces
dimensions. L'extension \package{xlop} a rendu ces dimensions
publiques uniquement pour pouvoir les lire, pas pour les modifier.
-Les deux paramètres suivants permettent de spécifier les largeurs des
-traits horizontaux et verticaux tracés par \package{xlop}. Il s'agit
-des deux paramètres \parameter{hrulewidth} et \parameter{vrulewidth}
-dont la valeur par défaut est \texttt{0.4pt}.
+Les deux paramètres suivants permettent de spécifier les largeurs des
+traits horizontaux et verticaux tracés par \package{xlop}. Il s'agit
+des deux paramètres \parameter{hrulewidth} et \parameter{vrulewidth}
+dont la valeur par défaut est \texttt{0.4pt}.
-Ces traits sont composés sans perturber la grille, c'est-à-dire sans
+Ces traits sont composés sans perturber la grille, c'est-à-dire sans
ajouter d'espace vertical. Ainsi, avec des valeurs importantes pour
-l'épaisseur, les traits risquent de déborder au niveau des opérandes.
+l'épaisseur, les traits risquent de déborder au niveau des opérandes.
\begin{SideBySideExample}
\opadd[hrulewidth=8pt]{42}{172}
\end{SideBySideExample}
-Il existe également un paramètre permettant de contrôler le décalage
-horizontal du séparateur décimal. Il s'agit de
-\parameter{decimalsepoffset} dont la valeur par défaut est égale
-à~\texttt{-0.35}. Cette valeur par défaut indique une longueur en
-prenant \verb+\opcolumnwidth+ comme unité. Un exemple d'utilisation de
-ce paramètre sera donné à la section~\ref{sec:Division}
+Il existe également un paramètre permettant de contrôler le décalage
+horizontal du séparateur décimal. Il s'agit de
+\parameter{decimalsepoffset} dont la valeur par défaut est égale
+à~\texttt{-0.35}. Cette valeur par défaut indique une longueur en
+prenant \verb+\opcolumnwidth+ comme unité. Un exemple d'utilisation de
+ce paramètre sera donné à la section~\ref{sec:Division}
page~\pageref{sec:Division}.
\subsection{Styles des chiffres}
\label{subsec:Styles des chiffres}
L'extension \package{xlop} distingue cinq types de nombres et y
-associe cinq paramètres de style :
+associe cinq paramètres de style :
\begin{itemize}
-\item les opérandes avec \parameter{operandstyle} ;
-\item le résultat avec \parameter{resultstyle} ;
+\item les opérandes avec \parameter{operandstyle} ;
+\item le résultat avec \parameter{resultstyle} ;
\item les restes avec \parameter{remainderstyle} ;
-\item les résultats intermédiaires avec \parameter{intermediarystyle}
+\item les résultats intermédiaires avec \parameter{intermediarystyle}
;
\item les retenues avec \parameter{carrystyle}.
\end{itemize}
@@ -475,12 +524,12 @@ associe cinq paramètres de style :
Rappelons que dans ce manuel, nous utilisons l'extension
\package{pstricks}\index{pstricks}.
-\index{parametre@paramètre!indexé|(}%
-En réalité, la gestion de ces styles est encore plus puissante car on
-peut distinguer les différents nombres d'une même classe. Dans une
-même opération, on a plusieurs opérandes et, éventuellement plusieurs
-restes et plusieurs nombres intermédiaires. On accède alors au style
-de ces nombres individuels en indexant le paramètre de style
+\index{parametre@paramètre!indexé|(}%
+En réalité, la gestion de ces styles est encore plus puissante car on
+peut distinguer les différents nombres d'une même classe. Dans une
+même opération, on a plusieurs opérandes et, éventuellement plusieurs
+restes et plusieurs nombres intermédiaires. On accède alors au style
+de ces nombres individuels en indexant le paramètre de style
correspondant.
\begin{SideBySideExample}
\opadd[operandstyle=\blue,
@@ -489,20 +538,20 @@ correspondant.
carrystyle=\scriptsize\green]
{45.89}{127.5}
\end{SideBySideExample}
-Sur cet exemple, on a indiqué que la première opérande devait être
-composée avec le style \verb+\lightgray+ et comme rien n'était indiqué
-pour la seconde opérande, celle-ci a repris le style de base de sa
-classe (donc a été composée avec le style \verb+\blue+).
+Sur cet exemple, on a indiqué que la première opérande devait être
+composée avec le style \verb+\lightgray+ et comme rien n'était indiqué
+pour la seconde opérande, celle-ci a repris le style de base de sa
+classe (donc a été composée avec le style \verb+\blue+).
-Ce mécanisme va encore plus loin car on peut indicer à deux niveaux
-les styles des classes opérande, reste et nombre intermédiaire et à un
-niveau les styles des classes résultat et retenue pour accéder au
+Ce mécanisme va encore plus loin car on peut indicer à deux niveaux
+les styles des classes opérande, reste et nombre intermédiaire et à un
+niveau les styles des classes résultat et retenue pour accéder au
style de chacun des chiffres de ces nombres. Afin de rendre les
-indexations plus facile à gérer, un index positif indiquera le rang
-d'un chiffre de la partie entière (numérotée de droite à gauche,
-l'index~1 correspondant au chiffre des unités) et un index négatif
-indiquera le rang d'un chiffre de la partie décimale (numérotée de
-gauche à droite, l'index $-1$ correspondant au chiffre des dixièmes).
+indexations plus facile à gérer, un index positif indiquera le rang
+d'un chiffre de la partie entière (numérotée de droite à gauche,
+l'index~1 correspondant au chiffre des unités) et un index négatif
+indiquera le rang d'un chiffre de la partie décimale (numérotée de
+gauche à droite, l'index $-1$ correspondant au chiffre des dixièmes).
\begin{SideBySideExample}
\opadd[operandstyle.1.1=\white,
operandstyle.1.-2=\white,
@@ -511,7 +560,7 @@ gauche à droite, l'index $-1$ correspondant au chiffre des dixièmes).
deletezero=false]
{045.89}{127.50}
\end{SideBySideExample}
-On peut également utiliser une macro à un paramètre comme style.
+On peut également utiliser une macro à un paramètre comme style.
\begin{SideBySideExample}
\newcommand\hole[1]{$\bullet$}
\opadd[operandstyle.1.1=\hole,
@@ -520,9 +569,9 @@ On peut également utiliser une macro à un paramètre comme style.
resultstyle.2=\hole]
{45.89}{127.5}
\end{SideBySideExample}
-\index{operation@opération!à trou}%
+\index{operation@opération!à trou}%
Lorsque le style est une macro, le chiffre constitue le dernier
-argument de cette macro. Voici un exemple plus compliqué et utilisant
+argument de cette macro. Voici un exemple plus compliqué et utilisant
l'extension \package{pst-node} de la suite \package{pstricks} :
\begin{SideBySideExample}
\newcommand\OPoval[3]{%
@@ -541,59 +590,59 @@ l'extension \package{pst-node} de la suite \package{pstricks} :
\end{minipage}
\end{SideBySideExample}
-Comme les chiffres, le séparateur décimal tient compte du style d'un
-nombre. Pour accéder au style du séparateur décimal de façon
+Comme les chiffres, le séparateur décimal tient compte du style d'un
+nombre. Pour accéder au style du séparateur décimal de façon
individuelle, il faut employer l'indice \texttt{d} au lieu des indices
-numériques des chiffres.
+numériques des chiffres.
\begin{SideBySideExample}
\newcommand\hole[1]{\texttt{\_}}
\opmul[intermediarystyle=\hole,
resultstyle=\hole,
resultstyle.d=\white]{2.46}{35.7}
\end{SideBySideExample}
-\index{parametre@paramètre!indexé|)}%
-\index{parametre@paramètre!syntaxe|)}
+\index{parametre@paramètre!indexé|)}%
+\index{parametre@paramètre!syntaxe|)}
-\chapter{Opérations arithmétiques}
-\label{chap:Opérations arithmétiques}
+\chapter{Opérations arithmétiques}
+\label{chap:Opérations arithmétiques}
\section{Addition}
\label{sec:Addition}
-L'addition est gérée par la macro \macro{opadd}. L'addition,
-lorsqu'elle est posée, n'affiche que des nombres positifs. Cela va
-avoir comme conséquence d'afficher une soustraction lorsqu'une des
-opérandes est négative.%
-\index{nombre!négatifs dans une opération posée}
+L'addition est gérée par la macro \macro{opadd}. L'addition,
+lorsqu'elle est posée, n'affiche que des nombres positifs. Cela va
+avoir comme conséquence d'afficher une soustraction lorsqu'une des
+opérandes est négative.%
+\index{nombre!négatifs dans une opération posée}
\begin{SideBySideExample}
\opadd{-245}{72}
\end{SideBySideExample}
-De façon générale, le principe est de poser l'opération qui permet de
-retrouver le résultat comme on le ferait à la main. En revanche,
+De façon générale, le principe est de poser l'opération qui permet de
+retrouver le résultat comme on le ferait à la main. En revanche,
l'affichage en ligne donnera toujours une addition puisqu'on peut
-maintenant écrire des nombres négatifs.
+maintenant écrire des nombres négatifs.
\begin{SideBySideExample}
\opadd[style=text]{-245}{72}
\end{SideBySideExample}
- Outre les paramètres généraux décrits à la
+ Outre les paramètres généraux décrits à la
section~\ref{sec:Parametres de xlop}, la macro \verb+\opadd+ est
- sensible aux paramètres \texttt{carryadd}, \texttt{lastcarry} et
+ sensible aux paramètres \texttt{carryadd}, \texttt{lastcarry} et
\texttt{deletezero}.
-Le paramètre \parameter{carryadd} est un paramètre
-booléen\index{parametre@paramètre!booléen} c'est-à-dire n'acceptant
+Le paramètre \parameter{carryadd} est un paramètre
+booléen\index{parametre@paramètre!booléen} c'est-à-dire n'acceptant
que les valeurs \texttt{true} et \texttt{false}. Comme il d'usage,
-l'omission du signe égal et de la partie droite de l'affectation
-équivaut à \texttt{=true}. Ce paramètre indique si les retenues
-doivent être ou non affichées. Sa valeur par défaut est
+l'omission du signe égal et de la partie droite de l'affectation
+équivaut à \texttt{=true}. Ce paramètre indique si les retenues
+doivent être ou non affichées. Sa valeur par défaut est
\texttt{true}.
-Le paramètre \parameter{lastcarry} est également un paramètre
-booléen. Il indique si une retenue sans chiffre correspondant au
-niveau des deux opérandes doit être ou non affichée. Sa valeur par
-défaut est \texttt{false}. On fera attention au rôle exact de ce
-paramètre. Ainsi, si la seconde opérande dans l'exemple qui suit avait
-été~15307, la dernière retenue aurait été affichée quelle que soit la
-valeur du paramètre \texttt{lastcarry} puisqu'il y aurait eu un
-chiffre correspondant au niveau de la seconde opérande.
+Le paramètre \parameter{lastcarry} est également un paramètre
+booléen. Il indique si une retenue sans chiffre correspondant au
+niveau des deux opérandes doit être ou non affichée. Sa valeur par
+défaut est \texttt{false}. On fera attention au rôle exact de ce
+paramètre. Ainsi, si la seconde opérande dans l'exemple qui suit avait
+été~15307, la dernière retenue aurait été affichée quelle que soit la
+valeur du paramètre \texttt{lastcarry} puisqu'il y aurait eu un
+chiffre correspondant au niveau de la seconde opérande.
\begin{SideBySideExample}
\opadd{4825}{5307}
\end{SideBySideExample}
@@ -604,83 +653,150 @@ chiffre correspondant au niveau de la seconde opérande.
\opadd[lastcarry]{4825}{5307}
\end{SideBySideExample}
-Le paramètre \parameter{deletezero} est également un paramètre booléen
-et son rôle et d'indiquer si les zéros non significatifs doivent être
-supprimés ou non. Sa valeur par défaut est \texttt{true}. Si ce
-paramètre vaut \texttt{false}, les opérandes et le résultats auront le
-même nombre de chiffres, \package{xlop} ajoutant des zéros non
-significatifs pour y parvenir. Les zéros non significatifs des
-opérandes ne sont pas supprimés également.
+Le paramètre \parameter{deletezero} est également un paramètre booléen
+et son rôle et d'indiquer si les zéros non significatifs doivent être
+supprimés ou non. Sa valeur par défaut est \texttt{true}. Si ce
+paramètre vaut \texttt{false}, les opérandes et le résultats auront le
+même nombre de chiffres, \package{xlop} ajoutant des zéros non
+significatifs pour y parvenir. Les zéros non significatifs des
+opérandes ne sont pas supprimés également.
\begin{SideBySideExample}
\opadd{012.3427}{5.2773}\par
\opadd[deletezero=false]
{012.3427}{5.2773}
\end{SideBySideExample}
-Ce paramètre a exactement le même rôle dans l'affichage en ligne que
-dans l'affichage posé.
+Ce paramètre a exactement le même rôle dans l'affichage en ligne que
+dans l'affichage posé.
\begin{SideBySideExample}
\opadd[style=text]{02.8}{1.2}\par
\opadd[style=text,
- deletezero=false]{02.8}{1.2}\par
+ deletezero=false]{02.8}{1.2}
+\end{SideBySideExample}
+
+La version 0.27 de xlop a introduit la macro \macro{opmanyyadd} qui
+permet de poser des additions avec plus de deux opérandes. Cette macro
+a quelques limitations:
+\begin{itemize}
+\item toutes les opérandes doivent être positives ;
+\item certains paramètres ne sont plus utilisés, par
+ exemple \parameter{style} ;
+\item les retenues ne sont pas affichées.
+\end{itemize}
+En revanche, le paramètre \parameter{vmanyoperator} permet de
+contrôler finement le placement des signes d'opération.
+
+Voici un premier exemple pour montrer la syntaxe de base. Les
+opérandes doivent être placées entre accolades et leur nombre n'est
+pas limité.
+\begin{SideBySideExample}
+ \opmanyadd{123.4}{3.1416}
+ {2.71828}{0.001}
+\end{SideBySideExample}
+La macro \macro{opmanyadd} accepte les paramètres de style pour les
+opérandes et le résultat. En ce qui concerne le style pour les
+opérandes, le premier index indique la place de l'opérande (du haut
+vers le bas) et la deuxième le chiffre de l'opérande. Par exemple :
+\begin{SideBySideExample}
+ \newcommand\R{\color{red}}
+ \opmanyadd[operandstyle.2.3=\R,
+ operandstyle.3.3=\R,
+ resultstyle.3=\R,
+ resultstyle.4=\R]
+ {12.6}{853.3}{158.1}
\end{SideBySideExample}
+Cet exemple montre que les zéros non significatifs ne sont pas
+affichés. Ils peuvent l'être en utilisant le
+paramètre \parameter{deletezero} avec se valeur false :
+\begin{SideBySideExample}
+ \opmanyadd[deletezero=false]
+ {12.6}{853.3}{158.1}
+\end{SideBySideExample}
+
+La macro \macro{opmanyadd} utilise également le
+paramètre \parameter{voperation} comme le fait \macro{opadd}.
+
+Il existe un paramètre spécifique à la macro \macro{opmanyadd} : le
+paramètre \parameter{vmanyoperator}. Ce paramètre permet d'afficher
+l'opérateur plus de six façons différentes.
+\begin{CenterExample}
+ \opmanyadd{1}{12}{123}{1234}\quad
+ \opmanyadd[vmanyoperator=center]
+ {1}{12}{123}{1234}\quad
+ \opmanyadd[vmanyoperator=top]
+ {1}{12}{123}{1234}\quad
+ \opmanyadd[vmanyoperator=bottom]
+ {1}{12}{123}{1234}
+\end{CenterExample}
+On peut voir que la valeur par défaut est center. Les valeurs avec une
+première lettre minuscule affichent autant d'opérateurs qu'il y a
+d'opérandes moins une. Les mêmes valeurs avec la premiyère lettre en
+capitale affichent un unique signe opératoire:
+\begin{CenterExample}
+ \opmanyadd[vmanyoperator=Center]
+ {1}{12}{123}{1234}\quad
+ \opmanyadd[vmanyoperator=Top]
+ {1}{12}{123}{1234}\quad
+ \opmanyadd[vmanyoperator=Bottom]
+ {1}{12}{123}{1234}
+\end{CenterExample}
\section{Soustraction}
\label{sec:soustraction}
-La soustraction est gérée par la macro \macro{opsub}. La soustraction,
-lorsqu'elle est posée, n'affiche que des nombres positifs. Par
-conséquence cette macro va afficher une addition lorsqu'une des
-opérandes est négative.
+La soustraction est gérée par la macro \macro{opsub}. La soustraction,
+lorsqu'elle est posée, n'affiche que des nombres positifs. Par
+conséquence cette macro va afficher une addition lorsqu'une des
+opérandes est négative.
\begin{SideBySideExample}
\opsub{-245}{72}
\end{SideBySideExample}
-De façon générale, le principe est de poser l'opération qui permet de
-retrouver le résultat comme on le ferait à la main. En revanche,
+De façon générale, le principe est de poser l'opération qui permet de
+retrouver le résultat comme on le ferait à la main. En revanche,
l'affichage en ligne donnera toujours une soustraction puisqu'on peut
-maintenant écrire des nombres négatifs.
+maintenant écrire des nombres négatifs.
\begin{SideBySideExample}
\opsub[style=text]{-245}{72}
\end{SideBySideExample}
-Ce principe s'applique également lorsque la première opérande est
-inférieure à la seconde (cas positif) où on aura une inversion des
-opérandes.
+Ce principe s'applique également lorsque la première opérande est
+inférieure à la seconde (cas positif) où on aura une inversion des
+opérandes.
\begin{SideBySideExample}
\opsub{1.2}{2.45}
\end{SideBySideExample}
-Bien entendu, l'opération en ligne donnera le résultat exact.
+Bien entendu, l'opération en ligne donnera le résultat exact.
\begin{SideBySideExample}
\opsub[style=text]{1.2}{2.45}
\end{SideBySideExample}
-Outre les paramètres généraux vus à la section~\ref{sec:Parametres de
- xlop}, \verb+\opsub+ est sensible à \texttt{carrysub},
+Outre les paramètres généraux vus à la section~\ref{sec:Parametres de
+ xlop}, \verb+\opsub+ est sensible à \texttt{carrysub},
\texttt{lastcarry}, \texttt{offsetcarry}, \texttt{deletezero} et
\texttt{behaviorsub}.
-Le paramètre \parameter{carrysub} est un paramètre booléen
-qui indique si les retenues doivent être ou non présentes. Sa valeur
-par défaut est \texttt{false} (rappelons que le paramètre
-\texttt{carryadd} avait une valeur par défaut égale à \texttt{true}).
+Le paramètre \parameter{carrysub} est un paramètre booléen
+qui indique si les retenues doivent être ou non présentes. Sa valeur
+par défaut est \texttt{false} (rappelons que le paramètre
+\texttt{carryadd} avait une valeur par défaut égale à \texttt{true}).
\begin{SideBySideExample}
\opsub[carrysub]{1234}{567}
\end{SideBySideExample}
-Dans l'exemple précédent, nous pouvons voir qu'il manque en fait une
-retenue au niveau du dernier chiffre de 1234, cette façon de faire
-étant assez courante. Néanmoins, on peut contrôler l'affichage de
-cette dernière retenue avec le paramètre \parameter{lastcarry}. Ce
-paramètre n'a pas tout à fait le même rôle que pour l'addition puisque
-la dernière retenue ne sera pas affichée dans le cas où la seconde
-opérande n'a pas de chiffre correspondant (alors que pour l'addition,
-il fallait que les deux opérandes n'aient pas de chiffres
+Dans l'exemple précédent, nous pouvons voir qu'il manque en fait une
+retenue au niveau du dernier chiffre de 1234, cette façon de faire
+étant assez courante. Néanmoins, on peut contrôler l'affichage de
+cette dernière retenue avec le paramètre \parameter{lastcarry}. Ce
+paramètre n'a pas tout à fait le même rôle que pour l'addition puisque
+la dernière retenue ne sera pas affichée dans le cas où la seconde
+opérande n'a pas de chiffre correspondant (alors que pour l'addition,
+il fallait que les deux opérandes n'aient pas de chiffres
correspondant).
\begin{SideBySideExample}
\opsub[carrysub,lastcarry]{1234}{567}
\end{SideBySideExample}
-On peut noter dans ce dernier cas qu'il est sans doute préférable de
-mettre le paramètre \parameter{deletezero} à \texttt{false} pour
-obtenir une présentation plus correcte.
+On peut noter dans ce dernier cas qu'il est sans doute préférable de
+mettre le paramètre \parameter{deletezero} à \texttt{false} pour
+obtenir une présentation plus correcte.
\begin{SideBySideExample}
\opsub[carrysub,
lastcarry,
@@ -688,10 +804,10 @@ obtenir une présentation plus correcte.
\end{SideBySideExample}
L'affichage des retenues au niveau des soustractions peut sembler un
-peu trop compact. On peut élargir la boîte des chiffres avec le
-paramètre \parameter{opcolumnwidth} mais également indiquer le
-décalage des retenues avec le paramètre \parameter{offsetcarry}. La
-valeur par défaut de ce paramètre est \texttt{-0.35}.
+peu trop compact. On peut élargir la boîte des chiffres avec le
+paramètre \parameter{opcolumnwidth} mais également indiquer le
+décalage des retenues avec le paramètre \parameter{offsetcarry}. La
+valeur par défaut de ce paramètre est \texttt{-0.35}.
\begin{SideBySideExample}
\opsub[carrysub,
lastcarry,
@@ -707,12 +823,12 @@ valeur par défaut de ce paramètre est \texttt{-0.35}.
\end{SideBySideExample}
Il peut arriver qu'une soustraction de deux nombres positifs, le
-premier étant inférieur au second, soit le signe d'une erreur de
-l'utilisateur. Dans ce cas, et uniquement dans ce cas, le paramètre
-\parameter{behaviorsub} permet d'obtenir un rappel à l'ordre. Les
-trois valeurs possibles de ce paramètre sont \texttt{silent} qui est
-la valeur par défaut et qui donne le résultat, \texttt{warning} qui
-donne également le résultat mais affiche le message d'avertissement :
+premier étant inférieur au second, soit le signe d'une erreur de
+l'utilisateur. Dans ce cas, et uniquement dans ce cas, le paramètre
+\parameter{behaviorsub} permet d'obtenir un rappel à l'ordre. Les
+trois valeurs possibles de ce paramètre sont \texttt{silent} qui est
+la valeur par défaut et qui donne le résultat, \texttt{warning} qui
+donne également le résultat mais affiche le message d'avertissement :
\begin{Verbatim}[xrightmargin=0pt,frame=none]
xlop warning. Substraction with first operand less than second one
See documentation for further information.
@@ -723,75 +839,75 @@ et enfin \texttt{error} qui affichera le message d'erreur :
Type H <return> for immediate help.
! Substraction with first operand less than second one.
\end{Verbatim}
-et l'opération ne sera pas effectuée.
+et l'opération ne sera pas effectuée.
\section{Multiplication}
\label{sec:Multiplication}
-La multiplication est gérée par la macro \macro{opmul}.
-Nous présenterons les paramètres \texttt{hfactor},
+La multiplication est gérée par la macro \macro{opmul}.
+Nous présenterons les paramètres \texttt{hfactor},
\texttt{displayintermediary}, \texttt{shiftintermediarysymbol},
\texttt{displayshiftintermediary} et finalement \texttt{deletezero},
-les autres paramètres ayant été vus à la section~\ref{sec:Parametres
+les autres paramètres ayant été vus à la section~\ref{sec:Parametres
de xlop}.
-Le paramètre \parameter{shiftintermediarysymbol} indique quel symbole
-sera utilisé (sa valeur par défaut est \verb+$\cdot$+) pour visualiser
-les décalages des nombres intermédiaires. Le paramètre
+Le paramètre \parameter{shiftintermediarysymbol} indique quel symbole
+sera utilisé (sa valeur par défaut est \verb+$\cdot$+) pour visualiser
+les décalages des nombres intermédiaires. Le paramètre
\parameter{displayshiftintermediary} peut prendre les valeurs
-\texttt{shift} (valeur par défaut) qui ne montre ce symbole que
-lorsque le décalage est supérieur à un rang, \texttt{all} qui indique
-que ce symbole de décalage sera systématiquement affiché et
-\texttt{none} qui indique que ce symbole ne sera jamais affiché.
+\texttt{shift} (valeur par défaut) qui ne montre ce symbole que
+lorsque le décalage est supérieur à un rang, \texttt{all} qui indique
+que ce symbole de décalage sera systématiquement affiché et
+\texttt{none} qui indique que ce symbole ne sera jamais affiché.
\begin{CenterExample}[xrightmargin=0pt]
\opmul[displayshiftintermediary=shift]{453}{1001205}\qquad
\opmul[displayshiftintermediary=all]{453}{1001205}\qquad
\opmul[displayshiftintermediary=none]{453}{1001205}
\end{CenterExample}
-En réalité, le non affichage des nombres intermédiaires nuls est dû à
-la valeur par défaut \texttt{none} du paramètre
+En réalité, le non affichage des nombres intermédiaires nuls est dû à
+la valeur par défaut \texttt{none} du paramètre
\parameter{displayintermediary}. La valeur \texttt{all} va afficher
-tous les nombres intermédiaires.
+tous les nombres intermédiaires.
\begin{SideBySideExample}
\opmul[displayintermediary=all]
{453}{1001205}
\end{SideBySideExample}
-On notera que les nombres intermédiaires nuls sont affichés avec
+On notera que les nombres intermédiaires nuls sont affichés avec
autant de chiffres que le premier facteur.
-Le paramètre \parameter{displayintermediary} admet la valeur
-\texttt{nonzero} qui a le même rôle que la valeur \texttt{none} sauf
-dans le cas où le second facteur ne comporte qu'un seul chiffre.
+Le paramètre \parameter{displayintermediary} admet la valeur
+\texttt{nonzero} qui a le même rôle que la valeur \texttt{none} sauf
+dans le cas où le second facteur ne comporte qu'un seul chiffre.
\begin{CenterExample}[xrightmargin=0pt]
\opmul{3.14159}{4}\qquad
\opmul[displayintermediary=nonzero]{3.14159}{4}
\end{CenterExample}
-Enfin, le paramètre \parameter{displayintermediary} admet la valeur
-\texttt{None} qui n'affichera aucun résultat intermédiaire dans tous
+Enfin, le paramètre \parameter{displayintermediary} admet la valeur
+\texttt{None} qui n'affichera aucun résultat intermédiaire dans tous
les cas.
\begin{CenterExample}[xrightmargin=0pt]
\opmul[displayintermediary=None]{453}{1001205}
\end{CenterExample}
-Le paramètre \parameter{hfactor} permet d'indiquer comment doit se
-faire l'alignement des opérandes. La valeur par défaut \texttt{right}
-donne une composition au fer à droite tandis que la valeur
+Le paramètre \parameter{hfactor} permet d'indiquer comment doit se
+faire l'alignement des opérandes. La valeur par défaut \texttt{right}
+donne une composition au fer à droite tandis que la valeur
\texttt{decimal} donne un alignement au niveau de la virgule.
\begin{CenterExample}[xrightmargin=0pt]
\opmul{3.1416}{12.8}\qquad\opmul[hfactor=decimal]{3.1416}{12.8}
\end{CenterExample}
-Pour la multiplication posée, le paramètre \parameter{deletezero} ne
-concerne que les opérandes, le résultat gardant ses éventuels zéros
-non significatifs puisque ceux-ci sont nécessaires pour effectuer
-correctement le décalage de la virgule lorsqu'on travaille \og à la
+Pour la multiplication posée, le paramètre \parameter{deletezero} ne
+concerne que les opérandes, le résultat gardant ses éventuels zéros
+non significatifs puisque ceux-ci sont nécessaires pour effectuer
+correctement le décalage de la virgule lorsqu'on travaille \og à la
main \fg{}.
\begin{CenterExample}[xrightmargin=0pt]
\opmul[deletezero=false]{01.44}{25}\qquad
\opmul{01.44}{25}
\end{CenterExample}
-En revanche, dans la multiplication en ligne, ce paramètre retrouve
+En revanche, dans la multiplication en ligne, ce paramètre retrouve
son comportement normal.
\begin{CenterExample}[xrightmargin=0pt]
\opmul[deletezero=false,style=text]{01.44}{25}\qquad
@@ -800,41 +916,41 @@ son comportement normal.
\section{Division}
\label{sec:Division}
-L'extension gère la division \og classique \fg{} avec la macro
+L'extension gère la division \og classique \fg{} avec la macro
\macro{opdiv} et la division euclidienne avec la macro
-\macro{opidiv}. En raison de sa complexité, la division est l'opération
-qui prend en compte le plus de paramètres.
+\macro{opidiv}. En raison de sa complexité, la division est l'opération
+qui prend en compte le plus de paramètres.
-\subsection{Contrôle de l'arrêt}
+\subsection{Contrôle de l'arrêt}
\label{subsec:Controle de l'arret}
-Dans ce qui suivra, le terme d'\emph{étape} indique l'ensemble des
+Dans ce qui suivra, le terme d'\emph{étape} indique l'ensemble des
calculs permettant d'obtenir un chiffre au niveau du quotient. Ce
-nombre d'étapes est contrôlé en partie par les paramètres
+nombre d'étapes est contrôlé en partie par les paramètres
\parameter{maxdivstep}, \parameter{safedivstep} et \parameter{period}.
-En partie seulement car une division classique s'arrêtera
+En partie seulement car une division classique s'arrêtera
automatiquement lors de l'obtention d'un reste nul, quelles que que
-soient les valeurs de ces trois paramètres et une division euclidienne
-s'arrêtera sur un quotient entier, sans tenir compte de ces trois
-paramètres.
+soient les valeurs de ces trois paramètres et une division euclidienne
+s'arrêtera sur un quotient entier, sans tenir compte de ces trois
+paramètres.
\begin{SideBySideExample}
\opdiv{25}{7}
\end{SideBySideExample}
\begin{SideBySideExample}
\opidiv{25}{7}
\end{SideBySideExample}
-Le premier exemple s'arrête en raison de la valeur de
-\parameter{maxdivstep} qui est égale, par défaut, à~10. On prendra
-garde à ce que le nombre maximum d'étapes peut entraîner des résultats
+Le premier exemple s'arrête en raison de la valeur de
+\parameter{maxdivstep} qui est égale, par défaut, à~10. On prendra
+garde à ce que le nombre maximum d'étapes peut entraîner des résultats
aberrants lorsqu'il est trop faible.
\begin{SideBySideExample}
\opdiv[maxdivstep=2]{1248}{3}
\end{SideBySideExample}
-Le résultat précédent est clairement faux mais \package{xlop} a fait
-ce qu'on lui a demandé, en l'occurrence avoir deux chiffres (maximum)
+Le résultat précédent est clairement faux mais \package{xlop} a fait
+ce qu'on lui a demandé, en l'occurrence avoir deux chiffres (maximum)
au quotient.
-L'affichage en ligne va également différer selon que la division s'est
-arrêtée avec un reste final nul ou non ou selon qu'il s'agit d'une
+L'affichage en ligne va également différer selon que la division s'est
+arrêtée avec un reste final nul ou non ou selon qu'il s'agit d'une
division classique ou euclidienne.
\begin{SideBySideExample}
\opdiv[style=text]{3.14}{2}\par
@@ -845,46 +961,46 @@ division classique ou euclidienne.
On notera l'emploi de \parameter{equalsymbol} ou
\parameter{approxsymbol} selon le cas ainsi que l'affichage avec une
troncature et non un arrondi. Nous verrons comment obtenir un arrondi
-à la section~\ref{sec:Operations evoluees}
+à la section~\ref{sec:Operations evoluees}
L'affichage en ligne de \verb+\opdiv+ tient compte de
\parameter{maxdivstep}. Cela signifie que l'on peut obtenir des
-résultats vraiment faux avec des valeurs trop faible de ce paramètre
-et, contrairement à l'affichage posé, l'affichage en ligne ne
-permettra pas de comprendre ce qu'il s'est passé.
+résultats vraiment faux avec des valeurs trop faible de ce paramètre
+et, contrairement à l'affichage posé, l'affichage en ligne ne
+permettra pas de comprendre ce qu'il s'est passé.
\begin{SideBySideExample}
\opdiv[maxdivstep=2,style=text]
{1248}{3}
\end{SideBySideExample}
-Si en plus, le dernier reste calculé est nul, on atteint un summum :
+Si en plus, le dernier reste calculé est nul, on atteint un summum :
\begin{SideBySideExample}
\opdiv[maxdivstep=1,style=text]
{1208}{3}
\end{SideBySideExample}
-puisqu'il n'y a même plus d'approximation !
+puisqu'il n'y a même plus d'approximation !
-Une division non euclidienne peut également s'arrêter sur la détection
-de la survenue d'une période. Pour cela, il suffit de donner la valeur
-\texttt{true} au paramètre \parameter{period}\index{division!période}.
+Une division non euclidienne peut également s'arrêter sur la détection
+de la survenue d'une période. Pour cela, il suffit de donner la valeur
+\texttt{true} au paramètre \parameter{period}\index{division!période}.
\begin{SideBySideExample}
\opdiv[period]{100}{3}
\end{SideBySideExample}
-Pour ne pas avoir à effectuer des comparaisons de chaque reste avec
-tous les restes précédents, \package{xlop} calcule dès le départ la
-longueur de la période ce qui permet de n'effectuer qu'une seule
-comparaison à chaque étape et donc d'accélérer notablement les
-calculs\footnote{Je remercie à cette occasion Olivier Viennet pour ses
- précisions mathématiques qui ont permis d'implanter correctement ces
+Pour ne pas avoir à effectuer des comparaisons de chaque reste avec
+tous les restes précédents, \package{xlop} calcule dès le départ la
+longueur de la période ce qui permet de n'effectuer qu'une seule
+comparaison à chaque étape et donc d'accélérer notablement les
+calculs\footnote{Je remercie à cette occasion Olivier Viennet pour ses
+ précisions mathématiques qui ont permis d'implanter correctement ces
calculs.}. Malheureusement, ces calculs se font avec des nombres
-directement accessibles à \TeX{} ce qui a pour conséquence de ne pas
-pouvoir utiliser d'opérandes dont la valeur absolue excède
+directement accessibles à \TeX{} ce qui a pour conséquence de ne pas
+pouvoir utiliser d'opérandes dont la valeur absolue excède
$\left\lfloor\frac{2^{31}-1}{10}\right\rfloor = 214748364$.
-Pour ne pas entraîner des calculs trop long, \package{xlop} ne
-dépassera pas la valeur du paramètre \parameter{safedivstep} dans les
-divisions avec détection de période. Sa valeur par défaut est égale
-à~50. Cependant, \package{xlop} signalera le problème. Par exemple si
+Pour ne pas entraîner des calculs trop long, \package{xlop} ne
+dépassera pas la valeur du paramètre \parameter{safedivstep} dans les
+divisions avec détection de période. Sa valeur par défaut est égale
+à~50. Cependant, \package{xlop} signalera le problème. Par exemple si
on demande un tel calcul avec le code :
\begin{Verbatim}[xrightmargin=0pt,frame=none]
\opdiv[period]{1}{289}
@@ -895,25 +1011,25 @@ on obtiendra le message d'avertissement :
Division will stop before reach it.
See documentation for further information.
\end{Verbatim}
-qui indique que la période de cette division est de~272 et qu'elle ne
-sera donc pas atteinte à cause de la valeur de \texttt{safedivstep}.
+qui indique que la période de cette division est de~272 et qu'elle ne
+sera donc pas atteinte à cause de la valeur de \texttt{safedivstep}.
-L'affichage en ligne d'une telle division présente quelque
-particularités.
+L'affichage en ligne d'une telle division présente quelque
+particularités.
\begin{SideBySideExample}
\opdiv[period,style=text]{150}{7}
\end{SideBySideExample}
-On obtient donc une égalité au lieu d'une approximation, la présence
-d'un trait sous la période et des points de suspension à la suite de
-la période. Tous ces éléments peuvent être configurés. Le symbole
-d'égalité est donné par le paramètre \parameter{equalsymbol} (valeur
-par défaut \verb+{$=$}+), la largeur du trait par le paramètre
-\parameter{hrulewidth} (valeur par défaut \texttt{0.4pt}), sa position
-verticale par le paramètre \parameter{vruleperiod} (valeur par défaut
-\texttt{-0.2}) qui indique un décalage vertical en prenant
-\verb+\oplineheight+ comme unité et les points de suspension sont
-donnés par le paramètre \parameter{afterperiodsymbol} (valeur par
-défaut \verb+$\ldots$+).
+On obtient donc une égalité au lieu d'une approximation, la présence
+d'un trait sous la période et des points de suspension à la suite de
+la période. Tous ces éléments peuvent être configurés. Le symbole
+d'égalité est donné par le paramètre \parameter{equalsymbol} (valeur
+par défaut \verb+{$=$}+), la largeur du trait par le paramètre
+\parameter{hrulewidth} (valeur par défaut \texttt{0.4pt}), sa position
+verticale par le paramètre \parameter{vruleperiod} (valeur par défaut
+\texttt{-0.2}) qui indique un décalage vertical en prenant
+\verb+\oplineheight+ comme unité et les points de suspension sont
+donnés par le paramètre \parameter{afterperiodsymbol} (valeur par
+défaut \verb+$\ldots$+).
\begin{SideBySideExample}
\opdiv[period,style=text,
equalsymbol=$\approx$,
@@ -923,14 +1039,14 @@ défaut \verb+$\ldots$+).
{150}{7}
\end{SideBySideExample}
-\subsection{Éléments supplémentaires}
+\subsection{Éléments supplémentaires}
\label{subsec:Elements supplementaires}
-Les divisions posées peuvent comporter les soustractions successives
+Les divisions posées peuvent comporter les soustractions successives
permettant le calcul des restes. Pour \package{xlop}, les nombres qui
-sont soustraits sont des nombres intermédiaires donc les différentes
-façons de représenter les soustractions utiliserons le paramètre
-\parameter{displayintermediary} déjà vu pour la multiplication. La
-valeur \texttt{none} (défaut) n'affichera aucune soustraction ainsi
+sont soustraits sont des nombres intermédiaires donc les différentes
+façons de représenter les soustractions utiliserons le paramètre
+\parameter{displayintermediary} déjà vu pour la multiplication. La
+valeur \texttt{none} (défaut) n'affichera aucune soustraction ainsi
que la valeur \texttt{None}, la valeur \texttt{all} affichera toutes
les soustractions et la valeur \texttt{nonzero} affichera les
soustractions avec un nombre non nul.
@@ -945,31 +1061,31 @@ soustractions avec un nombre non nul.
Lorsqu'on pose une division, on peut dessiner un \og pont \fg{}
au-dessus de la partie du dividende qui sera prise en compte pour la
-première étape du calcul. L'extension \package{xlop} permet d'afficher
-ce symbole grâce au paramètre booléen \parameter{dividendbridge}
-(valeur par défaut \texttt{false}).
+première étape du calcul. L'extension \package{xlop} permet d'afficher
+ce symbole grâce au paramètre booléen \parameter{dividendbridge}
+(valeur par défaut \texttt{false}).
\begin{SideBySideExample}
\opdiv[dividendbridge]{1254}{30}
\end{SideBySideExample}
-\subsection{Nombres non entiers et négatifs}
+\subsection{Nombres non entiers et négatifs}
\label{subsec:Nombres non entiers et negatifs}
-La présentation d'opérandes non entières est gérée par le paramètre
-\parameter{shiftdecimalsep}. Sa valeur par défaut est \texttt{both} et
-indique que le séparateur décimal sera décalé pour obtenir un diviseur
+La présentation d'opérandes non entières est gérée par le paramètre
+\parameter{shiftdecimalsep}. Sa valeur par défaut est \texttt{both} et
+indique que le séparateur décimal sera décalé pour obtenir un diviseur
et un dividende entiers. La valeur \texttt{divisor} indique qu'il y
-aura le décalage nécessaire pour obtenir un diviseur entier et la
-valeur \texttt{none} indique qu'il n'y aura aucun décalage.
+aura le décalage nécessaire pour obtenir un diviseur entier et la
+valeur \texttt{none} indique qu'il n'y aura aucun décalage.
\begin{CenterExample}[xrightmargin=0pt]
\opdiv[shiftdecimalsep=both]{3.456}{25.6}\quad
\opdiv[shiftdecimalsep=divisor]{3.456}{25.6}\quad
\opdiv[shiftdecimalsep=none]{3.456}{25.6}
\end{CenterExample}
-Un symbole indiqué par le paramètre \parameter{strikedecimalsepsymbol}
-est réservé pour montrer l'ancien emplacement de la virgule lorsqu'on
-effectue un décalage. La valeur par défaut de ce paramètre est vide ce
-qui fait que l'on ne voyait rien sur les exemples précédents.
+Un symbole indiqué par le paramètre \parameter{strikedecimalsepsymbol}
+est réservé pour montrer l'ancien emplacement de la virgule lorsqu'on
+effectue un décalage. La valeur par défaut de ce paramètre est vide ce
+qui fait que l'on ne voyait rien sur les exemples précédents.
\begin{CenterExample}[xrightmargin=0pt]
\opset{strikedecimalsepsymbol={\rlap{,}\rule[-1pt]{3pt}{0.4pt}}}
\opdiv[shiftdecimalsep=both]{3.456}{25.6}\quad
@@ -977,8 +1093,8 @@ qui fait que l'on ne voyait rien sur les exemples précédents.
\opdiv[shiftdecimalsep=none]{3.456}{25.6}
\end{CenterExample}
-La présence d'un symbole non vide pour le séparateur décimal barré
-peut laisser les zéros non significatifs au niveau des opérandes.
+La présence d'un symbole non vide pour le séparateur décimal barré
+peut laisser les zéros non significatifs au niveau des opérandes.
\begin{SideBySideExample}
\opdiv[shiftdecimalsep=divisor,
strikedecimalsepsymbol=%
@@ -986,23 +1102,23 @@ peut laisser les zéros non significatifs au niveau des opérandes.
{0.03456}{2.56}
\end{SideBySideExample}
-Comme nous l'avons déjà vu, la macro \macro{opidiv} donne un quotient
-entier, cela même si les opérandes sont non entières. Il est un peu
-bizarre de vouloir réaliser une division euclidienne sur des nombres
+Comme nous l'avons déjà vu, la macro \macro{opidiv} donne un quotient
+entier, cela même si les opérandes sont non entières. Il est un peu
+bizarre de vouloir réaliser une division euclidienne sur des nombres
non entiers et la macro \macro{opidiv} sera assez stricte sur sa
-présentation. Les paramètres \parameter{maxdivstep},
+présentation. Les paramètres \parameter{maxdivstep},
\parameter{safedivstep} et \parameter{period} seront sans effet ainsi
-que le paramètre \parameter{shiftdecimalsep}, les deux opérandes étant
-rendues entières.
+que le paramètre \parameter{shiftdecimalsep}, les deux opérandes étant
+rendues entières.
\begin{SideBySideExample}
\opidiv[strikedecimalsepsymbol=%
\hspace{-3pt}\tiny$\times$]
{34.57}{7}
\end{SideBySideExample}
-Lorsque les opérandes sont négatives, l'affichage en ligne de
-\macro{opidiv} différera des données obtenues avec l'affichage
-posée. Le reste sera nécessairement un nombre compris entre zéro
+Lorsque les opérandes sont négatives, l'affichage en ligne de
+\macro{opidiv} différera des données obtenues avec l'affichage
+posée. Le reste sera nécessairement un nombre compris entre zéro
(inclus) et la valeur absolue du diviseur (exclu).
\begin{SideBySideExample}
\opdiv[style=text]{124}{7}\par
@@ -1012,7 +1128,7 @@ posée. Le reste sera nécessairement un nombre compris entre zéro
\opidiv[style=text]{-124}{-7}
\end{SideBySideExample}
-Cette condition sur le reste reste valable même avec un diviseur non
+Cette condition sur le reste reste valable même avec un diviseur non
entier.
\begin{SideBySideExample}
\opidiv[style=text]{1.24}{0.7}\par
@@ -1023,16 +1139,16 @@ entier.
\chapter{Autres commandes}
\label{chap:Autres commandes}
-\section{Macros étoilées}
+\section{Macros étoilées}
\label{sec:Macros etoilees}
-Les cinq macros vues au chapitre précédent ont une version
-étoilée. Ces macros étoilées réalisent le calcul mais ne procèdent à
-aucun affichage, le résultat étant stocké dans une variable donnée en
+Les cinq macros vues au chapitre précédent ont une version
+étoilée. Ces macros étoilées réalisent le calcul mais ne procèdent à
+aucun affichage, le résultat étant stocké dans une variable donnée en
dernier argument.
-Comme ces commandes n'affichent rien, les paramètres ne seront pas
-acceptés pour les macros \macro{opadd*}, \macro{opsub*},
-\macro{opmul*} et \macro{opidiv*}. En revanche, les paramètres
+Comme ces commandes n'affichent rien, les paramètres ne seront pas
+acceptés pour les macros \macro{opadd*}, \macro{opsub*},
+\macro{opmul*} et \macro{opidiv*}. En revanche, les paramètres
\parameter{maxdivestep}, \parameter{safedivstep} et \parameter{period}
influencent les calculs et la macro \macro{opdiv*} acceptera donc un
argument optionnel pour pouvoir en tenir compte.
@@ -1042,7 +1158,7 @@ argument optionnel pour pouvoir en tenir compte.
\opadd[style=text]{a}{1}
\end{SideBySideExample}
Pour les macros \macro{opdiv} et \macro{opidiv}, il y aura deux
-arguments supplémentaires pour pouvoir recevoir le quotient et le
+arguments supplémentaires pour pouvoir recevoir le quotient et le
reste final.
\begin{SideBySideExample}
\opdiv*[maxdivstep=1]{-88}{16}{q}{r}%
@@ -1051,28 +1167,28 @@ reste final.
\opadd[style=text]{bq}{r}
\end{SideBySideExample}
-\section{Entrées-sorties}
+\section{Entrées-sorties}
\label{sec:Entree-sorties}
-La macro \macro{opcopy} recopie son premier argument dans son deuxième
-argument. Le premier argument est donc un nombre écrit sous forme
-décimale ou via une variable alors que le second sera considérée comme
+La macro \macro{opcopy} recopie son premier argument dans son deuxième
+argument. Le premier argument est donc un nombre écrit sous forme
+décimale ou via une variable alors que le second sera considérée comme
un nom de variable.
La macro \macro{opprint} affiche son argument. L'exemple qui suit
utilise le compteur \macro{time} qui indique le nombre de minutes
-écoulés depuis minuit.
+écoulés depuis minuit.
\begin{SideBySideExample}
\opidiv*{\the\time}{60}{h}{m}%
Il est \opprint{h}~heures et
\opprint{m}~minutes
\end{SideBySideExample}
-On verra à la section~\ref{sec:Comparaisons} comment améliorer cet
+On verra à la section~\ref{sec:Comparaisons} comment améliorer cet
affichage avec des tests.
-La macro \macro{opdisplay} affiche également un nombre mais en
-écrivant chaque chiffre dans une boîte de largeur donnée par
-\parameter{columnwidth} et de hauteur donnée par
-\parameter{lineheight}. Le style est spécifié par le premier argument
+La macro \macro{opdisplay} affiche également un nombre mais en
+écrivant chaque chiffre dans une boîte de largeur donnée par
+\parameter{columnwidth} et de hauteur donnée par
+\parameter{lineheight}. Le style est spécifié par le premier argument
et cette macro accepte un argument optionnel pour permettre de donner
un style particulier aux chiffres individuels.
\begin{SideBySideExample}
@@ -1082,12 +1198,12 @@ un style particulier aux chiffres individuels.
\end{SideBySideExample}
Les macros \macro{oplput} et \macro{oprput} permettent de placer un
-objet à un emplacement déterminé. La syntaxe de ces commandes ne
+objet à un emplacement déterminé. La syntaxe de ces commandes ne
suit pas celle des autres macros de \package{xlop} puisque
-l'emplacement est indiqué sous forme de coordonnées entre
-parenthèses. Les coordonnées utilisent \macro{opcolumnwidth} et
-\macro{oplineheight} comme unités ce qui permet à l'utilisateur de
-construire lui-même ses propres \og opérations \fg.
+l'emplacement est indiqué sous forme de coordonnées entre
+parenthèses. Les coordonnées utilisent \macro{opcolumnwidth} et
+\macro{oplineheight} comme unités ce qui permet à l'utilisateur de
+construire lui-même ses propres \og opérations \fg.
\begin{SideBySideExample}
\psset{xunit=\opcolumnwidth,
yunit=\oplineheight}%
@@ -1098,18 +1214,18 @@ construire lui-même ses propres \og opérations \fg.
$\bullet$
\end{SideBySideExample}
Sur l'exemple ci-dessus, on peut voir que ces deux macros ne modifient
-pas le point de référence. Elles prennent même la précaution d'inhiber
-l'espace automatique qui les suit pour qu'il ne soit pas nécessaire de
+pas le point de référence. Elles prennent même la précaution d'inhiber
+l'espace automatique qui les suit pour qu'il ne soit pas nécessaire de
mettre un \verb+%+ en fin de ligne.
-Les macros \macro{ophline} et \macro{opvline} complète les deux
-précédentes pour donner à l'utilisateur les outils lui permettant de
-construire ses propres opérations. La macro \macro{ophline} permet de
-placer un trait horizontal dont la longueur est donné par le paramètre
-qui suit les coordonnées. La macro \macro{opvline} fait de même avec
-les traits verticaux. On rappelle que les paramètres
+Les macros \macro{ophline} et \macro{opvline} complète les deux
+précédentes pour donner à l'utilisateur les outils lui permettant de
+construire ses propres opérations. La macro \macro{ophline} permet de
+placer un trait horizontal dont la longueur est donné par le paramètre
+qui suit les coordonnées. La macro \macro{opvline} fait de même avec
+les traits verticaux. On rappelle que les paramètres
\parameter{hrulewidth} et \parameter{vrulewidth} indiquent les
-épaisseurs respectives de ces types de traits.
+épaisseurs respectives de ces types de traits.
\begin{CenterExample}[xrightmargin=0pt]
\par\vspace{2\oplineheight}
\oplput(1,2){O}\oplput(2,2){N}\oplput(3,2){E}
@@ -1121,14 +1237,14 @@ les traits verticaux. On rappelle que les paramètres
La macro \macro{opexport}\refstepcounter{stuff}\label{macro-opexport}
permet d'exporter un nombre dans une macro. Il s'agit d'un ajout de la
-version 0.23 qui est très utile pour faire dialoguer \package{xlop}
-avec le monde extérieur. Le premier argument est un nombre au sens
-\package{xlop}, c'est-à-dire soit un nombre écrit directement avec des
-chiffres, soit un nom de variable. Le nombre sera écrit sous une forme
-directement compréhensible par \TeX{} dans le deuxième argument qui
-doit donc être un nom de macro. On notera cependant que le séparateur
-décimal sera celui désigné par \parameter{decimalsepsymbol} débarrassé
-de ses éventuelles accolades.
+version 0.23 qui est très utile pour faire dialoguer \package{xlop}
+avec le monde extérieur. Le premier argument est un nombre au sens
+\package{xlop}, c'est-à-dire soit un nombre écrit directement avec des
+chiffres, soit un nom de variable. Le nombre sera écrit sous une forme
+directement compréhensible par \TeX{} dans le deuxième argument qui
+doit donc être un nom de macro. On notera cependant que le séparateur
+décimal sera celui désigné par \parameter{decimalsepsymbol} débarrassé
+de ses éventuelles accolades.
\begin{SideBySideExample}
\opmul*{5}{3.141592654}{C}
\opexport{C}{\fivepi}
@@ -1136,18 +1252,18 @@ de ses éventuelles accolades.
\end{SideBySideExample}
On peut se servir de cette macro, par exemple, pour afficher des
-nombres calculés par \package{xlop} dans un tableau avec un alignement
-décimal ou encore pour initialiser un compteur ou une longueur (ne pas
-oublier l'unité dans ce dernier cas).
+nombres calculés par \package{xlop} dans un tableau avec un alignement
+décimal ou encore pour initialiser un compteur ou une longueur (ne pas
+oublier l'unité dans ce dernier cas).
\section{Chiffres d'un nombre}
\label{sec:Chiffres d'un nombre}
Les macros \macro{opwidth}, \macro{opintegerwidth} et
\macro{opdecimalwidth} indiquent respectivement le nombre de chiffres
-du nombre dans sa totalité, de sa partie entière et de sa partie
-décimale. Le premier argument est le nombre sur lequel s'effectue le
-comptage et le second argument indique la variable où sera stocké le
-résultat.
+du nombre dans sa totalité, de sa partie entière et de sa partie
+décimale. Le premier argument est le nombre sur lequel s'effectue le
+comptage et le second argument indique la variable où sera stocké le
+résultat.
\begin{SideBySideExample}
\opcopy{123456.1234}{a}%
\opwidth{a}{na}%
@@ -1159,9 +1275,9 @@ résultat.
d\'ecimale).
\end{SideBySideExample}
-La macro \macro{opunzero} permet de supprimer les zéros non
-significatifs\index{zeros non significatifs@zéros non significatifs}
-du nombre passé en argument.
+La macro \macro{opunzero} permet de supprimer les zéros non
+significatifs\index{zeros non significatifs@zéros non significatifs}
+du nombre passé en argument.
\begin{SideBySideExample}
\opcopy{00150.00250}{a}%
Avant : \opprint{a}\par
@@ -1170,11 +1286,11 @@ du nombre passé en argument.
\end{SideBySideExample}
Les macros \macro{integer} et \macro{opdecimal} donnent respectivement
-la partie entière et la partie décimale d'un nombre.
-\index{nombre!partie entière}\index{partie entière}%
-\index{nombre!partie décimale}\index{partie décimale}%
-Le premier argument est le nombre à traiter et le second est la
-variable qui contiendra le résultat.
+la partie entière et la partie décimale d'un nombre.
+\index{nombre!partie entière}\index{partie entière}%
+\index{nombre!partie décimale}\index{partie décimale}%
+Le premier argument est le nombre à traiter et le second est la
+variable qui contiendra le résultat.
\begin{SideBySideExample}
\opcopy{-37.69911}{a}%
\opinteger{a}{ia}%
@@ -1183,14 +1299,14 @@ variable qui contiendra le résultat.
Partie d\'ecimale : \opprint{da}
\end{SideBySideExample}
-Six macros servent à écrire ou lire un chiffre d'un nombre. On peut
-lire ou écrire un chiffre selon son rang dans le nombre, dans sa
-partie entière ou dans sa partie décimale. Les chiffres pour le nombre
-dans sa totalité ou pour sa partie entière sont numérotés de droite à
-gauche et, pour sa partie décimale de gauche à droite. Ainsi, avec le
-nombre 1234,56789, le deuxième chiffre est 8, le deuxième chiffre de
-sa partie entière est 3 et le deuxième chiffre de sa partie décimale
-est 6. Il est alors facile de deviner le rôle respectif des six macros
+Six macros servent à écrire ou lire un chiffre d'un nombre. On peut
+lire ou écrire un chiffre selon son rang dans le nombre, dans sa
+partie entière ou dans sa partie décimale. Les chiffres pour le nombre
+dans sa totalité ou pour sa partie entière sont numérotés de droite à
+gauche et, pour sa partie décimale de gauche à droite. Ainsi, avec le
+nombre 1234,56789, le deuxième chiffre est 8, le deuxième chiffre de
+sa partie entière est 3 et le deuxième chiffre de sa partie décimale
+est 6. Il est alors facile de deviner le rôle respectif des six macros
:
\begin{itemize}
\item \parameter{opgetdigit} ;
@@ -1200,39 +1316,39 @@ est 6. Il est alors facile de deviner le rôle respectif des six macros
\item \parameter{opgetdecimaldigit} ;
\item \parameter{opsetdecimaldigit} ;
\end{itemize}
-La syntaxe est la même pour ces six macros. Le premier argument est le
-nombre sur lequel doit porter la lecture ou l'écriture, le deuxième
-argument est l'index donnant la position du chiffre et le troisième
+La syntaxe est la même pour ces six macros. Le premier argument est le
+nombre sur lequel doit porter la lecture ou l'écriture, le deuxième
+argument est l'index donnant la position du chiffre et le troisième
argument est le nom de la variable qui contiendra le chiffre lu ou
-bien ce qui devra être écrit. Si l'index est en dehors du nombre, les
-macros de lecture donneront \texttt{0} comme résultat et les macros
-d'écriture étendront le nombre pour pouvoir atteindre cet index en
-créant des zéros dans les nouvelles positions.
+bien le chiffre qui devra être écrit. Si l'index est en dehors du
+nombre, les macros de lecture donneront \texttt{0} comme résultat et
+les macros d'écriture étendront le nombre pour pouvoir atteindre cet
+index en créant des zéros dans les nouvelles positions.
\section{Comparaisons}
\label{sec:Comparaisons}
-Lorsqu'on désire concevoir des macros évoluées, il est très souvent
-utile de pouvoir réaliser des tests. Pour cela, \package{xlop} met à
+Lorsqu'on désire concevoir des macros évoluées, il est très souvent
+utile de pouvoir réaliser des tests. Pour cela, \package{xlop} met à
disposition la macro \macro{opcmp} dont les deux arguments sont des
-nombres et qui mettra à jour les tests \macro{ifopgt}, \macro{ifopge},
+nombres et qui mettra à jour les tests \macro{ifopgt}, \macro{ifopge},
\macro{ifople}, \macro{ifoplt}, \macro{ifopeq} et \macro{ifopneq} pour
-respectivement indiquer que la première opérande est strictement
-supérieure, supérieure, inférieure, strictement inférieure, égale ou
-différente de la seconde opérande.
-
-Pour des raisons techniques, \package{xlop} donne des définitions
-globales aux six tests précédents. Ceux-ci ne seront donc pas protégés
-par les groupes. Comme ces tests sont utilisés par un grand nombre de
-macros de \package{xlop}, une conséquence pratique est qu'il faut
-\emph{toujours} réaliser les tests \verb+\ifop...+ immédiatement
-après le \macro{opcmp}, ou, du moins, avant toute autre utilisation de
-macros de \package{xlop} sous peine de bogues éventuels difficiles à
+respectivement indiquer que la première opérande est strictement
+supérieure, supérieure, inférieure, strictement inférieure, égale ou
+différente de la seconde opérande.
+
+Pour des raisons techniques, \package{xlop} donne des définitions
+globales aux six tests précédents. Ceux-ci ne seront donc pas protégés
+par les groupes. Comme ces tests sont utilisés par un grand nombre de
+macros de \package{xlop}, une conséquence pratique est qu'il faut
+\emph{toujours} réaliser les tests \verb+\ifop...+ immédiatement
+après le \macro{opcmp}, ou, du moins, avant toute autre utilisation de
+macros de \package{xlop} sous peine de bogues éventuels difficiles à
comprendre !
-On va reprendre la macro d'affichage de l'heure donnée à la
-section~\ref{sec:Entree-sorties} mais en vérifiant si l'argument est
-compris entre~0 (inclus) et~1440 (exclu) puis en réalisant les tests
-nécessaires pour voir si \og heure \fg{} doit être ou non au pluriel
+On va reprendre la macro d'affichage de l'heure donnée à la
+section~\ref{sec:Entree-sorties} mais en vérifiant si l'argument est
+compris entre~0 (inclus) et~1440 (exclu) puis en réalisant les tests
+nécessaires pour voir si \og heure \fg{} doit être ou non au pluriel
ainsi que \og minute \fg{}.
\begin{CenterExample}[xrightmargin=0pt]
@@ -1255,30 +1371,30 @@ ainsi que \og minute \fg{}.
\heure{60} -- \heure{1080} -- \heure{1081} -- \heure{1082}
\end{CenterExample}
-\section{Opérations évoluées}
+\section{Opérations évoluées}
\label{sec:Operations evoluees}
-Les macros qui nous restent à voir proviennent soit de commandes
-utilisées de façon interne et qu'il aurait été dommage de ne pas
+Les macros qui nous restent à voir proviennent soit de commandes
+utilisées de façon interne et qu'il aurait été dommage de ne pas
rendre publiques, soit de demandes d'utilisateurs.
-Les macros utilisées de façon interne sont \macro{opgcd}\index{pgcd}
+Les macros utilisées de façon interne sont \macro{opgcd}\index{pgcd}
qui donne le pgcd de deux nombres et
-\macro{opdivperiod}\index{division!période} qui donne la longueur de
-la période d'un quotient de deux nombres. Pour des raisons
-d'efficacité, ces macros n'utilisent pas les nombres de \package{xlop}
-mais des nombres directement accessibles à \TeX{}. Cela a pour
-conséquence que les nombres passés en paramètres dans les deux
-premiers arguments ne devront pas dépasser la valeur
+\macro{opdivperiod}\index{division!période} qui donne la longueur de
+la période d'un quotient de deux nombres. Pour des raisons
+d'efficacité, ces macros n'utilisent pas les nombres de \package{xlop}
+mais des nombres directement accessibles à \TeX{}. Cela a pour
+conséquence que les nombres passés en paramètres dans les deux
+premiers arguments ne devront pas dépasser la valeur
\texttt{2147483647} pour \macro{opgcd} et \texttt{214748364} pour
-\macro{opdivperiod}. Un message d'avertissement rappellera à l'ordre
-en cas de dépassement. Le résultat sera stocké dans la variable
-indiqué en troisième paramètre.
+\macro{opdivperiod}. Un message d'avertissement rappellera à l'ordre
+en cas de dépassement. Le résultat sera stocké dans la variable
+indiqué en troisième paramètre.
-Il y aura également quelques vérifications sur les deux premiers
-paramètres. Un pgcd ne peut pas avoir d'argument nul et le calcul de
-la longueur d'une période ne pourra pas se faire avec un quotient
-nul. D'autre part, si un nombre non entier est passé en paramètre,
-seule la partie entière sera prise en compte.
+Il y aura également quelques vérifications sur les deux premiers
+paramètres. Un pgcd ne peut pas avoir d'argument nul et le calcul de
+la longueur d'une période ne pourra pas se faire avec un quotient
+nul. D'autre part, si un nombre non entier est passé en paramètre,
+seule la partie entière sera prise en compte.
\begin{SideBySideExample}
\opcopy{5376}{a}%
\opcopy{2304}{b}%
@@ -1288,8 +1404,8 @@ seule la partie entière sera prise en compte.
$\pgcd(\opprint{a},\opprint{b}) =
\opprint{gcd(ab)}$
\end{SideBySideExample}
-Si vous voulez vous amuser à trouver de grandes périodes de divisions,
-sans entrer dans les détails mathématiques, les carrés de nombres
+Si vous voulez vous amuser à trouver de grandes périodes de divisions,
+sans entrer dans les détails mathématiques, les carrés de nombres
premiers sont de bons candidats. Par exemple, avec $257^2=66049$ on
trouve :
\begin{SideBySideExample}
@@ -1301,13 +1417,13 @@ trouve :
Les macros \macro{opcastingoutnines}\index{preuve!par neuf} et
\macro{opcastingoutelevens}\index{preuve!par onze} vont permettre de
composer des preuves par neuf et par onze. L'extension \package{xlop}
-ne propose pas directement ces compositions puisqu'elles nécessitent
-des traits en diagonal et donc le recours à d'autres extensions. En
-réalité, la macro \macro{opcastingoutnines} va faire la somme modulo~9
-des chiffres du premier argument et stockera le résultat dans le
+ne propose pas directement ces compositions puisqu'elles nécessitent
+des traits en diagonal et donc le recours à d'autres extensions. En
+réalité, la macro \macro{opcastingoutnines} va faire la somme modulo~9
+des chiffres du premier argument et stockera le résultat dans le
second argument tandis que la macro \macro{opcastingoutelevens} fera
la somme des chiffres de rangs impairs, la somme des chiffres de rangs
-pairs puis la différence modulo~11 de ces deux sommes.
+pairs puis la différence modulo~11 de ces deux sommes.
\begin{SideBySideExample}
\newcommand\castingoutnines[3]{%
\opcastingoutnines{#1}{cna}%
@@ -1328,28 +1444,28 @@ pairs puis la différence modulo~11 de ces deux sommes.
\castingoutnines{157}{317}{49669}
\end{SideBySideExample}
Incidemment, cet exemple montre que $157\times317\neq49669$ ! La
-réponse correcte est \opmul[style=text]{157}{317}.
-
-Les deux macros suivantes sont très simples. Il s'agit de
-\macro{opneg} qui calcul l'opposé de son premier argument et le
-sauvegarde dans la variable indiquée par le second argument et de
-\macro{opabs} qui réalise la même chose mais avec la valeur absolue.
-
-La macro \macro{oppower} calcule des puissances entières. Cette macro
-demande trois paramètres, le troisième paramètre étant la variable
-recevant le résultat du premier paramètre à la puissance le deuxième
-paramètre. Le deuxième paramètre doit être un nombre entier. Lorsque
-le premier argument est nul, si le deuxième paramètre est nul, le
-résultat sera~1, s'il est strictement positif, le résultat sera nul et
-s'il est strictement négatif il y aura une erreur et aucun résultat ne
-sera fourni. Il n'y a aucune limitation sur le premier paramètre ce
-qui peut entraîner quelques problèmes. Par exemple :
+réponse correcte est \opmul[style=text]{157}{317}.
+
+Les deux macros suivantes sont très simples. Il s'agit de
+\macro{opneg} qui calcul l'opposé de son premier argument et le
+sauvegarde dans la variable indiquée par le second argument et de
+\macro{opabs} qui réalise la même chose mais avec la valeur absolue.
+
+La macro \macro{oppower} calcule des puissances entières. Cette macro
+demande trois paramètres, le troisième paramètre étant la variable
+recevant le résultat du premier paramètre à la puissance le deuxième
+paramètre. Le deuxième paramètre doit être un nombre entier. Lorsque
+le premier argument est nul, si le deuxième paramètre est nul, le
+résultat sera~1, s'il est strictement positif, le résultat sera nul et
+s'il est strictement négatif il y aura une erreur et aucun résultat ne
+sera fourni. Il n'y a aucune limitation sur le premier paramètre ce
+qui peut entraîner quelques problèmes. Par exemple :
\begin{CenterExample}[xrightmargin=0pt]
\opcopy{0.8}{a}\opcopy{-17}{n}%
\oppower{a}{n}{r}%
$\opprint{a}^{\opprint{n}} = \opprint{r}$
\end{CenterExample}
-Avec $0{,}7$ au lieu de $0{,}8$, le problème aurait été encore pire :
+Avec $0{,}7$ au lieu de $0{,}8$, le problème aurait été encore pire :
\begin{CenterExample}[xrightmargin=0pt]
\opcopy{0.7}{a}\opcopy{-8}{n}%
\oppower{a}{n}{r}%
@@ -1357,30 +1473,30 @@ Avec $0{,}7$ au lieu de $0{,}8$, le problème aurait été encore pire :
$\opprint{a}^{\opprint{n}}$ a \opprint{dr} chiffres apr\`es la
virgule.
\end{CenterExample}
-Cela est dû au fait que lorsque l'exposant est négatif,
+Cela est dû au fait que lorsque l'exposant est négatif,
\package{xlop} calcule \emph{d'abord} l'inverse du nombre pour
-\emph{ensuite} calculer la puissance avec l'opposé de l'exposant. Si
-on avait laissé $-17$ au lieu de $-8$ dans l'exemple précédent, les
-capacités de \TeX{} auraient été dépassées.
-
-Les trois macros qui suivent permettent de contrôler la précision des
-nombres manipulés. Elles permettent de construire un nombre en donnant
-une valeur approchée par défaut, par excès ou un arrondi d'un nombre
-donné en précisant le rang où devra se faire l'arrondi. Ces macros
+\emph{ensuite} calculer la puissance avec l'opposé de l'exposant. Si
+on avait laissé $-17$ au lieu de $-8$ dans l'exemple précédent, les
+capacités de \TeX{} auraient été dépassées.
+
+Les trois macros qui suivent permettent de contrôler la précision des
+nombres manipulés. Elles permettent de construire un nombre en donnant
+une valeur approchée par défaut, par excès ou un arrondi d'un nombre
+donné en précisant le rang où devra se faire l'arrondi. Ces macros
sont respectivement \macro{opfloor}, \macro{opceil} et
-\macro{opround}. Elles demandent trois paramètres qui seront dans
-l'ordre le nombre de départ, le rang de l'arrondi et le nom de la
-variable qui contiendra le résultat.
-
-Le rang est indiqué par une valeur entière donnant le nombre de
-chiffres après la virgule qui doivent être présents. Si le rang est
-négatif, l'arrondi se fera avant la virgule. Si le rang positif
-indique plus de chiffres que la partie décimale n'en a, des zéros
-seront ajoutés. Si le rang négatif indique plus de chiffres que la
-partie entière n'en a, l'arrondi restera bloqué pour donner au moins
+\macro{opround}. Elles demandent trois paramètres qui seront dans
+l'ordre le nombre de départ, le rang de l'arrondi et le nom de la
+variable qui contiendra le résultat.
+
+Le rang est indiqué par une valeur entière donnant le nombre de
+chiffres après la virgule qui doivent être présents. Si le rang est
+négatif, l'arrondi se fera avant la virgule. Si le rang positif
+indique plus de chiffres que la partie décimale n'en a, des zéros
+seront ajoutés. Si le rang négatif indique plus de chiffres que la
+partie entière n'en a, l'arrondi restera bloqué pour donner au moins
le premier chiffre du nombre.
-Voici un tableau récapitulatif pour mieux comprendre le fonctionnement
+Voici un tableau récapitulatif pour mieux comprendre le fonctionnement
de ces trois macros.
\begin{center}
\opcopy{3838.3838}{a}
@@ -1461,67 +1577,67 @@ de ces trois macros.
\end{tabular}
\end{center}
-\index{racine carrée}
-Avec la version~0.26, \package{xlop} propose l'opération de racine
-carrée \macro{opsqrt}. Cette macro n'a pas la même syntaxe que les
-autres macros arithmétiques puisqu'il n'y a pas de forme étoilée. En
-réalité, il y a bien une façon d'afficher l'opération d'extraction de
-racine carrée mais elle n'est pas franchement courante. Je suis
-relativement âgé et mon grand-père me racontait qu'il l'avait vue
-lorsqu'il était à l'école. Ainsi, il y a une macro \macro{opgfsqrt} où
-le \og gf \fg{} est pour \og grandfather \fg{} (grand-père).
+\index{racine carrée}
+Avec la version~0.26, \package{xlop} propose l'opération de racine
+carrée \macro{opsqrt}. Cette macro n'a pas la même syntaxe que les
+autres macros arithmétiques puisqu'il n'y a pas de forme étoilée. En
+réalité, il y a bien une façon d'afficher l'opération d'extraction de
+racine carrée mais elle n'est pas franchement courante. Je suis
+relativement âgé et mon grand-père me racontait qu'il l'avait vue
+lorsqu'il était à l'école. Ainsi, il y a une macro \macro{opgfsqrt} où
+le \og gf \fg{} est pour \og grandfather \fg{} (grand-père).
-Voyons la première macro : celle qui calcule la racine carrée et qui
-stocke le résultat dans une variable \package{xlop}:
+Voyons la première macro : celle qui calcule la racine carrée et qui
+stocke le résultat dans une variable \package{xlop}:
\begin{SideBySideExample}
\opsqrt{2}{sqrt2}
$\sqrt{2}\approx\opprint{sqrt2}$
\end{SideBySideExample}
-Cette macro partage le paramètre \parameter{maxdivstep} avec les
+Cette macro partage le paramètre \parameter{maxdivstep} avec les
macros de division. Par exemple:
\begin{SideBySideExample}
\opsqrt[maxdivstep=15]{2}{sqrt2}
$\sqrt{2}\approx\opprint{sqrt2}$
\end{SideBySideExample}
-Pour la présentation à la \og grand-père \fg{}, je n'ai vraiment pas
-le courage d'expliquer tout le processus. Il se base sur l'eidentioté
-remarquable $(a+b)^2=a^2+2ab+b^2$. Merci à Jean-Michel Sarlat d'avoir
-pris le temps de m'expliquer cette méthode afin que je puisse la coder
+Pour la présentation à la \og grand-père \fg{}, je n'ai vraiment pas
+le courage d'expliquer tout le processus. Il se base sur l'eidentioté
+remarquable $(a+b)^2=a^2+2ab+b^2$. Merci à Jean-Michel Sarlat d'avoir
+pris le temps de m'expliquer cette méthode afin que je puisse la coder
dans \package{xlop}.
-Voici un exemple avec le calcul de la racine carrée de 15 :
+Voici un exemple avec le calcul de la racine carrée de 15 :
\begin{CenterExample}
\opgfsqrt[maxdivstep=5]{15}
\end{CenterExample}
-Cette méthode est horrible, autant pour un humain que pour
-l'ordinateur. Par exemple, l'opération réellement effectuée par
-\package{xlop} se fonde sur la méthode de Héron.
+Cette méthode est horrible, autant pour un humain que pour
+l'ordinateur. Par exemple, l'opération réellement effectuée par
+\package{xlop} se fonde sur la méthode de Héron.
\index{expression complexe|(}
-La dernière macro qui nous reste à voir est \macro{opexpr} qui permet
-de réaliser le calcul d'une expression complexe. Cette macro demande
-deux paramètres : le premier est l'expression à calculer donnée sous
+La dernière macro qui nous reste à voir est \macro{opexpr} qui permet
+de réaliser le calcul d'une expression complexe. Cette macro demande
+deux paramètres : le premier est l'expression à calculer donnée sous
forme infixe (la forme habituelle pour un humain) et le second est le
-nom de la variable qui contiendra le résultat.
+nom de la variable qui contiendra le résultat.
-Initialement, la formule devait être donnée sous forme polonaise
+Initialement, la formule devait être donnée sous forme polonaise
inverse (la notation des calculatrices HP ou du langage PostScript par
exemple) mais un travail commun avec Christophe Jorssen a finalement
-abouti à la possibilité de donner l'expression sous une forme plus
-agréable pour l'utilisateur.
+abouti à la possibilité de donner l'expression sous une forme plus
+agréable pour l'utilisateur.
-Les formules acceptent les opérateurs arithmétiques habituels
-\texttt{+}, \texttt{-}, \texttt{*} et \texttt{/} ainsi que l'opérateur
+Les formules acceptent les opérateurs arithmétiques habituels
+\texttt{+}, \texttt{-}, \texttt{*} et \texttt{/} ainsi que l'opérateur
\texttt{:} pour la division euclidienne et \verb+^+ pour
-l'exponentiation. L'opérateur \texttt{-} a les deux rôles d'opérateur
-binaire de la soustraction et d'opérateur unaire pour l'opposé.
-L'opérateur \texttt{+} a également les deux rôles d'opérateur binaire
-de l'addition et d'opérateur unaire ne faisant \ldots{} rien ! Les
-opérandes sont écrites sous forme décimale ou par l'intermédiaire de
+l'exponentiation. L'opérateur \texttt{-} a les deux rôles d'opérateur
+binaire de la soustraction et d'opérateur unaire pour l'opposé.
+L'opérateur \texttt{+} a également les deux rôles d'opérateur binaire
+de l'addition et d'opérateur unaire ne faisant \ldots{} rien ! Les
+opérandes sont écrites sous forme décimale ou par l'intermédiaire de
nom de variable cependant, la macro \macro{opexpr} va introduire une
petite restriction sur les noms de variables puisque ceux-ci devront
-être différents des noms de fonctions reconnus par cette macro. Les
+être différents des noms de fonctions reconnus par cette macro. Les
fonctions accessibles sont :
\begin{itemize}
\item \texttt{abs(a)} ;
@@ -1530,23 +1646,23 @@ fonctions accessibles sont :
\item \texttt{floor(a,i)} ;
\item \texttt{gcd(a,b)} ;
\item \texttt{integer(a)} ;
-\item \texttt{mod(a,b)} qui donne le résultat de \texttt{a} modulo
+\item \texttt{mod(a,b)} qui donne le résultat de \texttt{a} modulo
\texttt{b} ;
\item \texttt{rest(a,b)} qui donne le reste de la division de
- \texttt{a} par \texttt{b} (la différence entre reste et modulo est
- la différence qui existe entre division non euclidienne et division
+ \texttt{a} par \texttt{b} (la différence entre reste et modulo est
+ la différence qui existe entre division non euclidienne et division
euclidienne) ;
\item \texttt{round(a,i)}.
\end{itemize}
-où les fonctions non décrites ci-dessus font appel aux macros
-correspondantes (la fonction \texttt{xxx} faisant appel à la macro
+où les fonctions non décrites ci-dessus font appel aux macros
+correspondantes (la fonction \texttt{xxx} faisant appel à la macro
\verb+\opxxx+). Pour les fonctions \texttt{ceil}, \texttt{floor} et
\texttt{round}, le nombre \texttt{i} indique le rang sur lequel doit
se faire l'arrondi.
La macro \macro{opexpr} accepte un argument optionnel car elle peut
-réaliser des divisions et que ces divisions doivent pouvoir être
-contrôlées \emph{via} les paramètres \parameter{maxdivstep},
+réaliser des divisions et que ces divisions doivent pouvoir être
+contrôlées \emph{via} les paramètres \parameter{maxdivstep},
\parameter{safedivstep} et \parameter{period}.
Notre premier exemple est assez basique :
\begin{CenterExample}[xrightmargin=0pt]
@@ -1554,7 +1670,7 @@ Notre premier exemple est assez basique :
$3--\gcd(15\times17,25\times27)\times2 = \opprint{r}$
\end{CenterExample}
-Voici un autre exemple montrant que des données peuvent provenir d'une
+Voici un autre exemple montrant que des données peuvent provenir d'une
macro :
\begin{CenterExample}[xrightmargin=0pt]
\newcommand\try{2}%
@@ -1569,41 +1685,41 @@ macro :
\index{expression complexe|)}
\appendix
-\chapter{Aide-mémoire}
-\label{chap:Aide-mémoire}
+\chapter{Aide-mémoire}
+\label{chap:Aide-mémoire}
\section{Temps de compilation}
\label{sec:Temps de compilation}
-Les temps de compilation ont été mesurés sur une machine à processeur
+Les temps de compilation ont été mesurés sur une machine à processeur
Pentium~II~600\,MHz ayant 256\,Mo de RAM et tournant sous Linux
-(Debian woody)\footnote{En réalité, ces mesures ont été effectuées en
- 2004 lors de la sortie de la version 0.2. L'auteur étant fainéant,
- il n'a pas repris ces tests avec son matériel actuel (bien plus
- performant) !}. Le principe a été de faire un fichier TeX{} minimum
-dont le schéma général est donné par :
+(Debian woody)\footnote{En réalité, ces mesures ont été effectuées en
+ 2004 lors de la sortie de la version 0.2. L'auteur étant fainéant,
+ il n'a pas repris ces tests avec son matériel actuel (bien plus
+ performant) !}. Le principe a été de faire un fichier TeX{} minimum
+dont le schéma général est donné par :
\begin{verbatim}
\input xlop
\count255=0
\loop
\ifnum\count255<1000
- <opération à tester>
+ <opération à tester>
\advance\count255 by1
\repeat
\bye
\end{verbatim}
-Le temps de compilation avec \verb+<opération à tester>+ vide a été
-soustrait des autres tests et seul le temps utilisateur a été pris en
-compte. Les résultats sont donnés en millisecondes et sont évidemment
-à prendre avec beaucoup de précautions.
+Le temps de compilation avec \verb+<opération à tester>+ vide a été
+soustrait des autres tests et seul le temps utilisateur a été pris en
+compte. Les résultats sont donnés en millisecondes et sont évidemment
+à prendre avec beaucoup de précautions.
\index{compilation (temps de)|(}\index{temps de calcul|(}%
-Le tableau suivant donne le temps de compilation des opérations en
-millisecondes. Les opérandes utilisées l'ont été avec une écriture
-sous forme de chiffres mais des essais avec des opérandes sous forme
-de noms de variable ont montré que les différences étaient vraiment
+Le tableau suivant donne le temps de compilation des opérations en
+millisecondes. Les opérandes utilisées l'ont été avec une écriture
+sous forme de chiffres mais des essais avec des opérandes sous forme
+de noms de variable ont montré que les différences étaient vraiment
minimes.
-La première ligne indique le nombre de chiffres des deux
-opérandes. Ces nombres ont été construits de la façons suivantes :
+La première ligne indique le nombre de chiffres des deux
+opérandes. Ces nombres ont été construits de la façons suivantes :
\begin{itemize}
\item $\mathrm{A} = 1$ et $\mathrm{B} = 9$ pour un chiffre ;
\item $\mathrm{A} = 12$ et $\mathrm{B} = 98$ pour deux chiffres ;
@@ -1614,7 +1730,7 @@ opérandes. Ces nombres ont été construits de la façons suivantes :
\item $\mathrm{A} = 12345678901234567890$ et $\mathrm{B} =
98765432109876543210$ pour vingt chiffres ;
\end{itemize}
-Voici les résultats, quelques commentaires suivront :
+Voici les résultats, quelques commentaires suivront :
\bigskip\noindent\hbox to\linewidth{\hss
\begin{tabular}{|r|*{6}{l|}}
@@ -1656,38 +1772,38 @@ Voici les résultats, quelques commentaires suivront :
\hss
}
\par\bigskip
-Il est normal que l'inversion des opérandes n'ait aucune influence
+Il est normal que l'inversion des opérandes n'ait aucune influence
pour l'addition. Il peut alors sembler anormal qu'elle en ait une pour
-la soustraction mais en fait, avoir une seconde opérande supérieure à
-la première va entraîner quelques instructions supplémentaires (double
-inversion, gestion plus longue du signe du résultat).
+la soustraction mais en fait, avoir une seconde opérande supérieure à
+la première va entraîner quelques instructions supplémentaires (double
+inversion, gestion plus longue du signe du résultat).
-Il est normal que le temps de la division soit supérieur à celui de la
+Il est normal que le temps de la division soit supérieur à celui de la
multiplication. Il peut alors sembler anormal que la division ait
l'air de \og rattraper \fg{} son retard. En fait, une multiplication
-voit sa complexité fortement augmenter avec la taille des opérandes
-mais la division normale est bloquée par le paramètre
-\parameter{maxdivstep}. On le voit bien sur l'exemple où on limite ce
-maximum à 5~étapes.
-
-Quelques résultats semblent bizarres. Ainsi,
-\verb+\opdiv*{9}{1}{q}{r}+ est anormalement rapide : cela est dû
-au fait d'avoir un quotient à un seul chiffre. Plus bizarre encore,
-\verb+\opdiv*{123}{987}{q}{r}+ est plutôt rapide. Ici,
-l'explication est plus subtile : cela est dû à la présence de nombreux
-zéros au quotient.
-
-Avec des opérandes de taille comparable, la division euclidienne est
-très rapide par rapport à la division non euclidienne. Cela est dû au
+voit sa complexité fortement augmenter avec la taille des opérandes
+mais la division normale est bloquée par le paramètre
+\parameter{maxdivstep}. On le voit bien sur l'exemple où on limite ce
+maximum à 5~étapes.
+
+Quelques résultats semblent bizarres. Ainsi,
+\verb+\opdiv*{9}{1}{q}{r}+ est anormalement rapide : cela est dû
+au fait d'avoir un quotient à un seul chiffre. Plus bizarre encore,
+\verb+\opdiv*{123}{987}{q}{r}+ est plutôt rapide. Ici,
+l'explication est plus subtile : cela est dû à la présence de nombreux
+zéros au quotient.
+
+Avec des opérandes de taille comparable, la division euclidienne est
+très rapide par rapport à la division non euclidienne. Cela est dû au
fait que le quotient n'aura que peu de chiffres (un seul avec tous les
-nombres \texttt{A} et \texttt{B}). La dernière ligne du tableau est
-plus représentative des temps de compilation que l'on peut obtenir
-avec cette opération.
-
-Toutes ces remarques sont faites pour bien insister sur la difficulté
-à évaluer un temps de compilation a priori : il dépend de trop de
-paramètres. Cela dit, le tableau permet d'avoir quand même une idée de
-ce à quoi il faut s'attendre.
+nombres \texttt{A} et \texttt{B}). La dernière ligne du tableau est
+plus représentative des temps de compilation que l'on peut obtenir
+avec cette opération.
+
+Toutes ces remarques sont faites pour bien insister sur la difficulté
+à évaluer un temps de compilation a priori : il dépend de trop de
+paramètres. Cela dit, le tableau permet d'avoir quand même une idée de
+ce à quoi il faut s'attendre.
\index{compilation (temps de)|)}\index{temps de calcul|)}
\clearpage
@@ -1704,390 +1820,407 @@ ce à quoi il faut s'attendre.
\multicolumn{1}{c|}{\textbf{Description}} \\\hline\hline
\endhead
\hline
- \multicolumn{2}{|c|}{$\ldots$ à suivre $\ldots$}\\
+ \multicolumn{2}{|c|}{$\ldots$ à suivre $\ldots$}\\
\hline
\endfoot
\hline
\endlastfoot
\verb+\opabs{n}{N}+ &
- \verb+N+ reçoit la valeur absolue de \verb+n+. \\\hline
+ \verb+N+ reçoit la valeur absolue de \verb+n+. \\\hline
\verb+\opadd[P]{n1}{n2}+ &
- Affiche le résultat de l'opération \verb-n1+n2-. \\\hline
+ Affiche le résultat de l'opération \verb-n1+n2-. \\\hline
\verb+\opadd*{n1}{n2}{N}+ &
- Calcule \verb-n1+n2- et place le résultat dans
+ Calcule \verb-n1+n2- et place le résultat dans
\verb+N+. \\\hline
\verb+\opcastingoutelevens{n}{N}+ &
- Calcule la différence (modulo 11) de la somme des chiffres de rang
+ Calcule la différence (modulo 11) de la somme des chiffres de rang
impair et de la somme des chiffres de rang pair de \verb+n+ et
- place le résultat dans \verb+N+. \\\hline
+ place le résultat dans \verb+N+. \\\hline
\verb+\opcastingoutnines{n}{N}+. &
Calcule la somme modulo 9 des chiffres de \verb+n+ et place le
- résultat dans \verb+N+. \\\hline
+ résultat dans \verb+N+. \\\hline
\verb+\opceil{n}{T}{N}+ &
- Place dans \verb+N+ la valeur approchée par excès de
+ Place dans \verb+N+ la valeur approchée par excès de
\verb+n+ au rang \verb+T+. \\\hline
\verb+\opcmp{n1}{n2}+ &
- Compare les nombres \verb+n1+ et \verb+n2+ et réalise la
- mise à jour correspondante des tests \verb+\ifopeq+,
+ Compare les nombres \verb+n1+ et \verb+n2+ et réalise la
+ mise à jour correspondante des tests \verb+\ifopeq+,
\verb+\ifopneq+, \verb+\ifopgt+, \verb+\ifopge+,
\verb+\ifople+ et \verb+\ifoplt+. \\\hline
\verb+\opcopy{n}{N}+ &
Copie le nombre \verb+n+ dans \verb+N+. \\\hline
\verb+\opdecimal{n}{N}+ &
- Copie la partie décimale (nombre entier positif) de \verb+n+
+ Copie la partie décimale (nombre entier positif) de \verb+n+
dans \verb+N+. \\\hline
\verb+\opdecimalwidth{n}{N}+ &
- Le nombre \verb+N+ reçoit la largeur de la partie décimale du
+ Le nombre \verb+N+ reçoit la largeur de la partie décimale du
nombre \verb+n+. \\\hline
\verb+\opdisplay[P]{S}{n}+ &
Affiche le nombre \verb+n+ avec le style \verb+S+ en
- plaçant chaque chiffre dans une boîte de largeur
+ plaçant chaque chiffre dans une boîte de largeur
\verb+\opcolumnwidth+ et de hauteur
\verb+\oplineheight+. \\\hline
\verb+\opdiv[P]{n1}{n2}+ &
- Affiche le résultat de l'opération n1/n2. \\\hline
+ Affiche le résultat de l'opération n1/n2. \\\hline
\verb+\opdiv*[P]{n1}{n2}{N1}{N2}+ &
Calcule \verb+n1/n2+, place le quotient dans \verb+N1+ et
le reste dans \verb+N2+. \\\hline
\verb+\opdivperiod{T1}{T2}{N}+ &
- Calcule la longueur de la période de la division de \verb+T1+
- par \verb+T2+ et place le résultat dans \verb+N+. \\\hline
+ Calcule la longueur de la période de la division de \verb+T1+
+ par \verb+T2+ et place le résultat dans \verb+N+. \\\hline
\verb+\opexport[P]{n}\cmd+ &
Copie le nombre \verb+n+ dans la macro \verb+\cmd+. \\\hline
\verb+\opexpr[P]{F}{N}+ &
- \'Évalue la formule \texttt{F} est place le résultat final dans le
+ Évalue la formule \texttt{F} est place le résultat final dans le
nombre \texttt{N}. \\\hline
\verb+\opfloor{n}{T}{N}+ &
- Place dans \verb+N+ la valeur approchée par défaut de
+ Place dans \verb+N+ la valeur approchée par défaut de
\verb+n+ au rang \verb+T+. \\\hline
\verb+\opgcd{T1}{T2}{N}+ &
Calcule le pgcd de \verb+T1+ et \verb+T2+ et place le
- résultat dans \verb+N+. \\\hline
+ résultat dans \verb+N+. \\\hline
\verb+\opgetdecimaldigit{n}{T}{N}+ &
- Construit le nombre \verb+N+ avec le seul chiffre situé en
- \verb+T+ième position de la partie décimale du nombre
+ Construit le nombre \verb+N+ avec le seul chiffre situé en
+ \verb+T+ième position de la partie décimale du nombre
\verb+n+. \\\hline
\verb+\opgetdigit{n}{T}{N}+ &
- Construit le nombre \verb+N+ avec le seul chiffre situé en
- \verb+T+ième position du nombre \verb+n+. \\\hline
+ Construit le nombre \verb+N+ avec le seul chiffre situé en
+ \verb+T+ième position du nombre \verb+n+. \\\hline
\verb+\opgetintegerdigit{n}{T}{N}+ &
- Construit le nombre \verb+N+ avec le seul chiffre situé en
- \verb+T+ième position de la partie entière du nombre
+ Construit le nombre \verb+N+ avec le seul chiffre situé en
+ \verb+T+ième position de la partie entière du nombre
\verb+n+. \\\hline
\verb+\opgfsqrt{n}+ &
- Affiche la façon ancienne d'afficher le calcul de la racine
- carrée de \verb+n+. \\\hline
+ Affiche la façon ancienne d'afficher le calcul de la racine
+ carrée de \verb+n+. \\\hline
\verb+\ophline(T1,T2){T3}+ &
- Trace un trait horizontal de longueur \verb+T3+, d'épaisseur
- \verb+hrulewidth+ et débutant en \verb+(T1,T2)+ par
- rapport au point de référence. \\\hline
+ Trace un trait horizontal de longueur \verb+T3+, d'épaisseur
+ \verb+hrulewidth+ et débutant en \verb+(T1,T2)+ par
+ rapport au point de référence. \\\hline
\verb+\opidiv[P]{n1}{n2}+ &
- Affiche le résultat de l'opération \verb+n1/n2+ (division
- euclidienne, c'est-à-dire avec un quotient entier). \\\hline
+ Affiche le résultat de l'opération \verb+n1/n2+ (division
+ euclidienne, c'est-à-dire avec un quotient entier). \\\hline
\verb+\opidiv*{n1}{n2}{N1}{N2}+ &
Calcule \verb+n1/n2+ (division euclidienne), place le quotient
(entier) dans \verb+N1+ et le reste (compris entre 0 inclus et
\verb+|n2|+ exclu) dans \verb+N2+. \\\hline
\verb+\opinteger{n}{N}+ &
- Copie la partie entière (nombre entier positif) de \verb+n+
+ Copie la partie entière (nombre entier positif) de \verb+n+
dans \verb+N+. \\\hline
\verb+\opintegerwidth{n}{N}+ &
- Le nombre \verb+N+ reçoit la longueur de la partie entière du
+ Le nombre \verb+N+ reçoit la longueur de la partie entière du
nombre \verb+n+. \\\hline
\verb+\oplput(T1,T2){<objet>}+ &
- Place \verb+<objet>+ à droite du point situé en
- \verb+(T1,T2)+ par rapport au point de référence. \\\hline
+ Place \verb+<objet>+ à droite du point situé en
+ \verb+(T1,T2)+ par rapport au point de référence. \\\hline
+ \verb+\opmanyadd[P]{n1}...{np}+ &
+ Affiche le résultat de l'opération
+ $\mathrm{n1}+\cdots+\mathrm{np}$. \\\hline
\verb+\opmul[P]{n1}{n2}+ &
- Affiche le résultat de l'opération \verb+n1*n2+. \\\hline
+ Affiche le résultat de l'opération \verb+n1*n2+. \\\hline
\verb+\opmul*{n1}{n2}{N}+ &
- Calcule \verb+n1*n2+ et place le résultat dans
+ Calcule \verb+n1*n2+ et place le résultat dans
\verb+N+. \\\hline
\verb+\opneg{n}{N}+ &
- Le nombre \verb+N+ reçoit l'opposé de \verb+n+. \\\hline
+ Le nombre \verb+N+ reçoit l'opposé de \verb+n+. \\\hline
\verb+\oppower{n}{T}{N}+ &
- Calcule \verb+n+ à la puissance \verb+T+ et place le
- résultat dans \verb+N+. \\\hline
+ Calcule \verb+n+ à la puissance \verb+T+ et place le
+ résultat dans \verb+N+. \\\hline
\verb+\opprint{n}+ &
- Affiche le nombre \verb+n+ de façon directe. \\\hline
+ Affiche le nombre \verb+n+ de façon directe. \\\hline
\verb+\opround{n}{T}{N}+ &
Place dans \verb+N+ la valeur arrondie de \verb+n+ au rang
\verb+T+. \\\hline
\verb+\oprput(T1,T2){<objet>}+ &
- Place \verb+<objet>+ à gauche du point situé en
- \verb+(T1,T2)+ par rapport au point de référence. \\\hline
+ Place \verb+<objet>+ à gauche du point situé en
+ \verb+(T1,T2)+ par rapport au point de référence. \\\hline
\verb+\opset{L}+ &
- Effectue une affectation globale des paramètres de \package{xlop}
- désignés dans la liste \verb+L+. \\\hline
+ Effectue une affectation globale des paramètres de \package{xlop}
+ désignés dans la liste \verb+L+. \\\hline
\verb+\opsetdecimaldigit{n}{T}{N}+ &
- Modifie le \verb+T+ième chiffre de la partie décimale de
- \verb+N+ pour qu'il soit égal à \verb+n+. \\\hline
+ Modifie le \verb+T+ième chiffre de la partie décimale de
+ \verb+N+ pour qu'il soit égal à \verb+n+. \\\hline
\verb+\opsetdigit{n}{T}{N}+ &
- Modifie le \verb+T+ième chiffre de \verb+N+ pour qu'il
- soit égal à \verb+n+. \\\hline
+ Modifie le \verb+T+ième chiffre de \verb+N+ pour qu'il
+ soit égal à \verb+n+. \\\hline
\verb+\opsetintegerdigit{n}{T}{N}+ &
- Modifie le \verb+T+ième chiffre de la partie entière de
- \verb+N+ pour qu'il soit égal à \verb+n+. \\\hline
+ Modifie le \verb+T+ième chiffre de la partie entière de
+ \verb+N+ pour qu'il soit égal à \verb+n+. \\\hline
\verb+\opsqrt{n}{N}+ &
- Mémorise la racine carrée de \verb+n+ dans \verb+N+. \\\hline
+ Mémorise la racine carrée de \verb+n+ dans \verb+N+. \\\hline
\verb+\opsub[P]{n1}{n2}+ &
- Affiche le résultat de l'opération n1-n2. \\\hline
+ Affiche le résultat de l'opération n1-n2. \\\hline
\verb+\opsub*{n1}{n2}{N}+ &
- Calcule n1-n2 et place le résultat dans N. \\\hline
+ Calcule n1-n2 et place le résultat dans N. \\\hline
\verb+\opunzero{N}+ &
- Supprime les zéros non significatifs du nombre \verb+N+. \\\hline
+ Supprime les zéros non significatifs du nombre \verb+N+. \\\hline
\verb+\opvline(T1,T2){T3}+ &
- Trace un trait vertical de longueur \verb+T3+, d'épaisseur
- \verb+hrulewidth+ et débutant en \verb+(T1,T2)+ par
- rapport au point de référence. \\\hline
+ Trace un trait vertical de longueur \verb+T3+, d'épaisseur
+ \verb+hrulewidth+ et débutant en \verb+(T1,T2)+ par
+ rapport au point de référence. \\\hline
\verb+\opwidth{n}{N}+ &
- Le nombre \verb+N+ reçoit le nombre de chiffres du nombre
+ Le nombre \verb+N+ reçoit le nombre de chiffres du nombre
\verb+n+. \\\hline
\end{longtable}\index{macros!table des|)}
-Dans ce tableau, les paramètres :
+Dans ce tableau, les paramètres :
\begin{itemize}
-\item \texttt{n} et \texttt{ni} (où \texttt{i} représente un indice)
- indiquent que le paramètre doit être un nombre donné sous forme
- décimale ou sous forme d'un nom de variable ;
-\item \texttt{N} et \texttt{Ni} (où \texttt{i} représente un indice)
- indiquent que le paramètre doit être un nombre donné sous forme d'un
+\item \texttt{n} et \texttt{ni} (où \texttt{i} représente un indice)
+ indiquent que le paramètre doit être un nombre donné sous forme
+ décimale ou sous forme d'un nom de variable ;
+\item \texttt{N} et \texttt{Ni} (où \texttt{i} représente un indice)
+ indiquent que le paramètre doit être un nombre donné sous forme d'un
nom de variable ;
-\item \texttt{[P]} indique que la macro accepte un paramètre optionnel
- permettant de modifier les paramètres de \package{xlop} ;
-\item \texttt{T} et \texttt{Ti} (où \texttt{i} représente un indice)
- indiquent que le paramètre doit être un nombre donné sous forme
- décimale ou sous forme d'un nom de variable mais ne devant pas
- excéder la taille des nombres directement acceptables par \TeX{}
+\item \texttt{[P]} indique que la macro accepte un paramètre optionnel
+ permettant de modifier les paramètres de \package{xlop} ;
+\item \texttt{T} et \texttt{Ti} (où \texttt{i} représente un indice)
+ indiquent que le paramètre doit être un nombre donné sous forme
+ décimale ou sous forme d'un nom de variable mais ne devant pas
+ excéder la taille des nombres directement acceptables par \TeX{}
($-2147483648 \le \mathtt{T} \le 2147483647$ en l'occurrence).
\end{itemize}
\newpage
-\section{Liste des paramètres}
+\section{Liste des paramètres}
\label{sec:Liste des parametres}
-\index{parametres@paramètres!table des|(}%
+\index{parametres@paramètres!table des|(}%
\begingroup
\advance\hoffset by-1.75cm \advance\linewidth by1.75cm
\begin{longtable}{|l|l|p{7cm}|}
\hline
- \multicolumn{1}{|c|}{\textbf{Paramètre}} &
- \multicolumn{1}{c|}{\textbf{Défaut}} &
+ \multicolumn{1}{|c|}{\textbf{Paramètre}} &
+ \multicolumn{1}{c|}{\textbf{Défaut}} &
\multicolumn{1}{c|}{\textbf{Signification}} \\\hline\hline
\endfirsthead
\hline
- \multicolumn{1}{|c|}{\textbf{Paramètre}} &
- \multicolumn{1}{c|}{\textbf{Défaut}} &
+ \multicolumn{1}{|c|}{\textbf{Paramètre}} &
+ \multicolumn{1}{c|}{\textbf{Défaut}} &
\multicolumn{1}{c|}{\textbf{Signification}} \\\hline\hline
\endhead
\hline
- \multicolumn{3}{|c|}{$\ldots$ à suivre $\ldots$}\\
+ \multicolumn{3}{|c|}{$\ldots$ à suivre $\ldots$}\\
\hline
\endfoot
\hline
\endlastfoot
\verb+afterperiodsymbol+ &
\verb+$\ldots$+ &
- Symbole utilisé à la suite de la période d'une division. \\\hline
+ Symbole utilisé à la suite de la période d'une division. \\\hline
\verb+approxsymbol+ &
\verb+$\approx$+ &
- Symbole utilisé comme relation d'égalité approximative dans les
- opérations en ligne. \\\hline
+ Symbole utilisé comme relation d'égalité approximative dans les
+ opérations en ligne. \\\hline
\verb+equalsymbol+ &
\verb+{$=$}+ &
- Symbole utilisé comme relation d'égalité dans les opérations en
+ Symbole utilisé comme relation d'égalité dans les opérations en
ligne. \\\hline
\verb+addsymbol+ &
\verb-$+$- &
- Symbole utilisé comme opérateur d'addition. \\\hline
+ Symbole utilisé comme opérateur d'addition. \\\hline
\verb+subsymbol+ &
\verb+$-$+ &
- Symbole utilisé comme opérateur de soustraction. \\\hline
+ Symbole utilisé comme opérateur de soustraction. \\\hline
\verb+mulsymbol+ &
\verb+$\times$+ &
- Symbole utilisé comme opérateur de multiplication. \\\hline
+ Symbole utilisé comme opérateur de multiplication. \\\hline
\verb+divsymbol+ &
\verb+$\div$+ &
- Symbole utilisé comme opérateur de division pour les opérations en
+ Symbole utilisé comme opérateur de division pour les opérations en
ligne. \\\hline
\verb+decimalsepsymbol+ &
\verb+.+ &
- Symbole utilisé comme séparateur décimal. \\\hline
+ Symbole utilisé comme séparateur décimal. \\\hline
\verb+strikedecimalsepsymbol+ &
&
- Symbole utilisé pour un séparateur décimal déplacé au niveau du
- dividende et du diviseur dans les divisions posées. \\\hline
+ Symbole utilisé pour un séparateur décimal déplacé au niveau du
+ dividende et du diviseur dans les divisions posées. \\\hline
\verb+shiftintermediarysymbol+ &
\verb+$\cdot$+ &
- Symbole utilisé pour montrer les décalages des nombres
- intermédiaires dans les multiplications posées. \\\hline
+ Symbole utilisé pour montrer les décalages des nombres
+ intermédiaires dans les multiplications posées. \\\hline
\verb+displayshiftintermediary+ &
\verb+shift+ &
- Indique que le caractère de décalage dans les multiplications sera
- affiché uniquement pour le décalage supplémentaire (valeur
- \verb+shift+), pour tous les décalages (valeur \verb+all+)
+ Indique que le caractère de décalage dans les multiplications sera
+ affiché uniquement pour le décalage supplémentaire (valeur
+ \verb+shift+), pour tous les décalages (valeur \verb+all+)
ou jamais (valeur \verb+none+). \\\hline
+ \verb+vmanyoperator+ &
+ \verb+center+ &
+ Positionnement vertical des opérateurs. La valeur \verb+top+ place
+ les opérateurs en face des opérandes, de la première opérande
+ jusqu'à l'avant-dernière. La valeur \verb+center+ place les
+ opérateurs entre les opérandes. La valeur \verb+bottom+ place les
+ opérateurs en face des opérandes, de la deuxième opérande jusqu'à la
+ dernière. La valeur \verb+Top+ place un unique opérateur au niveau
+ de la première opérande. La valeur \verb+\center+ place un unique
+ opérateur au milieu vertical des opérandes. La valeur
+ \verb+Bottom+ place un unique opérateur au niveau de la dernière
+ opérande. \\\hline
\verb+voperation+ &
\verb+bottom+ &
- Type d'alignement vertical d'une opération posée. La
- valeur \verb+bottom+ indique que le bas de l'opération sera
+ Type d'alignement vertical d'une opération posée. La
+ valeur \verb+bottom+ indique que le bas de l'opération sera
au niveau de la ligne de base. La valeur \verb+top+ indique
- que la première ligne de l'opération sera sur la ligne de base. La
- valeur \verb+center+ indique que l'opération sera centrée
+ que la première ligne de l'opération sera sur la ligne de base. La
+ valeur \verb+center+ indique que l'opération sera centrée
verticalement sur la ligne de base. \\\hline
\verb+voperator+ &
\verb+center+ &
- Positionnement vertical de l'opérateur dans les
- opérations posées. La valeur \verb+top+ place l'opérateur au
- niveau de la première opérande. La valeur \verb+bottom+ place
- l'opérateur au niveau de la seconde opérande. La valeur
- \verb+center+ place l'opérateur entre les deux
- opérandes. \\\hline
+ Positionnement vertical de l'opérateur dans les
+ opérations posées. La valeur \verb+top+ place l'opérateur au
+ niveau de la première opérande. La valeur \verb+bottom+ place
+ l'opérateur au niveau de la seconde opérande. La valeur
+ \verb+center+ place l'opérateur entre les deux
+ opérandes. \\\hline
\verb+hfactor+ &
\verb+decimal+ &
- Type d'alignement des opérandes dans les
- multiplications posées. La valeur \verb+decimal+ indique un
+ Type d'alignement des opérandes dans les
+ multiplications posées. La valeur \verb+decimal+ indique un
alignement sur la virgule. La valeur \verb+right+ indique une
- composition au fer à droite. \\\hline
+ composition au fer à droite. \\\hline
\verb+vruleperiod+ &
\verb+-0.2+ &
- Position verticale du trait indiquant la période du quotient
+ Position verticale du trait indiquant la période du quotient
dans les divisions en ligne. \\\hline
\verb+dividendbridge+ &
\verb+false+ &
- Indique si le \og pont \fg{} au-dessus du dividende est présent ou
+ Indique si le \og pont \fg{} au-dessus du dividende est présent ou
non. \\\hline
\verb+shiftdecimalsep+ &
\verb+both+ &
- Indique la façon dont se fait le décalage de virgule au niveau des
- opérandes d'une division posée. La valeur \verb+both+ indique
- que le décalage doit rendre le diviseur et le dividende
- entiers. La valeur \verb+divisor+ indique que le décalage
+ Indique la façon dont se fait le décalage de virgule au niveau des
+ opérandes d'une division posée. La valeur \verb+both+ indique
+ que le décalage doit rendre le diviseur et le dividende
+ entiers. La valeur \verb+divisor+ indique que le décalage
doit rendre le diviseur entier. La valeur \verb+none+ indique
- qu'il n'y aura aucun décalage. \\\hline
+ qu'il n'y aura aucun décalage. \\\hline
\verb+maxdivstep+ &
\verb+10+ &
- Nombre d'étapes maximum d'une division. \\\hline
+ Nombre d'étapes maximum d'une division. \\\hline
\verb+safedivstep+ &
\verb+50+ &
- Nombre d'étapes maximum d'une division lors d'un arrêt sur
- période. \\\hline
+ Nombre d'étapes maximum d'une division lors d'un arrêt sur
+ période. \\\hline
\verb+period+ &
\verb+false+ &
- Indique si la division doit s'arrêter sur une détection de période
+ Indique si la division doit s'arrêter sur une détection de période
ou non. \\\hline
\verb+deletezero+ &
\verb+true+ &
Indique si on affiche (\verb+false+) ou on supprime
- (\verb+true+) les zéros non significatifs. \\\hline
+ (\verb+true+) les zéros non significatifs. \\\hline
\verb+carryadd+ &
\verb+true+ &
- Indique si les retenues doivent être affichées pour les additions
- posées. \\\hline
+ Indique si les retenues doivent être affichées pour les additions
+ posées. \\\hline
\verb+carrysub+ &
\verb+false+ &
- Indique si les retenues doivent être affichées pour les
- soustractions posées. \\\hline
+ Indique si les retenues doivent être affichées pour les
+ soustractions posées. \\\hline
\verb+offsetcarry+ &
\verb+-0.35+ &
- Décalage horizontal pour les retenues dans les
- soustractions posées. \\\hline
+ Décalage horizontal pour les retenues dans les
+ soustractions posées. \\\hline
\verb+style+ &
\verb+display+ &
- Indique si l'opération doit être en ligne (\verb+text+) ou
- posée (\verb+display+). \\\hline
+ Indique si l'opération doit être en ligne (\verb+text+) ou
+ posée (\verb+display+). \\\hline
\verb+displayintermediary+ &
\verb+nonzero+ &
- Indique si les résultats intermédiaires doivent être affichés
+ Indique si les résultats intermédiaires doivent être affichés
(\verb+all+) ou seulement les non nuls (\verb+nonzero+) ou
aucun (valeur \verb+none+) dans les multiplications et les
divisions. \\\hline
\verb+lastcarry+ &
\verb+false+ &
Indique si la retenue au niveau d'une absence de chiffre devra
- être affichée ou non. \\\hline
+ être affichée ou non. \\\hline
\verb+parenthesisnegative+ &
\verb+none+ &
- Comportement à adopter pour l'affichage des nombres
- négatifs dans les opérations en lignes. La valeur \verb+none+
- les affiche sans parenthèse, \verb+all+ les mettra
- systématiquement les nombres négatifs entre parenthèses et
- \verb+last+ les mettra entre parenthèses
- sauf pour la première valeur d'une expression. \\\hline
+ Comportement à adopter pour l'affichage des nombres
+ négatifs dans les opérations en lignes. La valeur \verb+none+
+ les affiche sans parenthèse, \verb+all+ les mettra
+ systématiquement les nombres négatifs entre parenthèses et
+ \verb+last+ les mettra entre parenthèses
+ sauf pour la première valeur d'une expression. \\\hline
\verb+columnwidth+ &
\verb+2ex+ &
- Largeur des boîtes contenant un chiffre. \\\hline
+ Largeur des boîtes contenant un chiffre. \\\hline
\verb+lineheight+ &
\verb+\baselineskip+ &
- Hauteur des boîtes contenant un chiffre. \\\hline
+ Hauteur des boîtes contenant un chiffre. \\\hline
\verb+decimalsepwidth+ &
\verb+0pt+ &
- Largeur de la boîte contenant le séparateur décimal. \\\hline
+ Largeur de la boîte contenant le séparateur décimal. \\\hline
\verb+decimalsepoffset+ &
\verb+0pt+ &
- Décalage horizontal du séparateur décimal. \\\hline
+ Décalage horizontal du séparateur décimal. \\\hline
\verb+hrulewidth+ &
\verb+0.4pt+ &
- \'Épaisseur des lignes horizontales. \\\hline
+ Épaisseur des lignes horizontales. \\\hline
\verb+vrulewidth+ &
\verb+0.4pt+ &
- \'Épaisseur des lignes verticales. \\\hline
+ Épaisseur des lignes verticales. \\\hline
\verb+behaviorsub+ &
\verb+silent+ &
- Comportement de \package{xlop} face à une
- soustraction \og impossible \fg{}, c'est-à-dire une soustraction
- ayant ses deux opérandes positives avec une seconde opérande
- strictement supérieure à la première. La valeur \verb+silent+
- effectuera l'opération en permutant les opérandes de façon
- silencieuse. La valeur \verb+warning+ fera de même mais en
- émettant un message d'avertissement. Enfin, la valeur
- \verb+error+ affichera un message d'erreur et l'opération ne
- sera pas effectuée. \\\hline
+ Comportement de \package{xlop} face à une
+ soustraction \og impossible \fg{}, c'est-à-dire une soustraction
+ ayant ses deux opérandes positives avec une seconde opérande
+ strictement supérieure à la première. La valeur \verb+silent+
+ effectuera l'opération en permutant les opérandes de façon
+ silencieuse. La valeur \verb+warning+ fera de même mais en
+ émettant un message d'avertissement. Enfin, la valeur
+ \verb+error+ affichera un message d'erreur et l'opération ne
+ sera pas effectuée. \\\hline
\verb+country+ &
\verb+french+ &
- Indique le comportement des opérations posées en fonction du
- pays. L'extension prévoit pour l'instant \verb+french+,
- \verb+american+ et \verb+russian+ mais les différentes
- façons de présenter les opérations ne sont pas implantées dans la
+ Indique le comportement des opérations posées en fonction du
+ pays. L'extension prévoit pour l'instant \verb+french+,
+ \verb+american+ et \verb+russian+ mais les différentes
+ façons de présenter les opérations ne sont pas implantées dans la
version 0.2. \\\hline
\verb+operandstyle+ &
&
- Style utilisé pour les opérandes. \\\hline
+ Style utilisé pour les opérandes. \\\hline
\verb+resultstyle+ &
&
- Style utilisé pour les résultats. \\\hline
+ Style utilisé pour les résultats. \\\hline
\verb+remainderstyle+ &
&
- Style utilisé pour les restes. \\\hline
+ Style utilisé pour les restes. \\\hline
\verb+intermediarystyle+ &
&
- Style utilisé pour les résultats intermédiaires (nombres
- intermédiaires dans une multiplication et nombres à soustraire
- dans une division où apparaissent les soustractions
+ Style utilisé pour les résultats intermédiaires (nombres
+ intermédiaires dans une multiplication et nombres à soustraire
+ dans une division où apparaissent les soustractions
successives). \\\hline
\verb+carrystyle+ &
\verb+\scriptsize+ &
- Style utilisé pour les retenues. La valeur par défaut lorsqu'on ne
+ Style utilisé pour les retenues. La valeur par défaut lorsqu'on ne
compile pas sous \LaTeX{} est \verb+\sevenrm+. \\\hline
-\end{longtable}\index{parametres@paramètres!table des|)}
+\end{longtable}\index{parametres@paramètres!table des|)}
\newpage\endgroup
\chapter{Trucs et astuces}
\label{chap:Trucs et astuces}
-\section{Comparaison avec \package{calc} et \package{fp}}
+\section{Comparaison avec \package{calc} et \package{xfp}}
On pourrait croire que \package{xlop} puisse remplacer avantageusement
des extensions telles que
\package{calc}\index{extension!calc}\index{calc} et
-\package{fp}\index{extension!fp}\index{fp}. En réalité, c'est un peu
-plus compliqué que cela. Bien sûr, \package{xlop} permet des calculs
-complexes et sur des nombres comportant un nombre arbitraire de
-chiffres mais, contrairement à \package{calc}, il ne permet pas de
-gérer directement les unités. La comparaison avec \package{fp} est un
-peu plus réaliste mais il ne faut pas perdre de vue que \package{xlop}
-peut devenir gourmand en mémoire et en temps de calcul.
-
-Si vous voulez vraiment réaliser des calculs sur des
+\package{xfp}\index{extension!xfp}\index{xfp}. En réalité, c'est un
+peu plus compliqué que cela. Bien sûr, \package{xlop} permet des
+calculs complexes et sur des nombres comportant un nombre arbitraire
+de chiffres mais, contrairement à \package{calc}, il ne permet pas de
+gérer directement les unités. La comparaison avec \package{xfp} est un
+peu plus réaliste mais il ne faut pas perdre de vue que \package{xlop}
+peut devenir gourmand en mémoire et en temps de calcul. En réalité,
+\package{xfp} est bien plus efficace que \package{xlop} en ce qui
+concerne les calculs purs.
+
+Si vous voulez vraiment réaliser des calculs sur des
longueurs\index{longueur}, vous pouvez toujours utiliser le fait
-qu'une affectation d'un registre de longueur à un compteur donnera un
-nombre correspondant à cette longueur avec l'unité \texttt{sp}.
+qu'une affectation d'un registre de longueur à un compteur donnera un
+nombre correspondant à cette longueur avec l'unité \texttt{sp}.
\begin{CenterExample}[xrightmargin=0pt]
\newcommand\getsize[2]{%
\dimen0=#1\relax
@@ -2104,9 +2237,9 @@ nombre correspondant à cette longueur avec l'unité \texttt{sp}.
\getsize{1sp}{r}$1\,\mathrm{sp}=\opprint{r}\,\mathrm{sp}$\quad
\end{CenterExample}
N'oubliez cependant pas que le but principal de \package{xlop} est
-d'\emph{afficher} automatiquement les opérations.
+d'\emph{afficher} automatiquement les opérations.
-Muni de la macro \macro{getsize}, il est possible de réaliser des
+Muni de la macro \macro{getsize}, il est possible de réaliser des
calculs sur des longueurs.
\newcommand\getsize[2]{%
\dimen0=#1\relax
@@ -2133,14 +2266,14 @@ calculs sur des longueurs.
\opprint{S}\,$\mathrm{cm}^2$
\end{Verbatim}
-\section{Création d'opérations complexes}
+\section{Création d'opérations complexes}
\label{sec:Creation d'operations complexes}
-L'utilisation des macros de \package{xlop} associées au mécanisme de
-boucle de \TeX{} permet de créer des opérations à volonté. Nous ne
-donnerons que deux exemples. Le premier est la décomposition d'un
-nombre en facteurs premiers, le second est un calcul général de
+L'utilisation des macros de \package{xlop} associées au mécanisme de
+boucle de \TeX{} permet de créer des opérations à volonté. Nous ne
+donnerons que deux exemples. Le premier est la décomposition d'un
+nombre en facteurs premiers, le second est un calcul général de
fraction continue.\index{nombre!premier}\index{boucle|(}%
-\index{decomposition@décomposition en nombres premiers}
+\index{decomposition@décomposition en nombres premiers}
\begin{Verbatim}[xrightmargin=0pt]
\newcount\primeindex
\newcount\tryindex
@@ -2230,7 +2363,7 @@ fraction continue.\index{nombre!premier}\index{boucle|(}%
\endgroup
}
-Avec ce code, on dispose d'un moyen de créer une liste de nombres
+Avec ce code, on dispose d'un moyen de créer une liste de nombres
premiers (en l'occurrence les 20~premiers).
\begin{SideBySideExample}
\getprime{20}%
@@ -2238,18 +2371,18 @@ premiers (en l'occurrence les 20~premiers).
\opprint{P9}, \ldots \opprint{P19}.
\end{SideBySideExample}
-On notera toutefois que ce code est très mauvais, il est excessivement
-lent et n'apporte rien par rapport à une approche directe avec des
-nombres manipulés par les opérations natives de \TeX{}. Ce n'est
-qu'un exemple pédagogique. On notera également l'astuce permettant
-d'emboîter deux boucles avec la macro \verb+\testprimality+
-entièrement mise dans un groupe : s'il est nécessaire de rendre les
+On notera toutefois que ce code est très mauvais, il est excessivement
+lent et n'apporte rien par rapport à une approche directe avec des
+nombres manipulés par les opérations natives de \TeX{}. Ce n'est
+qu'un exemple pédagogique. On notera également l'astuce permettant
+d'emboîter deux boucles avec la macro \verb+\testprimality+
+entièrement mise dans un groupe : s'il est nécessaire de rendre les
affectations \verb+\primetrue+ et \verb+\primefalse+ globales, les
-opérations de \package{xlop} rendent leurs résultats globaux
+opérations de \package{xlop} rendent leurs résultats globaux
directement.\index{affectation globale}%
Une fois que vous avez votre \og table \fg{} de nombres premiers, vous
-pouvez vous en servir pour décomposer un nombre en facteurs
+pouvez vous en servir pour décomposer un nombre en facteurs
premiers.
\begin{CenterExample}[xrightmargin=0pt]
\newcommand\primedecomp[2][nil]{%
@@ -2308,28 +2441,28 @@ premiers.
intermediarystyle.2=\red]{252}
\end{CenterExample}
Dans ce code, on notera l'emploi d'un groupe entourant l'ensemble de
-la macro pour protéger les modifications de paramètres de
-\package{xlop}.\index{parametre@paramètre!modifications locales}
-\`A ce propos, on notera également qu'un paramètre vide n'est pas
-accepté. C'est tout à fait volontaire, l'auteur de l'extension pensant
-qu'un utilisateur tapant des crochets sans rien mettre à l'intérieur
-est sans doute en train de commettre une erreur. Pour pallier à cette
-impossibilité de transmettre un paramètre vide
-\index{parametre@paramètre!vide}%
-il existe le paramètre particulier \parameter{nil} qui a exactement ce
-rôle.
+la macro pour protéger les modifications de paramètres de
+\package{xlop}.\index{parametre@paramètre!modifications locales}
+\`A ce propos, on notera également qu'un paramètre vide n'est pas
+accepté. C'est tout à fait volontaire, l'auteur de l'extension pensant
+qu'un utilisateur tapant des crochets sans rien mettre à l'intérieur
+est sans doute en train de commettre une erreur. Pour pallier à cette
+impossibilité de transmettre un paramètre vide
+\index{parametre@paramètre!vide}%
+il existe le paramètre particulier \parameter{nil} qui a exactement ce
+rôle.
\index{boucle|)}
On notera enfin l'astuce \verb+{\setbox2=\box2}+ qui permet
-d'obtenir un registre de boîte vide et les manipulations finales
-permettant de représenter la barre verticale de façon lisible.
+d'obtenir un registre de boîte vide et les manipulations finales
+permettant de représenter la barre verticale de façon lisible.
Le second exemple permet de calculer une fraction continue du type :
\def\dfrac#1#2{\frac{\displaystyle #1}{\displaystyle #2}}
\[a_0+\dfrac{1}{a_1+\dfrac{1}{a_2+\dfrac{1}{a_3+\cdots}}}\]
-en donnant la suite $a_0,a_1,a_2,a_3,\ldots$ à la macro. L'exemple
+en donnant la suite $a_0,a_1,a_2,a_3,\ldots$ à la macro. L'exemple
donne les fractions correspondant au nombre d'or et aux racines
-carrées de~2 et~3.
+carrées de~2 et~3.
\makeatletter
\begin{CenterExample}[xrightmargin=0pt]
\begingroup
@@ -2361,33 +2494,33 @@ carrées de~2 et~3.
\continuedfraction{1,1,2,1,2,1,2,1,2,1,2,1}{r}\opprint{r}
\end{CenterExample}
\makeatother
-Une fois n'est pas coutume, nous avons fait appel à des commandes
-\LaTeX{} pour effectuer une boucle. Ce manuel étant composé en
-français, le caractère \og \texttt{\string:} \fg{} est actif ce qui
-empêche la macro \verb+\@for+ de fonctionner correctement d'où le
-groupe où ce caractère reçoit un code de catégorie adéquat.
+Une fois n'est pas coutume, nous avons fait appel à des commandes
+\LaTeX{} pour effectuer une boucle. Ce manuel étant composé en
+français, le caractère \og \texttt{\string:} \fg{} est actif ce qui
+empêche la macro \verb+\@for+ de fonctionner correctement d'où le
+groupe où ce caractère reçoit un code de catégorie adéquat.
-\section{Accès direct aux nombres}
+\section{Accès direct aux nombres}
\label{sec:Acces direct aux nombres}
-Lorsqu'on récupère un nombre dans une variable, on peut le traiter de
-multiples façons à l'aide des macros de \package{xlop}. Toutefois,
+Lorsqu'on récupère un nombre dans une variable, on peut le traiter de
+multiples façons à l'aide des macros de \package{xlop}. Toutefois,
dans certaines situations, on peut souhaiter construire ses propres
macros ou utiliser des macros externes en passant un tel nombre en
-paramètre.
+paramètre.
-Passer directement \verb+\opprint{var}+ est inopérant car cette macro
+Passer directement \verb+\opprint{var}+ est inopérant car cette macro
est suffisamment complexe pour induire des effets de bord dans ce
-genre de situations. Il devient alors nécessaire d'accéder directement
-à ce nombre. Lorsqu'un nombre est mémorisé dans une variable
-\verb+var+, \package{xlop} crée une macro
+genre de situations. Il devient alors nécessaire d'accéder directement
+à ce nombre. Lorsqu'un nombre est mémorisé dans une variable
+\verb+var+, \package{xlop} crée une macro
\texttt{$\backslash$Op@var}\index{Opvar@\texttt{\boi {Op\at var}}}
qui contient
ce nombre. On notera le \og O \fg{} majuscule et le \og p \fg{}
-minuscule. L'arrobas est là pour rendre cette définition privée
-c'est-à-dire qu'il faut faire un effort pour y accéder avec
+minuscule. L'arrobas est là pour rendre cette définition privée
+c'est-à-dire qu'il faut faire un effort pour y accéder avec
l'utilisation des macros \macro{makeatletter} et \macro{makeatother}
-de \LaTeX{} ou bien en indiquant un code de catégorie égal à~11
-(lettre) pour ce caractère lorsqu'on travaille sous \TeX{}.
+de \LaTeX{} ou bien en indiquant un code de catégorie égal à~11
+(lettre) pour ce caractère lorsqu'on travaille sous \TeX{}.
\begin{SideBySideExample}
\opcopy{1234}{a}\opcopy{56}{b}%
\opmul*{a}{b}{r}%
@@ -2397,66 +2530,64 @@ de \LaTeX{} ou bien en indiquant un code de catégorie égal à~11
\makeatother
\end{SideBySideExample}
-On notera que cette façon de faire ne fonctionne plus forcément
-lorsque le séparateur décimal est entre accolade car la macro
+On notera que cette façon de faire ne fonctionne plus forcément
+lorsque le séparateur décimal est entre accolade car la macro
\verb+\opprint{var}+ contiendra ces accolades. Dans ce cas, le plus
-simple est de passer par la macro \macro{opexport} décrite à la
+simple est de passer par la macro \macro{opexport} décrite à la
page~\pageref{macro-opexport}.
\chapter{Versions futures}
\label{chap:Versions futures}
-L'extension \package{xlop} en est à sa version~\fileversion{} qui
-n'est qu'une version déboguée de la version~0.2 qui est elle même
-essentiellement une version corrigée de la version~0.1 (première
+L'extension \package{xlop} en est à sa version~\fileversion{} qui
+n'est qu'une version déboguée de la version~0.2 qui est elle même
+essentiellement une version corrigée de la version~0.1 (première
version publique). La prochaine version sera la~0.3 dont la version
\og stable \fg{} sera alors la version~0.4.
-L'ensemble des spécificités de la version 0.3 n'est pas totalement
-arrêté mais il y a déjà plusieurs points prévus :
+L'ensemble des spécificités de la version 0.3 n'est pas totalement
+arrêté mais il y a déjà plusieurs points prévus :
\begin{itemize}
-\item gestion internationale des opérations posées ;
-\item opérations en base 2 à 36 ;
+\item gestion internationale des opérations posées ;
+\item opérations en base 2 à 36 ;
\item ajout de fonctions de haut niveau avec les racines
(\macro{oproot} pour les racines quelconques et \macro{opsqrt} pour
- la racine carrée), exponentielle, logarithme, fonctions
- trigonométriques (directes, inverses, hyperboliques) en passant par
- l'extension \package{xfp} qui est une version déboguée (par
+ la racine carrée), exponentielle, logarithme, fonctions
+ trigonométriques (directes, inverses, hyperboliques) en passant par
+ l'extension \package{xfp} qui est une version déboguée (par
l'auteur) de l'extension \package{fp} ;
-\item ajout d'une macro permettant de réaliser une écriture formatée,
- c'est-à-dire une écriture d'un nombre où les longueurs des parties
- entière et décimale seront indiquées (si ces longueurs ne sont pas
- celles du nombre, il y aura un débordement ou un remplissage) ;
+\item ajout d'une macro permettant de réaliser une écriture formatée,
+ c'est-à-dire une écriture d'un nombre où les longueurs des parties
+ entière et décimale seront indiquées (si ces longueurs ne sont pas
+ celles du nombre, il y aura un débordement ou un remplissage) ;
cette macro existait dans la version~0.1 et permettait
essentiellement d'afficher des nombres avec un alignement sur la
- virgule, au fer à droite ou au fer à gauche ;
-\item ajout d'une macro permettant les additions à plus de deux
- opérandes ;
-\item ajout d'un paramètre permettant l'écriture scientifique ou
- ingénieur ;
-\item possibilité d'écrire un nombre sur plusieurs lignes et/ou en
- utilisant un séparateur des milliers ;
+ virgule, au fer à droite ou au fer à gauche ;
+\item ajout d'un paramètre permettant l'écriture scientifique ou
+ ingénieur ;
+\item possibilité d'écrire un nombre sur plusieurs lignes et/ou en
+ utilisant un séparateur des milliers ;
\item retenues dans les multiplications ;
\item rendre publics les restes successives d'une division ;
-\item les valeurs négatives de \parameter{maxdivstep} et
- \parameter{safedivstep} réaliseront un comptage sur les chiffres
- décimaux du quotient ;
+\item les valeurs négatives de \parameter{maxdivstep} et
+ \parameter{safedivstep} réaliseront un comptage sur les chiffres
+ décimaux du quotient ;
\item manuel en anglais.
\end{itemize}
Pour toute demande ou rapport de bogue, l'auteur vous sera
-éternellement reconnaissant de le contacter à l'adresse :
+éternellement reconnaissant de le contacter à l'adresse :
\begin{verbatim}
Jean-Come.Charpentier@wanadoo.fr
\end{verbatim}
-en plaçant le mot \og \texttt{xlop} \fg{} dans le sujet du message.
+en plaçant le mot \og \texttt{xlop} \fg{} dans le sujet du message.
Il serait souhaitable d'avoir un manuel du hacker qui expliquerait en
-détail le code source. Cet outil pourrait être tout à fait bénéfique
-pour que chacun puisse apporter plus facilement des améliorations au
+détail le code source. Cet outil pourrait être tout à fait bénéfique
+pour que chacun puisse apporter plus facilement des améliorations au
code. Malheureusement, le code actuel fait plus de~\nombre{4000}
-lignes et le travail nécessaire risque d'être trop important.
-Éventuellement, il pourra y avoir un manuel du hacker expliquant les
-spécifications générales du code sans entrer dans trop de détails
+lignes et le travail nécessaire risque d'être trop important.
+Éventuellement, il pourra y avoir un manuel du hacker expliquant les
+spécifications générales du code sans entrer dans trop de détails
techniques.
%\printindex
diff --git a/macros/generic/xlop/doc/xlop-doc.pdf b/macros/generic/xlop/doc/xlop-doc.pdf
index 1910db999a..e0b0a4b699 100644
--- a/macros/generic/xlop/doc/xlop-doc.pdf
+++ b/macros/generic/xlop/doc/xlop-doc.pdf
Binary files differ
diff --git a/macros/generic/xlop/doc/xlop-doc.tex b/macros/generic/xlop/doc/xlop-doc.tex
index fb623b21d0..26581f844c 100644
--- a/macros/generic/xlop/doc/xlop-doc.tex
+++ b/macros/generic/xlop/doc/xlop-doc.tex
@@ -1,16 +1,62 @@
\documentclass[12pt]{report}
-\usepackage{manual}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage{fourier}
+\usepackage[scaled]{helvet}
+\usepackage[scaled]{luximono}
+\usepackage{makeidx}
+\usepackage{longtable}
+\usepackage{multicol}
+\usepackage{pst-node}
+\usepackage{fancyvrb-ex}
+\usepackage{geometry}
+\usepackage{xlop}
\usepackage[english]{babel}
\usepackage[autolanguage]{numprint}
\usepackage{dcolumn}
+\usepackage{hyperref}
+\usepackage{microtype}
+
+\fvset{label=source}% english
\newcommand*\boi{\textbackslash}
\newcommand*\at{@}
-\fvset{label=source}% english
-\renewcommand\parameter[1]{\texttt{#1}\index{#1@\texttt{#1}}%
+\fvset{xrightmargin=5cm,frame=single,fontsize=\small}
+\geometry{a4paper,left=4cm,right=4cm,top=3cm,bottom=3cm,nohead}
+
+\let\SBSori\SideBySideExample
+\def\SideBySideExample{%
+ \par\bigbreak\SBSori
+}
+\let\endSBSori\endSideBySideExample
+\def\endSideBySideExample{%
+ \endSBSori
+ \par\bigskip\noindent
+}
+
+\newenvironment{syntaxBNF}{%
+ \catcode`\_=12
+ \def\*##1*{$\langle$##1$\rangle$}%
+ \def\alt{\unskip~$|$~\ignorespaces}%
+ \def\sameline{\multicolumn{1}{c}{} & \null\quad}%
+ \ttfamily
+ \begin{center}\begin{tabular}{r@{\quad:=\quad}l}}
+{\end{tabular}\end{center}}
+
+\setlongtables
+\newcommand\package[1]{\textsf{#1}}
+\newcommand\file[1]{\texttt{#1}}
+
+\newcommand\macro[1]{\texttt{$\backslash$#1}\index{#1@\texttt{\boi {#1}}}}
+\newcommand\parameter[1]{\texttt{#1}\index{#1@\texttt{#1}}%
\index{parameter!\texttt{#1}}}
+\newcommand\bull{\vrule width3pt height4pt depth-1pt}
+
+\newcounter{stuff}
+\makeindex
+
\begin{document}
\begin{titlepage}
\null\par\vfill
@@ -32,7 +78,7 @@
\end{center}
\vfill
\begin{center}
- Jean-Côme Charpentier\\
+ Jean-Côme Charpentier\\
\today
\end{center}
\vfill\null\par
@@ -44,9 +90,9 @@
\pagenumbering{arabic}
\chapter{Overview}
-\label{chap:Présentation}
+\label{chap:Présentation}
The \package{xlop} package is intended to make automatic arithmetic
-operation on arbitrary sized numbers and to display result either on
+operations on arbitrary sized numbers and to display result either on
display mode or inline mode. Here is a first exemple for an overview
of the syntax:
\begin{SideBySideExample}
@@ -156,13 +202,13 @@ you can compute complex expression in infix form:
\chapter{\package{xlop} Instructions}
Except some macros which will be examined later, the \package{xlop}'s
-macros can have an optional argument between squared braces in order
-to localy modify parameter's values. The other arguments (mandatory)
+macros can have an optional argument between brackets in order
+to localy modify parameter's values. The other (mandatory) arguments
are (nearly) always numbers. The two sections of this chapter describe
in details what is a number for \package{xlop} and how use parameters.
\section{In the Beginning Was the Number}
-\label{sec:Au début etait le nombre}
+\label{sec:Au début etait le nombre}
\subsection{Size}
\label{subsec:Taille}
Before we see the general syntax of number, we examin the very
@@ -179,7 +225,7 @@ Here is a table showing a \TeX{} compilation for a multiplication with
two operands of same size, on a linux computer, pentium~II~600 and
256~Mb RAM:\footnote{In fact it was the author computer in 2004. The
actual author computer is \emph{more} powerfull but the author is
- lazy, and he has not remake the tests!}
+ lazy, and he has not remade the tests!}
\begin{center}
\begin{tabular}{|l|*{6}{c|}}
\hline
@@ -217,7 +263,7 @@ explanations later:
\*sep* \\
\sameline \textnormal{, and } \*digit*
\end{syntaxBNF}
-\index{syntax!BNF}\index{BNF grammar}
+\index{syntax (BNF)}\index{BNF syntax}
The \texttt{character} symbol means nearly any character accepted by
\TeX{}. The exceptions are characters \verb+%+ and \verb+#+ which are
@@ -239,14 +285,14 @@ the right definition! This possibility to have a name using macro
could seem useless but it is not true. For instance, you can realize
loops\index{loop} with names as \verb+r1+, \verb+r2+, \ldots,
\verb+r<n>+ using the code \verb+r\the\cpt+ as variable name, where
-\verb+cpt+ is a counter in the \TeX{} meaning. With \LaTeX{}, the code
+\verb+cpt+ is a counter in \TeX{} meaning. With \LaTeX{}, the code
is more verbose with \verb+r\number\value{cpt}+ where \verb+cpt+ is
now a \LaTeX{} counter. We will see an example using this syntax in
the section~\ref{sec:Creation d'operations complexes}
page~\pageref{sec:Creation d'operations complexes}.
\index{number!valid}In practice, what does it mean all these rules?
-First, they means that a number writes in a decimal form can be
+First, they mean that a number written in a decimal form can be
preceded by any sequence of plus or minus signs. Obviously, if there
is an odd number of minus signs, the number will be negative. Next, a
decimal number admits only one decimal separator symbol which can
@@ -266,14 +312,15 @@ have to use the \macro{opset} macro. For instance:
\begin{Verbatim}[xrightmargin=0pt]
\opset{decimalsepsymbol={,}}
\end{Verbatim}
-give the comma as decimal separator symbol for the whole document, at
+gives the comma as decimal separator symbol for the whole document, at
least, until another redefinition with \verb+\opset+.
\subsection{Symbols}
\label{subsecSymboles}
The \parameter{afterperiodsymbol} parameter indicates the symbol that
follows a quotient in line in a division with period
-search\index{division!period}. Its default value is \verb+$\ldots$+
+search\index{division!period}. We will see this parameter with the
+division. Its default value is \verb+$\ldots$+
The \parameter{equalsymbol} parameter indicates the symbol used for
equality. Its default value is \verb+$=$+. In fact, this parameter is
@@ -305,9 +352,11 @@ operation is put with respect to the baseline. The possible values are
default value.
\begin{SideBySideExample}
top\quad
- \opadd[voperation=top]{45}{172}\par
+ \opadd[voperation=top]{45}{172}
+
center\quad
- \opadd[voperation=center]{45}{172}\par
+ \opadd[voperation=center]{45}{172}
+
bottom\quad
\opadd[voperation=bottom]{45}{172}
\end{SideBySideExample}
@@ -317,16 +366,18 @@ is put with repect to operands. The possible values are \verb+top+,
\verb+center+ (default value), and \verb+bottom+.
\begin{SideBySideExample}
top\quad
- \opadd[voperator=top]{45}{172}\par
+ \opadd[voperator=top]{45}{172}
+
center\quad
- \opadd[voperator=center]{45}{172}\par
+ \opadd[voperator=center]{45}{172}
+
bottom\quad
\opadd[voperator=bottom]{45}{172}
\end{SideBySideExample}
-The \parameter{deletezero} parameter indicates if some numbers in
+The \parameter{deletezero} parameter indicates if numbers in
operation should be displayed with or whithout non-significant
-zeros. Exact rôle of this parameter depends of the actual
+zeros. Exact rôle of this parameter depends of the actual
operation. We will see that when we will study the different
operations.
@@ -374,10 +425,10 @@ negative numbers in inline operations. The possible values are:
\subsection{Dimensions}
\label{subsec:Dimensions}
In displayed operations, figures are put in fixed size boxes. The
-width is given by the \parameter{lineheight} parameter and the height
-is given by the \parameter{lineheight} parameter. The default value of
-\texttt{lineheight} is \verb+\baselineskip+ that is, interline space
-in operation is the same (by default) as in the normal text. The
+width and height are given by the \parameter{lineheight}
+and \parameter{lineheight} parameters. The default value of
+\texttt{lineheight} is \verb+\baselineskip+, that is, the interline
+space in operation is the same (by default) as in the normal text. The
default value for \texttt{columnwidth} is \texttt{2ex} because the
``normal'' width of figures would give bad results.
\begin{SideBySideExample}
@@ -393,14 +444,14 @@ improve this presentation giving a ``normal'' width to the dot.
decimalsepwidth=0.27778em]
{45.89}{127.5}
\end{SideBySideExample}
-It is better but give a positive width to the box that contain the
-decimal separator is risked. It will be more difficult to place
-extern object and it is counter against the idea to have a fixed
+It is better but it is dangerous to give a positive width to the box
+which contains the decimal separator. It will be more difficult to
+place extern object and it is counter against the idea to have a fixed
grid. You should avoid this in normal time.
The \parameter{columnwidth} and \parameter{lineheight} parameters
correspond to the only dimensions that \package{xlop} provides as
-public one, that is,
+public ones, that is,
\verb+\opcolumnwidth+\index{opcolumnwidth@\texttt{$\backslash$opcolumnwidth}}
and
\verb+\oplineheight+\index{oplineheight@\texttt{$\backslash$oplineheight}}
@@ -421,8 +472,8 @@ run over numbers.
\opadd[hrulewidth=8pt]{42}{172}
\end{SideBySideExample}
-There is also a paramater which allows to control the horizontal shift
-of decimal separator. It is the \parameter{decimalsepoffset} paramater
+There is also a parameter which allows to control the horizontal shift
+of decimal separator. It is the \parameter{decimalsepoffset} parameter
with a default value of~\texttt{-0.35}. This value indicates a length
with the unit \verb+\opcolumnwidth+. We will see an example at
section~\ref{sec:Division} page~\pageref{sec:Division}.
@@ -430,7 +481,7 @@ section~\ref{sec:Division} page~\pageref{sec:Division}.
\subsection{Figure's Styles}
\label{subsec:Styles des chiffres}
The \package{xlop} package provides five types of numbers and
-associates five style paramaters:
+associates five style parameters:
\begin{itemize}
\item operands with \parameter{operandstyle};
\item result with \parameter{resultstyle};
@@ -445,7 +496,7 @@ associates five style paramaters:
{45.89}{127.5}
\end{SideBySideExample}
Keep in mind that, in this manual, we use
-\package{pstricks}\index{pstricks} package.
+\package{pstricks}\index{pstricks@\package{pstricks}} package.
\index{parameter!index|(}%
In fact, the management of these styles is even more powerfull since
@@ -465,7 +516,7 @@ with the \verb+\lightgray+ style. We don't indicate anything for the
second operand, so it takes the basic style for its class. (Then with
\verb+\blue+ style.)
-This mechanism is even more powerfull since you can write two level
+This mechanism is even more powerfull since you can write two levels
index for operands, carries, and intermediary numbers (one level for
result and carry) in order to access to each style figure of these
numbers. To simplify index, a positive index indicates the rank of a
@@ -522,7 +573,7 @@ access individually to the decimal separator style, you have to use
\index{parameter!syntax|)}
\chapter{Arithmetic Operations}
-\label{chap:Opérations arithmétiques}
+\label{chap:Opérations arithmétiques}
\section{Addition}
\label{sec:Addition}
Addition is deal by the \macro{opadd} macro. When it is in display
@@ -554,7 +605,7 @@ or not. Its default value is \texttt{true}.
The \parameter{lastcarry} parameter is also a boolean parameter. It
indicates if a carry without matching digit for the two operands must
be showed or not. Its default value is \texttt{false}. Take care to
-the exact rôle of this parameter. For instance, if the second operand
+the exact rôle of this parameter. For instance, if the second operand
in the following example is~15307, the last carry would be showed for
any value of the \texttt{lastcarry} parameter since there is a
matching digit in the second operand.
@@ -575,19 +626,85 @@ operands and the result has the same number of digits. For that,
\package{xlop} package adds non-significant zeros. Also, the
non-significant zeros of operands are not removed.
\begin{SideBySideExample}
- \opadd{012.3427}{5.2773}\par
+ \opadd{012.3427}{5.2773}
+
\opadd[deletezero=false]
{012.3427}{5.2773}
\end{SideBySideExample}
-This parameter has exactly the same rôle for inline mode than for
+This parameter has exactly the same rôle for inline mode than for
displayed mode.
\begin{SideBySideExample}
- \opadd[style=text]{02.8}{1.2}\par
+ \opadd[style=text]{02.8}{1.2}
+
\opadd[style=text,
- deletezero=false]{02.8}{1.2}\par
+ deletezero=false]{02.8}{1.2}
+\end{SideBySideExample}
+
+Version 0.27 adds a \macro{opmanyadd} macro in order to add more than
+two operands. There are some limitations:
+\begin{itemize}
+\item all the operands must be non negative;
+\item some parameters are useless, for instance \parameter{style};
+\item carries aren't displayed.
+\end{itemize}
+In the other hand, the \parameter{vmanyoperator} allows to control the
+operator signs.
+
+Here is the first example with the basic syntax. The operands must be
+enclosed inside braces. The number of arguments is not limited.
+\begin{SideBySideExample}
+ \opmanyadd{123.4}{3.1416}
+ {2.71828}{0.001}
+\end{SideBySideExample}
+
+The \macro{opmanyadd} macro accepts the style parameters for operands
+and result. About the operand style, the first index is the operand's
+place (top to bottom ones) and the second index is the digit of
+operand. For instance:
+\begin{SideBySideExample}
+ \newcommand\R{\color{red}}
+ \opmanyadd[operandstyle.2.3=\R,
+ operandstyle.3.3=\R,
+ resultstyle.3=\R,
+ resultstyle.4=\R]
+ {12.6}{853.3}{158.1}
+\end{SideBySideExample}
+This example shows that non significant zeros are discarded. They can
+be display with the \parameter{deletezero} parameter at false value:
+\begin{SideBySideExample}
+ \opmanyadd[deletezero=false]
+ {12.6}{853.3}{158.1}
\end{SideBySideExample}
+The \macro{opmanyadd} macro uses also the \parameter{voperation}
+parameter as for \macro{opadd} macro.
+
+There is a parameter which is specific to \macro{opmanyadd}:
+the \parameter{vmanyoperator} one. These parameter allows to
+display plus operator in six different ways.
+\begin{CenterExample}
+ \opmanyadd{1}{12}{123}{1234}\quad
+ \opmanyadd[vmanyoperator=center]
+ {1}{12}{123}{1234}\quad
+ \opmanyadd[vmanyoperator=top]
+ {1}{12}{123}{1234}\quad
+ \opmanyadd[vmanyoperator=bottom]
+ {1}{12}{123}{1234}
+\end{CenterExample}
+We can see that the default value is center. The values with lowercase
+first letter display as many operators than operands minus one. The
+same values with upercase first letter display one single plus
+operator:
+\begin{CenterExample}
+ \opmanyadd[vmanyoperator=Center]
+ {1}{12}{123}{1234}\quad
+ \opmanyadd[vmanyoperator=Top]
+ {1}{12}{123}{1234}\quad
+ \opmanyadd[vmanyoperator=Bottom]
+ {1}{12}{123}{1234}
+\end{CenterExample}
+
\section{Substraction}
\label{sec:soustraction}
Substraction is made by \macro{opsub} macro. In displayed mode, the
@@ -990,7 +1107,7 @@ anything. Result is record in a variable given as argument.
Since these commands don't display anything, parameters don't make
sens and aren't allowed for \macro{opadd*}, \macro{opsub*},
\macro{opmul*}, and \macro{opidiv*}. In the other hand,
-parameters \parameter{maxdivestep}, \parameter{safedivstep},
+parameters \parameter{maxdivstep}, \parameter{safedivstep},
and \parameter{period} influence calculations, then \macro{opdiv*}
macro accepts an optional argument to take account of them.
\begin{SideBySideExample}
@@ -1135,7 +1252,7 @@ decimal part are numbered from right to left, figures for integer part
are numbered from left to right. For instance, with the number
1234.56789, the second figure is 8, the second figure of the integer
part is 3, and the second figure of the decimal part is 6. It is now
-easy to guess the rôle of the six next macros:
+easy to guess the rôle of the six next macros:
\begin{itemize}
\item \parameter{opgetdigit} ;
\item \parameter{opsetdigit} ;
@@ -1146,11 +1263,11 @@ easy to guess the rôle of the six next macros:
\end{itemize}
Syntax is the same for these macros. The first argument is the
processed number (reading or writting), the second one is the index of
-te figure, and the third one is the variable name which hold the
-result (figure read or changed number). If index is out of the range,
-the reading macros give \texttt{0} as result and writing macros
-extend the number in order to reach this index (for that, zero will be
-created in new slots).
+the figure, and the third one is the variable name which hold the
+result (figure read) or the new figure (changed number). If index is
+out of the range, the reading macros give \texttt{0} as result and
+writing macros extend the number in order to reach this index (for
+that, zero will be created in new slots).
\section{Comparisons}
\label{sec:Comparaisons}
@@ -1438,8 +1555,8 @@ expression in \package{xlop}, more pleasant for users.
Formulas accept usual arithmetic operators \texttt{+}, \texttt{-},
\texttt{*}, and \texttt{/}. They accept also \texttt{:} operator for
euclidian division, and \verb+^+ for power. The \texttt{-} operator
-has both rôle of substraction and unary operator for opposite. The
-\texttt{+} has also these rôles, here the unary operator do\dots{}
+has both rôle of substraction and unary operator for opposite. The
+\texttt{+} has also these rôles, here the unary operator do\dots{}
nothing! Operands are written in decimal form or \emph{via} variable
name. However, \macro{opexpr} introduces a restriction about variable
name since variable names must be different to function names
@@ -1487,7 +1604,7 @@ Here is another example that shows that datas can come from a macro:
\appendix
\chapter{Short Summary}
-\label{chap:Aide-mémoire}
+\label{chap:Aide-mémoire}
\section{Compilation times}
\label{sec:Temps de compilation}
Compilation times was measured on a computer with
@@ -1700,6 +1817,8 @@ expected.
\verb+\oplput(T1,T2){<object>}+ &
Put \verb+<object>+ to the right of the point with coordinates
\verb+(T1,T2)+ in relation to reference point. \\\hline
+ \verb+opmanyadd[P]{n1}...{np}+ &
+ Display result of $\mathrm{n1}+\cdots+\mathrm{np}$ \\\hline
\verb+\opmul[P]{n1}{n2}+ &
Display result of \verb+n1*n2+. \\\hline
\verb+\opmul*{n1}{n2}{N}+ &
@@ -1763,7 +1882,7 @@ In this table, parameters:
\section{Parameter list}
\label{sec:Liste des parametres}
-\index{parameter@parameter!table of|(}%
+\index{parameter!table of|(}%
\begingroup
\advance\hoffset by-1.75cm \advance\linewidth by1.75cm
\begin{longtable}{|l|l|p{7cm}|}
@@ -1822,24 +1941,36 @@ In this table, parameters:
displayed only for additional shifting (value \verb+shift+), for
all the shifting (value \verb+all+), or never (value
\verb+none+). \\\hline
+ \verb+vmanyoperator+ &
+ \verb+center+ &
+ Vertical alignment for add symbol in displayed many operand
+ addition. The value \verb+top+ put operators from the level of first
+ operand to the level of second to last operand. The value
+ \verb+center+ put operators between operands. The value
+ \verb+bottom+ put operators from the level of second operand to the
+ level of last operand. The value \verb+Top+ put one single operator
+ at the level of first operand. The value \verb+\center+ put one
+ single operator at the vertical middle of operands. The value
+ \verb+Bottom+ put one single operator at the level of last
+ operand. \\\hline
\verb+voperation+ &
\verb+bottom+ &
- Vertical alignement for displayed operation. The value \verb+bottom+
+ Vertical alignment for displayed operation. The value \verb+bottom+
indicates that the bottom of operation will be aligned with
baseline. The value \verb+top+ indicates that the top of operation
will be aligned with baseline. The value \verb+center+ indicates
that operation will be verticaly centred with baseline. \\\hline
\verb+voperator+ &
\verb+center+ &
- Vertical alignement for operators in displayed operations. The value
+ Vertical alignment for operators in displayed operations. The value
\verb+top+ put operator at the level of first operand. The value
\verb+bottom+ put operator at the level of second operand. The value
\verb+center+ put operator between operands. \\\hline
\verb+hfactor+ &
\verb+decimal+ &
- Sort of operands alignement for displayed operation. The value
- \verb+decimal+ indicates an alignement on decimal separator. The
- value \verb+right+ indicates a flushright alignement. \\\hline
+ Sort of operands alignment for displayed operation. The value
+ \verb+decimal+ indicates an alignment on decimal separator. The
+ value \verb+right+ indicates a flushright alignment. \\\hline
\verb+vruleperiod+ &
\verb+-0.2+ &
Vertical position of rule which indicates period of quotient for
@@ -1954,20 +2085,21 @@ In this table, parameters:
\verb+\scriptsize+ &
Style for carries. The default value when compilation are made
without \LaTeX{} is \verb+\sevenrm+. \\\hline
-\end{longtable}\index{parameter@parameter!table of|)}
+\end{longtable}\index{parameter!table of|)}
\endgroup
\chapter{Tricks}
\label{chap:Trucs et astuces}
-\section{\package{xlop} vs. \package{calc} and \package{fp}}
+\section{\package{xlop} vs. \package{calc} and \package{xfp}}
You could believe that \package{xlop} can replace package such
\package{calc}\index{package!calc}\index{calc} and
-\package{fp}\index{package!fp}\index{fp}. In fact, that is not so
+\package{xfp}\index{package!xfp}\index{xfp}. In fact, that is not so
simple. Obviously \package{xlop} can do complex calculations, on arbitrary
long numbers but, unlike \package{calc}, it don't allow to process
-directly dimensions. Comparison with \package{fp} is somewhere more
+directly dimensions. Comparison with \package{xfp} is somewhere more
realistic but remember that \package{xlop} can make memory usage too
-high.
+high. In fact \package{xfp} is far more powerfull than \package{xlop}
+about pure calmculation!
If you want to process calculations on length\index{length}, you can use
that a dimen register allocation to a counter gives a number which
@@ -2182,7 +2314,7 @@ aren't allowed. It's not a bug, it's a feature. Author thinks that a
user who write brackets without anything between these brackets is
going to make a mistake. To obviate this
prohibition\index{parameter!void}, there is the particular
-parameter \parameter{nil} which has exactly this rôle.
+parameter \parameter{nil} which has exactly this rôle.
\index{loop|)}
Finally, note the trick \verb+{\setbox2=\box2}+ to obtain a void box
@@ -2272,8 +2404,8 @@ version~0.3 and its ``stable'' version will be version~0.4.
The features of version~0.3 aren't definitively fixed but there are
some points planned:
\begin{itemize}
-\item international version for posées;
-\item opérations from 2 to 36~basis;
+\item international version for posées;
+\item opérations from 2 to 36~basis;
\item additional high level functions with roots (\macro{oproot} for
any roots and \macro{opsqrt} for square root), exponential function,
logarithm, trigonometric functions (direct, inverse, hyperbolic);
@@ -2282,7 +2414,6 @@ some points planned:
are not the ones of the number, there will be overflow or filling);
this macro was present in version~0.1 and allow to display numbers
decimal aligned, right aligned, or left aligned;
-\item macro for addition with more than two operands;
\item parameter for scientific or engineer notation;
\item macro to allow to write a multi-line number and/or with thousand
separator;
diff --git a/macros/generic/xlop/tex/xlop.sty b/macros/generic/xlop/tex/xlop.sty
index 65de248f1f..88288d144e 100644
--- a/macros/generic/xlop/tex/xlop.sty
+++ b/macros/generic/xlop/tex/xlop.sty
@@ -1,3 +1,3 @@
-\ProvidesPackage{xlop}[2009/12/02 package wrapper for xlop.tex]
+\ProvidesPackage{xlop}[2020/04/26 package wrapper for xlop.tex]
\input xlop.tex
\endinput
diff --git a/macros/generic/xlop/tex/xlop.tex b/macros/generic/xlop/tex/xlop.tex
index ef3360dd43..e6f922a580 100644
--- a/macros/generic/xlop/tex/xlop.tex
+++ b/macros/generic/xlop/tex/xlop.tex
@@ -1,12 +1,12 @@
-\def\fileversion{0.26}
-\def\filedate{2017/01/07}
+\def\fileversion{0.27}
+\def\filedate{2020/04/28}
%%
%% xlop.tex:
%% eXtra Large OPeration macros for Generic TeX.
-%% See `user.pdf' for documentation;
-%% `hacker.pdf' for explanation.
+%% See `xlop-doc.pdf' for documentation;
+%% `xlop-doc-fr.pdf' for french documentation.
%%
-%% Copyright 2005,2017, by Jean-C\^ome Charpentier
+%% Copyright 2005-2020, by Jean-C\^ome Charpentier
%% Jean-Come.Charpentier@wanadoo.fr
%%
%% This program may be distributed and/or modified under the
@@ -28,6 +28,9 @@
\newcount\op@count@iv
\newcount\op@count@v
\newcount\op@count@vi
+% add 0.27
+\newcount\op@nbop
+% end add 0.27
\newtoks\op@currentstyle
\expandafter\ifx\csname @latexerr\endcsname\relax
\long\def\@ifundefined#1#2#3{%
@@ -143,7 +146,13 @@
\def\op@string@american{american}
\def\op@string@both{both}
\def\op@string@bottom{bottom}
+% add 0.27
+\def\op@string@Bottom{Bottom}
+% end add 0.27
\def\op@string@center{center}
+% add 0.27
+\def\op@string@Center{Center}
+% end add 0.27
\def\op@string@decimal{decimal}
\def\op@string@delete{delete}
\def\op@string@display{display}
@@ -165,6 +174,9 @@
\def\op@string@strike{strike}
\def\op@string@text{text}
\def\op@string@top{top}
+% add 0.27
+\def\op@string@Top{Top}
+% end add 0.27
\def\op@string@true{true}
\def\op@string@warning{warning}
@@ -217,6 +229,29 @@
{Value must be `top', `center', or `bottom'}%
\fi\fi\fi
}
+% add 0.27
+\def\pOP@vmanyoperator#1{\edef\@tempa{#1}%
+ \ifx\@tempa\op@string@top
+ \let\op@vmanyoperator\op@string@top
+ \else\ifx\@tempa\op@string@bottom
+ \let\op@vmanyoperator\op@string@bottom
+ \else\ifx\@tempa\op@string@center
+ \let\op@vmanyoperator\op@string@center
+ \else\ifx\@tempa\op@string@Top
+ \let\op@vmanyoperator\op@string@Top
+ \else\ifx\@tempa\op@string@Bottom
+ \let\op@vmanyoperator\op@string@Bottom
+ \else\ifx\@tempa\op@string@Center
+ \let\op@vmanyoperator\op@string@Center
+ \else
+ \op@error{Parameter vmanyoperator accept only `top', `center',
+ `bottom', ^^J \space
+ `Top', `Center', and `Bottom'. Here, the value is `#1'}%
+ {Value must be `top', `center', `bottom', `Top', `Center',
+ or `Bottom'}%
+ \fi\fi\fi\fi\fi\fi
+}
+% end add 0.27
\def\pOP@hfactor#1{\edef\@tempa{#1}%
\ifx\@tempa\op@string@right
\let\op@hfactor\op@string@right
@@ -473,7 +508,11 @@
hrulewidth=0.4pt,vrulewidth=0.4pt,
behaviorsub=silent,country=french,
operandstyle=,resultstyle=,remainderstyle=,
- intermediarystyle=}
+ intermediarystyle=,
+ % add 0.27
+ vmanyoperator=center%
+ % end add 0.27
+}
\expandafter\ifx\csname @latexerr\endcsname\relax
\opset{carrystyle=\sevenrm}
\else
@@ -1575,6 +1614,107 @@
\fi
\endgroup
}
+% add 0.27
+\def\opmanyadd{\@ifnextchar[{\op@manyadd}{\op@manyadd[nil]}}
+\def\op@manyadd[#1]{%
+ \begingroup
+ \opset{#1}%
+ \op@nbop \z@
+ \opcopy{0}{OMA@result}%
+ \op@@manyadd
+}
+\def\op@@manyadd#1{%
+ \advance \op@nbop \@ne
+ \op@split{#1}{OMA@op\the\op@nbop}%
+ \ifop@deletezero
+ \op@unzero{OMA@op\the\op@nbop}%
+ \fi
+ \opadd*{OMA@result}{#1}{OMA@result}%
+ \op@split{OMA@result}{OMA@result}%
+ \@ifnextchar\bgroup{\op@@manyadd}{\op@manyaddend}%
+}
+\def\op@manyaddend{%
+ \op@count@i = \csname OP@OMA@op1@i\endcsname
+ \count@ \@ne
+ \loop
+ \ifnum\count@ < \op@nbop
+ \advance\count@ \@ne
+ \op@count@i = \op@max{\the\op@count@i}
+ {\csname OP@OMA@op\the\count@ @i\endcsname}%
+ \repeat
+ \op@count@i = \op@max{\the\op@count@i}{\OP@OMA@result@i}%
+ \advance\op@count@i \@ne
+ \op@count@ii = \csname OP@OMA@op1@d\endcsname
+ \count@ \@ne
+ \loop
+ \ifnum\count@ < \op@nbop
+ \advance\count@ \@ne
+ \op@count@ii = \op@max{\the\op@count@ii}
+ {\csname OP@OMA@op\the\count@ @d\endcsname}%
+ \repeat
+ \op@count@ii = \op@max{\the\op@count@ii}{\OP@OMA@result@d}%
+ \op@count@z = \op@count@i
+ \advance\op@count@z \op@count@ii
+ \setbox1=\hbox to\op@count@z\opcolumnwidth{%
+ \ophline(0,0.75){\the\op@count@z}%
+ \ifx\op@vmanyoperator\op@string@Top
+ \oplput(0,\the\op@nbop){\op@addsymbol}%
+ \else\ifx\op@vmanyoperator\op@string@Bottom
+ \oplput(0,1){\op@addsymbol}%
+ \else\ifx\op@vmanyoperator\op@string@Center
+ \count@ \op@nbop
+ \divide \count@ \tw@
+ \ifodd\op@nbop
+ \advance\count@ \@ne
+ \oplput(0,\the\count@){\op@addsymbol}%
+ \else
+ \oplput(0,\the\count@.5){\op@addsymbol}%
+ \fi
+ \fi\fi\fi
+ \count@ \tw@
+ \op@count@iii \@ne
+ \loop
+ \ifx\op@vmanyoperator\op@string@top
+ \oplput(0,\the\count@){\op@addsymbol}%
+ \else\ifx\op@vmanyoperator\op@string@bottom
+ \oplput(0,\the\op@count@iii){\op@addsymbol}%
+ \else\ifx\op@vmanyoperator\op@string@center
+ \oplput(0,\the\op@count@iii.5){\op@addsymbol}%
+ \fi\fi\fi
+ \ifnum \count@ < \op@nbop
+ \advance \count@ \@ne
+ \advance \op@count@iii \@ne
+ \repeat
+ \vbox{%
+ \count@ \@ne
+ \loop
+ \op@makebox{\the\op@count@i}
+ {\the\op@count@ii}
+ {operandstyle.\the\count@}
+ {OMA@op\the\count@}%
+ \hbox{\box0}%
+ \ifnum \count@ < \op@nbop
+ \advance \count@ \@ne
+ \repeat
+ \op@makebox{\the\op@count@i}
+ {\the\op@count@ii}
+ {resultstyle}
+ {OMA@result}%
+ \hbox{\box0}%
+ }%
+ }%
+ \leavevmode
+ \dimen0=\op@nbop\oplineheight
+ \ifx\op@voperation\op@string@center
+ \lower0.5\dimen0\box1
+ \else\ifx\op@voperation\op@string@top
+ \lower\dimen0\box1
+ \else
+ \box1
+ \fi\fi
+ \endgroup
+}
+% end add 0.27
\def\opmul{\@ifnextchar*{\op@mulstar}{\op@mulnostar}}
\def\op@mulstar*#1#2#3{%
\begingroup
@@ -1881,16 +2021,14 @@
\opset{#1}
\op@split{#2}{a}%
\op@split{#3}{b}%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%% Ajout du 20/11/2006 %%%
-%%% Sur indication de Christophe Poulain %%%
+ % add 20/11/2006
+ % Thanks to Christophe Poulain
\op@cmp{b}{zero}%
\ifopeq
\op@error{divisor must be nonzero}%
{You have to learn some math}%
\fi
-%%% Fin ajout %%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % end add
\ifop@error
\op@errorwrite
\else
@@ -1934,16 +2072,14 @@
\opset{#1}%
\op@split{#2}{a}%
\op@split{#3}{b}%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%% Ajout du 20/11/2006 %%%
-%%% Sur indication de Cristophe Poulain %%%
+ % add 20/11/2006
+ % thanks to Christophe Poulain
\op@cmp{b}{zero}%
\ifopeq
\op@error{divisor must be nonzero}%
{You have to learn some math}%
\fi
-%%% Fin ajout %%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % end add
\ifop@error
\op@errorwrite
\else
@@ -2118,16 +2254,14 @@
\begingroup
\op@split{#1}{a}%
\op@split{#2}{b}%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%% Ajout du 20/11/2006 %%%
-%%% Sur indication de Cristophe Poulain %%%
+ % add 20/11/2006
+ % thanks to Christophe Poulain
\op@cmp{b}{zero}%
\ifopeq
\op@error{divisor must be nonzero}%
{You have to learn some math}%
\fi
-%%% Fin ajout %%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % end add
\ifop@error
\op@errorwrite
\else
@@ -2170,16 +2304,14 @@
\let\op@shiftdecimalsep\op@string@both
\op@split{#2}{a}%
\op@split{#3}{b}%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%% Ajout du 20/11/2006 %%%
-%%% Sur indication de Cristophe Poulain %%%
+ % add 20/11/2006
+ % thanks to Christophe Poulain
\op@cmp{b}{zero}%
\ifopeq
\op@error{divisor must be nonzero}%
{You have to learn some math}%
\fi
-%%% Fin ajout %%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % end add
\ifop@error
\op@errorwrite
\else
@@ -3031,11 +3163,13 @@
\ifop@error
\op@errorwrite
\else
- \ifnum\@nameuse{OP@a@w}>#2\relax
- \@namexdef{Op@#3}{\@nameuse{OP@a@#2}}%
- \else
+ % modif 0.27
+ \ifnum\OP@a@w<#2\relax
\@namexdef{Op@#3}{0}%
+ \else
+ \@namexdef{Op@#3}{\@nameuse{OP@a@#2}}%
\fi
+ % end modif 0.27
\fi
}
\def\opsetdigit#1#2#3{%
@@ -3072,11 +3206,13 @@
\else
\op@count@z=\OP@a@d
\advance\op@count@z by#2\relax
- \ifnum\OP@a@w>\op@count@z\relax
- \@namexdef{Op@#3}{\@nameuse{OP@a@\the\op@count@z}}%
- \else
+ % modif 0.27
+ \ifnum\OP@a@w<\op@count@z\relax
\@namexdef{Op@#3}{0}%
+ \else
+ \@namexdef{Op@#3}{\@nameuse{OP@a@\the\op@count@z}}%
\fi
+ % end modif 0.27
\fi
\endgroup
}
@@ -3127,7 +3263,9 @@
\def\opsetdecimaldigit#1#2#3{%
\begingroup
\op@split{#1}{a}%
- \op@split{#3}{b}%
+ % modif 0.27
+ \op@split{#2}{b}%
+ % end modif 0.27
\ifop@error
\op@errorwrite
\else
@@ -3135,9 +3273,9 @@
\ifnum\OP@a@d<\Op@@b\relax
\op@count@z=\Op@@b
\advance\op@count@z by-\OP@a@d
-%%% [2006/10/06] Bug find by Dave Jarvis.
-% \advance\op@count@z by1\relax
-%%% end bug fixing
+ % [2006/10/06] Bug find by Dave Jarvis.
+ % \advance\op@count@z by1\relax
+ % end bug fixing
\op@count@i=\OP@a@w
\advance\op@count@i by\op@count@z\relax
\op@count@z=\OP@a@w
@@ -3154,21 +3292,25 @@
\@namexdef{OP@a@\the\op@count@i}{0}%
\advance\op@count@i by-1
\repeat
-%%% [2006/10/06] Bug find by Dave Jarvis.
-% \@namexdef{OP@a@1}{\Op@@b}%
- \@namexdef{OP@a@1}{#2}%
-%%% end bug fixing
+ % [2006/10/06] Bug find by Dave Jarvis.
+ % \@namexdef{OP@a@1}{\Op@@b}%
+ % modif 0.27
+ \@namexdef{OP@a@1}{#3}%
+ % end modif 0.27
+ % end bug fixing
\else
\op@count@z=\OP@a@d
-%%% [2006/10/06] Bug find by Dave Jarvis.
-% \advance\op@count@z by-#2\relax
+ % [2006/10/06] Bug find by Dave Jarvis.
+ % \advance\op@count@z by-#2\relax
\advance\op@count@z by-\Op@@b\relax
-%%% end bug fixing
+ % end bug fixing
\advance\op@count@z by1
-%%% [2006/10/06] Bug find by Dave Jarvis.
-% \@namexdef{OP@a@\the\op@count@z}{\Op@@b}%
- \@namexdef{OP@a@\the\op@count@z}{#2}%
-%%% end bug fixing
+ % [2006/10/06] Bug find by Dave Jarvis.
+ % \@namexdef{OP@a@\the\op@count@z}{\Op@@b}%
+ % modif 0.27
+ \@namexdef{OP@a@\the\op@count@z}{#3}%
+ % end modif 0.27
+ % end bug fixing
\fi
\op@unsplit{a}{#1}%
\fi
diff --git a/macros/latex/contrib/acro/README b/macros/latex/contrib/acro/README
index 9dbf34791f..1af233ac32 100644
--- a/macros/latex/contrib/acro/README
+++ b/macros/latex/contrib/acro/README
@@ -1,32 +1,50 @@
--------------------------------------------------------------------------
-the ACRO package v2.11d 2020/03/07
+the ACRO package v3.0 2020/04/29
Typeset Acronyms
--------------------------------------------------------------------------
Clemens Niederberger
-Web: https://bitbucket.org/cgnieder/acro
+Web: https://github.com/cgnieder/acro
E-Mail: contact@mychemistry.eu
--------------------------------------------------------------------------
Copyright 2012--2020 Clemens Niederberger
This work may be distributed and/or modified under the
-conditions of the LaTeX Project Public License, either version 1.3
+conditions of the LaTeX Project Public License, either version 1.3c
of this license or (at your option) any later version.
The latest version of this license is in
http://www.latex-project.org/lppl.txt
-and version 1.3 or later is part of all distributions of LaTeX
-version 2005/12/01 or later.
+and version 1.3c or later is part of all distributions of LaTeX
+version 2008/05/04 or later.
This work has the LPPL maintenance status `maintained'.
The Current Maintainer of this work is Clemens Niederberger.
--------------------------------------------------------------------------
-The acro package consists of the files
-- acro.sty, acro.definitions.tex, acro.cfg
-- acro-manual.tex, acro-manual.pdf, acro-manual.cls
-- acro.history, README
---------------------------------------------------------------------------
-If you have any ideas, questions, suggestions or bugs to report, please
-feel free to contact me.
+The acro package consists of the code file:
+
+ acro.sty
+
+The acro package consists of documentation files:
+
+ README
+ acro-manual.tex
+ acro-manual.pdf
+ acro-manual.cls
+
+The acro package consists of example files -- these should be placed in a
+folder examples/ in the same folder as acro-manual.pdf:
+
+ acro.example.acflike.pdf, acro.example.acflike.tex
+ acro.example.basic.pdf, acro.example.basic.tex
+ acro.example.possessive.pdf, acro.example.possessive.tex
+ acro.example.units.pdf, acro.example.units.tex
+ acro.example.issue-109.pdf, acro.example.issue-109.tex
+ acro.example.issue-111.pdf, acro.example.issue-111.tex
+ acro.example.issue-119.pdf, acro.example.issue-119.tex
+ acro.example.issue-154.pdf, acro.example.issue-154.tex
+ acro.example.texsx-505891.pdf, acro.example.texsx-505891.tex
+ acro.example.texsx-507726.pdf, acro.example.texsx-507726.tex
+
--------------------------------------------------------------------------
diff --git a/macros/latex/contrib/acro/acro-manual.cls b/macros/latex/contrib/acro/acro-manual.cls
deleted file mode 100644
index e0a35f4781..0000000000
--- a/macros/latex/contrib/acro/acro-manual.cls
+++ /dev/null
@@ -1,391 +0,0 @@
-% --------------------------------------------------------------------------
-% the ACRO package
-%
-% Typeset Acronyms
-%
-% --------------------------------------------------------------------------
-% Clemens Niederberger
-% Web: https://bitbucket.org/cgnieder/acro/
-% E-Mail: contact@mychemistry.eu
-% --------------------------------------------------------------------------
-% Copyright 2011--2020 Clemens Niederberger
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3
-% of this license or (at your option) any later version.
-% The latest version of this license is in
-% http://www.latex-project.org/lppl.txt
-% and version 1.3 or later is part of all distributions of LaTeX
-% version 2005/12/01 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Clemens Niederberger.
-% --------------------------------------------------------------------------
-% The acro package consists of the files
-% - acro.sty, acro.definitions.tex, acro.cfg
-% - acro-manual.tex, acro-manual.pdf, acro-manual.cls
-% - acro.history, README
-% --------------------------------------------------------------------------
-% If you have any ideas, questions, suggestions or bugs to report, please
-% feel free to contact me.
-% --------------------------------------------------------------------------
-\ProvidesClass{acro-manual}[2020/01/24]
-
-\LoadClass[load-preamble,add-index]{cnltx-doc}
-\RequirePackage{imakeidx}
-\RequirePackage[utf8]{inputenc}
-
-\usepackage{acro}
-\acsetup{
- single = true ,
- accsupp = true ,
- index = true ,
- use-barriers = true ,
- hyperref = true ,
- log = true
-}
-
-\setcnltx{
- package = {acro} ,
- info = {Typeset Acronyms and other Abbreviations} ,
- authors = Clemens Niederberger ,
- email = contact@mychemistry.eu ,
- url = https://bitbucket.org/cgnieder/acro/ ,
- abstract = {%
- \acro\ allows you to define and use abbreviations in a simple way.
- Abbreviations can be divided into different classes of abbreviations.
- Lists of abbreviations can be created (also of separate classes of
- abbreviations) and printed wherever you want the lists to appear.\par
- \acro\ provides an option \option{single} which ignores abbreviations that
- are used only once in the whole document.\par
- As an experimental feature \acro\ also offers the option \option{sort} which
- automatically sorts the list created by \cs{printacronyms}.\par
- \acro\ also has the feature of creating \emph{local} lists
- } ,
- add-cmds = {
- ac, Ac, aca, Aca, acap, Acap, acbarrier, acdot, acf, Acf, acflike, acg,
- acfp, Acfp, acfplike, aciftrailing, acl, Acl, aclp, Aclp, acp, Acp,
- acpsingle, Acpsingle, AcroRegisterTrailing, acs, Acs, acsingle,
- Acsingle, acsp, Acsp, acspace, acreset, acresetall, acsetup,
- DeclareAcroCommand, DeclareAcronym, DeclareAcroExtraStyle,
- DeclareAcroFirstStyle, DeclareAcroListHeading,
- DeclareAcroListStyle, DeclareAcroPageStyle, DeclarePseudoAcroCommand,
- iac, Iac, iaca, Iaca, iacs, Iacs, iacl, Iacl, iacf, Iacf, iacflike,
- Iacflike,
- NewAcroCommand, NewPseudoAcroCommand,
- printacronyms,
- ProvideAcroCommand, ProvideAcroEnding, ProvidePseudoAcroCommand,
- RenewAcroCommand, RenewPseudoAcroCommand
- } ,
- add-silent-cmds = {
- addcolon, DeclareInstance, babelhyphen, ExplSyntaxOff, ExplSyntaxOn, nato,
- NewDocumentCommand, newlist, ny, setlist
- } ,
- index-setup = { level = \section , headers={\indexname}{\indexname} }
-}
-
-\colorlet{property}{blue}
-\newidxcmd\property{\code{\textcolor{property}{#1}}}[ (property)]
-\newrobustcmd*\prop{\@ifstar{\cnltx@prop@star}{\cnltx@prop@nostar}}
-
-\newrobustcmd*\cnltx@prop@star{%
- \cnltx@ifdash
- {\cnltx@prop@aux*\meta}
- {\cnltx@prop@aux*\marg}%
-}
-\newrobustcmd*\cnltx@prop@nostar{%
- \cnltx@ifdash
- {\cnltx@prop@aux{}\meta}
- {\cnltx@prop@aux{}\marg}%
-}
-\newcommand*\cnltx@prop@aux[4]{%
- \code{\property#1{#3}\cnltx@isvalue#2{#4}}%
-}
-
-\newrobustcmd*\propis{%
- \@ifstar
- {\cnltx@propis*}
- {\cnltx@propis{}}%
-}
-\newrobustcmd*\cnltx@propis[1]{%
- \cnltx@ifdash
- {\cnltx@prop@aux{#1}\@firstofone}
- {\cnltx@prop@aux{#1}\Marg}%
-}
-\newrobustcmd*\choiceprop{%
- \@ifstar
- {\cnltx@choiceprop@star}
- {\cnltx@choiceprop@nostar}%
-}
-\def\cnltx@choiceprop@star#1#2{%
- \code{\property*{#1}\cnltx@isvalue\choices{#2}}}
-\def\cnltx@choiceprop@nostar#1#2{%
- \code{\property{#1}\cnltx@isvalue\choices{#2}}}
-\newcommand*\boolprop{%
- \@ifstar
- {\cnltx@boolprop@star}
- {\cnltx@boolprop@nostar}%
-}
-\def\cnltx@boolprop@star#1{\choiceprop*{#1}{\default{true},false}}
-\def\cnltx@boolprop@nostar#1{\choiceprop{#1}{\default{true},false}}
-
-\newenvironment{properties}
- {%
- \def\propert{\@cnltx@option@item\property}%
- \def\propval{\@cnltx@option@item\prop}%
- \def\proplit{\@cnltx@option@item\propis}%
- \def\propchoice{\@cnltx@option@item\choiceprop}%
- \def\propbool{\@cnltx@option@item\boolprop}%
- \cnltxlist
- }
- {\endcnltxlist}
-
-\protected\def\@versionstar{\raisebox{-.25em}{*}}
-\newcommand\versionstar{\texorpdfstring{\@versionstar}{*}}
-
-\newcommand*\TF{\textcolor{red}{\uline{\code{\textcolor{cs}{\textit{TF}}}}}}
-
-\RequirePackage{fontawesome}
-\RequirePackage{datetime2}
-\DTMsetup{useregional=numeric,datesep=/}
-\newrobustcmd*\acro@add@version[2]{%
- \csdef{ac@ver@#2}{%
- \DTMdate{#1}%
- \csgdef{ac@ver@#2used}{}%
- \csdef{ac@ver@#2}{\DTMdate{#1}}%
- }%
-}
-
-\newrobustcmd*\ac@date[1]{\ifcsdef{ac@ver@#1used}{}{ (\csuse{ac@ver@#1})}}
-\newrobustcmd*\ac@ifnew[1]{\ifcsstring{c_acro_version_tl}{#1}}
-\newrobustcmd*\ac@NEW{\faStarO\ New}
-
-\renewrobustcmd*\sinceversion[1]{%
- \ac@ifnew{#1}%
- {\cnltx@version@note{\textcolor{red}{\ac@NEW}}}%
- {\cnltx@version@note{\GetTranslation{cnltx-introduced}~#1\ac@date{#1}}}%
-}
-\renewrobustcmd*\changedversion[1]{%
- \cnltx@version@note{\GetTranslation{cnltx-changed}~#1\ac@date{#1}}%
-}
-
-\newnote*\sincechanged[2]{%
- \GetTranslation{cnltx-introduced}~#1\ac@date{#1},
- changed with version~#2\ac@date{#2}\ac@ifnew{#2}{ \ac@NEW}{}%
-}
-
-\RenewDocumentEnvironment{commands}{}
- {%
- \cnltx@set@catcode_{12}%
- \let\command\cnltx@command
- \cnltxlist
- }
- {\endcnltxlist}
-
-\RequirePackage{tcolorbox,xsimverb}
-\tcbuselibrary{skins,breakable}
-\tcbset{enhanced,enhanced jigsaw}
-
-\newtcolorbox{bewareofthedog}{
- colback = white ,
- colframe = red ,
- underlay={%
- \path[draw=none]
- (interior.south west)
- rectangle node[red]{\Huge\bfseries !}
- ([xshift=-4mm]interior.north west);
- }%
-}
-
-\newtcolorbox{cnltxcode}[1][]{
- boxrule = 1pt ,
- colback = cnltxbg ,
- colframe = cnltx ,
- arc = 5pt ,
- beforeafter skip = .5\baselineskip ,%
- #1%
-}
-
-\newcommand*\acroman@readoptions[1]{%
- \catcode`\^^M=13
- \acroman@read@options{#1}%
-}
-
-\begingroup
-\catcode`\^^M=13
-\gdef\acroman@read@options#1#2^^M{%
- \endgroup
- \ifblank{#2}{}{\acroman@read@options@#2}%
- #1%
- \XSIMfilewritestart*{\jobname.tmp}%
-}%
-\endgroup
-\def\acroman@read@options@[#1]{\pgfqkeys{/cnltx}{#1}}
-
-\RenewDocumentEnvironment{sourcecode}{}
- {%
- \begingroup
- \acroman@readoptions{%
- \setlength\cnltx@sidebysidewidth
- {\dimexpr .45\columnwidth -\lst@xleftmargin -\lst@xrightmargin\relax}%
- \expanded{%
- \noexpand\lstset{
- style=cnltx,
- \ifboolexpe{ bool {cnltx@sidebyside} and not bool {cnltx@codeonly} }
- {linewidth=\cnltx@sidebysidewidth,}{}%
- \expandonce\cnltx@local@listings@options
- }%
- }%
- \XSIMgobblechars{2}%
- }%
- }
- {%
- \XSIMfilewritestop
- \cnltxcode[breakable]%
- \lstinputlisting[style=cnltx]{\jobname.tmp}%
- \endcnltxcode
- }
-
-\RenewDocumentEnvironment{example}{}
- {%
- \begingroup
- \acroman@readoptions{%
- \setlength\cnltx@sidebysidewidth
- {\dimexpr .45\columnwidth -\lst@xleftmargin -\lst@xrightmargin\relax}%
- \expanded{%
- \noexpand\lstset{
- style=cnltx,
- \ifboolexpe{ bool {cnltx@sidebyside} and not bool {cnltx@codeonly} }
- {linewidth=\cnltx@sidebysidewidth,}{}%
- \expandonce\cnltx@local@listings@options
- }%
- }%
- \XSIMgobblechars{2}%
- }%
- }
- {%
- \XSIMfilewritestop
- \ifbool{cnltx@sidebyside}
- {%
- \cnltxcode
- \noindent
- \minipage[c]{\cnltx@sidebysidewidth}%
- \cnltx@pre@source@hook
- \lstinputlisting[style=cnltx] {\jobname.tmp}%
- \cnltx@after@source@hook
- \endminipage\hfill
- \minipage[c]{\cnltx@sidebysidewidth}%
- \cnltx@pre@example@hook
- \input {\jobname.tmp}%
- \cnltx@after@example@hook
- \endminipage
- }
- {%
- \cnltxcode[breakable]%
- \cnltx@pre@source@hook
- \lstinputlisting{\jobname.tmp}%
- \cnltx@after@source@hook
- \tcblower
- \cnltx@pre@example@hook
- \input {\jobname.tmp}%
- \cnltx@after@example@hook
- }%
- \endcnltxcode
- }
-
-\RequirePackage[
- backend=biber,
- style=cnltx,
- sortlocale=en_US,
- indexing=cite]{biblatex}
-\RequirePackage{csquotes,varioref}
-\defbibheading{bibliography}{\section{References}}
-
-\RequirePackage[biblatex]{embrac}[2012/06/29]
-\ChangeEmph{[}[,.02em]{]}[.055em,-.08em]
-\ChangeEmph{(}[-.01em,.04em]{)}[.04em,-.05em]
-
-% additional packages:
-\RequirePackage{longtable,array,booktabs,enumitem,amssymb}
-
-\newcommand*\h[1]{\textcolor{cnltx}{\textbf{#1}}}
-\newcommand*\mailto[1]{\texttt{\href{mailto:#1}{#1}}}
-
-\ProvideAcroEnding {possessive} {'s} {'s}
-
-\acro@add@version{2012-06-22}{0.1}
-\acro@add@version{2012-06-23}{0.1a}
-\acro@add@version{2012-06-24}{0.1b}
-\acro@add@version{2012-06-24}{0.1c}
-\acro@add@version{2012-06-24}{0.2}
-\acro@add@version{2012-06-25}{0.2a}
-\acro@add@version{2012-06-25}{0.3}
-\acro@add@version{2012-06-27}{0.3a}
-\acro@add@version{2012-06-29}{0.3b}
-\acro@add@version{2012-07-16}{0.3c}
-\acro@add@version{2012-07-23}{0.3d}
-\acro@add@version{2012-07-24}{0.3e}
-\acro@add@version{2012-09-28}{0.4}
-\acro@add@version{2012-10-07}{0.4a}
-\acro@add@version{2012-11-30}{0.5}
-\acro@add@version{2012-12-14}{0.6}
-\acro@add@version{2013-01-02}{0.6a}
-\acro@add@version{2013-01-16}{1.0}
-\acro@add@version{2013-01-26}{1.1}
-\acro@add@version{2013-01-29}{1.1a}
-\acro@add@version{2013-02-09}{1.2}
-\acro@add@version{2013-04-04}{1.2a}
-\acro@add@version{2013-05-06}{1.3}
-\acro@add@version{2013-05-09}{1.3a}
-\acro@add@version{2013-05-30}{1.3b}
-\acro@add@version{2013-06-16}{1.3c}
-\acro@add@version{2013-07-08}{1.3d}
-\acro@add@version{2013-08-07}{1.3e}
-\acro@add@version{2013-08-27}{1.4}
-\acro@add@version{2013-09-02}{1.4a}
-\acro@add@version{2013-09-24}{1.4b}
-\acro@add@version{2013-11-04}{1.4c}
-\acro@add@version{2013-11-22}{1.4d}
-\acro@add@version{2013-12-18}{1.5}
-\acro@add@version{2015-02-26}{1.6}
-\acro@add@version{2015-04-08}{1.6a}
-\acro@add@version{2015-05-10}{1.6b}
-\acro@add@version{2015-08-16}{2.0}
-\acro@add@version{2015-08-25}{2.0a}
-\acro@add@version{2015-08-29}{2.0b}
-\acro@add@version{2015-09-05}{2.1}
-\acro@add@version{2015-10-03}{2.2}
-\acro@add@version{2016-01-07}{2.2a}
-\acro@add@version{2016-01-21}{2.2b}
-\acro@add@version{2016-02-02}{2.2c}
-\acro@add@version{2016-03-14}{2.3}
-\acro@add@version{2016-03-25}{2.4}
-\acro@add@version{2016-04-14}{2.4a}
-\acro@add@version{2016-05-03}{2.4b}
-\acro@add@version{2016-05-25}{2.5}
-\acro@add@version{2016-05-26}{2.5a}
-\acro@add@version{2016-05-30}{2.5b}
-\acro@add@version{2016-07-20}{2.6}
-\acro@add@version{2016-08-13}{2.6a}
-\acro@add@version{2016-08-13}{2.6b}
-\acro@add@version{2016-08-16}{2.6c}
-\acro@add@version{2016-08-30}{2.6d}
-\acro@add@version{2016-09-04}{2.6e}
-\acro@add@version{2017-01-22}{2.7}
-\acro@add@version{2017-02-09}{2.7a}
-\acro@add@version{2017-06-21}{2.7b}
-\acro@add@version{2017-08-28}{2.7c}
-\acro@add@version{2018-01-30}{2.8}
-\acro@add@version{2019-02-17}{2.9}
-\acro@add@version{2019-09-23}{2.10}
-\acro@add@version{2019-10-02}{2.10a}
-\acro@add@version{2019-10-06}{2.10b}
-\acro@add@version{2019-10-12}{2.10c}
-\acro@add@version{2019-12-30}{2.10d}
-\acro@add@version{2020-01-11}{2.11}
-\acro@add@version{2020-01-16}{2.11a}
-\acro@add@version{2020-01-24}{2.11b}
-\acro@add@version{2020-02-03}{2.11c}
-
-\endinput
diff --git a/macros/latex/contrib/acro/acro-manual.pdf b/macros/latex/contrib/acro/acro-manual.pdf
index a352ce8772..adcbb7fb30 100644
--- a/macros/latex/contrib/acro/acro-manual.pdf
+++ b/macros/latex/contrib/acro/acro-manual.pdf
Binary files differ
diff --git a/macros/latex/contrib/acro/acro-manual.tex b/macros/latex/contrib/acro/acro-manual.tex
index 43462b6bac..6470c95ba4 100644
--- a/macros/latex/contrib/acro/acro-manual.tex
+++ b/macros/latex/contrib/acro/acro-manual.tex
@@ -1,8 +1,8 @@
-% !arara: pdflatex: { interaction: nonstopmode }
-% !arara: biber
-% arara: pdflatex: { interaction: nonstopmode }
% arara: pdflatex: { interaction: nonstopmode }
+% !arara: biber
% arara: pdflatex: { interaction: nonstopmode }
+% !arara: pdflatex: { interaction: nonstopmode }
+% !arara: pdflatex: { interaction: nonstopmode }
% --------------------------------------------------------------------------
% the ACRO package
%
@@ -10,7 +10,7 @@
%
% --------------------------------------------------------------------------
% Clemens Niederberger
-% Web: https://bitbucket.org/cgnieder/acro/
+% Web: https://github.com/cgnieder/acro/
% E-Mail: contact@mychemistry.eu
% --------------------------------------------------------------------------
% Copyright 2011--2020 Clemens Niederberger
@@ -23,7 +23,7 @@
% 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'.
+% This work has nce status `maintained'.
%
% The Current Maintainer of this work is Clemens Niederberger.
% --------------------------------------------------------------------------
@@ -35,2105 +35,2358 @@
% If you have any ideas, questions, suggestions or bugs to report, please
% feel free to contact me.
% --------------------------------------------------------------------------
+\PassOptionsToPackage{ngerman,latin,english}{babel}
+\PassOptionsToPackage{version=3,upgrade}{acro}
\documentclass{acro-manual}
-\addbibresource{\jobname.bib}
-\addbibresource{cnltx.bib}
\begin{filecontents}{\jobname.bib}
-@online{wikipedia,
- author = {Wikipedia},
- title = {Acronym and initialism},
- urldate = {2012-06-21},
- url = {http://en.wikipedia.org/wiki/Acronyms},
- year = {2012}
-}
@online{NewYork,
author = {Wikipedia},
title = {New York City},
- urldate = {2012-09-27},
+ urldate = {2020-04-11},
url = {http://en.wikipedia.org/wiki/New_York_City},
- year = {2012}
-}
-@manual{interface3,
- author = {{The \LaTeX3 Project Team}} ,
- shorthand = {L3P} ,
- sortname = {LaTeX3 Project Team} ,
- title = {The \LaTeX3 Interfaces} ,
- date = {2015-09-06} ,
- url = {http://mirrors.ctan.org/macros/latex/contrib/l3kernel/interface3.pdf}
+ year = {2020}
}
\end{filecontents}
-% declare acronyms
-\DeclareAcronym{cd}
- {
- short = cd ,
- long = Compact Disc ,
- short-format = \scshape
- }
-\DeclareAcronym{ctan}
- {
- short = ctan ,
- long = Comprehensive \TeX\ Archive Network ,
- format = \scshape ,
- pdfstring = CTAN ,
- accsupp = CTAN
- }
-\DeclareAcronym{ecu}
- {
- short = ECU ,
- long = Steuerger\"at ,
- foreign = Electronic Control Unit ,
- foreign-lang = english
- }
-\DeclareAcronym{id}
- {
- short = id ,
- long = identification string ,
- short-format = \scshape
- }
-\DeclareAcronym{jpg}
- {
- short = JPEG ,
- sort = jpeg ,
- alt = JPG ,
- long = Joint Photographic Experts Group
- }
-\DeclareAcronym{la}
- {
- short = LA ,
- short-plural = ,
- long = Los Angeles,
- long-plural = ,
- class = city
- }
-\DeclareAcronym{lppl}
- {
- short = lppl ,
- long = \LaTeX\ Project Public License ,
- format = \scshape ,
- pdfstring = LPPL ,
- accsupp = LPPL ,
- index-cmd = \csname @gobble\endcsname
- }
-\DeclareAcronym{MP}
- {
- short = MP ,
- long = Member of Parliament ,
- long-plural-form = Members of Parliament
- }
-\DeclareAcronym{nato}
- {
- short = nato ,
- long = North Atlantic Treaty Organization ,
- extra = \emph{deutsch}: Organisation des Nordatlantikvertrags ,
- short-format = \scshape
- }
-\DeclareAcronym{ny}
- {
- short = NY ,
- short-plural = ,
- long = New York ,
- long-plural = ,
- class = city ,
- cite = NewYork
- }
-\DeclareAcronym{ot}
- {
- short = ot ,
- long = Other Test ,
- short-format = \scshape
- }
-\DeclareAcronym{pdf}
- {
- short = pdf ,
- long = Portable Document Format ,
- format = \scshape ,
- pdfstring = PDF ,
- accsupp = PDF
- }
-\DeclareAcronym{sw}
- {
- short = SW ,
- long = Sammelwerk ,
- long-plural = e
- }
-\DeclareAcronym{test}
- {
- short = ST ,
- long = Some Test
- }
-\DeclareAcronym{tex.sx}
- {
- short = \TeX.sx ,
- sort = TeX.sx ,
- long = \TeX{} StackExchange
- }
+\addbibresource{\jobname.bib}
+\addbibresource{cnltx.bib}
+
+% declare example acronyms
+\DeclareAcronym{cd}{
+ short = CD ,
+ long = compact disc
+}
+\DeclareAcronym{ctan}{
+ short = ctan ,
+ long = Comprehensive \TeX\ Archive Network ,
+ short-format = \scshape ,
+ pdfstring = CTAN ,
+ short-acc = CTAN ,
+ first-style = short-long ,
+ single-style = short
+}
+\DeclareAcronym{ecu}{
+ short = ECU ,
+ long = Steuergerät ,
+ foreign = Electronic Control Unit ,
+ foreign-babel = english ,
+ foreign-locale = englisch
+}
+\DeclareAcronym{eg}{
+ short = e.g\acdot ,
+ long = for example ,
+ foreign = exempli gratia ,
+ foreign-babel = latin ,
+ short-format = \textit ,
+ foreign-format = \textit
+}
+\DeclareAcronym{etc}{
+ short = etc\acdot ,
+ long = et cetera ,
+ format = \textit ,
+ first-style = long ,
+ plural =
+}
+\DeclareAcronym{hadopi}{
+ short = HADOPI ,
+ long = Haute Autorit\'{e} pour la diffusion des \oe uvres et la protection des
+ droits sur l’Internet ,
+ short-definite = l'\nospace ,
+ long-definite = la ,
+}
+\DeclareAcronym{id}{
+ short = id ,
+ long = identification string ,
+ short-format = \scshape ,
+ short-acc = ID ,
+ pdfstring = ID ,
+ first-style = short
+}
+\DeclareAcronym{jpg}{
+ short = JPEG ,
+ sort = jpeg ,
+ alt = JPG ,
+ long = Joint Photographic Experts Group
+}
+\DeclareAcronym{la}{
+ short = LA ,
+ long = Los Angeles,
+ plural = ,
+ tag = city
+}
+\DeclareAcronym{lppl}{
+ short = lppl ,
+ long = \unexpanded{\LaTeX} Project Public License ,
+ short-format = \scshape ,
+ pdfstring = LPPL ,
+ short-acc = LPPL
+}
+\DeclareAcronym{MP}{
+ short = MP ,
+ long = Member of Parliament ,
+ plural-form = Members of Parliament ,
+ long-possessive-form = Member's of Parliament
+}
+\DeclareAcronym{nato}{
+ short = nato ,
+ long = Organisation des Nordatlantikvertrags ,
+ foreign = North Atlantic Treaty Organization ,
+ foreign-babel = english ,
+ foreign-locale = englisch ,
+ short-format = \scshape
+}
+\DeclareAcronym{ny}{
+ short = NY ,
+ long = New York ,
+ plural = ,
+ tag = city ,
+ cite = NewYork
+}
+\DeclareAcronym{pdf}{
+ short = pdf ,
+ long = Portable Document Format ,
+ short-format = \scshape ,
+ pdfstring = PDF ,
+ short-acc = PDF
+}
+\DeclareAcronym{png}{
+ short = PNG ,
+ long = Portable Network Graphics ,
+ first-style = short-long ,
+ single-style = short
+}
+\DeclareAcronym{PU}{
+ short = PU ,
+ long = Polyurethan ,
+ long-plural = e
+}
+\DeclareAcronym{sw}{
+ short = SW ,
+ long = Sammelwerk ,
+ long-plural = e ,
+ tag = exclude
+}
+\DeclareAcronym{tex.sx}{
+ short = \TeX.sx ,
+ sort = TeX.sx ,
+ long = \TeX{} StackExchange
+}
\DeclareAcronym{ufo}{
- short = UFO ,
- long = unidentified flying object ,
- long-indefinite = an
+ short = UFO ,
+ long = unidentified flying object ,
+ foreign = unbekanntes Flugobjekt ,
+ foreign-plural-form = unbekannte Flugobjekte ,
+ foreign-acc-plural-form = unbekannte Flugobjekte ,
+ foreign-babel = ngerman ,
+ long-indefinite = an
+}
+
+% declare glossary terms:
+\DeclareAcronym{property}{
+ long = A \property*{property} is an option to the second argument of the
+ \cs*{DeclareAcroym} command. They are options of an individual acronym if
+ you will. ,
+ tag = glossary , no-index
+}
+\DeclareAcronym{option}{
+ long = An \option*{option} is a package option of \acro\ which must set
+ with \cs*{acsetup}. It \emph{cannot} be set as option to \cs*{usepackage}. ,
+ tag = glossary , no-index
+}
+\DeclareAcronym{load-time option}{
+ long = A load-time \option*{option} is a package option of \acro\ which must
+ be set as option to \cs*{usepackage}\oarg{options}\Marg{acro}. ,
+ tag = glossary , no-index
+}
+\DeclareAcronym{template}{
+ long = A template determines how different objects of \acro\ are printed.
+ This includes the acronyms themselves but also for example the list of
+ acronyms as a whole. ,
+ tag = glossary , no-index
+}
+\DeclareAcronym{articles}{
+ long = {Articles are prefixes to acronyms, usually separated with a blank.
+ \emph{Different types of articles are mutually exclusive.}} ,
+ tag = glossary , no-index
+}
+\DeclareAcronym{endings}{
+ long = {Endings are postfixes to acronyms, usually not separated from the
+ acronym. \emph{Different types of endings are mutually exclusive.}} ,
+ tag = glossary , no-index
+}
+\DeclareAcronym{translations}{
+ long = Localisation strings which can be modified. ,
+ tag = glossary , no-index
}
-% because the mannual does not activate the `macros' option:
-\newcommand*\nato{\ac{nato}}
-\newcommand*\ny{\ac{ny}}
+\newcommand*\issues{\url{https://github.com/cgnieder/acro/issues}}
\newcommand*\latin[1]{\textit{#1}}
\begin{document}
-\section{Licence and Requirements}
+
+\clearpage
+\part{Get started with \acro}\label{part:get-started-with}
+
+\section{Licence and requirements}\label{sec:licence-requirements}
\license
-\acro\ loads and needs the following packages:
-\pkg{expl3}\footnote{\CTANurl{l3kernel}}, \pkg{xparse}, \pkg{xtemplate},
-\pkg{l3keys2e}\footnote{\CTANurl{l3packages}},
-\pkg{zref-abspage}\footnote{\CTANurl{oberdiek}} and
-\needpackage{translations}~\cite{pkg:translations}.
+\section{Glossary}
+\printacronyms[include=glossary,template=glossary]
+
+\section{\acro\ for the impatient}\label{sec:acro-impatient}
+
+Acronyms are defined in the preamble via the command
+\begin{commands}
+ \command{DeclareAcronym}[\marg{id}\marg{properties}]
+ where \meta{id} is a unique string to identify the acronym and
+ \meta{properties} is a key\slash value list of acronym properties. These
+ include:
+\end{commands}
+\begin{properties}
+ %% short
+ \propval{short}{text}\Default!
+ The short form of the acronym. \emph{This property is required}: an
+ acronym must have a short form.
+ %% long
+ \propval{long}{text}\Default!
+ The long form of the acronym. \emph{This property is required}: an
+ acronym must have a description.
+\end{properties}
+\begin{bewareofthedog}
+ In its simplest form an acronym needs a short and a long form. Please note
+ that both properties \emph{must} be set.
+\end{bewareofthedog}
+
+In the document acronyms are used with these commands:
+\begin{commands}
+ \command{ac}[\marg{id}\quad\cs{Ac}\marg{id}]
+ \cs{ac} prints the acronym \meta{id}, the first time with full description
+ and every subsequent use only the abbreviated form. \cs{Ac} does the same
+ but uppercases the first letter -- this may be needed at the beginning of
+ a sentence.
+ \command{acs}[\marg{id}\quad\cs{Acs}\marg{id}]
+ \cs{acs} prints the short form of the acronym \meta{id}. \cs{Acs} does the
+ same but uppercases the first letter.
+ \command{acl}[\marg{id}\quad\cs{Acl}\marg{id}]
+ \cs{acl} prints the long form of the acronym \meta{id}. \cs{Acl} does the
+ same but uppercases the first letter.
+ \command{acf}[\marg{id}\quad\cs{Acf}\marg{id}]
+ \cs{acf} prints the full form of the acronym \meta{id}. \cs{Acf} does the
+ same but uppercases the first letter.
+\end{commands}
+
+Let's say you defined \acs*{cd} as follows:
+\begin{sourcecode}
+ \DeclareAcronym{cd}{
+ short = CD ,
+ long = compact disc
+ }
+\end{sourcecode}
+Then the usage is
+\begin{example}[side-by-side]
+ \begin{tabular}{ll}
+ first & \ac{cd} \\
+ second & \ac{cd} \\
+ long & \acl{cd} \\
+ short & \acs{cd} \\
+ full & \acf{cd}
+ \end{tabular}
+\end{example}
+
+\section{Setting options}\label{sec:setting-options}
+\subsection{Load-time options}\label{sec:load-time-options}
+\acro\ knows only a small set of load-time options which can be used as
+argument to \cs*{usepackage}:
+\begin{options}
+ \keychoice{version}{2,3}\Default{3}
+ The option allows you to use the last version prior to the update to
+ version~3. This may help if you don't have the time to fix issues after
+ upgrading to the new version.
+ \keybool{upgrade}\Default{true}
+ When this option is used \acro\ tries to give as much helpful and
+ meaningful warning or error messages when a deprecated or removed command,
+ property, or option is used. This is especially useful if you are
+ upgrading from version~2. The option will initially be true for a few
+ months after the upgrade to version~3.
+\end{options}
+
+\subsection{Setup command}\label{sec:setup-command}
+All options of \acro\ that have \emph{not} been mentioned in
+section~\ref{sec:load-time-options} have to be set up either with this command
+\begin{commands}
+ \command{acsetup}[\marg{options}]
+ or as option to other commands. If the latter is possible then it is
+ described when the corresponding commands are explained. Options usually
+ follow a key\slash value syntax and are always described in the following
+ way:
+\end{commands}
+\begin{options}
+ \opt*{option}
+ An option without a value. Those options are very rare if there are any.
+ \keyval*{option}{value}\Default{preset}
+ An option where a value can be given. The pre-set value is given to the
+ right.
+ \keychoice*{option}{\default{choiceA},choiceB,choiceC}\Default{choiceB}
+ An option with a determined set of choices. The underlined value is
+ chosen if the option is given without value.
+ \keybool*{option}
+ A boolean option with only the choices \code{true} and \code{false}.
+ \opt*{option}\Module{module}
+ An option at a deeper level belonging to the module \module*{module}.
+\end{options}
+All of the above is probably clear from an example (using real options):
+\begin{sourcecode}
+ \acsetup{
+ make-links = true , % boolean
+ index , % boolean
+ format = \emph , % standard
+ list / local , % boolean option of the list module
+ list/display = all % choice option of the list module
+ }
+\end{sourcecode}
+
+\part{Comprehensive description of creation and usage of acronyms}\label{part:compr-descr-creat}
+\section{Declaring acronyms and other abbreviations}\label{sec:decl-acronyms-other}
-\section{Basics}
-\subsection{Creating New Acronyms}
-Acronyms are created with the command \cs{DeclareAcronym}.
+All acronyms have to be declared in the preamble with the following command in
+order to be used in the document. Any usage of an acronym which has not been
+declared leads to an error message.
\begin{commands}
- \command{DeclareAcronym}[\marg{id}\marg{list of keys}]
+ \command{DeclareAcronym}[\marg{id}\marg{list of properties}]
The basic command for declaring an acronym where \meta{id} is a unique
- string identifying the acronym. Per default behaviour this is case
- sensitive which means \code{id} is different from \code{ID}, for example.
- There is an option \option{case-sensitive}\sinceversion{2.11} to change
- this.
+ string identifying the acronym. Per default this is case sensitive which
+ means \code{id} is different from \code{ID}, for example.
\end{commands}
-This command understands a number of keys which are listed below. Some of
-them are not described immediately but at appropriate places in the
-documentation.
+The command understands a number of properties which are listed in the
+following sections. This is a comprehensive overview over the existing
+properties. Many properties are also explained in more detail in later
+sections of this manual.
+\begin{options}
+ \keybool{case-sensitive}\Default{false}
+ When this is set you can write the \ac{id} of the acronym upper- or lower-
+ or mixed case and it is recognized by \acro\ as the same. This might be
+ useful when the acronym appears in the page header, for example.
+\end{options}
+
+\begin{bewareofthedog}
+ In its simplest form an acronym needs a short and a long form. Please note
+ that both properties \emph{must} be set.
+\end{bewareofthedog}
+
+\subsection{Basic properties}\label{sec:basic-properties}
\begin{properties}
%% short
\propval{short}{text}\Default!
The short form of the acronym. \emph{This property is required}: an
- acronym must have a short form. If this is set it \emph{must} be set as
- first option! If another property is set first and notices the
- \property{short} property missing it assumes that the \acs{id} should be
- used as short version and sets it accordingly. A warning will be written
- to the log then.
+ acronym must have a short form.
+\end{properties}
+Maybe you mostly have simple acronyms where the \ac{id} and short form are
+the same. In that case you can use
+\begin{options}
+ \keybool{use-id-as-short}\Default{false}
+ to use the \ac{id} of the acronym as short form. For more complicated
+ cases this would still allow you to set the short form.
+\end{options}
+\begin{properties}
%% long
\propval{long}{text}\Default!
The long form of the acronym. \emph{This property is required}: an
acronym must have a description.
+ %% alt
+ \propval{alt}{text}\Default
+ Alternative short form.
+ %% extra
+ \propval{extra}{text}\Default
+ Extra information to be added in the list of acronyms.
+ %% foreign
+ \propval{foreign}{long form in foreign language}\Default
+ Can be useful when dealing with acronyms in foreign languages, see
+ section~\vref{sec:fore-lang-acronyms} for details.
+ %% long-post
+ \propval{long-post}{text}\Default
+ \meta{text} is appended to the long form of the acronym in the text but
+ not in the list of acronyms.
+ %% post
+ \propval{post}{text}\Default
+ \meta{text} is appended to the acronym in the text but not in the list of
+ acronyms.
+ %% single
+ \propval{single}{text}\Default={long}
+ If provided \meta{text} will be used instead of the long form if the
+ acronym is only used a single time \emph{and} the option
+ \option{single} has been set, see section~\vref{sec:single-appe-an}.
+ %% sort
+ \propval{sort}{text}\Default={short}
+ If used the acronym will be sorted according to this property instead of
+ its \ac{id}.
+ %% tag
+ \propval{tag}{csv list}\Default
+ The tag(s) of an acronym.
+ %% cite
+ \proplit-{cite}{\oarg{prenote}\oarg{postnote}\marg{citation keys}}\Default
+ A citation that is printed to the acronym according to an option explained
+ later.
+ %% before-citation
+ \propval{before-citation}{text}\Default
+ \meta{text} is prepended to the citation of the acronym when and where
+ the citation is printed.
+ %% index
+ \propval{index}{text}\Default
+ This property allows to overwrite the automatic index entry with an
+ arbitrary one. See section~\vref{sec:indexing} for details.
+ %% index-sort
+ \propval{index-sort}{text}\Default={sort}
+ If you use the option \option{index} every occurrence of an acronym is
+ recorded to the index and sorted by its short form or (if set) by the
+ value of the \property{sort} property. This property allows to set an
+ individual sorting option for the index. See section~\vref{sec:indexing}
+ for details.
+\end{properties}
+
+\subsection{Properties related to plural and indefinite forms}\label{sec:prop-relat-plur}
+\begin{properties}
%% short-plural
\propval{short-plural}{text}\Default{s}
The plural ending appended to the short form.
%% short-plural-form
- \propval{short-plural-form}{text}
- The\sinceversion{2.0} plural short form of the acronym; replaces the short
- form when used instead of appending the plural ending.
+ \propval{short-plural-form}{text}\Default
+ The plural short form of the acronym; replaces the short form when used
+ instead of appending the plural ending.
%% long-plural
\propval{long-plural}{text}\Default{s}
The plural ending appended to the long form.
%% long-plural-form
- \propval{long-plural-form}{text}
+ \propval{long-plural-form}{text}\Default
Plural long form of the acronym; replaces the long form when used
instead of appending the plural ending.
%% alt-plural
\propval{alt-plural}{text}\Default{s}
- The\sinceversion{2.0} plural ending appended to the alternative form.
+ The plural ending appended to the alternative form.
%% alt-plural-form
- \propval{alt-plural-form}{text}
- The\sinceversion{2.0} plural alternative form of the acronym; replaces the
- alternative form when used instead of appending the plural ending.
+ \propval{alt-plural-form}{text}\Default
+ The plural alternative form of the acronym; replaces the alternative form
+ when used instead of appending the plural ending.
%% foreign-plural
\propval{foreign-plural}{text}\Default{s}
- The\sinceversion{2.9} plural ending appended to the foreign form.
+ The plural ending appended to the foreign form.
%% foreign-plural-form
- \propval{foreign-plural-form}{text}
- Plural\sinceversion{2.9} foreign form of the acronym; replaces the
- foreign form when used instead of appending the plural ending.
- %% list
- \propval{list}{text}
- If specified this will be written in the list as description instead of
- the long form.
+ \propval{foreign-plural-form}{text}\Default
+ Plural foreign form of the acronym; replaces the foreign form when used
+ instead of appending the plural ending.
%% short-indefinite
\propval{short-indefinite}{text}\Default{a}
Indefinite article for the short form.
%% long-indefinite
\propval{long-indefinite}{text}\Default{a}
Indefinite article for the long form.
- %% long-pre
- \propval{long-pre}{text}
- \meta{text} is prepended to the long form in the text but not in the list
- of acronyms.
- %% long-post
- \propval{long-post}{text}
- \meta{text} is appended to the long form in the text but not in the list
- of acronyms.
- %% long-post
- \propval{post}{text}
- \meta{text}\sinceversion{2.8} is appended to the acronym in the text but
- not in the list of acronyms.
- %% alt
- \propval{alt}{text}
- Alternative short form.
%% alt-indefinite
\propval{alt-indefinite}{text}\Default{a}
Indefinite article for the alternative form.
- %% extra
- \propval{extra}{text}
- Extra information to be added in the list of acronyms.
- %% foreign
- \propval{foreign}{original long form}
- Can be useful when dealing with acronyms in foreign languages, see
- section~\vref{ssec:foreign} for details.
- %% foreign-lang
- \propval{foreign-lang}{language}
- \sinceversion{2.3}The \pkg{babel}~\cite{pkg:babel} or
- \pkg{polyglossia}~\cite{pkg:polyglossia} language of the foreign form.
- This language is used to wrap the entry with
- \cs*{foreignlanguage}\marg{language} if either \pkg{babel} or
- \pkg{polyglossia} is loaded. You'll need to take care that the
- corresponding language is loaded by \pkg{babel} or \pkg{polyglossia}.
- %% single
- \propval{single}{text}
- \sinceversion{2.3}If provided \meta{text} will be used instead of the long
- form if the acronym is only used a single time \emph{and} the option
- \keyis{single}{true} is active.
- %% sort
- \propval{sort}{text}
- If used the acronym will be sorted according to this key instead of its
- \acs{id}.
- %% class
- \propval{class}{csv list}
- The\changedversion{2.4} class(es) the acronym belongs to.
- %% cite
- \proplit-{cite}{\oarg{prenote}\oarg{postnote}\marg{citation keys}}
- A citation that is printed to the acronym according to an option explained
- later.
- %% before-citation
- \propval{before-citation}{code}
- \meta{code}\sinceversion{2.11} is inserted directly before \property{cite}
- and \emph{ony when} \property{cite} is used.
- %% after-citation
- \propval{after-citation}{code}
- \meta{code}\sinceversion{2.11} is inserted directly after \property{cite}
- and \emph{ony when} \property{cite} is used.
+\end{properties}
+
+\subsection{Properties related to formatting}\label{sec:prop-relat-form}
+\begin{properties}
+ \propval{format}{code}\Default
+ The format used for both short and long form of the acronym.
%% short-format
- \propval{short-format}{\TeX{} code}
+ \propval{short-format}{code}\Default={format}
The format used for the short form of the acronym.
%% long-format
- \propval{long-format}{\TeX{} code}
+ \propval{long-format}{code}\Default={format}
The format used for the long form of the acronym.
- %% short-format
- \propval{alt-format}{\TeX{} code}
- The\sinceversion{2.10} format used for the alternative form of the
- acronym. If this is not given the short format will be used.
%% first-long-format
- \propval{first-long-format}{\TeX{} code}
- The format used for the first long form of the acronym as set with \cs{ac},
- \cs{acf} or \cs{acflike} and their uppercase, plural and indefinite forms.
+ \propval{first-long-format}{code}\Default={long-format}
+ The format used for the first appearance of the long form of the acronym.
+ %% alt-format
+ \propval{alt-format}{code}\Default={short-format}
+ The format used for the alternative form of the acronym. If this is not
+ given the short format will be used.
+ %% extra-format
+ \propval{extra-format}{code}\Default
+ The format used for the additional information of the acronym.
+ %% foreign-format
+ \propval{foreign-format}{code}\Default
+ The format used for the foreign form of the acronym.
%% single-format
- \propval{single-format}{\TeX{} code}
- \sinceversion{2.3}The format used for the acronym if the acronym is only
- used a single time.
+ \propval{single-format}{code}\Default={long-format}
+ The format used for the acronym if the acronym is only used a single
+ time.
+ %% list-format
+ \propval{list-format}{code}\Default={long-format}
+ The format used for the long form of the acronym in the list if the list
+ template supports it. All pre-defined list templates \emph{do} support
+ it.
%% first-style
- \propchoice{first-style}{default,empty,square,short,long,reversed,footnote,sidenote,%
- footnote-reversed,sidenote-reversed}
- \sinceversion{2.3}The style of the first appearance of the acronym, see
- also section~\ref{sec:opti-regard-acronyms}.
+ \propchoice{first-style}{long-short,short-long,short,long,footnote}\Default
+ The style of the first appearance of the acronym, see also
+ section~\vref{sec:first-or-full}.
+ %% single-style
+ \propchoice{single-style}{long-short,short-long,short,long,footnote}\Default
+ The style of a single appearance of the acronym, see also
+ section~\vref{sec:single-appe-an}.
+\end{properties}
+
+\subsection{Properties related to the created \acs*{pdf} file}\label{sec:prop-relat-creat}
+\begin{properties}
%% pdfstring
- \proplit-{pdfstring}{\Marg{\meta{pdfstring}/\meta{plural ending}}}
- \changedversion{2.4b}Used as \acs{pdf} string replacement in bookmarks
- when used together with the \pkg{hyperref} package. The appended plural
- ending is optional. If you leave it (\emph{and} the \code{/}) the default
- ending is used. \meta{text} is expanded before it is saved.
- %% accsupp
- \propval{accsupp}{text}
- Sets the \code{ActualText} key as presented by the \pkg{accsupp} package
- for the acronym.
- %% tooltip
- \propval{tooltip}{text}
- \sinceversion{2.1}Sets the tooltip description for an acronym. For
- actually getting tooltips you also need an appropriate setting of the
- \option{tooltip-cmd} option or to set the package option
- \option{tooltip}.
- %% index-sort
- \propval{index-sort}{text}
- If you use the package option \option{index} every occurrence of an
- acronym is recorded to the index and sorted by its \acs{id} or (if set) by
- the value of the \property{sort} property. This key allows to set an
- individual sorting option for the index. See section~\vref{ssec:index}
- for details.
- %% index
- \propval{index}{text}
- This key allows to overwrite the automatic index entry with an arbitrary
- one. See section~\vref{ssec:index} for details.
- %% index-cmd
- \propval{index-cmd}{control sequence}
- This key let's you set an individual index creating command for this
- acronym. It should be a command that takes one mandatory argument. See
- section~\vref{ssec:index} for details.
+ \propval{pdfstring}{pdfstring}\Default={short}
+ Used as \acs{pdf} string replacement in bookmarks when used together with
+ the \pkg{hyperref}~\cite{pkg:hyperref} or the \pkg{bookmark}
+ package~\cite{pkg:bookmark}.
+ %% pdfcomment
+ \propval{pdfcomment}{text}
+ Sets a tooltip description for an acronym. For actually getting
+ tooltips you also need an appropriate setting of the options
+ \option{pdfcomment/cmd} and \option{pdfcomment/use}, see also
+ section~\vref{sec:pdf-comments}.
+ %% short-acc
+ \propval{short-acc}{text}\Default={short}
+ Sets the \code{ActualText} property as presented by the \pkg{accsupp}
+ package for the short form of the acronym.
+ %% long-acc
+ \propval{long-acc}{text}\Default={long}
+ Sets the \code{ActualText} property as presented by the \pkg{accsupp}
+ package for the long form of the acronym.
+ %% alt-acc
+ \propval{alt-acc}{text}\Default={alt}
+ Sets the \code{ActualText} property as presented by the \pkg{accsupp}
+ package for the alternative short form of the acronym.
+ %% foreign-acc
+ \propval{foreign-acc}{text}\Default={foreign}
+ Sets the \code{ActualText} property as presented by the \pkg{accsupp}
+ package for the foreign form of the acronym.
+ %% extra-acc
+ \propval{extra-acc}{text}\Default={extra}
+ Sets the \code{ActualText} property as presented by the \pkg{accsupp}
+ package for the extra information of the acronym.
+ %% single-acc
+ \propval{single-acc}{text}\Default={long-acc}
+ Sets the \code{ActualText} property as presented by the \pkg{accsupp}
+ package for a single appearance of the acronym.
+ %% list-acc
+ \propval{list-acc}{text}\Default={list}
+ Sets the \code{ActualText} property as presented by the \pkg{accsupp}
+ package for the appearance in the list of acronyms.
\end{properties}
-\begin{bewareofthedog}
- In its simplest form an acronym needs a short and a long form. Please note
- that both keys \emph{must} be set and that the \property{short} property
- \emph{must} always be the \emph{first} property that is set.
-\end{bewareofthedog}
+\subsection{Futher properties}\label{sec:futher-properties}
+\begin{properties}
+ %% list
+ \propval{list}{text}\Default={long}
+ If specified this will be written in the list as description instead of
+ the long form if the corresponding list template supports it.
+ %% foreign-babel
+ \propval{foreign-babel}{language}\Default
+ The \pkg{babel}~\cite{pkg:babel} or
+ \pkg{polyglossia}~\cite{pkg:polyglossia} language of the foreign form.
+ This language is used to wrap the entry with
+ \cs*{foreignlanguage}\marg{language} if either \pkg{babel} or
+ \pkg{polyglossia} is loaded. You'll need to take care that the
+ corresponding language is loaded by \pkg{babel} or \pkg{polyglossia}.
+ %% foreign-locale
+ \propval{foreign-locale}{language}\Default
+ The language name that is output when the option
+ \module{locale}\code{/}\option{display} is used. If this property is not
+ set then the appropriate value might be derived from
+ \property{foreign-babel}. See section~\vref{sec:fore-lang-acronyms} for
+ details.
+\end{properties}
+\section{Using acronyms}\label{sec:using-acronyms}
+There are a number of commands to use acronyms with. Their names always follow
+the same pattern which should make their usage intuitive immediately.
+
+All of these commands have a starred form which means \enquote{don't count
+ this as usage}. All of these commands also have an optional argument that
+allows to set options for that usage only.
+\begin{commands}
+ \command*{acrocommand}[\sarg\oarg{options}\marg{id}]
+ This is the general syntax of all of the commands listed below. The star
+ and the optional argument is left way for the sake of readability.
+ \emph{A command \cs*{acrocommand} does not actually exist.}
+ \command{ac}[\marg{id}\quad\cs{Ac}\marg{id}\quad\cs{acp}\marg{id}\quad
+ \cs{Acp}\marg{id}\quad\cs{iac}\marg{id}\quad\cs{Iac}\marg{id}]
+ \cs{ac} prints the acronym \meta{id}, the first time with full description
+ and every subsequent use only the abbreviated form. \cs{Ac} does the same
+ but uppercases the first letter -- this may be needed at the beginning of
+ a sentence. The commands \cs{acp} and \cs{Acp}, resp., print the
+ corresponding plural forms. The commands \cs{iac} and \cs{Iac}, resp.,
+ print indefinite forms.
+ \command{acs}[\marg{id}\quad\cs{Acs}\marg{id}\quad\cs{acsp}\marg{id}\quad
+ \cs{Acsp}\marg{id}\quad\cs{iacs}\marg{id}\quad\cs{Iacs}\marg{id}]
+ \cs{acs} prints the short form of the acronym \meta{id}. \cs{Acs} does the
+ same but uppercases the first letter. The commands \cs{acsp} and
+ \cs{Acsp}, resp., print the corresponding plural forms. The commands
+ \cs{iacs} and \cs{Iacs}, resp., print indefinite forms.
+ \command{acl}[\marg{id}\quad\cs{Acl}\marg{id}\quad\cs{aclp}\marg{id}\quad
+ \cs{Aclp}\marg{id}\quad\cs{iacl}\marg{id}\quad\cs{Iacl}\marg{id}]
+ \cs{acl} prints the long form of the acronym \meta{id}. \cs{Acl} does the
+ same but uppercases the first letter. The commands \cs{aclp} and
+ \cs{Aclp}, resp., print the corresponding plural forms. The commands
+ \cs{iacl} and \cs{Iacl}, resp., print indefinite forms.
+ \command{aca}[\marg{id}\quad\cs{Aca}\marg{id}\quad\cs{acap}\marg{id}\quad
+ \cs{Acap}\marg{id}\quad\cs{iaca}\marg{id}\quad\cs{Iaca}\marg{id}]
+ \cs{aca} prints the alternative short form of the acronym \meta{id}.
+ \cs{Aca} does the same but uppercases the first letter. The commands
+ \cs{acap} and \cs{Acap}, resp., print the corresponding plural forms. The
+ commands \cs{iaca} and \cs{Iaca}, resp., print indefinite forms.
+ \command{acf}[\marg{id}\quad\cs{Acf}\marg{id}\quad\cs{acfp}\marg{id}\quad
+ \cs{Acfp}\marg{id}\quad\cs{iacf}\marg{id}\quad\cs{Iacf}\marg{id}]
+ \cs{acf} prints the full form of the acronym \meta{id}. \cs{Acf} does the
+ same but uppercases the first letter. The commands \cs{acfp} and
+ \cs{Acfp}, resp., print the corresponding plural forms. The commands
+ \cs{iacf} and \cs{Iacf}, resp., print indefinite forms.
+\end{commands}
+
+The usage should be clear. Let's assume you have defined an acronym
+\acs*{ufo}\label{ufo} like this:
\begin{sourcecode}
- % preamble:
- \DeclareAcronym{test}{
- short = ST ,
- long = Some Test
+ \DeclareAcronym{ufo}{
+ short = UFO ,
+ long = unidentified flying object ,
+ foreign = unbekanntes Flugobjekt ,
+ foreign-plural-form = unbekannte Flugobjekte ,
+ foreign-babel = ngerman ,
+ long-indefinite = an
}
\end{sourcecode}
-This creates the acronym ``\acs{test}'' with the \acs{id} ``test'' and the
-long form ``\acl{test}.''
+Then typical outputs look like this:
+\begin{example}
+ \ac{ufo} \\
+ \iac{ufo} \\
+ \iacl{ufo} \\
+ \Iacf{ufo} \\
+ \acfp{ufo}
+\end{example}
-The \property{short-format} key allows you to choose a specific format for the
-short form of an acronym:
+\section{Alternative short forms}\label{sec:altern-short-forms}
+Sometimes expressions have two different short forms. And example might be
+\acs*{jpg} which also often is \aca*{jpg}. This is what the property
+\property{alt} is there for.
+\begin{properties}
+ \propval{alt}{text}
+ Alternative short form.
+\end{properties}
+Let's define \acs*{jpg}:
\begin{sourcecode}
- % preamble:
- \DeclareAcronym{ot}{
- short = ot ,
- long = Other Test ,
- short-format = \scshape
+ \DeclareAcronym{jpg}{
+ short = JPEG ,
+ sort = jpeg ,
+ alt = JPG ,
+ long = Joint Photographic Experts Group
}
\end{sourcecode}
-The short form now looks like this: \acs{ot}.
+And let's see how to use it:
+\begin{example}
+ \ac{jpg} \\
+ \ac{jpg} \\
+ \aca{jpg}
+\end{example}
+As you can see the full form shows both short forms of the acronym. This could
+be changed by altering the template for the full form, see
+section~\vref{sec:templates} and section~\vref{sec:first-or-full}. The
+alternative form is also printed in the list of acronyms, see
+section~\vref{sec:acronyms}. This can also be changed by altering the
+template for the list, again see section~\ref{sec:templates}.
+
+\section{The first or full appearance}\label{sec:first-or-full}
+If an acronym is used for the first time with \cs{ac} (after any number of
+usages with the starred forms of the usage commands listed in
+section~\vref{sec:using-acronyms}) or if an acronym is used \cs{acf}, then the
+first or full appearance of the acronym is printed\footnote{This usually
+ requires at least two \LaTeX\ runs until it is stable.}.
+
+The first or full appearance of an acronym is determined by this option:
+\begin{options}
+ \keychoice{first-style}{long-short,short-long,short,long,footnote}\Default{long-short}
+ The style of the first appearance of the acronym. This options sets the
+ appearance for all acronyms. Available options in reality are the names
+ of all defined templates of the type \code{acronym}. All pre-defined
+ templates can be found in section~\vref{sec:pre-defin-templ}.
+\end{options}
+It might be desirable to set the first appearance of an acronym
+individually. This is possible by setting the corresponding property:
+\begin{properties}
+ \propchoice{first-style}{long-short,short-long,short,long,footnote}\Default
+ The style of the first appearance of the acronym.
+\end{properties}
+Let's again look at an example:
+\begin{example}[side-by-side]
+ \acf[first-style=long-short]{cd} \\
+ \acf[first-style=short-long]{cd} \\
+ \acf[first-style=footnote]{cd} \\
+ \acf[first-style=long]{cd} \\
+ \acf[first-style=short]{cd}
+\end{example}
+This also demonstrates the use of the optional argument.
-The \property{cite} key needs a bit explaining. It expects arguments like the
-standard \cs*{cite} command, \latin{i.e.}, two optional arguments setting the
-\meta{prenote} and \meta{postnote} and one mandatory argument setting the
-citation key.
+An example of an abbreviation that should have \code{long} as first appearance
+might be \enquote{\acs*{etc}}, defined like this
\begin{sourcecode}
- % preamble:
- \DeclareAcronym{ny}{
- short = NY ,
- short-plural = ,
- long = New York ,
- long-plural = ,
- cite = {NewYork}
+ \DeclareAcronym{etc}{
+ short = etc\acdot ,
+ long = et cetera ,
+ format = \textit ,
+ first-style = long ,
+ plural =
}
\end{sourcecode}
+and output like this:
+\begin{example}[side-by-side]
+ \ac{etc}, \ac{etc} \ac{etc}.
+\end{example}
+The command \cs{acdot} is explained in section~\vref{sec:trailing-tokens}.
+Basically it checks if a dot follows and outputs a dot if not.
-\begin{sourcecode}[sourcecode-options={style=cnltx-bibtex}]
- % bib file for use with biber/biblatex:
- @online{NewYork,
- author = {Wikipedia},
- title = {New York City},
- urldate = {2012-09-27},
- url = {http://en.wikipedia.org/wiki/New_York_City},
- year = {2012}
- }
-\end{sourcecode}
-The first appearance now looks as follows\footnote{The appearance of the
- citation of course depends on the citation style you're using.}: \acf{ny}.
+\section{Single appearances of an acronym}\label{sec:single-appe-an}
+If an acronym is used only once (not counting usages with the starred forms of
+the usage commands listed in section~\vref{sec:using-acronyms}), then the
+single appearance of the acronym is printed\footnote{This usually requires at
+ least two \LaTeX\ runs until it is stable.}.
-\subsection{Logging of Acronyms}
-When you activate \acro's option\sinceversion{2.5} \option{log} \acro' writes
-information about the acronyms it defines to the log file.
+The single appearance of an acronym is determined by this option:
\begin{options}
- \keychoice{log}{\default{true},false,silent,verbose}\Default{false}
- When set to \code{true}/\code{silent} \acro{} writes the main properties
- of an acronym to the log file. When set to \code{verbose} \acro' writes
- \emph{all} properties of an acronym to the log file.
+ \keychoice{single}{\default{true},false,\meta{number}}\Default{false}
+ This option determines wether a single appearance of an acronym counts as
+ \emph{usage}. It might be desirable in such cases that an acronym is
+ simply printed as long form and not added to the list of acronym. This is
+ what this option does. With \meta{number} the minimal number of usages
+ can be given that needs to be exceeded. \keyis{single}{1} is the same as
+ \keyis{single}{true}.
+ \keychoice{single-style}{long-short,short-long,short,long,footnote}\Default{long}
+ The style of the single appearance of an acronym. Can be used to
+ determine how a single appearance is printed if the option \option{single}
+ has been set. This option sets the appearance for all acronyms.
+ Available options in reality are the names of all defined templates of the
+ type \code{acronym}. All pre-defined templates can be found in
+ section~\vref{sec:pre-defin-templ}.
\end{options}
-This is an example of the logging info with \keyis{log}{true} or
-\keyis{log}{silent}.
+If you like you can also set the single appearance of an acronym individually:
+\begin{properties}
+ \propval{single}{text}\Default={long}
+ If provided \meta{text} will be used instead of the long form if the
+ acronym is only used a single time \emph{and} the option
+ \option{single} has been set.
+ \propval{single-format}{code}\Default={long-format}
+ The format used for the acronym if the acronym is only used a single
+ time.
+ \propchoice{single-style}{long-short,short-long,short,long,footnote}\Default
+ The style of the single appearance of the acronym.
+\end{properties}
+Let's again look at an example. The acronym \acs*{png} is defined as follows:
\begin{sourcecode}
- =================================================
- | Package acro Info -- defining new acronym:
- | ID = {jpg}
- | short = {JPEG}
- | long = {Joint Photographic Experts Group}
- | alt = {JPG}
- | sort = {jpeg}
- | class = {}
- | list = {}
- | extra = {}
- | foreign = {}
- | pdfstring = {}
- | cite = {}
- =================================================
+ \DeclareAcronym{png}{
+ short = PNG ,
+ long = Portable Network Graphics ,
+ first-style = short-long ,
+ single-style = short
+ }
\end{sourcecode}
+And it is used only once in this manual\footnote{You will find it in the list
+ of acronyms in section~\ref{sec:acronyms} nonetheless as this document does
+ \keyis{list/display}{all}.}:
+\begin{example}[side-by-side]
+ \ac{png}
+\end{example}
+Please be aware that \cs{acf} would still print the full form, of course.
-\subsection{Using the Acronyms -- the Commands}\label{sec:using-acronyms-comm}
-Acronyms are used with one of the following commands:
+\section{Printing the list}\label{sec:printing-list}
+\subsection{The main command and its options}\label{sec:main-list}
+The main idea is simple: just place
\begin{commands}
- %%
- \command{ac}[\sarg\marg{id}]
- basic command; the first output is different from subsequent ones.
- \command{Ac}[\sarg\marg{id}]
- same as \cs{ac} but capitalizes the first letter. Obeys the option
- \option{uppercase-short}.
- %%
- \command{acs}[\sarg\marg{id}]
- \h{s}hort form; the actual acronym.
- \command{Acs}[\sarg\marg{id}]
- same\sinceversion{2.10} as \cs{acs} but capitalizes the first letter.
- %%
- \command{acl}[\sarg\marg{id}]
- \h{l}ong form; the meaning of the acronym.
- \command{Acl}[\sarg\marg{id}]
- same as \cs{acl} but capitalizes first letter.
- %%
- \command{aca}[\sarg\marg{id}]
- \h{a}lternative short form as specified in the \property{alt} property of
- \cs{DeclareAcronym}; if it hasn't been specified this is identical to
- \cs{acs}.
- \command{Aca}[\sarg\marg{id}]
- same\sinceversion{2.10} as \cs{aca} but capitalizes the first letter.
- %%
- \command{acf}[\sarg\marg{id}]
- first form; output like the first time \cs{ac} is output.
- \command{Acf}[\sarg\marg{id}]
- same as \cs{acf} but capitalizes first letter. Obeys the option
- \option{uppercase-short}.
- %%
- \command{acp}[\sarg\marg{id}]
- \h{p}lural form of \cs{ac};
- \command{Acp}[\sarg\marg{id}]
- same as \cs{acp} but capitalizes first letter. Obeys the option
- \option{uppercase-short}.
- %%
- \command{acsp}[\sarg\marg{id}]
- plural form of \cs{acs};
- \command{Acsp}[\sarg\marg{id}]
- same\sinceversion{2.10} as \cs{acsp} but capitalizes the first letter.
- %%
- \command{aclp}[\sarg\marg{id}]
- plural form of \cs{acl};
- \command{Aclp}[\sarg\marg{id}]
- same as \cs{aclp} but capitalizes first letter.
- %%
- \command{acap}[\sarg\marg{id}]
- plural form of \cs{aca};
- \command{Acap}[\sarg\marg{id}]
- same\sinceversion{2.10} as \cs{acap} but capitalizes the first letter.
- %%
- \command{acfp}[\sarg\marg{id}]
- plural form of \cs{acf};
- \command{Acfp}[\sarg\marg{id}]
- same as \cs{acfp} but capitalizes first letter of the long form. Obeys
- the option \option{uppercase-short}.
+ \command{printacronyms}[\oarg{options}]
+ where you want the list to appear. It may require several (most times
+ two) \LaTeX\ runs for it to stabilize so look out for any warnings
+ from \acro\ requiring to re-run.
\end{commands}
-If an acronym is used the first time with \cs{ac} its output is different from
-subsequent uses. To be clear on this: the first time! If the acronym has
-been used with \emph{any} of the output commands before it is \emph{not} the
-first time any more.
-
-If you use the starred variant an acronym will not be marked as used. This
-proves useful if an acronym is typeset in a section title, for example, since
-then the appearance in the table of contents won't mark it as used.
+The options controlling the list are these:
+\begin{options}
+ \keychoice{template}{description,table,longtable,lof,toc}%
+ \Module{list}\Default{description}
+ Choose the template to create the list with. See more on this in
+ sections~\vref{sec:templates} and~\vref{sec:examples}.
+ \keybool{sort}\Module{list}\Default{true}
+ Decide wether to sort the list of acronyms alphabetically or to print it
+ in order of definition.
+ \keychoice{display}{all,used}\Module{list}\Default{used}
+ Decide wether to print only the acronyms actually used in the document or
+ all acronyms which have been declared in the preamble.
+ \keyval{exclude}{csv list of tags}\Module{list}\Default
+ Set a list of tags to exclude from the list. Only acronyms not
+ belonging to one of these tags will be included.
+ \keyval{include}{csv list of tags}\Module{list}\Default
+ Set a list of tags to include in the list. Only acronyms belonging to
+ one of these tags will be included.
+ \keychoice{heading}{none,section,section*,chapter,chapter*}\Module{list}
+ Choose the heading template for the list of acronyms.
+
+ This only has an effect if the list template supports it. All pre-defined
+ templates \emph{do} support it.
+ \keyval{name}{text}\Module{list}\Default{\cs{acrotranslate}\Marg{list-name}}
+ Overwrites the text which is used in the heading.
+
+ This only has an effect if the list template supports heading templates
+ \emph{and} the heading templates support it. All pre-defined heading
+ templates \emph{do} support this.
+ \keyval{preamble}{text}\Module{list}\Default
+ Set a preamble to be placed between heading and actual list.
+
+ This only has an effect if the list template supports it. All pre-defined
+ templates \emph{do} support it.
+ \keybool{display}\Module{list,locale}\Default{false}
+ This options determines wether the language of the foreign form is printed
+ or not.
+
+ This only has an effect if the list template supports foreign forms. All
+ pre-defined templates \emph{do} support them.
+\end{options}
-\begin{example}[side-by-side]
- % preamble:
- % \DeclareAcronym{cd}{
- % short = cd ,
- % long = Compact Disc ,
- % short-format = \scshape
- % }
- first time: \ac{cd} \\
- second time: \ac{cd} \\
- short: \acs{cd} \\
- alternative: \aca{cd} \\
- first again: \acf{cd} \\
- long: \acl{cd} \\
- short plural: \acsp{cd} \\
- long plural: \aclp{cd}
-\end{example}
+All these options can be set with \cs{acsetup} globally or locally as options
+to \cs{printacronyms}. In the latter case omit the leading
+\module{list}:
+\begin{sourcecode}
+ \acsetup{list/display=all,list/exclude=units}
+ or
+ \printacronyms[display=all,exclude=units]
+\end{sourcecode}
-\subsection{Plural Forms}
-If an acronym is defined in the standard way \acro\ uses an `s' that's appended
-to both the short and the long form when one of the plural commands is used.
-However, that is not always the best solution. For one thing not all acronyms
-may have a plural form. Second, the plural form especially of the long forms
-may be formed differently. And third, other languages can have other plural
-endings.
+\subsection{Add page numbers to the list}\label{sec:page-numbers}
+If you want to include the page numbers where the acronyms have been used in
+the list of acronym you can use these options:
+\begin{options}
+ \keychoice{display}{first,all,none}\Module{pages}\Default{none}
+ Decide wether to include page numbers in the list of acroynms and wether
+ to add the first page or every page. When you choose \code{first} and
+ have \pkg{hyperref} loaded you will also get a backlink to that page.
+ \keybool{use}\Module{pages,seq}\Default{true}
+ Turns a two-page range into \meta{num}\,f.\ (\latin{sequens}) and a
+ three-page range into \meta{num}\,ff.\ (\latin{sequentes}) when set to
+ \code{true}.
+ \keyval{pre}{code}\Module{pages,seq}\Default{\cs*{,}}
+ \meta{code} is inserted between the page number and the sequens or
+ sequentes symbol.
+ \keyval{threshold}{num}\Module{pages,seq}\Default{3}
+ The threshold for a page range to be turned into \latin{sequentes}. A
+ page range above the threshold is still typeset as a range:
+ \meta{num1}--\meta{num2}.
+ \keyval{fill}{code}\Module{pages}\Default{\cs*{dotfill}}
+ This is the code that is placed between acronym description and actual
+ page numbers.
+ \keybool{name}\Module{pages}\Default{false}
+ If set to true the page numbers are preceded with p.\ or pp.
+\end{options}
-For these reasons \cs{DeclareAcronym} can get the following keys:
+\subsection{Filter lists using tags}\label{sec:lists-tags}
+With the property \property{tag} you can assign one or more tags to an
+acronym. These tags can be used to filter the list of acronyms.
\begin{properties}
- \propval{short-plural}{text}\Default{s}
- The plural ending of the short form.
- \propval{long-plural}{text}\Default{s}
- The plural ending of the long form.
- \propval{long-plural-form}{text}
- An alternative plural form for the long form.
+ %% tag
+ \propval{tag}{csv list}\Default
+ The tag(s) of an acronym.
\end{properties}
-These keys are optional. If they're not used, the default setting is
-\code{s}. If you use \property{long-plural-form} the long form will be
-replaced by the specified plural form when necessary.
-
-Suppose we define the following acronyms:
+\begin{options}
+ \keyval{exclude}{csv list of tags}\Module{list}\Default
+ Set a list of tags to exclude from the list. Only acronyms not
+ belonging to one of these tags will be included.
+ \keyval{include}{csv list of tags}\Module{list}\Default
+ Set a list of tags to include in the list. Only acronyms belonging to
+ one of these tags will be included.
+\end{options}
+
+Let's look at an example. This manual declares these two acronyms with the tag
+\code{city}:
\begin{sourcecode}
- \DeclareAcronym{cd}{
- short = cd ,
- long = Compact Disc ,
- short-format = \scshape
+ \DeclareAcronym{la}{
+ short = LA ,
+ long = Los Angeles,
+ plural = ,
+ tag = city
}
\DeclareAcronym{ny}{
- short = NY ,
- short-plural = ,
- long = New York ,
- long-plural =
- }
- \DeclareAcronym{sw}{
- short = SW ,
- long = Sammelwerk ,
- long-plural = e
- }
- \DeclareAcronym{MP}{
- short = MP ,
- long = Member of Parliament ,
- long-plural-form = Members of Parliament
+ short = NY ,
+ long = New York ,
+ plural = ,
+ tag = city
}
\end{sourcecode}
-These acronyms now have the following plural appearances:
-\begin{example}[side-by-side]
- \acsp{cd}, \aclp{cd} \\
- \acsp{ny}, \aclp{ny} \\
- \acsp{sw}, \aclp{sw} \\
- \acsp{MP}, \aclp{MP}
+We can now use this to either print a list \emph{without} these acronyms by
+saying
+\begin{sourcecode}
+ \printacronyms[exclude=city]
+\end{sourcecode}
+or print a list \emph{with only} these acronyms with
+\begin{example}
+ \printacronyms[include=city,heading=none]
\end{example}
+\begin{bewareofthedog}
+ If you use both \option{exclude} and \option{include} and list a tag in both
+ \option{exclude} takes precedence over \option{include}.
+ \begin{sourcecode}
+ \printacronyms[exclude={a,b},include={b,c}]
+ \end{sourcecode}
+ would only print acronyms with tag \code{c}.
+\end{bewareofthedog}
-In the default setting the format of the long or short form is not extended to
-the plural ending which might look strange if you choose bold weight as
-format, for example. In this case you can tell \acro\ to extend the format.
+\subsection{Local lists}\label{sec:local-lists}
+Maybe you like a list of acronyms for each chapter in a book which only lists
+the acronyms used within this chapter. You need to do three things: set
\begin{options}
- \keybool{format-include-endings}\Default{false}
- Tell\sinceversion{2.8} \acro\ to use the format of the base form for the
- endings, too.
+ \keybool{use}\Module{barriers}\Default{false}
+ this option to \code{true}, place
\end{options}
-For a more general view on endings please read section
-\vref{sec:about-plural-forms}.
-
-\subsection{Alternative Short Forms}
-For some acronyms it might be useful to have alternative forms. For this
-\cs{DeclareAcronym} has another key:
-\begin{properties}
- \propval{alt}{text}
- Alternative short form.
-\end{properties}
-\begin{example}
- % preamble:
- % \DeclareAcronym{jpg}{
- % short = JPEG ,
- % sort = jpeg ,
- % alt = JPG ,
- % long = Joint Photographic Experts Group
- % }
- default: \acs{jpg} \\
- alt.: \aca{jpg}
-\end{example}
-The alternative form uses the same plural ending as the default short form and
-is formatted in the same way.
+\begin{commands}
+ \command{acbarrier}
+ before a new chapter starts (this is not necessary for the first chapter),
+ and use \cs{printacronyms} with the option
+\end{commands}
+\begin{options}
+ \keybool{local}\Module{list}\Default{false}
+ or set this option once in the preamble with \cs{acsetup} so it is applied
+ to every list.
+\end{options}
+Please read more on barriers in section~\vref{sec:barriers}.
+\begin{bewareofthedog}
+ Please don't use page numbers together with local lists for the time being.
+ If an acronym appears in more than one list both lists would contain the
+ \emph{same} page numbers anstead of only the ones local to barriers.
-\subsection{Extra Information for the List Entry}
-Of course you can print a list of acronyms where their meaning is explained.
-Sometimes it can be useful to add additional information there. This is done
-with another key to \cs{DeclareAcronym}:
-\begin{properties}
- \propval{extra}{text}
- Additional information for the list of acronyms.
-\end{properties}
-These information will only be displayed in the list. See
-section~\vref{sec:print_lists} for the impact of the following example.
+ For the similar reasons please also don't use \option{make-links} together
+ with local lists.
-\begin{example}
- % preamble:
- % \DeclareAcronym{nato}{
- % short = nato ,
- % long = North Atlantic Treaty Organization ,
- % extra = \textit{deutsch}: Organisation des Nordatlantikvertrags ,
- % short-format = \scshape
- % }
- The \ac{nato} is an intergovernmental military alliance based on the
- North Atlantic Treaty which was signed on 4~April 1949. \ac{nato}
- headquarters are in Brussels, Belgium, one of the 28 member states
- across North America and Europe, the newest of which, Albania and
- Croatia, joined in April 2009.
-\end{example}
+ This \emph{might} be resolved on day.
+\end{bewareofthedog}
-\subsection{Foreign Language Acronyms}\label{ssec:foreign}
-I repeatedly read the wish for being able to add translations to acronyms when
-the acronyms stem from another language than the document language,
-\latin{i.e.}, something like the following in a German document:
-\begin{example}[side-by-side]
- \ac{ecu}\\
- \ac{ecu}
-\end{example}
-That's why I decided to add the following properties:
+\section{Formatting}\label{sec:formatting}
+\acro\ has a number of options and parameters which can be used to influence
+the formatting of acronyms.
+\begin{options}
+ \keyval{format}{code}\Default
+ Sets the format for both the short and the long form.
+ \keyval{short}{code}\Module{format}\Default
+ Sets the format for the short form.
+ \keyval{long}{code}\Module{format}\Default
+ Sets the format for the long form.
+ \keyval{first-long}{code}\Module{format}\Default
+ Sets the format for the first appearance of the long form.
+ \keyval{alt}{code}\Module{format}\Default
+ Sets the format for the alternative form.
+ \keyval{extra}{code}\Module{format}\Default
+ Sets the format for the extra information.
+ \keyval{foreign}{code}\Module{format}\Default
+ Sets the format for the foreign form.
+ \keyval{list}{code}\Module{format}\Default
+ Sets the format for the long form in the list form.
+\end{options}
+While this options influence the formatting of the acronyms globally you can
+also give each acronym its own formatting individually:
\begin{properties}
- \propval{foreign}{original long form}
- A description for an acronym originating in another language than the
- document language.
- \propval{foreign-lang}{language}
- \sinceversion{2.3}The \pkg{babel}~\cite{pkg:babel} or
- \pkg{polyglossia}~\cite{pkg:polyglossia} language of the foreign form.
- This language is used to wrap the entry with
- \cs*{foreignlanguage}\marg{language}.
+ \propval{format}{code}\Default
+ The format used for both short and long form of the acronym.
+ %% short-format
+ \propval{short-format}{code}\Default={format}
+ The format used for the short form of the acronym.
+ %% long-format
+ \propval{long-format}{code}\Default={format}
+ The format used for the long form of the acronym.
+ %% first-long-format
+ \propval{first-long-format}{code}\Default={long-format}
+ The format used for the first appearance of the long form of the acronym.
+ %% alt-format
+ \propval{alt-format}{code}\Default={short-format}
+ The format used for the alternative form of the acronym. If this is not
+ given the short format will be used.
+ %% extra-format
+ \propval{extra-format}{code}\Default
+ The format used for the additional information of the acronym.
+ %% foreign-format
+ \propval{foreign-format}{code}\Default
+ The format used for the foreign form of the acronym.
+ %% single-format
+ \propval{single-format}{code}\Default={long-format}
+ The format used for the acronym if the acronym is only used a single
+ time.
+ %% list-format
+ \propval{list-format}{code}\Default={long-format}
+ The format used for the long form of the acronym in the list if the list
+ template supports it. All pre-defined list templates \emph{do} support
+ it.
+ %% first-style
+ \propchoice{first-style}{long-short,short-long,short,long,footnote}\Default
+ The style of the first appearance of the acronym, see also
+ section~\vref{sec:first-or-full}.
+ %% single-style
+ \propchoice{single-style}{long-short,short-long,short,long,footnote}\Default
+ The style of a single appearance of the acronym, see also
+ section~\vref{sec:single-appe-an}.
\end{properties}
+Per default the individual formatting instructions are \emph{additive} to the
+global ones. This can be changed through the option
+\begin{options}
+ \keybool{replace}\Module{format}\Default{false}
+ With this option active local options will \emph{replace} the global ones.
+\end{options}
-Here is the definition of the above mentioned \ac{ecu} acronym:
+Let's see an example:
\begin{sourcecode}
- \DeclareAcronym{ecu}{
- short = ECU ,
- long = Steuerger\"at ,
- foreign = Electronic Control Unit ,
- foreign-lang = english
+ \DeclareAcronym{pdf}{
+ short = pdf ,
+ long = Portable Document Format ,
+ short-format = \scshape
}
\end{sourcecode}
-As you have seen this adds the \property{foreign} entry to the first
-appearance of an acronym. It is also added in parentheses to the list of
-acronyms after the \property{long} entry. Actually the entry there is the
-argument to the following command:
-\begin{commands}
- \command{acroenparen}[\marg{argument}]
- Places \meta{argument} in parentheses: \cs{acroenparen}\Marg{example}:
- \acroenparen{example}. See page~\pageref{key:list-foreign-format} for a
- way to customize this other than redefining it.
-\end{commands}
-
-\section{Additional Commands and Possibilities}
-\subsection{Indefinite Forms}
-
-Unlike many other languages\footnote{Let's better say: unlike the other
- languages where I know at least the basics.} in English the indefinite
-article is not determined by the grammatical case, gender or number but by the
-pronounciation of the following word. This means that the short and the long
-form of an acronym can have different indefinite articles. For these cases
-\acro\ offers the following keys:
-\begin{properties}
- \propval{short-indefinite}{article}\Default{a}
- Indefinite article for the short form.
- \propval{alt-indefinite}{article}\Default{a}
- Indefinite article for the alternative form.
- \propval{long-indefinite}{article}\Default{a}
- Indefinite article for the long form.
-\end{properties}
-For every lowercase singular command two alternatives exist, preceded by
-\code{i} and \code{I}, respectively, which output the lowercase and uppercase
-version of the corresponding indefinite article.
-
\begin{example}
- % preamble:
- % \DeclareAcronym{ufo}{
- % short = UFO ,
- % long = unidentified flying object ,
- % long-indefinite = an
- % }
- \Iac{ufo}; \iacs{ufo}; \iacl{ufo}
+ \acsetup{format = \itshape}
+ \acf{pdf} \par
+ \acsetup{format/replace=true}
+ \acf{pdf}
\end{example}
-\subsection{Uppercasing}
-\begin{commands}
- \command{acfirstupper}[\marg{token list}]
- This command uppercases the first token in \meta{token list}. The
- command is less powerful than \cs{makefirstuc} that is provided by the
- \pkg{mfirstuc} package~\cite{pkg:mfirstuc} but it is expandable. Obvious
- downsides are for example that it does not uppercase accented letters.
-\end{commands}
-The following options control the behaviour of the uppercasing commands:
+\section{Plural forms and other endings}\label{sec:plural-forms-other}
+\subsection{The plural ending and the plural form}\label{sec:plural-ending-form}
+Not in all languages plural forms are as easy as always appending an
+\enquote{s}. Not even English. Sometimes there's other endings
+instead\footnote{German is full of such examples.}. This is why \acro\ has
+quite a number of different properties related to plural forms or endings:
+\begin{properties}
+ %% short-plural
+ \propval{short-plural}{text}\Default{s}
+ The plural ending appended to the short form.
+ %% short-plural-form
+ \propval{short-plural-form}{text}\Default
+ The plural short form of the acronym; replaces the short form when used
+ instead of appending the plural ending.
+ %% long-plural
+ \propval{long-plural}{text}\Default{s}
+ The plural ending appended to the long form.
+ %% long-plural-form
+ \propval{long-plural-form}{text}\Default
+ Plural long form of the acronym; replaces the long form when used
+ instead of appending the plural ending.
+ %% alt-plural
+ \propval{alt-plural}{text}\Default{s}
+ The plural ending appended to the alternative form.
+ %% alt-plural-form
+ \propval{alt-plural-form}{text}\Default
+ The plural alternative form of the acronym; replaces the alternative form
+ when used instead of appending the plural ending.
+ %% foreign-plural
+ \propval{foreign-plural}{text}\Default{s}
+ The plural ending appended to the foreign form.
+ %% foreign-plural-form
+ \propval{foreign-plural-form}{text}\Default
+ Plural foreign form of the acronym; replaces the foreign form when used
+ instead of appending the plural ending.
+\end{properties}
+There are two options which allow to change the default values for the whole
+document:
\begin{options}
- \keyval{uc-cmd}{control sequence}\Default{\cs{acfirstupper}}
- The command that is used to capitalize the first word in the \cs{Ac} and
- the like commands. You can change it to another one like for example
- \cs*{makefirstuc}\footnote{from the \pkg{mfirstuc} package} or
- \cs*{MakeTextUppercase}\footnote{from the \pkg*{textcase} package}.
- %%
- \keybool{uppercase-short}\Default{true}
- If\sinceversion{2.10} set to \code{true} commands like \cs{Ac} or \cs{Acp}
- will uppercase the first letter of the short form. Commands like \cs{Acs}
- or \cs{Acsp} will uppercase the short form in any case.
+ \keyval{short-plural-ending}{text}\Default{s}
+ Defines the plural ending for the short forms to be \meta{text}.
+ \keyval{long-plural-ending}{text}\Default{s}
+ Defines the plural ending for the long forms to be \meta{text}.
\end{options}
-
-\subsection{Simulating the First Appearance}\label{sec:simul-first-appe}
-Users told me\footnote{Well -- one, to be precise ;)} that there are cases
-when it might be useful to have the the acronym typeset according to the
-\option{first-style} option (or \property{first-style} property) but with
-another text than the long form. For such cases \acro\ offers the following
-commands.
-\begin{commands}
- \command{acflike}[\sarg\marg{id}\marg{instead of long form}]
- Write some alternative long form for acronym with \acs{id} \meta{id} as if
- it were the first time the acronym was used.
- \command{acfplike}[\sarg\marg{id}\marg{instead of long form}]
- Plural form of \cs{acflike}.
-\end{commands}
-
+Now let's see two simple examples demonstrating the two different kinds of plural
+settings:
+\begin{sourcecode}
+ \DeclareAcronym{sw}{
+ short = SW ,
+ long = Sammelwerk ,
+ long-plural = e
+ }
+ \DeclareAcronym{MP}{
+ short = MP ,
+ long = Member of Parliament ,
+ plural-form = Members of Parliament
+ }
+\end{sourcecode}
+The first one has another plural ending than the usual \enquote{s}. The second
+one has a different plural form altogether because appending an \enquote{s}
+would give a wrong form:
\begin{example}[side-by-side]
- \acsetup{first-style=footnote}
- \acflike{ny}{the big apple}
+ \acfp{sw} \par
+ \acfp{MP}
\end{example}
-The plural ending in \cs{acfplike} is only appended to the short form. It
-makes no sense to append it to the text that is inserted manually anyway.
-Note that whatever text you're inserting might be gobbled depending on the
-\option{first-style} you're using.
-
-\subsection{Fetching the Single Appearance}
-There\sinceversion{2.3} are macros that fetch the \emph{single} appearance of
-an acronym even if it has been used more than once and the \option{single}
-option is active.
-\begin{commands}
- \command{acsingle}[\sarg\marg{id}]
- Write acronym as if it were used only a single time.
- \command{Acsingle}[\sarg\marg{id}]
- Uppercase form of \cs{acsingle}.
- \command{acpsingle}[\sarg\marg{id}]
- Plural\sinceversion{2.11} form of \cs{acsingle}.
- \command{Acsingle}[\sarg\marg{id}]
- Plural\sinceversion{2.11} form of \cs{Acsingle}.
-\end{commands}
+\subsection{Other endings}\label{sec:other-endings}
+Besides plural endings there are other ones like the genitive case, for
+example. This is why \acro\ generalized the concept.
+Section~\vref{sec:endings} explains in detail how to define and use additional
+endings.
+\section{Articles}
+\subsection{Indefinite forms}\label{sec:indefinite-forms}
+Indefinite forms can be a problem if the short and the long form of acronyms
+have different indefinite articles\footnote{This may very well be a language
+ specific issue.}.
\begin{example}[side-by-side]
- \acsingle{ny}
+ \acreset{ufo}%
+ a \ac{ufo} \par
+ an \ac{ufo}
\end{example}
-
-\subsection{Using Classes}
-The acronyms of \acro\ can be divided into different classes. This doesn't
-change the output but allows different acronym lists, see
-section~\vref{sec:print_lists}. For this \cs{DeclareAcronym} has an additional
-key:
+And what good would it be to use a package like \acro\ if you have to keep
+track of of and second uses, anyway? This is why \acs{ufo} should be defined
+like we did on page~\pageref{ufo}. We then can just use the dedicated
+commands and let them decide for us:
+\begin{example}[side-by-side]
+ \acreset{ufo}%
+ \iac{ufo} \par
+ \iac{ufo}
+\end{example}
+The commands which also output the indefinite article all start with an
+\enquote{i} and have all been described in section~\vref{sec:using-acronyms}
+already: \cs{iac}, \cs{Iac}, \cs{iacs}, \cs{Iacs}, \cs{iacl}, \cs{Iacl},
+\cs{iaca}, \cs{Iaca}, \cs{iacf}, and \cs{Iacf}.
+
+\subsection{Other articles}\label{sec:other-articles}
+There might be cases -- most likely depending on your language -- when you
+would like to have other articles behaving similar to the indefinite ones.
+Section~\ref{sec:articles} explains in detail how to define and use additional
+articles.
+
+\section{Foreign language acronyms}\label{sec:fore-lang-acronyms}
+Sometimes and in some fields more often than in others abbreviations are used
+that are derived from another language. \acro\ provides a number of
+properties for such cases:
\begin{properties}
- \propval{class}{csv list}
- Associated\changedversion{2.4} class(es) for an acronym.
+ %% foreign
+ \propval{foreign}{long form in foreign language}\Default
+ Can be useful when dealing with acronyms in foreign languages, see
+ section~\vref{sec:fore-lang-acronyms} for details.
+ %% foreign-plural
+ \propval{foreign-plural}{text}\Default{s}
+ The plural ending appended to the foreign form.
+ %% foreign-plural-form
+ \propval{foreign-plural-form}{text}\Default
+ Plural foreign form of the acronym; replaces the foreign form when used
+ instead of appending the plural ending.
+ %% foreign-format
+ \propval{foreign-format}{code}\Default
+ The format used for the foreign form of the acronym.
+ %% foreign-babel
+ \propval{foreign-babel}{language}\Default
+ The \pkg{babel} or \pkg{polyglossia} language of the foreign form. This
+ language is used to wrap the entry with
+ \cs*{foreignlanguage}\marg{language} if either \pkg{babel} or
+ \pkg{polyglossia} is loaded. You'll need to take care that the
+ corresponding language is loaded by \pkg{babel} or \pkg{polyglossia}.
+ %% foreign-locale
+ \propval{foreign-locale}{language}\Default
+ The language name that is output when the option
+ \module{locale}\code{/}\option{display} is used. If this property is not
+ set then the appropriate value might be derived from
+ \property{foreign-babel}.
\end{properties}
+There are also some options:
+\begin{options}
+ \keybool{display}\Module{locale}\Default{false}
+ This options determines wether the language of the foreign form is printed
+ or not when the full form of the acronym is printed.
+ \keybool{display}\Module{list,locale}\Default{false}
+ The same but for the list of acronyms.
+ \keyval{format}{code}\Module{locale}\Default{\cs*{em}\cs*{text\_titlecase\_first:n}}
+ Determines how said language is formatted when printed. The last command
+ in \meta{code} may take a mandatory argument.
+\end{options}
-This might be useful if you can and want to divide your acronyms into
-different types, technical and grammatical ones, say, that shall be listed in
-different lists. Since every acronym can get a list of associated classes
-those classes can effectively be used like tags for filtering acronyms.
-
-\begin{example}[side-by-side]
- % preamble:
- % \DeclareAcronym{la}{
- % short = LA ,
- % short-plural = ,
- % long = Los Angeles ,
- % long-plural = ,
- % class = city
- % }
- % \DeclareAcronym{ny}{
- % short = NY ,
- % short-plural = ,
- % long = New York ,
- % long-plural = ,
- % class = city ,
- % cite = NewYork
- % }
- \acl{la} (\acs{la}) \\
- \acl{ny} (\acs{ny})
+Let's say you are writing a German document and are using the abbreviation
+\acs*{ecu} for \acl*{ecu} which stems from the English \enquote{Electronic
+ Control Unit}. Then you can define it as follows:
+\begin{sourcecode}
+ \DeclareAcronym{ecu}{
+ short = ECU ,
+ long = Steuergerät ,
+ foreign = Electronic Control Unit ,
+ foreign-babel = english ,
+ foreign-locale = englisch
+ }
+\end{sourcecode}
+Now the abbreviation is introduced so that everyone understands the confusion:
+\begin{example}
+ \ac{ecu} \par
+ \acsetup{locale/display,locale/format=\emph}
+ \acf{ecu}
\end{example}
-\subsection{Reset or Mark as Used, Test if Acronym Has Been Used}
-
-If you want for some reason to fool \acro\ into thinking that an acronym is
-used for the first time you can call one of these commands:
-\begin{commands}
- \command{acreset}[\marg{comma separated list of ids}]
- This will reset a used acronym such that the next use of \cs{ac} will
- again print it as if it were used the first time. This will \emph{not}
- remove an acronym from being printed in the list if it actually \emph{has}
- been used before.
- \command{acresetall}
- Reset all acronyms.
- \command{acifused}[\marg{id}\marg{true}\marg{false}]
- This command tests if the acronym with \ac{id} \meta{id} has already been
- used and either puts \code{true} or \code{false} in the input stream.
- \command{aciffirst}[\marg{true}\marg{false}]
- To\sinceversion{2.8} be used inside of acronym definitions in order to
- test if we are inside the first instance of the acronym or not.
-\end{commands}
-\begin{example}[side-by-side]
- \acreset{ny}\ac{ny}
+The property \property{foreign-babel} is used for ensuring correct hyphenation
+as long as you use \pkg{babel} or \pkg{polyglossia} and load the corresponding
+language, too. If you are writing your document in English then \acro\ is
+able to deduce the language used for the \enquote{locale} field by itself:
+\begin{sourcecode}
+ \DeclareAcronym{eg}{
+ short = e.g\acdot ,
+ long = for example ,
+ foreign = exempli gratia ,
+ foreign-babel = latin ,
+ short-format = \textit ,
+ foreign-format = \textit
+ }
+\end{sourcecode}
+\begin{example}
+ \acsetup{locale/display,first-style=short-long}
+ \acf{eg}
\end{example}
-Beware that both commands act \emph{globally}! There are also commands that
-effectively do the opposite of \cs{acreset}, \latin{i.e.}, mark acronyms as
-used:
-\begin{commands}
- \command{acuse}[\marg{comma separated list of ids}]
- This has the same effect as if an acronym had been used twice, that is,
- further uses of \cs{ac} will print the short form and the acronym will in
- any case be printed in the list (as long as its class is not excluded).
- \command{acuseall}
- Mark all acronyms as used.
-\end{commands}
-Then there are two further commands related to using acronyms:
-\begin{commands}
- \command{acswitchoff}
- This\sinceversion{2.6} command is for patching in certain situations. For
- example some table environments like \env*{tabularx} or \env*{tabu} pass
- their content two or more times for determining the width of the table
- columns. Those can be patched to add \cs{acswitchoff} to their trial
- phase.
- \command{acswitchon}
- Effectively\sinceversion{2.6} the opposite of \cs{acswitchoff} -- this
- command should probably never be needed.
-\end{commands}
-\subsection{\cs*{ac} and Friends in \acs*{pdf} Bookmarks, Accessibility
- Support, Tooltips}
-\subsubsection{\acs*{pdf} Bookmarks}
-\acro's commands usually are not expandable which means they'd leave unallowed
-tokens in \acs{pdf} bookmarks. \pkg{hyperref} offers \cs*{texorpdfstring} to
-circumvent that issue manually but that isn't really a nice solution. What's
-the point of having macros to get output for you if you have to specify it
-manually after all?
-
-That is why \acro\ offers a preliminary solution for this. In a bookmark
-every \cs{ac} like command falls back to a simple text string typesetting what
-\cs{acs} would do (or \cs{acsp} for plural forms). These text strings both
-can accessed manually and can be modified to an output reserved for \acs{pdf}
-bookmarks.
+\section{Uppercasing}\label{sec:uppercasing}
-\begin{commands}
- \command{acpdfstring}[\marg{id}]
- Access the text string used in \acs{pdf} bookmarks.
- \command{acpdfstringplural}[\marg{id}]
- Access the plural form of the text string used in \acs{pdf} bookmarks.
-\end{commands}
-\begin{properties}
- \proplit-{pdfstring}{\Marg{\meta{pdfstring}/\meta{plural ending}}}
- Key for \cs{DeclareAcronym} to declare a custom text string for \acs{pdf}
- bookmarks. The plural ending can be set optionally.
-\end{properties}
+Depending on the kind of abbreviations you have and depending on their
+definition and maybe also depending on your language the long and sometimes
+also the short forms need to start with an uppercase letter at the beginning
+of a sentence while it starts with a lowercase letter otherwise.
-For example the \acs{pdf} acronym used in the title for this section is defined
-as follows:
+For this \acro\ provides uppercase versions for all predefined acronym
+commands listed in section~\ref{sec:using-acronyms}. The usage is
+self-explaining:
+\begin{example}
+ There was \iacl{ufo} hovering \dots \par
+ \Aclp{ufo} were hovering \dots
+\end{example}
+If you defined them with uppercase letters to begin with then these commands
+have no effect, of course.
\begin{sourcecode}
- \DeclareAcronym{pdf}{
- short = pdf ,
- long = Portable Document Format ,
- format = \scshape ,
- pdfstring = PDF ,
- accsupp = PDF
+ \DeclareAcronym{ufo}{
+ short = UFO ,
+ long = Unidentified Flying Object
}
\end{sourcecode}
-\subsubsection{Accessibility Support}
-
-The last example also demonstrates the \property{accsupp} key. The idea is to
-have something different visible in the \acs{pdf} file compared to what you
-get when you select and copy the corresponding string. In the example visible
-string is a lowercase \code{pdf} in small caps while the string copied is an
-uppercase \code{PDF}.
-
-For this to work you need to use the \emph{package option} \option{accsupp},
-too, which will load the package \pkg{accsupp} if it isn't loaded by the user
-already. Then the key \property{accsupp} will set the \code{ActualText}
-property of \cs*{BeginAccSupp}. Please refer to \pkg{accsupp}'s documentation
-for details. To see its effect copy \ac{pdf} and paste it into a text file.
-You should get uppercase letters instead of lowercase ones.
-
-\begin{properties}
- \propval{accsupp}{text}
- Key for \cs{DeclareAcronym} to set the \code{ActualText} property of
- \cs*{BeginAccSupp} (see \pkg{accsupp}'s documentation for details) to be
- used for an acronym. It only has an effect when the package option
- \option{accsupp} is used, too.
-\end{properties}
+There are a number of options to control the uppercasing behavior:
\begin{options}
- \keybool{accsupp}\Default{false}
- Activate \acro's accessibility support.
+ \opt{first}\Module{uppercase}
+ The default setting. Converts the first letter to uppercase.
+ \opt{title}\Module{uppercase}
+ This is just a synonym of \option{first}.
+ \opt{all}\Module{uppercase}
+ Converts \emph{all} letters to uppercase.
+ \opt{none}\Module{uppercase}
+ Converts \emph{all} letters to \emph{lowercase}
+ \keyval{cmd}{command}\Module{uppercase}
+ All of the above options just choose the right command using this option
+ internally. This means you can choose a different behavior altogether by
+ setting this option to something else. For example you could use
+ \cs*{capitalisewords} from the package
+ \pkg{mfirstuc}~\cite{pkg:mfirstuc}. The command needs to have one
+ mandatory argument.
\end{options}
-\subsubsection{Tooltips}
+There may be reasons to exclude short forms from being uppercased. This can
+be controlled by this option:
+\begin{options}
+ \keybool{short}\Module{uppercase}\Default{true}
+ It allows you to disable the mechanism for the \property{short} and
+ \property{alt} properties.
+\end{options}
-The idea of a tooltip is to have some text shown when you hover with the
-mouse over the short form of an acronym. This is only available in some
-\acs{pdf} viewers, though. On possibility for such tooltips is loading the
-\pkg{pdfcomment} package~\cite{pkg:pdfcomment} and using its \cs*{pdftooltip}
-macro.
+\section{Citing and indexing}\label{sec:citing-indexing}
+\subsection{Citing}\label{sec:citing}
+Acronyms can be given cite keys. This makes it possible to add a citation
+reference automatically when the acronym is used for the first time.
+Let's see an example first. \acs*{ny} has been defined like this:
+\begin{sourcecode}
+ \DeclareAcronym{ny}{
+ short = NY ,
+ long = New York ,
+ plural = ,
+ tag = city ,
+ cite = NewYork
+ }
+\end{sourcecode}
+The property \property{cite} will now trigger \acro\ to input
+\verbcode+\cite{NewYork}+ after the acronym:
+\begin{example}[side-by-side]
+ \ac{ny}
+\end{example}
+Depending on the citation style (and probably other factors, too) it might be
+desirable to add the citation rather inside the parentheses together with the
+short form of the acronym and even cited with a different command. For cases
+like these \acro\ offers a number of options:\acuse{ny}
\begin{options}
- \keybool{tooltip}\Default{false}
- This\sinceversion{2.1} options loads the \pkg{pdfcomment} package and sets
- the command for creating tooltips to \cs*{pdftooltip}.
- \keyval{tooltip-cmd}{control sequence}\Default{\cs*{@firstoftwo}}
- This\sinceversion{2.1} allows users using another macro for tooltips --
- maybe one provided by another package or some own macro. It needs to be a
- macro with two mandatory arguments, the first being the string typeset in
- the \acs{pdf}, the second being the tooltip description text.
+ \keyval{cmd}{citation command}\Module{cite}\Default{\cs*{cite}}
+ Choose the command with which citations ar printed.
+ \keybool{group}\Module{cite}\Default{false}
+ Decide wether to group citations with the short form in the parentheses.
+ The template must support this. \acro's pre-defined templates \emph{do}
+ support it.
+ \keychoice{display}{first,all,none}\Module{cite}\Default{first}
+ Decide wether to output the citation in the first/full usage only or
+ always or never.
+ \keyval{pre}{text}\Module{cite}\Default{\cs*{nobreakspace}}
+ Arbitrary code directly output before the citation.
+ \keyval{cmd}{citation command}\Module{cite,group}\Default{\cs*{cite}}
+ Choose the command with which grouped citations are printed.
+ \keyval{pre}{text}\Module{cite,group}\Default{,\textvisiblespace}
+ Arbitrary code directly output before the citation in the grouped case.
\end{options}
-For using this with acronyms they have a property \property{tooltip} which can
-be used inside \cs{DeclareAcronym} for specifying the description text of the
-tooltip. If the \option{tooltip} package option is used but the property is
-not set for an acronym then the \property{long} property is used instead.
-
-If an acronym is used inside of another acronym then the tooltips of the
-``inner'' acronyms are disabled.
-
-\subsection{Adding Acronyms to the Index}\label{ssec:index}
-\acro\ has the package option \option{index}. If it is used an index entry
-will be recorded every time an \emph{unstarred} acronym command is used. The
-index entry will be \code{\meta{id}@\meta{short}},
-\code{\meta{sort}@\meta{short}} if the \property{sort} property has been set,
-\code{\meta{index-sort}@\meta{short}} if the property \property{index-sort}
-has been set, or \meta{index} if the property \property{index} has been set
-for the specific acronym. The short versions appearing there are formatted
-according to the chosen format of the corresponding acronym, of course.
-
-This document demonstrates the feature. You can find every acronym that has
-been declared in the index. In order to allow flexibility the indexing
-command can be chosen both globally via package option and individually for
-every acronym. This would allow to add acronyms to a specific index if more
-than one index is used, for example with help of the \pkg*{imakeidx} package.
-
-I'm not yet convinced this is a feature many people if anyone needs and if
-they do if it is flexible enough. If you have any thoughts on this I'd
-appreciate an email.
-
-\section{Printing the List}\label{sec:print_lists}
-Printing the whole list of acronyms is easy: just place \cs{printacronyms}
-where ever you want the list to be.
-\begin{commands}
- \command{printacronyms}[\oarg{options}]
- Print the list of acronyms.
-\end{commands}
-The commands takes a few options, namely the following ones:
+If for example you use \pkg{biblatex}'s \code{authoryear}
+style~\cite{pkg:biblatex} you might want to have settings like these:
+\begin{sourcecode}
+ \acsetup{
+ cite/group = true ,
+ cite/cmd = \parencite ,
+ cite/group/cmd = \cite
+ }
+\end{sourcecode}
+\begin{cnltxcode}
+\begin{lstlisting}[style=cnltx]
+ \acsetup{cite/display = all}
+ \acf{ny} \\
+ \ac{ny}
+\end{lstlisting}
+\tcblower
+ New York (NY, Wikipedia 2020) \\
+ NY (Wikipedia 2020)
+\end{cnltxcode}
+
+\subsection{Indexing}\label{sec:indexing}
+Maybe you want to add your acronyms to an index. In that case it is probably
+desirable to let \acro\ make this automatically. In the simplest case just
+enable it:
\begin{options}
- \keyval{include-classes}{list of classes}
- Takes a comma-separated list of the classes of acronyms that should be in
- the list.
- \keyval{exclude-classes}{list of classes}
- Takes a comma-separated list of the classes of acronyms that should
- \emph{not} be in the list. \emph{Note that this list overwrites any
- entries in \option{include-classes}!} If a class is both included and
- excluded then the corresponding acronyms will not be added to the list.
- \keyval{name}{name of the list}
- sets the name for the list.
- \keyval{heading}{sectioning command without leading backslash}%
- \Default{section*}
- Sets the sectioning command for the heading of the list. A special value
- is \code{none} which suppresses the heading.
- \keybool{sort}\Default{true}
- Set sorting for this list only.
- \keybool{local-to-barriers}\Default{false}
- This\sinceversion{2.4} option can be used to create a list of only the
- acronyms of the current \enquote{barrier group}, see
- section~\ref{sec:divid-your-docum}.
+ \keybool{use}\Module{index}\Default{false}
+ Enable indexing.
+ \keyval{cmd}{index command}\Module{index}\Default{\cs*{index}}
+ Choose a command for indexing.
+ \keyval{disable}{code}\Module{index}\Default{\cs*{def}\cs*{@}\{\}}
+ Sometimes it is desirable to change the meaning of a command inside an
+ index entry. For the entries created by \acro\ this can be achieved with
+ this option.
+ \opt{clear}\Module{index}
+ This option clears the disable list.
+\end{options}
+While these options set global behavior there are also properties to set them
+for an acronym individually.
+\begin{properties}
+ %% index
+ \propval{index}{text}\Default
+ This property allows to overwrite the automatic index entry with an
+ arbitrary one.
+ %% index-sort
+ \propval{index-sort}{text}\Default={sort}
+ If you use the option \option{index} every occurrence of an acronym is
+ recorded to the index and sorted by its short form or (if set) by the
+ value of the \property{sort} property. This property allows to set an
+ individual sorting option for the index.
+ %% no-index
+ \propbool{no-index}\Default{true}
+ This property allows to exclude an acronym from being indexed.
+\end{properties}
+This manual is an example for the indexing feature. Each acronym from
+section~\vref{sec:acronyms} that has been used in this manual is also listed
+in the manual.
+
+\section{Barriers}\label{sec:barriers}
+The main purpose of the concept of barriers is to be able to have \emph{local}
+lists of acronyms. This concept does a little bit more than that, though,
+which should become clear from the following options:
+\begin{options}
+ \keybool{use}\Module{barriers}\Default{false}
+ Activate usage of barriers. Otherwise the command \cs{acbarrier} just
+ does nothing except writing a warning in the log.
+ \keybool{reset}\Module{barriers}\Default{false}
+ When set to \code{true} the acronym usage is reset for all acronyms at a
+ barrier. The first use of \cs{ac} after a barrier will again look like
+ the \cs{acf}.
+ \keybool{single}\Module{barriers}\Default{false}
+ When set to \code{true} a single usage of an acronym between two barriers
+ with \cs{ac} will look according to the chosen style as explained in
+ section~\vref{sec:single-appe-an}. This option only has an effect when
+ the option \option{single} is used as well.
\end{options}
-\begin{example}
- \acsetup{extra-style=comma}
- \printacronyms[exclude-classes=city]
-
- \printacronyms[include-classes=city,name={City Acronyms}]
-\end{example}
-
-You can see that the default layout is a \code{description} list with a
-\cs*{section}\sarg\ title. Both can be changed, see
-section~\vref{sec:customization}.
-
-The command \cs{printacronyms} needs two \LaTeX{} runs. This is a precaution
-to avoid error messages with a possibly empty list. But since almost all
-documents need at least two runs and often are compiled much more often than
-that, this fact shouldn't cause too much inconvenience.
-\section{Options and Customization}\label{sec:customization}
-\subsection{General Options}
-There are a few options which change the general behaviour of \acro.
-\default{Underlined} values are used if no value is given. \acro's package
-options are best set onyl via the setup command:
+There are two natural barriers in a document: \beginenv*\Marg{document} and
+\endenv*\Marg{document}. You can add an arbitrary number of additional
+barriers with
\begin{commands}
- \command{acsetup}[\marg{options}]
- Set up \acro.
+ \command{acbarrier}
+ For this command to have any effect you must set
+ \module{barriers}\code{/}\option{single} to \code{true}!
\end{commands}
\begin{bewareofthedog}
- They \emph{might} work as package options to \cs*{usepackage} as well but
- \emph{I do not recommend it} and will likely remove this in a future
- version~3 of \acro.
+ It takes usually two or even three \LaTeX\ runs until acronym usages
+ between barriers are properly counted.
\end{bewareofthedog}
-\begin{options}
- \keychoice{messages}{silent,loud}\Default{loud}
- Setting \keyis{messages}{silent} will turn all of \acro's error messages
- into warnings and all of \acro's warnings into info messages. Be sure to
- check the log file carefully if you decide to set this option.
- %%
- \keybool{single}\Default{false}
- If set to \code{true} an acronym that's used only once (with \cs{ac}) in a
- document will only print the acronym in a specified form and will not be
- printed in the list.
- %%
- \keybool{case-sensitive}\Default{true}
- If\sinceversion{2.11} set to \code{true} the \meta{id} as used in
- \cs{DeclareAcronym} or \cs{ac} is read \emph{case sensitive},
- \latin{i.e.}, \code{id} would differ from \code{ID}. This is \acro's
- default behaviour.
-
- If set to \code{true} \code{id} would be the same as \code{ID}. This can
- be useful when acronyms are used in page headings for example.
- %%
- \keychoice{single-form}{long,short,alt,first}\Default{long}
- \sinceversion{2.0}Determines how a single appearance of an acronym is
- printed if \keyis{single}{true} has been chosen.
- %%
- \keybool{hyperref}\Default{false}
- If set to \code{true} the short forms of the acronyms will be linked to
- their list entry.
- %%
- \keybool{label}\Default{false}
- If set to \code{true} this option will place
- \cs*{label}\Marg{\meta{prefix}\meta{id}} the first time the acronym with
- \ac{id} \meta{id} is used.
- %%
- \keyval{label-prefix}{text}\Default{ac:}
- The prefix for the \cs*{label} that is placed when option
- \keyis{label}{true} is used.
- %%
- \keybool{only-used}\Default{true}
- This option is \code{true} as default. It means that only acronyms that
- are actually used in the document are printed in the list. If
- \code{false}, all acronyms defined with \cs{DeclareAcronym} will be
- written to the list.
- %%
- \keychoice{mark-as-used}{first,any}\Default{any}
- This option determines wether an acronym is mark as used when the
- \emph{first} form is used the first time (with \cs{ac}, \cs{acf} or
- \cs{acflike} and their uppercase, plural and indefinite forms) or when any
- of the \cs{ac}-like commands is used.
- %%
- \keybool{macros}\Default{false}
- If set to \code{true} this option will create a macro \cs*{\meta{id}} for
- each acronym as a shortcut for \cs{ac}\marg{id}. Already existing macros
- will \emph{not} be overwritten.
- %%
- \keybool{xspace}\Default{false}
- If set to \code{true} this option will append \cs*{xspace} from the
- \pkg*{xspace} package to the commands created with the \option{macros}
- option.
- %%
- \keybool{strict}\Default{false}
- If set to \code{true} and the option \keyis{macros}{true} is in effect
- then already existing macros will be overwritten.
- %%
- \keybool{sort}\Default{true}
- If set to \code{true} the acronym list will be sorted alphabetically. The
- entries are sorted by their \acs{id} ignoring upper and lower case. This
- option needs the experimental package \pkg{l3sort} (from the
- \pkg{l3experimental} bundle) and can only be set in the preamble.
- If set to \code{false} the acronyms are listed in order of their
- declaration.
- %%
- \keybool{display-foreign}\Default{true}
- When set to \code{false} any \property{foreign} property is ignored and
- foreign forms are not displayed.
- %%
- \keychoice{cite}{\default{all},first,none}\Default{first}
- \changedversion{2.4b}This option decides whether citations that are added
- via \property{cite} are added to each first, every or no appearance of an
- acronym. If \code{first} is chosen, the option \keyis{single}{true} is
- active and an acronym appears only once it still will get the citation.
- %%
- \keyval{cite-cmd}{control sequence}\Default{\cs*{cite}}
- This option determines which command is used for the citation. Each
- citation command that takes the cite key as argument is valid, for example
- \pkg*{biblatex}'s \cs*{footcite}.
- %%
- \keyval{cite-connect}{code}\Default{\cs*{nobreakspace}}
- Depending on the citation command in use a space should be inserted before
- the citation or maybe not (e.g.\ \cs*{footcite}\ldots). This option
- allows you to set this. Actually it can be used to place arbitrary code
- right before the citation.
- %%
- \keybool{group-citation}\Default{false}
- \sinceversion{2.0}If set to true the short form (or the long form) and the
- citation of an acronym will be printed together in parentheses when an
- acronym is used the first time.
- %%
- \keyval{group-cite-cmd}{control sequence}\Default{\cs*{cite}}
- \sinceversion{2.0}This option determines which command is used for the
- citation when an acronym is used the first time \emph{and}
- \keyis{group-citation}{true}. Each citation command that takes the cite
- key as argument is valid, for example \pkg*{biblatex}'s \cs*{footcite}.
- %%
- \keyval{group-cite-connect}{code}\Default{\code{,\cs*{nobreakspace}}}
- \sinceversion{2.0}When \keyis{group-citation}{true} this is inserted
- between the long/short form of the acronym and the citation within the
- parentheses.
- %%
- \keybool{index}\Default{false}
- If set to \code{true} an index entry will be recorded every time an
- \emph{unstarred} acronym command is used for the corresponding acronym.
- %%
- \keyval{index-cmd}{control sequence}\Default{\cs*{index}}
- Chooses the index command that is used when option \option{index} has been
- set to \code{true}.
- %%
- \keybool{accsupp}\Default{false}
- Activates the access support as provided by the \pkg{accsupp} package.
- %%
- \keybool{tooltip}\Default{false}
- \sinceversion{2.1}Activates tooltip support for \acro\ using the
- \pkg{pdfcomment} package.
- %%
- \keyval{tooltip-cmd}{control sequence}\Default{\cs*{@firstoftwo}}
- \sinceversion{2.1}A macro taking two mandatory arguments, the first being
- the short form of the acronym and the second being some tooltip
- description.
- %%
- \keyval{uc-cmd}{control sequence}\Default{\cs{acfirstupper}}
- The command that is used to capitalize the first word in the \cs{Ac} and
- the like commands. You can change it to another one like for example
- \cs*{makefirstuc}\footnote{from the \pkg{mfirstuc} package} or
- \cs*{MakeTextUppercase}\footnote{from the \pkg*{textcase} package}.
- %%
- \keybool{uppercase-short}\Default{true}
- If\sinceversion{2.10} set to \code{true} commands like \cs{Ac} or \cs{Acp}
- will uppercase the first letter of the short version.
-\end{options}
+\section{Trailing tokens}\label{sec:trailing-tokens}
+\subsection{What is it about?}
+\acro\ has the possibility to look ahead for certain tokens and switch a
+boolean variable if it finds them. Per default \acro\ knows about three
+tokens: the \enquote{\code{dot}} (\sym{.}), the \enquote{\code{dash}}
+(\sym{-}) and the \enquote{\code{babel-hyphen}} (\cs*{babelhyphen}).
-\begin{example}
- % with \acsetup{macros} activated:
- we could have used these before: \nato, \ny
+Yeu have seen an example for this already:
+\begin{sourcecode}
+ \DeclareAcronym{etc}{
+ short = etc\acdot ,
+ long = et cetera ,
+ format = \textit ,
+ first-style = long ,
+ plural =
+ }
+\end{sourcecode}
+The macro \cs{acdot} recognizes if a dot is directly following. It only prints
+a dot if it doesn't.
+\begin{example}[side-by-side]
+ \ac{etc} and \ac{etc}.
\end{example}
-\subsection{Options Regarding Acronyms}\label{sec:opti-regard-acronyms}
-The options described in this section all influence the layout of one of the
-possible output forms of the acronyms.
-\begin{options}
- %%
- \keyval{short-format}{format}\Default
- Sets a format for all short forms. For example
- \keyis{short-format}{\cs*{scshape}} would print all short forms in small
- caps.
- %%
- \keyval{long-format}{format}\Default
- The same for the long forms.
- %%
- \keyval{foreign-format}{format}\Default
- The format for the \property{foreign} entry when it appears as part of the
- first appearance of an acronym.
- %%
- \keyval{single-format}{format}\Default
- \sinceversion{2.3}%
- The format for the acronym when it is used only once. If not specified
- the formatting according to \option{single-form} is used.
- %%
- \keyval{first-long-format}{format}\Default
- The format for the long form on first usage (with \cs{ac}, \cs{acf} or
- \cs{acflike} and their uppercase, plural and indefinite forms).
- %%
- \keyval{list-short-format}{format}\Default
- An extra format for the short entries in the list. If not used this is
- the same as \option{short-format}. Please be aware that a call of
- \option{short-format} after this one will overwrite it again.
- %%
- \keyval{list-short-width}{dim}\Default{3em}
- \sinceversion{2.1}This option controls the width reserved for the short
- forms of the acronyms in the \code{lof} list style.
- %%
- \keyval{list-long-format}{format}\Default
- An extra format for the long entries in the list. If not used this is the
- same as \option{long-format}. Please be aware that a call of
- \option{long-format} after this one will overwrite it again.
- %%
- \keyval{list-foreign-format}{format}\Default{\cs{acroenparen}}
- \label{key:list-foreign-format}The format for the \property{foreign} entry
- as it appears in the list. This may be code that ends with a macro that
- takes a mandatory argument.
- %%
- \keyval{extra-format}{format}\Default
- The same for the extra information.
- %%
- \keychoice{first-style}{default,empty,square,short,long,reversed,footnote,sidenote,%
- footnote-reversed,sidenote-reversed}\Default{default}
- The basic style of the first appearance of an acronym. The value
- \code{sidenote} needs the command \cs*{sidenote} to be defined (for
- example by the \pkg*{sidenotes} package).
- %%
- \keychoice{extra-style}{default,plain,comma,paren,bracket}\Default{default}
- Defines the way the extra information is printed in the list.
- %%
- \keylit{plural-ending}{\meta{short}/\meta{long}}\Default{s/s}
- \changedversion{2.4b}With this option the default plural ending can be
- set. The appended \meta{long} ending is optional. If you leave it
- (\emph{and} the \code{/}) the \meta{short} ending is used for both short
- and long versions.
-\end{options}
-
+Another example: let's say you're a German scientist, you have
+\begin{sourcecode}
+ \DeclareAcronym{PU}{
+ short = PU ,
+ long = Polyurethan ,
+ long-plural = e
+ }
+\end{sourcecode}
+and you use it the first time like this:
+\begin{sourcecode}
+ \ac{PU}-Hartschaum
+\end{sourcecode}
+then according to German orthography and typesetting rules this should be
+printed as
+\begin{center}
+ \enquote{Polyurethan(PU)-Hartschaum}
+\end{center}
+\ie, with \emph{no} space between long and short form.
\begin{example}[side-by-side]
- % (Keep in mind that we're in
- % a minipage here!)
- \acsetup{first-style=empty}
- empty: \acf{ny} \\
- \acsetup{first-style=footnote}
- footnote: \acf{ny} \\
- \acsetup{first-style=square}
- square: \acf{ny} \\
- \acsetup{first-style=short}
- short: \acf{ny} \\
- \acsetup{first-style=long}
- long: \acf{ny} \\
- \acsetup{first-style=reversed}
- reversed: \acf{ny} \\
- \acsetup{first-style = footnote-reversed}
- footnote-reversed: \acf{ny}
+ \acf{PU}-Hartschaum
\end{example}
-\subsection{Options Regarding the List}
-\begin{options}
- %%
- \keychoice{page-style}{none,plain,comma,paren}\Default{none}
- If this option is set to a value other than \code{none} the page numbers
- of the an acronym appeared on are printed in the list. Please note that
- this is an experimental feature and might fail in quite a number of cases.
- If you notice anything please send me an email!
- %%
- \keychoice{pages}{all,first}\Default{all}
- If the option \option{page-style} has any value other than \code{none}
- this option determines wether all usages of the acronyms are listed or
- only the first time. Implicitly sets \keyis{label}{true}.
- %%
- \keyval{page-name}{page name}\Default{p.\cs*{@}\cs*{,}}
- The ``name'' of the page label. This is automatically translated to the
- active language. However for the time being there are many translations
- missing, yet. Please notify me if you find your language missing.
- %%
- \keyval{pages-name}{page name plural}\Default{pp.\cs*{@}\cs*{,}}
- The ``name'' of the page label when there are more than one page. This is
- automatically translated to the active language. However for the time
- being there are many translations missing, yet. Please notify me if you
- find your language missing.
- %%
- \keybool{following-page}\Default{false}
- If set to \code{true} a page range in the list of acronyms that consists
- of two pages will be written by the first page and an appended
- \code{f}. This depends on the option \option{next-page}.
- %%
- \keybool{following-pages}\Default{false}
- If set to \code{true} a page range in the list of acronyms that set
- consists of more than two pages will be written by the first page and an
- appended \code{ff}. This depends on the option \option{next-pages}.
- %%
- \keybool{following-pages*}\Default{false}
- \sinceversion{2.5}If set to \code{true} this sets both options
- \keyis{following-page}{true} and \keyis{following-pages}{true}.
- \code{false} sets \keyis{following-page}{false} and
- \keyis{following-pages}{false}.
- %%
- \keyval{next-page}{text}\Default{\cs*{,}f.\cs*{@}}
- Appended to a page number when \option{following-page} is set to
- \code{true} and the range is only 2 pages long. This is automatically
- translated to the active language. However, for the time being there are
- many translations missing, yet. Please notify me if you find your
- language missing.
- %%
- \keyval{next-pages}{text}\Default{\cs*{,}ff.\cs*{@}}
- Appended to a page number when \option{following-pages} is set to
- \code{true} and the range is more than 2 pages long. This is
- automatically translated to the active language. However, for the time
- being there are many translations missing, yet. Please notify me if you
- find your language missing.
- %%
- \keychoice{list-style}{description,lof,longtable,extra-longtable,%
- extra-longtable-rev,extra-tabular,extra-tabular-rev,tabular,toc}%
- \Default{description}
- \changedversion{2.2}Choose with which style the list of acronyms should be
- typeset. If you choose \meta{longtable}, \code{extra-longtable} or
- \code{extra-longtable-rev} you have to load the
- \pkg{longtable}~\cite{pkg:longtable} package in your preamble. The values
- \code{extra-\meta{something}} put the extra information in a column of it
- own. \emph{Be aware that per default \emph{all} \code{extra-table} styles
- only use \code{l} columns. Since acronym descriptions can easily get
- longer that a line you should probably define your own style if you want
- to use them.} See section~\vref{sec:lists} for details.
- %%
- \keychoice{list-heading}{chapter,chapter*,section,section*,subsection,%
- subsection*,subsubsection,subsubsection*,addchap,addsec,none}%
- \Default{section*}
- \changedversion{2.0}The heading type of the list. The last two only work
- with a \KOMAScript{} class that also defines the appropriate command. A
- special value is \code{none} which suppresses the heading.
- %%
- \keyval{list-name}{list name}\Default{Acronyms}
- The name of the list. This is what's written in the list-heading. This
- is automatically translated to the active language. However, for the time
- being there are many translations missing, yet. Please notify me if you
- find your language missing.
- %%
- \keybool{list-caps}\Default{false}
- Print the first letters of the long form capitalized.
-\end{options}
-
-\section{Trailing Tokens and Special Action}
-
-\acro\ has the possibility\sinceversion{2.0} to look ahead for certain tokens
-and switch a boolean if it finds them. Per default \acro\ knows about three
-tokens: the \enquote{\code{dot}} (\code{.}), the \enquote{\code{dash}}
-(\code{-}) and the \enquote{\code{babel-hyphen}} (\cs*{babelhyphen}).
-
-A token is made known to \acro\ with the following macro:
-\begin{commands}
- \command{AcroRegisterTrailing}[\meta{token}\marg{name}]
- This registers the token \meta{token} so \acro\ looks if it follows
- directly after an acronym macro. \meta{name} is the internal name for
- this token.
-\end{commands}
-The \acro\ package already registers the above mentioned tokens:
+This works because the template \code{long-short}\footnote{The template that
+ is used by default for the first appearance.} uses \cs{acspace} at the
+appropriate place and the manual setup does
\begin{sourcecode}
- \AcroRegisterTrailing . {dot}
- \AcroRegisterTrailing - {dash}
- \AcroRegisterTrailing \babelhyphen {babel-hyphen}
+ \acsetup{activate-trailing-tokens = dash}
\end{sourcecode}
+\cs{acspace} looks ahead for a trailing dash and adds a space it it doesn't
+find it.
-If a token is registered it doesn't mean that \acro\ looks for it. The token
-must first be activated for this:
+\subsection{How does it work?}
+Tokens to look for can be defined and activated through the following options:
\begin{options}
- \keyval{activate-trailing-tokens}{csv list of token names}
+ \keylit-{define}{\meta{token}\marg{name}}\Module{trailing}
+ Defines token \meta{name} and tells \acro\ look for \meta{token} if
+ \meta{name} is activated.
+ \keyval{activate}{csv list of token names}\Module{trailing}
Tell \acro\ to look for trailing tokens. This is done by giving a csv
list of the internal \emph{names} of the tokens. Per default only
\code{dot} is activated.
- \keyval{deactivate-trailing-tokens}{csv list of token names}
+ \keyval{deactivate}{csv list of token names}\Module{trailing}
Tell \acro\ not to look for trailing tokens. This is done by giving a csv
list of the internal \emph{names} of the tokens.
\end{options}
+The package itself does this:
+\begin{sourcecode}
+ \acsetup{
+ trailing/define = . {dot} ,
+ trailing/define = {, {comma}} ,
+ trailing/define = - {dash}
+ trailing/define = \babelhyphen {babel-hyphen} ,
+ trailing/activate = {dot,comma}
+ }
+\end{sourcecode}
-All of the above on its own does nothing visible. However: inside of an
-acronym, \ie, for example inside the long or the short form it can be tested
-for those trailing tokens:
+In order to make use of this mechanism there is the following command:
\begin{commands}
- \command{aciftrailing}[\marg{csv list of token
+ \expandable\command{aciftrailing}[\marg{csv list of token
names}\marg{true}\marg{false}]
Check if one of the tokens listed in \meta{csv list of token names} is
following and either place \meta{true} or \meta{false} in the input
stream.
\end{commands}
-\acro\ uses this to define to further macros:
+This command is used to define the two commands you already know:
\begin{commands}
- \command{acdot} Inserts a \code{.} if no \code{dot} follows.
- \command{acspace} Inserts a \cs*{space} if no \code{dash} or
+ \expandable\command{acdot} Inserts \cs{abbrdot} if no \code{dot} follows.
+ \expandable\command{acspace} Inserts a \cs*{space} if no \code{dash} or
\code{babel-hyphen} follows.
+ \expandable\command{abbrdot} Inserts \sym{.}\cs*{@}
\end{commands}
The definitions are equivalent\footnote{Not \emph{quite}: \acro's definitions
are engine protected.} to the following code:
\begin{sourcecode}
- \newcommand*\acdot{\aciftrailing{dot}{}{.\@}}
+ \newcommand*\acdot{\aciftrailing{dot}{}{\abbrdot}}
\newcommand*\acspace{\aciftrailing{dash,babel-hyphen}{}{\space}}
\end{sourcecode}
+You are of course free to redefine them according to your needs.
-This could be used to define an acronym as follows:
-\begin{sourcecode}
- \DeclareAcronym{etc}{
- short = {\textit{etc}\acdot} ,
- long = {\textit{et cetera}} ,
- short-plural = , long-plural =
- }
-\end{sourcecode}
-If now you somewhere use
-\begin{sourcecode}
- \ac{etc}.
-\end{sourcecode}
-there won't be two dots printed.
+\section{Using or resetting acronyms}\label{sec:using-or-resetting}
+Sometimes it is necessary to mark an acronym as used before it actually has
+been used or to mark an acronym as unused even though it \emph{has} been
+used. You have already seen one of the commands which make it possible:
+\begin{commands}
+ \command{acuse}[\marg{csv list of acronym ids}]
+ Every acronym given in the list will be marked as used.
+ \command{acuseall}
+ Every acronym is marked as used.
+ \command{acreset}[\marg{csv list of acronym ids}]
+ Every acronym given in the list will be reset.
+ \command{acresetall}
+ Every acronym will be reset.
+\end{commands}
+
+\section{Bookmarks, backlinks and accessibility support}\label{sec:pdf-properties}
+\subsection{Backlinks}\label{sec:backlinks}
+When \acro\ is used together with the package
+\pkg{hyperref}~\cite{pkg:hyperref} then you can make use of the following
+option:
+\begin{options}
+ \keybool{make-links}\Default{false}
+ If this is activated then every short or alternative appearance of an
+ acronym will be linked to its description in the list of acronyms.
+\end{options}
+\begin{bewareofthedog}
+ This will fail miserably together with local lists if an acronym appears in
+ more than one list. This \emph{might} be resolved on day.
+\end{bewareofthedog}
-The command \cs{acspace} is used already in the definition of the first
-appearance of a macro. Let's say you're a German chemist and you have
+\subsection{Bookmarks}\label{sec:bookmarks}
+Since bookmarks (which are created by the \pkg{hyperref} or the \pkg{bookmark}
+packages~\cite{pkg:bookmark}) can only contain simple text \acro\ simplifies
+the output of the acronym commands when they appear in a bookmark. Although
+the output can be modified with a dedicated template-mechanism there is no
+user interface at the moment. Contact me at \issues\ if you need it.
+
+Acronyms have the property \property{pdfstring}:
+\begin{properties}
+ %% pdfstring
+ \propval{pdfstring}{pdfstring}\Default={short}
+ Used as \acs{pdf} string replacement for the short form in bookmarks when
+ used together with the \pkg{hyperref}~\cite{pkg:hyperref} or the
+ \pkg{bookmark} package~\cite{pkg:bookmark}.
+\end{properties}
+
+This is for acronyms like
\begin{sourcecode}
- \DeclareAcronym{PU}{
- long = Polyurethan ,
- long-plural = e
+ \DeclareAcronym{pdf}{
+ short = pdf ,
+ long = Portable Document Format ,
+ short-format = \scshape ,
+ pdfstring = PDF
}
\end{sourcecode}
-and you use it the first time like this:
+where the bookmark would write \enquote{pdf} instead of \enquote{\textsc{pdf}}
+if the property where not set.
+
+\subsection{\acs*{pdf} comments}\label{sec:pdf-comments}
+Some people like see comments in the \ac{pdf} when they're hovering with the
+mouse over the short form of an acronym. This can be achieved.
+\begin{options}
+ \keybool{use}\Module{pdfcomments}\Default{false}
+ This enables the creation of \ac{pdf} comments.
+ \keyval{cmd}{code}\Module{pdfcomments}\Default{\cs*{pdftooltip}\Marg{\#1}\Marg{\#2}}
+ Chooses the command for actually creating the comment. You must refer to
+ the printed output in the \ac{pdf} with \code{\#1} and to the comment with
+ \code{\#2}. The default command \cs*{pdftooltip} is provided by the
+ package \pkg{pdfcomment}~\cite{pkg:pdfcomment}. You must load it in order
+ to use it.
+\end{options}
+Only acronyms where the corresponding property has been set will get comments:
+\begin{properties}
+ %% pdfcomment
+ \propval{pdfcomment}{text}
+ Sets a tooltip description for an acronym.
+\end{properties}
+
+\subsection{Accessibility support}\label{sec:access-supp}
+\acro\ supports the \pkg{accsupp} package~\cite{pkg:accsupp} when you
+\emph{also load \pkg{hyperref}}. Then \acro\ uses
\begin{sourcecode}
- \ac{PU}-Hartschaum
+ \BeginAccSupp{ method = pdfstringdef , ActualText = {PDF} }
+ \textsc{pdf}%
+ \EndAccSupp{}%
\end{sourcecode}
-then according to German orthography and typesetting rules this should be
-printed as
-\begin{center}
- \enquote{Polyurethan(PU)-Hartschaum}
-\end{center}
-\ie, with \emph{no} space between long and short form. This is exactly what
-happens it you say
+for an acronym defined like this:
\begin{sourcecode}
- \acsetup{activate-trailing-tokens = {dash,babel-hyphen}}
+ \DeclareAcronym{pdf}{
+ short = pdf ,
+ long = Portable Document Format ,
+ short-format = \scshape ,
+ pdfstring = PDF ,
+ short-acc = PDF
+ }
\end{sourcecode}
-in the preamble.
-
-\section{About Page Ranges}
-If you enable the \option{page-style} option \acro\ adds page numbers to the list
-of acronyms. In version~0.\versionstar{} it would add a page reference for an
-acronym in the list of acronyms that used \cs*{pageref} to refer to the first
-appearance of an acronym. This is retained using \keyis{pages}{first}.
-Version~1.0 uses a different approach that doesn't use a label but instead
-will list \emph{all} pages an acronym appeared on. With \pkg{hyperref} the
-pages are referenced using \cs*{hyperpage}.
-
-There are some options that control how this list will be typeset, e.g.,
-\option{following-page}, \option{next-pages} or the option \option{page-style}
-itself. It is important to mention that the page list will always take at
-least two compilation runs until changes in the options or the actual page
-numbers affect it. This is due to the fact that the updated sequence is first
-written to the \code{aux} file and only read in during the next run.
-
-\section{Dividing Your Document Into Pieces -- Creating Local
- Lists}\label{sec:divid-your-docum}
-
-\acro\sinceversion{2.4} introduces the concept of \emph{barriers} which can
-divide the document into parts. It is possible to create lists of only those
-acronyms used between two such barriers.
-\begin{commands}
- \command{acbarrier}
- Sets a barrier at the point of use in the document. The begin and the end
- of the document mark implicit barriers.
-\end{commands}
+Without accessibility support when a string like \enquote{\textsc{pdf}} is
+copied from the \ac{pdf} and pasted you get \enquote{pdf}. If you don't care
+about that simply don't load \pkg{accsupp} and ignore this section.
+
+You have a few options to be able to manipulate what \acro\ does here but I
+recommend to stay with the default settings:
\begin{options}
- \keybool{use-barriers}\Default{false}
- \sinceversion{2.5}If you want to use barriers and local lists you have to
- activate the feature first. This should be set in the preamble in order
- to work reliably. Make sure to watch out for log file messages asking you
- to rerun.
- \keybool{reset-at-barriers}\Default{false}
- If this option is set to \code{true} \cs{acbarrier} implicitly calls
- \cs{acresetall}.
- \keybool{local-to-barriers}\Default{false}
- This option can \emph{only} be used as option to the \cs{printacronyms}
- command. It then prints a list of only the acronyms of the current
- \enquote{barrier group}.
+ \keybool{use}\Module{accsupp}\Default{true}
+ When this is true and the package \pkg{accsupp} is loaded then
+ accessibility support is used.
+ \keyval{options}{text}\Module{accsupp}\Default
+ Additional option to be passed to \cs{BeginAccSupp}. See the
+ \pkg{accsupp} manual for possible settings.
+ \keyval{method}{method}\Module{accsupp}\Default{pdfstringdef}
+ The method used by \cs{BeginAccSupp}. See the
+ \pkg{accsupp} manual for possible values.
\end{options}
-\begin{example}
- \acbarrier
- \printacronyms[local-to-barriers]
- \ac{ctan} and \ac{lppl}
- \acbarrier
-\end{example}
-
-\section{Language Support}
-\acro\ detects if packages \pkg{babel}~\cite{pkg:babel} or
-\pkg{polyglossia}~\cite{pkg:babel} are being loaded and tries to adapt certain
-strings to match the chosen language. However, due to my limited language
-knowledge only a few translations are provided. I'll show how the English
-translations are defined so you can add the translations to your preamble if
-needed. Even better would be you'd send me a short email to
-\mailto{contact@mychemistry.eu} with the appropriate translations for your
-language and I'll add them to \acro.
+The \enquote{ActualText} that is used by \acro\ always defaults to the values
+of the acronym properties themselves. You can choose these values
+individually by setting the corresponding properties:
+\begin{properties}
+ %% short-acc
+ \propval{short-acc}{text}\Default={short}
+ Sets the \code{ActualText} property as presented by the \pkg{accsupp}
+ package for the short form of the acronym.
+ %% long-acc
+ \propval{long-acc}{text}\Default={long}
+ Sets the \code{ActualText} property as presented by the \pkg{accsupp}
+ package for the long form of the acronym.
+ %% alt-acc
+ \propval{alt-acc}{text}\Default={alt}
+ Sets the \code{ActualText} property as presented by the \pkg{accsupp}
+ package for the alternative short form of the acronym.
+ %% foreign-acc
+ \propval{foreign-acc}{text}\Default={foreign}
+ Sets the \code{ActualText} property as presented by the \pkg{accsupp}
+ package for the foreign form of the acronym.
+ %% extra-acc
+ \propval{extra-acc}{text}\Default={extra}
+ Sets the \code{ActualText} property as presented by the \pkg{accsupp}
+ package for the extra information of the acronym.
+ %% single-acc
+ \propval{single-acc}{text}\Default={long-acc}
+ Sets the \code{ActualText} property as presented by the \pkg{accsupp}
+ package for a single appearance of the acronym.
+ %% list-acc
+ \propval{list-acc}{text}\Default={list}
+ Sets the \code{ActualText} property as presented by the \pkg{accsupp}
+ package for the appearance in the list of acronyms.
+\end{properties}
+Extra care has to be taken for plural forms as these can not be picked up
+automatically right now. You have to explicitly set them for the
+accessibility support, too:
\begin{sourcecode}
- \DeclareTranslation{English}{acronym-list-name}{Acronyms}
- \DeclareTranslation{English}{acronym-page-name}{p.}
- \DeclareTranslation{English}{acronym-pages-name}{pp.}
- \DeclareTranslation{English}{acronym-next-page}{f.}
- \DeclareTranslation{English}{acronym-next-pages}{ff.}
+ \DeclareAcronym{ufo}{
+ short = UFO ,
+ long = unidentified flying object ,
+ foreign = unbekanntes Flugobjekt ,
+ foreign-plural-form = unbekannte Flugobjekte ,
+ foreign-acc-plural-form = unbekannte Flugobjekte ,
+ foreign-babel = ngerman ,
+ long-indefinite = an
+ }
\end{sourcecode}
-\section{hyperref Support}
-The option \keyis{hyperref}{true} adds internal links from all short (or
-alternative) forms to their respective list entries. Of course this only
-works if you have loaded the \pkg{hyperref} package in your preamble. You
-should use this option with care: if you don't use \cs{printacronyms} anywhere
-this option will result in loads of \pkg{hyperref} warnings. Also printing
-several lists can result in warnings if don't clearly separate the lists into
-different classes. If an acronym appears in more than one list there will
-also be more than one hypertarget for this acronym.
-
-Using \pkg{hyperref} will also add \cs*{hyperpage} to the page numbers in the
-list (provided they are displayed in the style chosen). Like with an index
-the references will thus not point to the acronyms directly but to the page
-they're on.
-
-\section{Defining Own Acronym Macros}\label{sec:defining-own-acronym}
-
-The commands\sinceversion{2.0} explained in
-section~\vref{sec:using-acronyms-comm} have all been defined with a dedicated
-command -- there is a family of dedicated commands, actually:
+\section{Localisation}\label{sec:localisation}
+There are places when \acro\ uses text strings which depend on the language of
+the document. In order to recognize the language from \pkg{babel} of
+\pkg{polyglossia} and print the strings in the correct language \acro\ uses
+the \pkg{translations}~\cite{pkg:translations}.
+
+If the language is detected incorrectly or you want \acro\ to use another
+language than it detects you can use the following option:
+\begin{options}
+ \keychoice{language}{auto,\meta{language}}\Default{auto}
+ The default setting \code{auto} lets \acro\ detect the language setting
+ automatically. Valid choices are all language names known to the package
+ \pkg{translations}. Mostly just type your language and it should work.
+\end{options}
+\acro\ only provides support for a handful of languages. You can easily teach
+\acro\ your language -- see section~\vref{sec:translations} -- if it isn't
+supported, yet\footnote{If you like you can always open an issue at \issues\
+ and provide your translations so I can add them to \acro.}.
\begin{commands}
- \command{NewAcroCommand}[\marg{cs}\marg{code}]
- Defines a new \acro\ acronym command \meta{cs}. This sets up the
- necessary framework needed by acronym commands and defines \meta{cs} with
- an optional star argument and a mandatory argument for the acronym id
- using \pkg{xparse}'s \cs*{NewDocumentCommand}. Inside \meta{code} one can
- refer to the \acs{id} \meta{id} with \code{\#1}.
- \command{RenewAcroCommand}[\marg{cs}\marg{code}]
- Defines a new \acro\ acronym command \meta{cs}. This sets up the
- necessary framework needed by acronym commands and defines \meta{cs} with
- an optional star argument and a mandatory argument for the acronym id
- using \pkg{xparse}'s \cs*{RenewDocumentCommand}. Inside \meta{code} one
- can refer to the \acs{id} \meta{id} with \code{\#1}.
- \command{DeclareAcroCommand}[\marg{cs}\marg{code}]
- Defines a new \acro\ acronym command \meta{cs}. This sets up the
- necessary framework needed by acronym commands and defines \meta{cs} with
- an optional star argument and a mandatory argument for the acronym id
- using \pkg{xparse}'s \cs*{DeclareDocumentCommand}. Inside \meta{code} one
- can refer to the \acs{id} \meta{id} with \code{\#1}.
- \command{ProvideAcroCommand}[\marg{cs}\marg{code}]
- Defines a new \acro\ acronym command \meta{cs}. This sets up the
- necessary framework needed by acronym commands and defines \meta{cs} with
- an optional star argument and a mandatory argument for the acronym id
- using \pkg{xparse}'s \cs*{ProvideDocumentCommand}. Inside \meta{code} one
- can refer to the \acs{id} \meta{id} with \code{\#1}.
+ \expandable\command{acrotranslate}[\marg{key}]
+ This command fetches the translation of \meta{key} for the current
+ language. It is meant for usage in template definitions.
\end{commands}
-Inside these macros one can use a number of low-level expl3
-commands\footnote{Which is why you need to use them inside an expl3
- programming environment. This means in the preamble surround the
- definitions with \cs*{ExplSyntaxOn} and \cs*{ExplSyntaxOff}.}.
+Available keywords and their English, French, and German translations are
+shown in table~\vref{tab:translations}.
+
+\begin{table}
+ \centering
+ \begin{tabular}{llll}
+ \toprule
+ \bfseries Key & \bfseries English & \bfseries French & \bfseries German \\
+ \midrule
+ \translationtable
+ \bottomrule
+ \end{tabular}
+ \caption{Available translation keywords.}
+ \label{tab:translations}
+\end{table}
-\paragraph{Acronym fetching commands}
+\part{Extending \acro}\label{part:extending-acro}
+\section{Background}\label{sec:background}
+\subsection{Templates}
+One of the core ideas of \acro\ version~3.0 is the use of \emph{templates}
+which manage how different how anything is printed, from the output of \cs{ac}
+and friends to the list of acronyms. \acro\ uses three types of templates:
+\begin{description}
+ \item[acronym] These templates can be used to define \emph{acronym
+ commands}, see section~\vref{sec:own-acronym-commands}.
+ \item[list] These templates are used by the \cs{printacronyms} command.
+ \item[heading] These templates only make sense if a \emph{list} template
+ uses \cs{acroheading}. This command makes use of them.
+\end{description}
+
+How these templates are defined, which are available from the start and how
+they are used is explained in section~\vref{sec:templates}.
+
+\subsection{Objects}
+\acro\ uses certain kinds of objects in some of its commands. It is possible
+to defines own such objects:
+\begin{description}
+ \item[articles] Per default only the \enquote{indefinite} article is
+ defined. But it is possible to define and add other articles to \acro.
+ This is explained in section~\vref{sec:other-articles}.
+ \item[endings] Per default only the ending \enquote{plural} is defined. But
+ it is possible to define and add other endings to \acro. This is
+ explained in section~\vref{sec:other-endings}.
+ \item[properties] You have already learned about properties. It is possible
+ to define and add further acronym properties to \acro. This is explained
+ in section~\vref{sec:new-properties}.
+ \item[translations] \acro\ uses localisation strings at a number of places.
+ It is possible to change these strings and add further strings. This is
+ explained in section~\vref{sec:localisation}.
+\end{description}
+
+\section{Templates}\label{sec:templates}
+\subsection{Pre-defined templates}\label{sec:pre-defin-templ}
+\subsubsection{Acronym templates}
+\begin{templates}
+ \tmpl{alt}
+ Display the alternative form of an acronym.
+ \tmpl{first}
+ This is a \emph{pseudo} template which always displays what is
+ set through the option \option{first-style} or the property
+ \property{first-style}.
+ \tmpl{footnote}
+ A template for the first appearance where the long form is printed in a
+ footnote.
+ \tmpl{long}
+ Display the long form of an acronym.
+ \tmpl{long-short}
+ A template for the first appearance where the long form is printed and the
+ short form follows in parentheses.
+ \tmpl{first}
+ This is a \emph{pseudo} template which always displays what is
+ set through the \option{single-style} or the property
+ \property{single-style}.
+ \tmpl{short}
+ Display the short form of an acronym.
+ \tmpl{short-long}
+ A template for the first appearance where the short form is printed and the
+ long form follows in parentheses.
+ \tmpl{show}
+ A template which writes all properties of an acronym into the log file.
+\end{templates}
+
+\subsubsection{List templates}
+\begin{templates}
+ \tmpl{description}
+ The default list style which places the short form in the item of a
+ \env*{description} environment and adds the all the rest as description of
+ the item.
+ \tmpl{lof}
+ A style which mimicks the list of figures. This style does not support
+ page ranges.
+ \tmpl{longtable}
+ A style that uses a \env*{longtable} environment for building the list.
+ This needs the \pkg{longtable} package~\cite{pkg:longtable} loaded.
+ \tmpl{longtabu}
+ A style that uses a \env*{longtabu} environment for building the
+ list. This needs the \pkg{longtable} package and the \pkg{tabu}
+ package~\cite{pkg:tabu} loaded.
+ \tmpl{tabular}
+ A style that uses a \env*{tabular} environment for building the list.
+ Since a \env*{tabular} cannot break across pages this is only suited for
+ short lists.
+ \tmpl{toc}
+ A style which mimicks the table of contents. This style does not support
+ page ranges.
+\end{templates}
+
+\subsubsection{Header templates}
+\begin{templates}
+ \tmpl{addchap}
+ Only defined in a \KOMAScript\ class and if \cs*{chapter} is defined. Uses
+ \cs*{addchap} for the heading.
+ \tmpl{addsec}
+ Only defined in a \KOMAScript\ class. Uses \cs*{addsec} for the heading.
+ \tmpl{chapter}
+ Only defined if \cs*{chapter} is defined. Uses \cs*{chapter} for the heading.
+ \tmpl{chapter*}
+ Uses \cs*{chapter}\sarg\ for the heading.
+ \tmpl{none}
+ Displays nothing.
+ \tmpl{section}
+ Uses \cs*{section} for the heading.
+ \tmpl{section*}
+ Uses \cs*{section}\sarg* for the heading.
+\end{templates}
+
+\subsection{Defining new templates}\label{sec:defin-new-templ}
+For the definition of templates these commends are available:
\begin{commands}
- \command*{acro_use:n}[ \marg{id}]
- Fetches the acronym using either the first or the short form depending on
- earlier uses.
- \command*{acro_short:n}[ \marg{id}]
- Fetches the short form of the acronym.
- \command*{acro_long:n}[ \marg{id}]
- Fetches the long form of the acronym.
- \command*{acro_alt:n}[ \marg{id}]
- Fetches the alternative short form of the acronym.
- \command*{acro_foreign:n}[ \marg{id}]
- Fetches the foreign property of the acronym if available.
- \command*{acro_extra:n}[ \marg{id}]
- Fetches the extra property of the acronym if available.
+ \command{NewAcroTemplate}[\oarg{type}\marg{name}\marg{code}]
+ This defines a template of type \meta{type} with the name \meta{name}
+ which inserts \meta{code} when used. A template of type \meta{type} with
+ name \meta{name} must not exist. The default type is \code{acronym}.
+ \command{RenewAcroTemplate}[\oarg{type}\marg{name}\marg{code}]
+ This re-defines a template of type \meta{type} woth the name \meta{name}
+ which inserts \meta{code} when used. A template of type \meta{type} with
+ name \meta{name} must exist. The default type is \code{acronym}.
\end{commands}
-\paragraph{Acronym setup commands}
+How to use these commands is best explained by examples of how the existing
+templates have been defined. The following sections will show several
+examples for their usage.
+
+\subsection{Commands to be used in template definitions}
+
+\acro\ provides and uses a large number of commands that are meant to be used
+in temmplate definitions and that often are useless or will raise errors if
+used outside. Depending on their purpose the commands can be used in
+different types of templates or only in certain types of templates.
+
+In the descriptions below a \expandablesymbol\ indicates a fully expandable
+command when used in an \cs*{edef}, \cs*{write} or in \cs*{expanded}.
+
+A \TF\ always refers to a \meta{true} and \meta{false} branch and indicates
+that \emph{three} commands exist: one exactly as described, one with only the
+\code{\textcolor{cs}{T}} and the \meta{true} branch, and one with only the
+\code{\textcolor{cs}{F}} and the \meta{false} branch. So \cs{acroif\TF} means
+there is \cs*{acroifTF}, \cs*{acroifT}, and \cs*{acroifF}, where \cs*{acroifT}
+and \cs*{acroifF} each have an argument less than \cs*{acroifTF}.
+
+\subsubsection{Commands for common uses}
\begin{commands}
- \command*{acro_first_upper:}
- \acro\ setup command which tells the macros above that we want to
- uppercase the first letter of the long version. Should be used
- \emph{before} one of the acronym fetching commands.
- \command*{acro_plural:}
- \acro\ setup command which tells the macros above that we want to use
- plural forms. Should be used \emph{before} one of the acronym fetching
- commands.
- \command*{acro_indefinite:}
- \acro\ setup command which tells the macros above that we want to add the
- indefinite article. Should be used \emph{before} one of the acronym
- fetching commands.
- \command*{acro_cite:}
- \acro\ setup command which tells the macros above that we want to add the
- citation in any case independent of the option \option{cite}. Should be
- used \emph{before} one of the acronym fetching commands.
- \command*{acro_no_cite:}
- \acro\ setup command which tells the macros above that we want to have no
- citation independent of the option \option{cite}. Should be used
- \emph{before} one of the acronym fetching commands.
- \command*{acro_index:}
- \acro\ setup command which tells the macros above that we want to add an
- index entry in any case independent of the option \option{index}. Should
- be used \emph{before} one of the acronym fetching commands.
- \command*{acro_reset_specials:}
- This\sinceversion{2.0b} macro is called implicitly by \cs{NewAcroCommand}
- and \cs{NewPseudoAcroCommand}. If you plan to define an \acro\ command by
- yourself using \cs*{NewDocumentCommand} this should be the first macro
- after \verbcode+\acro_begin:+. It ensures that in nested acronyms the
- inner acronyms don't inherit indefinite articles, uppercasing,
- endings\ldots
+ \expandable\command{acrolistname}
+ Expnads to whatever is currently set with
+ \module{list}\code{/}\option{name}.
+ \command{acrowrite}[\marg{property}]
+ Prints the property \meta{property} of the current acronym. Depending on
+ the circumstances this prints the property together with an article or an
+ ending either in uppercase or lowercase form. Default is the lowercase
+ form without ending or article. The actual outcome is determined by
+ switches which are explained in section~\vref{sec:own-acronym-commands}.
+ \command{acroformat}[\marg{type}\marg{text}]
+ This formats \meta{text} according to \meta{type} where \meta{type} has
+ either been set as property or as option from the \module{format} module.
+ Valid values are \code{short}, \code{long}, \code{alt}, \code{extra},
+ \code{foreign}, \code{list}, and \code{first-long}.
+ \command{acroshow}[\marg{property}]
+ For debugging puposes: writes the property \meta{property} of the current
+ acronym to the log file.
+ \command{acroif\TF}[\marg{property}\marg{true}\marg{false}]
+ Checks if the property \meta{property} has been set for the current
+ acronym and either leaves \meta{true} or \meta{false} in the input stream.
+ \command{acroifall\TF}[\marg{properties}\marg{true}\marg{false}]
+ Checks if all properties in the csv list \meta{properties} have been set
+ for the current acronym and either leaves \meta{true} or \meta{false} in
+ the input stream.
+ \command{acroifany\TF}[\marg{properties}\marg{true}\marg{false}]
+ Checks if any of the properties in the csv list \meta{properties} has been
+ set for the current acronym and either leaves \meta{true} or \meta{false}
+ in the input stream.
+ \command{acroiftag\TF}[\marg{tag}\marg{true}\marg{false}]
+ Checks if the current acronym has been given the tag \meta{tag} and either
+ leaves \meta{true} or \meta{false} in the input stream.
+ \command{AcroPropertiesMap}[\marg{code}]
+ Maps over all defined acronym properties. Within \meta{code} you can
+ refer to the current property with \code{\#1}.
\end{commands}
-\paragraph{Additional macros for further uses}
+\subsubsection{Commands for usage in acronym templates}
\begin{commands}
- \command*{acro_begin:}
- When an acronym macro is defined \enquote{by hand}, \ie, \emph{not using
- \cs{NewAcroCommand}} then this must be the first macro in the code.
- \emph{Must have a matching \cs*{acro_end:}}.
- \command*{acro_end:}
- When an acronym macro is defined \enquote{by hand}, \ie, \emph{not using
- \cs{NewAcroCommand}} then this must be the last macro in the code.
- \emph{Must have a matching \cs*{acro_begin:}}.
- \command*{acro_check_and_mark_if:nn}[ \marg{boolean expression} \marg{id}]
- Checks if the acronym with the \acs{id} \meta{id} exists and marks it as
- used when \meta{boolean} expression evaluates to \code{true}. This macro
- is used inside \cs{NewAcroCommand} and friends implicitly.
- \command*{acro_check_acronym:nn}[ \marg{id} \Marg{true|false}]
- Checks if the acronym with the \acs{id} \meta{id} exists and marks it as
- used if \code{true} or doesn't. This macro is used inside
- \cs*{acro_check_and_mark_if:nn}.
- \command*{acro_use_acronym:n}[ \Marg{true|false}]
- Tell \cs*{acro_use:n} and similar commands wether to mark the acronym as
- used or not. This macro is used inside \cs*{acro_check_acronym:nn}. If
- this macro is used explicitly it should be used before \cs*{acro_use:n}
- (or a similar command) otherwise it has no effect. An acronym marked as
- used cannot be unmarked.
- \command*{acro_mark_as_used:n}[ \marg{id}]
- Explicitly use the acronym with the \acs{id} \meta{id}. This is the expl3
- macro applied to all entries in \cs{acuse}.
- \expandable\command*{acro_if_acronym_used:n}[\TF\ \marg{id} \marg{true}
- \marg{false}]
- The code-level version of \cs{acifused}. This macro is expandable.
- \command*{acro_for_all_acronyms_do:n}[ \marg{code}]
- Loops over all acronyms known when the macro is used. Inside of
- \meta{code} you can refer to the \acs{id} \meta{id} of an acronym with
- \verbcode+#1+.
- \command*{acro_barrier:}
- The code-level version of \cs{acbarrier}.
- \command*{acro_switch_off:}
- The\sinceversion{2.6} expl3 version of \cs{acswitchoff}.
- \command*{acro_switch_on:}
- The\sinceversion{2.6} expl3 version of \cs{acswitchon}.
- \command*{acro_add_action:n}[ \marg{code}]
- Adds\sinceversion{2.7} code to \cs*{acro_get:n}. Inside of \meta{code}
- you can refer to the \ac{id} of the acronym with \verbcode+#1+.
- The \cs*{acro_get:n} command is called the first macro that is called by
- \cs*{acro_use:n} which for example enables conditionals to test for
- certain acronym properties.
- \command*{acro_property_get:nn}[\TF\ \marg{id} \marg{property} \marg{true}
- \marg{false}]
- Fetches\changedversion{2.11} the property \meta{property} of the acronym
- \meta{id} and stores it in a tokenlist variable
- \cs*{l__acro_\meta{property}_tl} where all dashes in the property names
- are replaced with underscores. \meta{true} is placed in the input stream
- if the property had been set, \meta{false} otherwise.
- \command*{acro_property_get:nn}[\marg{id} \marg{property}]
- Like\changedversion{2.11} \cs*{acro_property_get:nn}\TF, but without the
- \meta{true} and \meta{false} arguments.
- \command*{acro_property_if_set:nn}[\TF\ \marg{id} \marg{property} \marg{true}
- \marg{false}]
- Checks\changedversion{2.11} if the property \meta{property} of the acronym
- \meta{id} is set and places \meta{true} is in the input stream if yes and
- \meta{false} otherwise.
+ \expandable\command{acroifused\TF}[\marg{true}\marg{false}]
+ Checks if the current acronym has been used before and either leaves
+ \meta{true} or \meta{false} in the input stream.
+ \command{acroiffirst\TF}[\marg{true}\marg{false}]
+ Checks if the current usage of the current acronym is the first time and
+ either leaves \meta{true} or \meta{false} in the input stream.
+ \command{acroifsingle\TF}[\marg{true}\marg{false}]
+ Checks if the current acronym is used a single time and either leaves
+ \meta{true} or \meta{false} in the input stream.
+ \command{acrogroupcite}
\end{commands}
-\paragraph{Examples}
-The usage of above macros is best explained with a few examples. The
-following definition is done by \acro:
+\subsubsection{Commands for usage in list templates}
+\begin{commands}
+ \expandable\command{acroifchapter\TF}[\marg{true}\marg{false}]
+ This just check if \cs*{chapter} is defined. Used in the \template{toc}
+ template.
+ \expandable\command{acroifpages\TF}[\marg{true}\marg{false}]
+ This is \meta{true} if the option \module{pages}\code{/}\option{display}
+ is set, \emph{and} the current acronym is not single, \emph{and} has at
+ least one page number. \meta{false} otherwise.
+ \command{acropages}[\marg{first}\marg{range}]
+ If \cs{acroifpages\TF} would be \meta{false} this would do nothing.
+ Otherwise, if \module{pages}\code{/}\option{display} is \code{first} it
+ prints the first page number, preceded by \meta{first} if
+ \module{pages}\code{/}\option{name} is true. If
+ \module{pages}\code{/}\option{display} is \code{all} it prints the page
+ range, preceded by \meta{range} if \module{pages}\code{/}\option{name} is
+ true.
+ \command{acronopagerange}
+ This disables page ranges. Used in the \template{toc} and \template{lof}
+ templates.
+ \command{acropagefill}
+ If \cs{acroifpages\TF} would be \meta{false} this would do
+ nothing. Otherwise it prints whatever is set by
+ \module{pages}\code{/}\option{fill}.
+ \command{acronymsmap}[\marg{code}]
+ Maps over the acronyms in order of appearance in the list. Which acronyms
+ these are depends on settings. They might only have certain tags, be ones
+ local to barriers, \dots \par
+ Within \meta{code} \code{\#1} refers to the current \ac{id} of the
+ acronym. Also \cs{AcronymID} expands to the current \ac{id}. The latter
+ is important for all the commands that check or print properties of
+ acronyms.
+ \command{acronymsmap\TF}[\marg{code}\marg{true}\marg{false}]
+ This does the same as \cs{acronymsmap} and also leaves \meta{true} in the
+ input stream if the list is not empty and \meta{false} otherwise. This is
+ useful to trigger a rerun warning.
+ \command{AcronymTable}
+ This is an empty token list at the beginning of a list template.
+ \command{AcroAddRow}[\marg{code}]
+ Adds \meta{code} to the right of \cs{AcronymTable} and ensures that
+ \cs{AcronymID} has the correct global definition for this code. With this
+ the code for the \template{tabular} template and other table templates can
+ be built in a comfortable way.
+ \command{AcroNeedPackage}[\marg{package}]
+ Checks if the package \meta{package} is loaded and throws an error
+ otherwise.
+ \command{AcroRerun}
+ Triggers \acro\ to throw an \enquote{empty list} rerun warning.
+\end{commands}
+
+\subsection{New acronym templates}\label{sec:new-acronym-templ}
+
+Some templates are quite short and self-explaining:
\begin{sourcecode}
- \NewAcroCommand \ac { \acro_use:n {#1} }
+ \NewAcroTemplate{short}{\acrowrite{short}}
\end{sourcecode}
-An equivalent definition for \cs{ac} would be
+
+Some are a little bit more elaborate:
\begin{sourcecode}
- \NewDocumentCommand \ac {sm}
- {
- \acro_begin:
- \acro_reset_specials:
- \acro_check_and_mark_if:nn {#1} {#2}
- \acro_use:n {#2}
- \acro_end:
- }
+ \NewAcroTemplate{alt}{%
+ \acroifTF{alt}
+ {\acrowrite{alt}}
+ {\acrowrite{short}}%
+ }
\end{sourcecode}
-which should explain what the actual framework is which \cs{NewAcroCommand}
-adds.
-Other definitions by \acro\ are for example the following ones:
+And some templates need to do a lot more:
\begin{sourcecode}
- \NewAcroCommand \Ac
- {
- \acro_first_upper:
- \acro_use:n {#1}
- }
- \NewAcroCommand \iac
- {
- \acro_indefinite:
- \acro_use:n {#1}
- }
- \NewAcroCommand \acp
- {
- \acro_plural:
- \acro_use:n {#1}
- }
- \NewAcroCommand \Acp
- {
- \acro_plural:
- \acro_first_upper:
- \acro_use:n {#1}
- }
- \NewAcroCommand \Aclp
- {
- \acro_plural:
- \acro_first_upper:
- \acro_long:n {#1}
- }
+ \NewAcroTemplate{long-short}{%
+ \acroiffirstTF{%
+ \acrowrite{long}%
+ \acspace(%
+ \acroifT{foreign}{\acrowrite{foreign}, }%
+ \acrowrite{short}%
+ \acroifT{alt}{ \acrotranslate{or} \acrowrite{alt}}%
+ \acrogroupcite
+ )%
+ }%
+ {\acrowrite{short}}%
+ }
\end{sourcecode}
-\section{About Plural Forms, Possessive Forms and Similar Constructs -- the
- Concept of Endings}\label{sec:about-plural-forms}
+\subsection{New list templates}\label{sec:new-list-templates}
+This section shows the definition of three templates: \template{description},
+\template{tabular}, and \template{toc}.
-\acro\ has a concept of \emph{endings}. All of \acro's plural options are
-defined by saying
+First the \template{description} template:
\begin{sourcecode}
- \ProvideAcroEnding {plural} {s} {s}
+ \NewAcroTemplate[list]{description}{%
+ \acroheading
+ \acropreamble
+ \begin{description}
+ \acronymsmapF{%
+ \item[\acrowrite{short}\acroifT{alt}{/\acrowrite{alt}}]
+ \acrowrite{list}%
+ \acroifanyT{foreign,extra}{ (}%
+ \acroifT{foreign}{\acrowrite{foreign}\acroifT{extra}{, }}%
+ \acroifT{extra}{\acrowrite{extra}}%
+ \acroifanyT{foreign,extra}{)}%
+ \acropagefill
+ \acropages
+ {\acrotranslate{page}\nobreakspace}
+ {\acrotranslate{pages}\nobreakspace}%
+ }
+ {\item\AcroRerun}
+ \end{description}
+ }
\end{sourcecode}
-The command's syntax and what it does is as follows:
-\begin{commands}
- \command{ProvideAcroEnding}[\marg{name}\marg{short default}\marg{long default}]
- This macro defines the options
- \begin{itemize}
- \item \option*{\meta{name}-ending},
- \item \option*{short-\meta{name}-ending},
- \item \option*{alt-\meta{name}-ending},
- \item \option*{long-\meta{name}-ending} and
- \item \option*{foreign-\meta{name}-ending}.
- \end{itemize}
- It also defines the acronym properties
- \begin{itemize}
- \item \property*{short-\meta{name}},
- \item \property*{short-\meta{name}-form},
- \item \property*{alt-\meta{name}},
- \item \property*{alt-\meta{name}-form},
- \item \property*{long-\meta{name}},
- \item \property*{long-\meta{name}-form},
- \item \property*{foreign-\meta{name}} and
- \item \property*{foreign-\meta{name}-form}.
- \end{itemize}
- Additionally it defines a setup macro as
- described in section~\vref{sec:defining-own-acronym},
- \cs*{acro_\meta{name}:}. If \meta{name} contains a \code{-} (dash) it is
- replaced by \code{\_} before \cs*{acro_\meta{name}:} is built. So if you
- choose \code{my-name} the corresponding macro is named
- \cs*{acro_my_name:}. If you use any other non-letters you are on your
- own. \changedversion{2.4b}If you use the command with the same \meta{name}
- a second time the command only resets the defaults.
-
- Note that you \emph{must use \cs{ProvideAcroEnding} before any acronym
- definition}!
-\end{commands}
-This could be used together with the macros described in
-section~\vref{sec:defining-own-acronym} for adding support for possessive
-forms:
-\begin{example}
- \ExplSyntaxOn
- % this now only works because I've used the same already in the preamble so
- % it does nothing here:
- \ProvideAcroEnding {possessive} {'s} {'s}
-
- \ProvideAcroCommand \acg
- {
- \acro_possessive:
- \acro_use:n {#1}
+The following shows how to define templates using tome kind of table
+environment. Special care is necessary due to the way \LaTeX\ tables work:
+first the table body is built and only then the table itself is printed:
+\begin{sourcecode}
+ \NewAcroTemplate[list]{tabular}{%
+ \AcroNeedPackage{array}%
+ \acronymsmapF{%
+ \AcroAddRow{
+ \acrowrite{short}%
+ \acroifT{alt}{/\acrowrite{alt}}
+ &
+ \acrowrite{list}%
+ \acroifanyT{foreign,extra}{ (}%
+ \acroifT{foreign}{\acrowrite{foreign}\acroifT{extra}{, }}%
+ \acroifT{extra}{\acrowrite{extra}}%
+ \acroifanyT{foreign,extra}{)}%
+ \acropagefill
+ \acropages
+ {\acrotranslate{page}\nobreakspace}
+ {\acrotranslate{pages}\nobreakspace}%
+ \tabularnewline
+ }%
}
- \ExplSyntaxOff
- The \acg{cd} booklet says\ldots
-\end{example}
+ {\AcroRerun}%
+ \acroheading
+ \acropreamble
+ \par\noindent
+ \begin{tabular}{>{\bfseries}lp{.7\linewidth}}
+ \AcronymTable
+ \end{tabular}
+ }
+\end{sourcecode}
-Please note that different endings are cumulative which you probably want to
-avoid! Imagine a macro
\begin{sourcecode}
- \NewAcroCommand \acgp
- {
- \acro_possessive:
- \acro_plural:
- \acro_use:n {#1}
+ \NewAcroTemplate[list]{toc}{%
+ \acroheading
+ \acropreamble
+ \acronopagerange
+ \acronymsmapF{%
+ \contentsline{\acroifchapterTF{chapter}{section}}
+ {\acrowrite{short}\acroifT{alt}{/\acrowrite{alt}}}
+ {}{}%
+ \contentsline{\acroifchapterF{sub}section}
+ {
+ \acrowrite{list}%
+ \acroifT{foreign}{\acrowrite{foreign}\acroifT{extra}{, }}%
+ \acroifT{extra}{\acrowrite{extra}}%
+ \acroifanyT{foreign,extra}{)}%
+ }
+ {\acropages{}{}}
+ {}%
}
+ {\AcroRerun}
+ }
\end{sourcecode}
-This would give \enquote{\ac{cd}s's} instead of \enquote{\ac{cd}s'}. To solve
-this you might want to consider
+
+\subsection{New heading templates}\label{sec:new-head-templ}
+
+\section{Endings}\label{sec:endings}
+Referring to section~\vref{sec:other-endings} this section explains how to
+define and use additional endings.
+\begin{commands}
+ \command{DeclareAcroEnding}[\marg{name}\marg{short default}\marg{long default}]
+ This command can be used to define properties and options analoguous to
+ the plural endings which have been defined this way:
+\end{commands}
\begin{sourcecode}
- \ProvideAcroEnding {possessive-singular} {'s} {'s}
- \ProvideAcroEnding {possessive-plural} {s'} {s'}
+ \DeclareAcroEnding{plural}{s}{s}
\end{sourcecode}
-
-\section{More on Customization}\label{sec:more-custom}
-\subsection{Background Information}
-Several of \acro's objects are customized using templates. For each of these
-objects it is possible to define own templates\footnote{This requires some
-knowledge of \pkg{xtemplate} and expl3. Plans are to provide a documented
-interface for users of \acro{} in the future.}. Possibly more interesting: it
-is easily possible to define further instances of an object using a certain
-template. How this works is explained in the following sections. However, the
-basics are always the same. There is a command
+In general \cs{DeclareAcroEnding}\marg{foo}\marg{x}\marg{y} defines these
+options
+\begin{options}
+ \keyval*{short-\meta{foo}-ending}{value}\Default*{\meta{x}}
+ \keyval*{long-\meta{foo}-ending}{value}\Default*{\meta{y}}
+\end{options}
+and these properties
+\begin{properties}
+ \propval*{short-\meta{foo}}{value}\Default*{\meta{x}}
+ \propval*{short-\meta{foo}-form}{value}\Default*
+ \propval*{alt-\meta{foo}}{value}\Default*{\meta{x}}
+ \propval*{alt-\meta{foo}-form}{value}\Default*
+ \propval*{long-\meta{foo}}{value}\Default*{\meta{y}}
+ \propval*{long-\meta{foo}-form}{value}\Default*
+ \propval*{foreign-\meta{foo}}{value}\Default*{\meta{y}}
+ \propval*{foreign-\meta{foo}-form}{value}\Default*
+ \propval*{single-\meta{foo}}{value}\Default*{\meta{y}}
+ \propval*{single-\meta{foo}-form}{value}\Default*
+ \propval*{extra-\meta{foo}}{value}\Default*{\meta{y}}
+ \propval*{extra-\meta{foo}-form}{value}\Default*
+\end{properties}
+In addition another command is defined which is meant to be used in
+template definitions.
\begin{commands}
- \command*{DeclareAcro\meta{object
- type}Style}[\marg{name}\marg{template}\marg{options}]
- which allows to define a new style (\ie, instance) for the object
- \meta{object type} using the template \marg{template}.
+ \command*{acro\meta{foo}}
+ This command tells the template that the ending \meta{foo} should be
+ used.
\end{commands}
+Section~\vref{sec:own-acronym-commands} has an example of how this can be used
+to define a possessive ending and commands that make use of them like this:
+\begin{example}[side-by-side]
+ \acfg{MP}
+\end{example}
-\subsection{Lists}\label{sec:lists}
-\subsubsection{Own List Style}
-
-The different existing list styles are all built from four different
-templates, \code{list}, \code{list-of}, \code{table} and \code{extra-table}.
-Those templates are defined with the help of the \pkg{xtemplate}
-package (from~\cite{bnd:l3packages}). Each of these templates has a few
-options which are described in table~\vref{tab:list-templates}. New list
-styles now are defined via the following macro:
-
+\section{Articles}\label{sec:articles}
+Referring to section~\vref{sec:other-articles} this section explains how to
+define and use additional articles.
\begin{commands}
- \command{DeclareAcroListStyle}[\marg{name}\marg{template}\marg{options}]
- Declares a new \acro\ list style \meta{name}. \meta{name} will be the
- value which can be chosen in the option \option{list-style}.
- \meta{template} is the name of the template to be used by the style.
- Available templates are listed in table~\ref{tab:list-templates}.
- \meta{options} are the option settings for the corresponding template.
+ \command{DeclareAcroArticle}[\marg{name}\marg{default}]
+ This command can be used to define properties and options analoguous to
+ the indefnite article which have been defined this way:
\end{commands}
+\begin{sourcecode}
+ \DeclareAcroArticle{indefinite}{a}
+\end{sourcecode}
+In general \cs{DeclareAcroArticle}\marg{foo}\marg{x} defines the
+option
+\begin{options}
+ \keyval*{\meta{foo}}{value}\Default*{\meta{x}}
+\end{options}
+and these properties
+\begin{properties}
+ \propval*{short-\meta{foo}}{value}\Default*{\meta{x}}
+ \propval*{alt-\meta{foo}}{value}\Default*{\meta{x}}
+ \propval*{long-\meta{foo}}{value}\Default*{\meta{x}}
+ \propval*{foreign-\meta{foo}}{value}\Default*{\meta{x}}
+ \propval*{single-\meta{foo}}{value}\Default*{\meta{x}}
+ \propval*{extra-\meta{foo}}{value}\Default*{\meta{x}}
+\end{properties}
+In addition another command is defined which is meant to be used in
+template definitions.
+\begin{commands}
+ \command*{acro\meta{foo}}
+ This command tells the template that the article \meta{foo} should be
+ used.
+\end{commands}
+Section~\vref{sec:own-acronym-commands} has an example of how this can be used
+to define definite articles and commands that make use of them like this:
+\begin{example}
+ \dacs{hadopi} \par
+ \dacl{hadopi}
+\end{example}
-\begin{table}
- \centering
- \caption{Available List Templates and Their Options}\label{tab:list-templates}
- \begin{tabular}{*{4}{>{\ttfamily}l}}
- \toprule
- \normalfont\bfseries Template & \normalfont\bfseries Option &
- \normalfont\bfseries Option Type & \normalfont\bfseries Default \\
- \midrule
- list & list & tokenlist & description \\
- & foreign-sep & tokenlist & \cs*{space} \\
- & reverse & boolean & false \\
- & before & tokenlist \\
- & after & tokenlist \\
- \midrule
- list-of & style & tokenlist & toc \\
- & foreign-sep & tokenlist & \cs*{space} \\
- & reverse & boolean & false \\
- & before & tokenlist \\
- & after & tokenlist \\
- \midrule
- table & table & tokenlist & tabular \\
- & table-spec & tokenlist & lp\{.7\cs*{linewidth}\} \\
- & foreign-sep & tokenlist & \cs*{space} \\
- & reverse & boolean & false \\
- & before & tokenlist \\
- & after & tokenlist \\
- \midrule
- extra-table & table & tokenlist & tabular \\
- & table-spec & tokenlist & llll \\
- & foreign-sep & tokenlist & \cs*{space} \\
- & reverse & boolean & false \\
- & before & tokenlist \\
- & after & tokenlist \\
- \bottomrule
- \end{tabular}
-\end{table}
-
-For defining new styles you need some information on what the different
-templates and options do:
-\begin{itemize}
- \item The option \code{list} of the \code{list} template sets the list
- environment. This must be a classic \LaTeX\ list where items are listed
- with \cs*{item}. In those lists short entries will always be fed as
- optional argument to \cs*{item}: \\
- \code{\cs*{item}[\meta{short}]\meta{long}\meta{extra}\meta{page}}
- \item The template \code{list-of} simulates a table of contents or a list of
- figures. This can be chosen by setting the option \code{style} to either
- \code{toc} or \code{lof}.
- \item The template \code{table} typesets the list in a table with two
- columns: \\
- \code{\meta{short} \& \meta{long}\meta{extra}\meta{page}
- \cs*{tabularnewline}}
- \item The template \code{extra-table} typesets the list in a table with four
- columns: \\
- \code{\meta{short} \& \meta{long} \& \meta{extra} \& \meta{page}
- \cs*{tabularnewline}}
- \item The option \code{foreign-sep} is the code inserted between long form
- and foreign entry (if a foreign entry is present).
- \item The options \code{before} and \code{after} are inserted directly
- before and after the complete list.
- \item The option \code{reverse} switches the place of \meta{long} with
- \meta{extra}.
- \item The option \code{table-spec} sets the column types for the table
- templates. It must correspond to the number of columns the corresponding
- template uses.
-\end{itemize}
-
-As an example let's define a style \code{longtabu} which uses the corresponding
-table environment from the package \pkg{tabu}~\cite{pkg:tabu}:
-
+\section{Translations}\label{sec:translations}
+For adding additional keywords, or for adding translations to existing
+keywords, or for changing existing translations \acro\ uses this command:
+\begin{commands}
+ \command{DeclareAcroTranslation}[\marg{key}\marg{language=translation list}]
+ With this command new translations keywords can be added and translations
+ for existing keywords can be changed.
+ \command{AddAcroTranslations}[\marg{key}\marg{language=translation list}]
+ Basically the same but this time per language rather than per keyword.
+\end{commands}
+As an example this is how \acro\ declares translations for the \code{pages}
+keyword:
\begin{sourcecode}
- \usepackage{tabu,longtable}
- \DeclareAcroListStyle{longtabu}{table}{
- table = longtabu ,
- table-spec = @{}>{\bfseries}lX@{}
+ \DeclareAcroTranslation{pages}{
+ Fallback = pp\abbrdot ,
+ English = pp\abbrdot ,
+ French = pp\abbrdot ,
+ German = S\abbrdot ,
+ Portuguese = pp\abbrdot
}
- \acsetup{list-style=longtabu}
\end{sourcecode}
-
-As another example let's define a new list with the help of the \pkg{enumitem}
-package~\cite{pkg:enumitem}:
-
+Translations for a language could be added this way\footnote{\acro\ already
+ has the translations for Italian.}:
\begin{sourcecode}
- % preamble:
- % \usepackage{enumitem}
- \newlist{acronyms}{description}{1}
- \newcommand*\addcolon[1]{#1:}
- \setlist[acronyms]{
- labelwidth = 3em,
- leftmargin = 3.5em,
- noitemsep,
- itemindent = 0pt,
- font=\addcolon}
- \DeclareAcroListStyle{mystyle}{list}{ list = acronyms }
- \acsetup{ list-style = mystyle }
+ \AddAcroTranslations{Italian}{
+ list-name = Acronimi ,
+ page = p\abbrdot ,
+ pages = pp\abbrdot ,
+ sequens = s\abbrdot ,
+ sequentes = ss\abbrdot ,
+ also = anche ,
+ and = e ,
+ or = o
+ }
\end{sourcecode}
-This would look as follows:
-\newlist{acronyms}{description}{1}
-\newcommand*\addcolon[1]{#1:}
-\setlist[acronyms]{
- labelwidth=3em,
- leftmargin=3.5em,
- noitemsep,
- itemindent=0pt,
- font=\addcolon}
-\DeclareAcroListStyle{mystyle}{list}{ list = acronyms }
-\acsetup{list-style=mystyle,hyperref=false}
-\printacronyms
-
-\subsubsection{Own List Heading Command}
-
-With the option \option{list-heading} you can choose which command prints the
-heading of the list. If you need a different choice than what's already
-provided you can use the following command to define a new option:
+The existing keywords had been shown in table~\vref{tab:translations}.
+
+\section{Properties}\label{sec:new-properties}
+As you know from section~\ref{sec:decl-acronyms-other} \acro\ comes with
+quiute a number of predefined properties for the control of acronyms.
+However, there are cases when additional properties would be nice to have and
+to use. \acro\ provides this command:
\begin{commands}
- \command{DeclareAcroListHeading}[\marg{name}\marg{control sequence}]
- Defines a new value \meta{name} for the option \option{list-heading}.
- \meta{control sequence} must be a control sequence which takes one
- mandatory argument.
+ \command{DeclareAcroProperty}[\sarg\qarg\barg\uarg\marg{name}]
+ This defines the new property \meta{name}. The command has four optional
+ arguments most of which you probably never need. \par
+ The optional star \sym{*} ensures that each acronym gets a \emph{unique}
+ value for the property. \par
+ The optional question mark \sym{?} creates a \emph{boolean} property.
+ That is a property that only can get the values \code{true} or
+ \code{false} and when it is used without value (not an empty value!) then
+ \code{true} is assumed. \par
+ The optional exclamation mark \sym{!} creates a \emph{mandatory}
+ property. An error if raised if an acronym does not set it. \par
+ The optional pipe \sym{|} creates a \emph{static} property which means
+ its value is written to an auxiliary file and read in again at begin
+ document. Once set the value is the same throughout the document
+ \command{DeclareAcroPropertyAlias}[\sarg\qarg\barg\uarg\marg{name1}\marg{name2}]
+ This newly declares property \meta{name1} and makes it an alias of
+ property \meta{name2}. This means that \meta{name1} gets the same value
+ that \meta{name2} has unless it is set explicitly. Property \meta{name2}
+ must exist.
+ \command{MakeAcroPropertyAlias}[\marg{name1}\marg{name2}]
+ This makes property \meta{name1} and makes it an alias of property
+ \meta{name2}. Both properties must exist.
\end{commands}
-As an example here is how the value \code{section} is defined:
+Exmaples for defining and using new properties are shown in
+section~\ref{sec:examples}, \ac*{eg}, examples~\ref{example:texsx-505891}
+or~\ref{example:texsx-507726}.
+
+\section{Own acronym commands}\label{sec:own-acronym-commands}
+\subsection{Background}
+You can define own acronym commands or redefine the existing ones with
+commands similar to \cs*{NewDocumentCommand} from the \pkg{xparse}
+package~\cite{pkg:xparse}.
+\begin{commands}
+ \command{NewAcroCommand}[\marg{command}\marg{arg. spec.}\marg{code}]
+ This creates the new command \meta{command} with the argument
+ specification\footnote{in the sense of an \pkg{xparse}
+ command.} \code{so\meta{arg. spec.}} and replacement text \meta{code}.
+ There are significant differences to \cs*{NewDocumentCommand}: the new
+ command always has two additional arguments: an optional star and an
+ optional argument for options. You can ignore this fact in your
+ definition, though. However, the command \emph{must} at least have one
+ argument \emph{and} the first argument \emph{must} refer to the \ac{id}.
+ Everything else is up to you. \par
+ The new command has the suiting framework to recognize trailing tokens,
+ count usage, index, and add a citation if necessary.
+ \command{RenewAcroCommand}[\marg{command}\marg{arg. spec.}\marg{code}]
+ Like \cs{NewAcroCommand} but redefines an existing command.
+ \command{UseAcroTemplate}[\oarg{type}\marg{name}\oarg{argument number}\meta{arguments}]
+ The argument \meta{type} defaults to \code{acronym} and \meta{argument
+ number} defaults to \code{1}. The command must be followed by as many
+ mandatory arguments as you specify with \meta{argument number}. All
+ predefined acronym templates use the first argument as \ac{id} so they
+ must use one argument.
+\end{commands}
+Let's see an example. This is the definition of \cs{ac}:
\begin{sourcecode}
- \DeclareAcroListHeading{section}{\section}
+ \NewAcroCommand\ac{m}{\UseAcroTemplate{first}{#1}}
+\end{sourcecode}
+Equivalent definitions would be:
+\begin{sourcecode}
+ \NewAcroCommand\ac{m}{\UseAcroTemplate[acroynm]{first}{#1}}
+ \NewAcroCommand\ac{m}{\UseAcroTemplate[acroynm]{first}[1]{#1}}
+ \NewAcroCommand\ac{m}{\UseAcroTemplate{first}[1]{#1}}
+ \NewAcroCommand\ac{m}{\UseAcroTemplate{first}[2]{#1}{}}
\end{sourcecode}
-\subsection{First Styles}
-The first styles define how an acronym is typeset when it is used for the
-first time. It is set with the option \option{first-style}. Legal values for
-this option are defined with the following command:
+There are a number of switch commands which determine a certain behavior.
+They tell the following template how to interpret certain conditionals and how
+to use \cs{acrowrite}.
\begin{commands}
- \command{DeclareAcroFirstStyle}[\marg{name}\marg{template}\marg{options}]
- Declares a new \acro\ first style \meta{name}. \meta{name} will be the
- value which can be chosen in the option \option{first-style}.
- \meta{template} is the name of the template to be used by the style.
- Available templates are listed in table~\ref{tab:first-templates}.
- \meta{options} are the option settings for the corresponding template.
+ \command{acrocite}
+ Tells \acro\ to output the citation.
+ \command{acrodonotuse}
+ Tells \acro\ to not count this as usage.
+ \command{acroplural}
+ Use plural form.
+ \command{acroindefinite}
+ Use indefinite article
+ \command{acroupper}
+ Use uppercase form.
+ \command{acrofull}
+ Use first or full form.
\end{commands}
-Here are two examples of the already available styles and how they are
-defined:
+Here is an example that makes use of them:
\begin{sourcecode}
- \DeclareAcroFirstStyle{short}{inline}{
- only-short = true ,
- brackets = false
- }
- \DeclareAcroFirstStyle{sidenote-reversed}{note}{
- note-command = \sidenote{#1} ,
- reversed = true
+ \NewAcroCommand\Iacs{m}{%
+ \acroupper\acroindefinite\UseAcroTemplate{short}{#1}%
}
\end{sourcecode}
-\begin{table}[!h]
- \centering
- \caption{Available First Style Templates and Their Options}\label{tab:first-templates}
- \begin{tabular}{*{4}{>{\ttfamily}l}}
- \toprule
- \normalfont\bfseries Template & \normalfont\bfseries Option &
- \normalfont\bfseries Option Type & \normalfont\bfseries Default \\
- \midrule
- inline & brackets & boolean & true \\
- & brackets-type & tokenlist & () \\
- & only-short & boolean & false \\
- & only-long & boolean & false \\
- & reversed & boolean & false \\
- & between & tokenlist \\
- & foreign-sep & tokenlist & ,\textasciitilde \\
- \midrule
- note & use-note & boolean & true \\
- & note-command & function & \cs*{footnote}\Marg{\#1} \\
- & reversed & boolean & false \\
- & foreign-sep & tokenlist & ,\textasciitilde \\
- \bottomrule
- \end{tabular}
-\end{table}
-
-\subsection{Extra Styles}
-The extra styles define how the extra information of an acronym is typeset in
-the list. It is set with the option \option{extra-style}. Legal values for
-this option are defined with the following command:
-\begin{commands}
- \command{DeclareAcroExtraStyle}[\marg{name}\marg{template}\marg{options}]
- Declares a new \acro\ extra style \meta{name}. \meta{name} will be the
- value which can be chosen in the option \option{extra-style}.
- \meta{template} is the name of the template to be used by the style.
- Available templates are listed in table~\ref{tab:extra-templates}.
- \meta{options} are the option settings for the corresponding template.
-\end{commands}
-
-Here are two examples of the already available styles and how they are
-defined:
+\subsection{Create commands for possessive endings}
+Let's say you want to add an ending for the genitive case.
+First you define the appropriate ending:
\begin{sourcecode}
- \DeclareAcroExtraStyle{default}{inline}{
- brackets = false ,
- punct = true ,
- punct-symbol = .
+ \DeclareAcroEnding{possessive}{'s}{'s}
+\end{sourcecode}
+Then you define commands which make use of this ending:
+\begin{sourcecode}
+ \NewAcroCommand\acg{m}{\acropossessive\UseAcroTemplate{first}{#1}}
+ \NewAcroCommand\acsg{m}{\acropossessive\UseAcroTemplate{short}{#1}}
+ \NewAcroCommand\aclg{m}{\acropossessive\UseAcroTemplate{long}{#1}}
+ \NewAcroCommand\acfg{m}{%
+ \acrofull
+ \acropossessive
+ \UseAcroTemplate{first}{#1}%
}
- \DeclareAcroExtraStyle{paren}{inline}{
- brackets = true ,
- punct = true ,
- punct-symbol =
+ \NewAcroCommand\iacsg{m}{%
+ \acroindefinite
+ \acropossessive
+ \UseAcroTemplate{short}{#1}%
}
\end{sourcecode}
+You maybe also define acronyms with corresponding properties\footnote{Bear
+ with me if this is incorrect: English is not my native language.}:
+\begin{sourcecode}
+ \DeclareAcronym{MP}{
+ short = MP ,
+ long = Member of Parliament ,
+ plural-form = Members of Parliament ,
+ long-possessive-form = Member's of Parliament
+ }
+\end{sourcecode}
+Now you can use it like this:
+\begin{example}
+ This is the \acg{MP} first day at work after \dots
+\end{example}
-\begin{table}
- \centering
- \caption{Available Extra Style Templates and Their Options}\label{tab:extra-templates}
- \begin{tabular}{*{4}{>{\ttfamily}l}}
- \toprule
- \normalfont\bfseries Template & \normalfont\bfseries Option &
- \normalfont\bfseries Option Type & \normalfont\bfseries Default \\
- \midrule
- inline & punct & boolean & true \\
- & punct-symbol & tokenlist & , \\
- & brackets & boolean & true \\
- & brackets-type & tokenlist & () \\
- \bottomrule
- \end{tabular}
-\end{table}
-
-\subsection{Page Number Styles}
-The page number styles define how the page numbers where acronyms have been
-used are typeset in the list. It is set with the option \option{page-style}.
-Legal values for this option are defined with the following command:
+\section{Own \acro\ style files}
+When you want to use your definitions regarding \acro\ repeatedly then it
+makes sense to put them in a file which you put somewhere in your local
+\LaTeX\ tree. There are three options:
+\begin{enumerate}
+ \item Put them in a simple \code{.tex} file in \cs*{input} it.
+ \item Put in in a \code{.sty} file and include it with \cs*{usepackage}
+ \emph{after} \acro.
+ \item Create a style file following this pattern decribed below.
+\end{enumerate}
+\begin{center}
+ \code{acro.style.\meta{name}.code.tex}
+\end{center}
+This file should start with
+\begin{sourcecode}
+ \AcroStyle{name}
+\end{sourcecode}
+and input the file with \cs{acsetup} using the option
+\begin{options}
+ \keyval{load-style}{name}
+ This is more or less the same as if you'd use the package variant but
+ naturally ensures that you load it after \acro\ and in the future might
+ provide other bells and whistles, too.
+\end{options}
+The command
\begin{commands}
- \command{DeclareAcroPageStyle}[\marg{name}\marg{template}\marg{options}]
- Declares a new \acro\ extra style \meta{name}. \meta{name} will be the
- value which can be chosen in the option \option{page-style}.
- \meta{template} is the name of the template to be used by the style.
- Available templates are listed in table~\ref{tab:page-templates}.
- \meta{options} are the option settings for the corresponding template.
+ \command{AcroStyle}[\sarg\marg{style}\oarg{details}]
+ has an optional star which switches to expl3 syntax. It also has an
+ optional argument \meta{details} with the same purpose and usage as
+ the one from \cs*{ProvidesPackage}. A typical usage would look like
\end{commands}
-
-Here are two examples of the already available styles and how they are
-defined:
\begin{sourcecode}
- \DeclareAcroPageStyle{default}{inline}{
- punct = true ,
- punct-symbol = .
+ \AcroStyle{abbrev}[2020/04/21 abbreviations with acro (CN)]
+ \NewDocumentCommand\newabbreviation{mmm}{%
+ \DeclareAcronym{#1}{ short = #2 , #3 , class = abbrev , no-index }%
}
- \DeclareAcroPageStyle{paren}{inline}{
- brackets=true ,
- punct-symbol = ~
+ \NewDocumentCommand\printabbreviations{O{}}{%
+ \printacronyms[#1,include=abbrev]%
}
\end{sourcecode}
-
-\begin{table}
- \centering
- \caption{Available Page Number Style Templates and Their
- Options}\label{tab:page-templates}
- \begin{tabular}{*{3}{>{\ttfamily}l}>{\ttfamily}p{.25\linewidth}}
- \toprule
- \normalfont\bfseries Template & \normalfont\bfseries Option &
- \normalfont\bfseries Option Type & \normalfont\bfseries Default \\
- \midrule
- inline & display & boolean & true \\
- & punct & boolean & false \\
- & punct-symbol & tokenlist & , \\
- & brackets & boolean & false \\
- & brackets-type & tokenlist & () \\
- & space & skip & .333333em plus .166666em minus
- .111111em \\
- \bottomrule
- \end{tabular}
-\end{table}
-
-\subsection{Configuration Files}
-If\sinceversion{2.2} you repeatedly have the same setup and definitions for
-\acro\ in your preamble\footnote{For example defining new endings, \acro{}
- commands, list styles, \ldots} you might want to place those in a
-configuration file. If \acro\ finds a file named \code{acro.cfg} present it
-inputs it at the end of the package. The only thing to be aware of is that
-this file is input like a package which means that \code{@} is treated as a
-letter (category code~11).
-
+
+\clearpage
\appendix
+\part{Appendix}\label{part:appendix}
-\acsetup{
- list-style = description ,
- list-heading = section ,
- list-name = All Acronyms Used in this Documentation ,
- page-style = comma ,
- following-pages* = true ,
- extra-style = comma
-}
+\section{Examples}\label{sec:examples}
+
+\listexamplefiles
-\printacronyms
+\printacronyms[
+ preamble = {\label{sec:acronyms}Below all abbreviations are listed which
+ have been defined for the manual.} ,
+ exclude = {exclude,glossary}
+]
\printbibliography
diff --git a/macros/latex/contrib/acro/acro.definitions.tex b/macros/latex/contrib/acro/acro.definitions.tex
deleted file mode 100644
index a150faf6d8..0000000000
--- a/macros/latex/contrib/acro/acro.definitions.tex
+++ /dev/null
@@ -1,581 +0,0 @@
-% --------------------------------------------------------------------------
-% the ACRO package
-%
-% Typeset Acronyms
-%
-% --------------------------------------------------------------------------
-% Clemens Niederberger
-% Web: https://bitbucket.org/cgnieder/acro/
-% E-Mail: contact@mychemistry.eu
-% --------------------------------------------------------------------------
-% Copyright 2011--2020 Clemens Niederberger
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3
-% of this license or (at your option) any later version.
-% The latest version of this license is in
-% http://www.latex-project.org/lppl.txt
-% and version 1.3 or later is part of all distributions of LaTeX
-% version 2005/12/01 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Clemens Niederberger.
-% --------------------------------------------------------------------------
-% The acro package consists of the files
-% - acro.sty, acro.definitions.tex, acro.cfg
-% - acro-manual.tex, acro-manual.pdf, acro-manual.cls
-% - acro.history, README
-% --------------------------------------------------------------------------
-% If you have any ideas, questions, suggestions or bugs to report, please
-% feel free to contact me.
-% --------------------------------------------------------------------------
-\ExplSyntaxOn
-
-% document commands:
-\NewDocumentCommand \DeclareAcronym {mm}
- { \acro_declare_acronym:nn {#1} {#2} }
-
-\NewDocumentCommand \acsetup { m }
- {
- \tl_if_blank:nF {#1}
- { \keys_set:nn {acro} {#1} }
- \ignorespaces
- }
-
-\NewDocumentCommand \ProvideAcroEnding {mmm}
- { \acro_provide_ending:nnn {#1} {#2} {#3} }
-
-\NewDocumentCommand \AcroRegisterTrailing {mm}
- { \acro_register_trailing_token:Nn #1 {#2} }
-
-\NewDocumentCommand \DeclareAcroTranslation {mm}
- { \acro_declare_translation:nn {#1} {#2} }
-
-\DeclareExpandableDocumentCommand \acifused { m }
- { \acro_if_acronym_used:nTF {#1} }
-
-\NewDocumentCommand \acresetall {}
- { \acro_reset_all: }
-
-\NewDocumentCommand \acuseall {}
- { \acro_mark_all_as_used: }
-
-\NewDocumentCommand \acreset { > { \SplitList {,} } m }
- { \ProcessList {#1} { \acro_reset:n } \ignorespaces }
-
-\NewDocumentCommand \acuse { > { \SplitList {,} } m }
- { \ProcessList {#1} { \acro_mark_as_used:n } \ignorespaces }
-
-\NewDocumentCommand \acfirstupper {m}
- { \acro_first_upper_case:n {#1} }
-
-\NewExpandableDocumentCommand \aciffirst {+m+m}
- { \bool_if:NTF \l__acro_first_instance_bool {#1} {#2} }
-
-\NewDocumentCommand \acdot {} { \acro_dot: }
-\NewDocumentCommand \acspace {} { \acro_space: }
-
-\NewDocumentCommand \acbarrier {}
- { \acro_barrier: }
-
-\NewDocumentCommand \acswitchoff {}
- { \acro_switch_off: }
-
-\NewDocumentCommand \acswitchon {}
- { \acro_switch_on: }
-
-\NewDocumentCommand \printacronyms { O{} }
- { \acro_print_acronyms:n {#1} }
-
-% --------------------------------------------------------------------------
-% styles
-% #1: name
-% #2: template
-% #3: settings
-\NewDocumentCommand \DeclareAcroFirstStyle {mmm}
- { \acro_declare_first_style:nnn {#1} {#2} {#3} }
-
-\NewDocumentCommand \DeclareAcroExtraStyle {mmm}
- { \acro_declare_extra_style:nnn {#1} {#2} {#3} }
-
-\NewDocumentCommand \DeclareAcroPageStyle {mmm}
- { \acro_declare_page_style:nnn {#1} {#2} {#3} }
-
-\NewDocumentCommand \DeclareAcroListHeading {mm}
- { \acro_declare_list_heading:nn {#1} {#2} }
-
-\NewDocumentCommand \DeclareAcroListStyle {mmm}
- { \acro_declare_list_style:nnn {#1} {#2} {#3} }
-
-% --------------------------------------------------------------------------
-% endings:
-\ProvideAcroEnding {plural} {s} {s}
-
-% --------------------------------------------------------------------------
-% use acronyms:
-% automatic:
-\NewAcroCommand \ac
- { \acro_use:n {#1} }
-
-\NewAcroCommand \Ac
- {
- \acro_first_upper:
- \acro_use:n {#1}
- }
-
-\NewAcroCommand \iac
- {
- \acro_indefinite:
- \acro_use:n {#1}
- }
-
-\NewAcroCommand \Iac
- {
- \acro_first_upper:
- \acro_indefinite:
- \acro_use:n {#1}
- }
-
-\NewAcroCommand \acp
- {
- \acro_plural:
- \acro_use:n {#1}
- }
-
-\NewAcroCommand \Acp
- {
- \acro_plural:
- \acro_first_upper:
- \acro_use:n {#1}
- }
-
-\NewAcroCommand \acsingle
- {
- \acro_get:n {#1}
- \acro_single:n {#1}
- }
-
-\NewAcroCommand \acpsingle
- {
- \acro_get:n {#1}
- \acro_plural:
- \acro_single:n {#1}
- }
-
-\NewAcroCommand \Acsingle
- {
- \acro_get:n {#1}
- \acro_first_upper:
- \acro_single:n {#1}
- }
-
-\NewAcroCommand \Acpsingle
- {
- \acro_get:n {#1}
- \acro_first_upper:
- \acro_plural:
- \acro_single:n {#1}
- }
-
-% short:
-\NewAcroCommand \acs
- { \acro_short:n {#1} }
-
-\NewAcroCommand \Acs
- {
- \acro_first_upper:
- \acro_short:n {#1}
- }
-
-\NewAcroCommand \iacs
- {
- \acro_indefinite:
- \acro_short:n {#1}
- }
-
-\NewAcroCommand \Iacs
- {
- \acro_first_upper:
- \acro_indefinite:
- \acro_short:n {#1}
- }
-
-\NewAcroCommand \acsp
- {
- \acro_plural:
- \acro_short:n {#1}
- }
-
-\NewAcroCommand \Acsp
- {
- \acro_first_upper:
- \acro_plural:
- \acro_short:n {#1}
- }
-
-% alt:
-\NewAcroCommand \aca
- { \acro_alt:n {#1} }
-
-\NewAcroCommand \Aca
- {
- \acro_first_upper:
- \acro_alt:n {#1}
- }
-
-\NewAcroCommand \iaca
- {
- \acro_indefinite:
- \acro_alt:n {#1}
- }
-
-\NewAcroCommand \Iaca
- {
- \acro_first_upper:
- \acro_indefinite:
- \acro_alt:n {#1}
- }
-
-\NewAcroCommand \acap
- {
- \acro_plural:
- \acro_alt:n {#1}
- }
-
-\NewAcroCommand \Acap
- {
- \acro_first_upper:
- \acro_plural:
- \acro_alt:n {#1}
- }
-
-% long:
-\NewAcroCommand \acl
- { \acro_long:n {#1} }
-
-\NewAcroCommand \Acl
- {
- \acro_first_upper:
- \acro_long:n {#1}
- }
-
-\NewAcroCommand \iacl
- {
- \acro_indefinite:
- \acro_long:n {#1}
- }
-
-\NewAcroCommand \Iacl
- {
- \acro_first_upper:
- \acro_indefinite:
- \acro_long:n {#1}
- }
-
-\NewAcroCommand \aclp
- {
- \acro_plural:
- \acro_long:n {#1}
- }
-
-\NewAcroCommand \Aclp
- {
- \acro_plural:
- \acro_first_upper:
- \acro_long:n {#1}
- }
-
-% first:
-\NewAcroCommand \acf
- { \acro_first:n {#1} }
-
-\NewAcroCommand \Acf
- {
- \acro_first_upper:
- \acro_first:n {#1}
- }
-
-\NewAcroCommand \iacf
- {
- \acro_indefinite:
- \acro_first:n {#1}
- }
-
-\NewAcroCommand \Iacf
- {
- \acro_first_upper:
- \acro_indefinite:
- \acro_first:n {#1}
- }
-
-\NewAcroCommand \acfp
- {
- \acro_plural:
- \acro_first:n {#1}
- }
-
-\NewAcroCommand \Acfp
- {
- \acro_plural:
- \acro_first_upper:
- \acro_first:n {#1}
- }
-
-% first-like:
-\NewPseudoAcroCommand \acflike
- { \acro_first_like:nn {#1} {#2} }
-
-\NewPseudoAcroCommand \iacflike
- {
- \acro_indefinite:
- \acro_first_like:nn {#1} {#2}
- }
-
-\NewPseudoAcroCommand \Iacflike
- {
- \acro_first_upper:
- \acro_indefinite:
- \acro_first_like:nn {#1} {#2}
- }
-
-\NewPseudoAcroCommand \acfplike
- {
- \acro_plural:
- \acro_first_like:nn {#1} {#2}
- }
-
-% --------------------------------------------------------------------------
-% first appearance styles:
-\DeclareAcroFirstStyle {default} {inline}
- { }
-
-\DeclareAcroFirstStyle {reversed} {inline}
- { reversed = true }
-
-\DeclareAcroFirstStyle {short} {inline}
- {
- only-short = true ,
- brackets = false
- }
-
-\DeclareAcroFirstStyle {long} {inline}
- {
- only-long = true ,
- brackets = false
- }
-
-\DeclareAcroFirstStyle {square} {inline}
- { brackets-type = [] }
-
-\DeclareAcroFirstStyle {plain} {inline}
- {
- brackets = false ,
- between = --
- }
-
-\DeclareAcroFirstStyle {plain-reversed} {inline}
- {
- brackets = false ,
- between = -- ,
- reversed = true
- }
-
-\DeclareAcroFirstStyle {footnote} {note}
- { }
-
-\DeclareAcroFirstStyle {footnote-reversed} {note}
- { reversed = true }
-
-\DeclareAcroFirstStyle {sidenote} {note}
- { note-command = \sidenote {#1} }
-
-\DeclareAcroFirstStyle {sidenote-reversed} {note}
- {
- note-command = \sidenote {#1} ,
- reversed = true
- }
-
-\DeclareAcroFirstStyle {empty} {note}
- { use-note = false }
-
-% --------------------------------------------------------------------------
-% extra info appearance styles:
-\DeclareAcroExtraStyle {default} {inline}
- {
- brackets = false ,
- punct = true ,
- punct-symbol = .
- }
-
-\DeclareAcroExtraStyle {plain} {inline}
- {
- brackets = false ,
- punct = true ,
- punct-symbol =
- }
-
-\DeclareAcroExtraStyle {paren} {inline}
- {
- brackets = true ,
- punct = true ,
- punct-symbol =
- }
-
-\DeclareAcroExtraStyle {bracket} {inline}
- {
- brackets = true ,
- punct = true ,
- punct-symbol = ,
- brackets-type = []
- }
-
-\DeclareAcroExtraStyle {comma} {inline}
- {
- punct = true,
- punct-symbol = {,} ,
- brackets = false
- }
-
-% --------------------------------------------------------------------------
-% page number appearance styles:
-\DeclareAcroPageStyle {default} {inline}
- {
- punct = true ,
- punct-symbol = .
- }
-
-\DeclareAcroPageStyle {plain} {inline}
- { punct = false }
-
-\DeclareAcroPageStyle {comma} {inline}
- { punct = true }
-
-\DeclareAcroPageStyle {paren} {inline}
- {
- brackets=true ,
- punct-symbol = ~
- }
-
-\DeclareAcroPageStyle {none} {inline}
- { display = false }
-
-% --------------------------------------------------------------------------
-% list heading styles:
-\DeclareAcroListHeading {part} {\part}
-\DeclareAcroListHeading {part*} {\part*}
-\DeclareAcroListHeading {chapter} {\chapter}
-\DeclareAcroListHeading {chapter*} {\chapter*}
-\DeclareAcroListHeading {addchap} {\addchap}
-\DeclareAcroListHeading {section} {\section}
-\DeclareAcroListHeading {section*} {\section*}
-\DeclareAcroListHeading {addsec} {\addsec}
-\DeclareAcroListHeading {subsection} {\subsection}
-\DeclareAcroListHeading {subsection*} {\subsection*}
-\DeclareAcroListHeading {subsubsection} {\subsubsection}
-\DeclareAcroListHeading {subsubsection*} {\subsubsection*}
-\DeclareAcroListHeading {none} {\use_none:n}
-
-% --------------------------------------------------------------------------
-% list styles:
-\DeclareAcroListStyle {description} {list}
- { }
-
-\DeclareAcroListStyle {toc} {list-of}
- { }
-
-\DeclareAcroListStyle {lof} {list-of}
- { style = lof }
-
-\DeclareAcroListStyle {tabular} {table}
- { table = tabular }
-
-\DeclareAcroListStyle {longtable} {table}
- { table = longtable }
-
-\DeclareAcroListStyle {extra-tabular} {extra-table}
- { table = tabular }
-
-\DeclareAcroListStyle {extra-longtable} {extra-table}
- { table = longtable }
-
-\DeclareAcroListStyle {extra-tabular-rev} {extra-table}
- {
- table = tabular ,
- reverse = true
- }
-
-\DeclareAcroListStyle {extra-longtable-rev} {extra-table}
- {
- table = longtable ,
- reverse = true
- }
-
-% --------------------------------------------------------------------------
-% register some tokens to be checked for:
-\AcroRegisterTrailing . {dot}
-\AcroRegisterTrailing - {dash}
-\AcroRegisterTrailing \babelhyphen {babel-hyphen}
-
-\acsetup { activate-trailing-tokens = dot }
-
-% some user macros:
-\cs_new_protected:Npn \acro_dot:
- { \acro_if_trailing_tokens:nF {dot} {.\@} }
-
-\cs_new_protected:Npn \acro_space:
- { \acro_if_trailing_tokens:nF {dash,babel-hyphen} { \c_space_tl } }
-
-% --------------------------------------------------------------------------
-% translations:
-% list name
-\DeclareAcroTranslation {acronym-list-name}
- {
- Fallback = Acronyms ,
- English = Acronyms ,
- French = Acronymes ,
- German = Abk\"urzungen ,
- Italian = Acronimi ,
- Portuguese = Acr\'onimos ,
- Spanish = Siglas ,
- Catalan = Sigles ,
- Turkish = K\i saltmalar
- }
-
-% page name
-\DeclareAcroTranslation {acronym-page-name}
- {
- Fallback = p. ,
- English = p. ,
- German = S. ,
- Portuguese = p.
- }
-
-% pages name
-\DeclareAcroTranslation {acronym-pages-name}
- {
- Fallback = pp. ,
- English = pp. ,
- German = S. ,
- Portuguese = pp.
- }
-
-% following page
-\DeclareAcroTranslation {acronym-next-page}
- {
- Fallback = f. ,
- English = f. ,
- German = f. ,
- Portuguese = s.
- }
-
-% following pages
-\DeclareAcroTranslation {acronym-next-pages}
- {
- Fallback = ff. ,
- English = ff. ,
- German = ff. ,
- Portuguese = ss.
- }
-
-\file_input_stop:
diff --git a/macros/latex/contrib/acro/acro.history b/macros/latex/contrib/acro/acro.history
deleted file mode 100644
index fa6f336991..0000000000
--- a/macros/latex/contrib/acro/acro.history
+++ /dev/null
@@ -1,286 +0,0 @@
---------------------------------------------------------------------------
-the ACRO package
-
- Typeset Acronyms
-
---------------------------------------------------------------------------
-Clemens Niederberger
-Web: https://bitbucket.org/cgnieder/acro/
-E-Mail: contact@mychemistry.eu
---------------------------------------------------------------------------
-Copyright 2011--2020 Clemens Niederberger
-
-This work may be distributed and/or modified under the
-conditions of the LaTeX Project Public License, either version 1.3
-of this license or (at your option) any later version.
-The latest version of this license is in
- http://www.latex-project.org/lppl.txt
-and version 1.3 or later is part of all distributions of LaTeX
-version 2005/12/01 or later.
-
-This work has the LPPL maintenance status `maintained'.
-
-The Current Maintainer of this work is Clemens Niederberger.
---------------------------------------------------------------------------
-The acro package consists of the files
-- acro.sty, acro.definitions.tex, acro.cfg
-- acro-manual.tex, acro-manual.pdf, acro-manual.cls
-- acro.history, README
---------------------------------------------------------------------------
-If you have any ideas, questions, suggestions or bugs to report, please
-feel free to contact me.
---------------------------------------------------------------------------
-2012/06/22 v0.1 - first public release
-2012/06/23 v0.1a - bug fix, added `strict' and `macros' option and creation of
- shortcut macros
- - added capitalized version of long forms
- - added `sort' option
-2012/06/24 v0.1b - added \Acf and \Acfp, added option `plural-ending'
-2012/06/24 v0.1c - added excluded argument to \printacronyms
-2012/06/24 v0.2 - renamed \NewAcronym => \DeclareAcronym
- \AcronymFormat => \DeclareAcronymFormat
-2012/06/25 v0.2a - new first-style's: `short' and `reversed'
-2012/06/25 v0.3 - new list formats: extra-tabular, extra-longtable,
- extra-tabular-rev, extra-longtable-rev
- - extra precaution when using \printacronyms to avoid errors.
-2012/06/27 v0.3a - new option `list-caps', \Acp added
-2012/06/29 v0.3b - extended the `text' template to the `acro-first' object
- - added `acro-first' instances `plain' and `plain-reversed'
-2012/07/16 v0.3c - small adjustments to the documentation
-2012/07/23 v0.3d - first CTAN version
-2012/07/24 v0.3e - adapted to updated l3kernel
-2012/09/28 v0.4 - added means to add citations to acronyms
-2012/10/07 v0.4a - new options: "uc-cmd", "list-long-format"
- - preliminary language support, needs package `translations'
-2012/11/30 v0.5 - added starred variants of the commands that won't mark an
- acronym as used
- - added \acreset{<id>}
- - added preliminary support for pdf strings: in pdf strings
- always the singular lowercase short version is inserted
- (the equivalent of \acs)
-2012/12/14 v0.6 - bug with not-colored links resolved
- - bug introduced with the last update (full expansion of the
- short entry) resolved
- - option `xspace' added
-2013/01/02 v0.6a - \acuseall
-2013/01/16 v1.0 - new syntax of \DeclareAcronym
- - new option `version'
- - new `accsupp' acronym property
- - new `sort' acronym property
- - new syntax of \printacronyms
- - new default: `sort=true'
- - new options `page-ranges', `next-page', `next-pages',
- `pages-name', `record-pages'
- - no automatic label placement for page number referencing
- any more
-2013/01/26 v1.1 - bug fix in the plural detection
- - new keys `long-pre' and `long-post'
- - new keys `index', `index-sort' and `index-cmd'
- - new options `index' and `index-cmd'
-2013/01/29 v1.1a - added `long-format' key
- - renamed `format' key into `short-format', kept `format' for
- compatibility reasons
-2013/02/09 v1.2 - error message instead of hanging when an undefined acronym
- is used
- - added `first-long-format' key and `first-long-format' option
- - added \acflike and \acfplike
- - improvements and bug fixes to the page recording mechanism
- - new option `mark-as-used'
- - new keys: `short-indefinite', `alt-indefinite' and
- `long-indefinite'
- - new commands: \iac, \Iac, \iacs, \Iacs, \iaca, \Iaca, \iacl,
- \Iacl, \iacf, \Iacf, \iacflike and \Iacflike
-2013/04/04 v1.2a - added Portuguese translations
-2013/05/06 v1.3 - protected internal commands where appropriate
- - new option `sort' to \printacronyms
- - renamed options `print-acronyms/header' and `list-header'
- into `print-acronyms/heading' and `list-heading'
- - fix: added missing group to \printacronyms
- - add key `foreign'
- - rewritten page-recording:
- * most importantly: record them at shipout; this is done
- when \acro@used@once or \acro@used@twice are written to
- the aux file
- * no restrictions regarding \pagenumbering
- * options `page-ranges' and `record-pages' are deprecated
- * new options `following-page' and `following-pages'
- - disable \@noitemerr in the list of acronyms: we don't need
- it there but there are occasions when it is annoying
- - cleaned the sty file, added a few more comments
-2013/05/09 v1.3a - Bug fix: corrected wrong argument checking in \Ac, thanks
- to Michel Voßkuhle
-2013/05/30 v1.3b - obey \if@filesw
-2013/06/16 v1.3c - added \leavevmode to \acro_get:n
-2013/07/08 v1.3d - corrected wrong call of \leavevmode in the list
- (list-type=list)
-2013/08/07 v1.3e - bug fix in the list when testing for used acronyms
- - new commands \acifused, \acfirstupper
-2013/08/27 v1.4 - new property `list'
-2013/09/02 v1.4a - bug fix: used acronyms are added to the list when the list
- is printed before the use
- - \DeclareAcronym may now be used after \begin{document}
-2013/09/24 v1.4b - bug fix: only-used=false works again for only declared but
- unused acronyms (only if option single is not used)
-2013/11/04 v1.4c - remove \hbox from the written short form
- - changed \__acro_make_link:nNN in a way that it doesn't box
- its when links are deactivated
-2013/11/22 v1.4d - require `l3sort' independently from the `sort' option
- instead of at begin document in order to avoid conflicts
- with `babel' and `french'
-2013/12/18 v1.5 - new option `label=true|false' that
- places \label{<prefix>:<id>} the first time an acronym is
- used
- - new option `pages=first|all' that determines if in the list
- of acronyms all appearances are listed or only the first
- time; implicitly sets `label=true'
-2015/02/26 v1.6 - new `acro-title' instance `none'
- - change of expl3's tl uppercasing function (adapt to updates
- of l3kernel and friends
- - new package option `messages=silent|loud'
- - fix issue https://bitbucket.org/cgnieder/acro/issue/23/
- - fix issue https://bitbucket.org/cgnieder/acro/issue/24/
- - fix issue https://bitbucket.org/cgnieder/acro/issue/28/
- - drop support for version 0
-2015/04/08 v1.6a - more generalized user command definitions, see
- http://tex.stackexchange.com/q/236362/ for an application
-2015/05/10 v1.6b - \ProcessKeysPackageOptions ,
- - correct bug http://tex.stackexchange.com/q/236860/ :
- option `pages = first' works again
-2015/08/16 v2.0 - fix https://bitbucket.org/cgnieder/acro/issue/36
- - implement https://bitbucket.org/cgnieder/acro/issue/39
- - implement https://bitbucket.org/cgnieder/acro/issue/40
- (=> new option `group-cite-cmd')
- - add ideas for https://bitbucket.org/cgnieder/acro/issue/41
- - implement https://bitbucket.org/cgnieder/acro/issue/18
- - implement https://bitbucket.org/cgnieder/acro/issue/43
- - further generalization for defining user commands:
- \NewAcroCommand, \NewPseudoAcroCommand and siblings
- - bug fix in indefinite versions with first-upper
- - add `short-<ending>-form' equivalent to
- `long-<ending>-form'
- (https://bitbucket.org/cgnieder/acro/issue/44)
- - implement https://bitbucket.org/cgnieder/acro/issue/35
- - new option `single-form'
-2015/08/25 v2.0a - fix https://bitbucket.org/cgnieder/acro/issue/38 and
- https://bitbucket.org/cgnieder/acro/issue/49
-2015/08/29 v2.0b - fix https://bitbucket.org/cgnieder/acro/issue/44
- - fix https://bitbucket.org/cgnieder/acro/issue/45
- - implement https://bitbucket.org/cgnieder/acro/issue/42
-2015/09/05 v2.1 - add list object type `list-of' that prints the list like a
- toc or lof, new option `list-short-width',
- - correct bug in the `plain' extra style
- - implemented `tooltip' property
- - remove \tl_to_lowercase:n
-2015/10/03 v2.2 - fix https://bitbucket.org/cgnieder/acro/issue/52
- - fix typo in `list-of' object
- - \DeclareAcroListStyle
- - \DeclareAcroListHeading
- - input `acro.cfg' if present
- - all acro commands have an optional argument: \ac*[]{}
-2016/01/07 v2.2a - \prop_get:Nn => \prop_item:Nn
-2016/01/21 v2.2b - fix issue #59
-2016/02/02 v2.2c - fix issue #60
-2016/03/14 v2.3 - foreign-format may be a macro taking an argument
- - \Aca, \Acsingle
- - properties `single' and `single-format', option
- `single-format' => issue #62
- - property `first-style' => issue #61
- - fix issue #64: long-post entry is now added *after* the
- endings
- - property `foreign-lang'
- - fix issue #65
-2016/03/25 v2.4 - extend class mechanism: classes can be used like tags
- - add idea of `barriers' and list local to those barriers
- => new option `reset-at-barriers'
- => new option `local-to-barriers' for \printacronyms
- => new command \acbarrier
-2016/04/14 v2.4a - if undefined acronym is used and `messages = silent' is
- active don't through error
-2016/05/03 v2.4b - expand `pdfstring' property before saving => issue #69
- - \ProvideAcroEnding can be used twice – it then just sets
- the defaults
- - the option <ending>-ending has a new syntax:
- * <ending>-ending = <val> sets all endings to <val>
- * <ending>-ending = <val1>/<val2> sets short endings to
- <val1> and long endings to <val2>
- - a single appearance should be treated like a first
- appearance as far as citations are concerned
-2016/05/25 v2.5 - some of the entries added to the aux file need to be
- written \immediate in order to avoid this trap:
- http://tex.stackexchange.com/q/116001/
- - cleaner interface for first-style template definitions
- - new `acro-first' instances `footnote-reversed' and
- `sidenote-reversed'
- - new commands \DeclareAcroFirstStyle, \DeclareAcroExtraStyle
- and \DeclareAcroPageStyle
- - add warning `ending-before-acronyms' to options setting the
- defaults of an ending; this should avoid confusion
- - property declaration for acronyms should be handled by
- internal functions
- - improvements in the list template code
- - logging info when an acronym is declared
- - remove deprecated options
- - new option `use-barriers'
- - new option `following-pages*'
- - option `page-ref' replaced by option `page-style'
-2016/05/26 v2.5a - bug fix: remove erroneous group in `<ending>-ending' option
-2016/05/30 v2.5b - fix issue #72
-2016/07/20 v2.6 - \l__acro_use_acronyms_bool can be used to disable \ac
- e.g. in the trial phase of a table like `tabu'; interface:
- \acro_switch_off: and \acswitchoff
- - fix issue #79
- - fix issue #74
- - fix error: acronyms with same sort entry are not
- overwritten any more in the list of acronyms
-2016/08/13 v2.6a - fix issues #80 and #81
-2016/08/13 v2.6b - version stepped by accident
-2016/08/16 v2.6c - really fixes issue #81
-2016/08/30 v2.6d - fix issue #82
-2016/09/04 v2.6e - fix issue in http://tex.stackexchange.com/q/270034/
-2017/01/22 v2.7 - rename \acro_get_property:nn into \__acro_get_property:nn
- - \acro_get_property:nn, \acro_get_property:nnTF,
- \acro_if_property:nnTF, retrieve property without error if
- not set
- - make \__acro_declare_property functions public
- - \acro_add_action:n (adds code to \acro_get:n)
-2017/02/09 v2.7a - adapt to integration of l3sort into l3kernel
-2017/06/21 v2.7b - fix issue #93
-2017/08/28 v2.7c - fix issue #96
-2018/01/30 v2.8 - fix issue #94
- - document `format-include-endings', fix issue #99
- - new property `post'
- - \aciffirst
- - resolve issue #95
-2019/02/17 v2.9 - small redefinition of \acro_get_foreign:n which allows
- `foreign-sep' to be a &
- - fix issue #116
- - implemented issue #112
-2019/09/23 v2.10 - fix issue #120
- - fix isuue #128
- - fix issue #129
- - fix issue #131
- - new: \Acs \Acsp \Aca \Acap
- - new: `alt-format'
- - new: `uppercase-short'
- - a change to how usage is determined (see def. of
- \acro_is_used:nTF)
-2019/10/02 v2.10a - fix newly introduced issue #135
-2019/10/06 v2.10b - fix issue #137
- - clearer documentation of `uppercase-short'
- - set the default of `uppercase-short' to `true'
-2019/10/12 v2.10c - fix issue #139
-2019/12/30 v2.10d - fix issue #76
- - fix issue #141
- - fix issue #143
-2020/01/11 v2.11 - new commands \acpsingle and \Acpsingle
- - fix issues with optional arguments of the `cite' property
- - new properties `before-citation' and `after-citation'
- - new options `config-file-name' and `config-file-extension'
- - new option `case-sensitive'
- - rename the manual file and use a dedicated class for the
- manual
- - prefer lazy boolean evaluation when possible
-2020/01/16 v2.11a - adapt to new l3text module
-2020/01/24 v2.11b - fix issue #147
-2020/02/03 v2.11c - fix issue #76
-2020/03/07 v2.11c - fix issues #149 and #150
diff --git a/macros/latex/contrib/acro/acro.sty b/macros/latex/contrib/acro/acro.sty
index 5209dda3ca..d1761cf005 100644
--- a/macros/latex/contrib/acro/acro.sty
+++ b/macros/latex/contrib/acro/acro.sty
@@ -5,7 +5,7 @@
%
% --------------------------------------------------------------------------
% Clemens Niederberger
-% Web: https://bitbucket.org/cgnieder/acro/
+% Web: https://github.com/cgnieder/acro/
% E-Mail: contact@mychemistry.eu
% --------------------------------------------------------------------------
% Copyright 2011--2020 Clemens Niederberger
@@ -30,15 +30,15 @@
% If you have any ideas, questions, suggestions or bugs to report, please
% feel free to contact me.
% --------------------------------------------------------------------------
-\RequirePackage{expl3,xparse,xtemplate,l3keys2e}
-\RequirePackage{etoolbox} % for the document hooks
-
+\RequirePackage{expl3,xparse,l3keys2e}
\ExplSyntaxOn
-\tl_const:Nn \c_acro_date_tl {2020/03/07}
-\tl_const:Nn \c_acro_version_major_number_tl {2}
-\tl_const:Nn \c_acro_version_minor_number_tl {11}
-\tl_const:Nn \c_acro_version_subrelease_tl {d}
+% setup package:
+\tl_const:Nn \c_acro_package_name_tl {acro}
+\tl_const:Nn \c_acro_date_tl {2020/04/29}
+\tl_const:Nn \c_acro_version_major_number_tl {3}
+\tl_const:Nn \c_acro_version_minor_number_tl {0}
+\tl_const:Nn \c_acro_version_subrelease_tl {}
\tl_const:Nx \c_acro_version_number_tl
{
\c_acro_version_major_number_tl .
@@ -49,3448 +49,4199 @@
\c_acro_version_number_tl
\c_acro_version_subrelease_tl
}
-\tl_const:Nn \c_acro_info_tl {Typeset~ Acronyms}
+\tl_const:Nn \c_acro_info_tl {typeset~ acronyms~ and~ other~ abbreviations}
\ProvidesExplPackage
- {acro}
+ {\c_acro_package_name_tl}
{\c_acro_date_tl}
{\c_acro_version_tl}
{\c_acro_info_tl}
% --------------------------------------------------------------------------
-% warning and error messages:
-\msg_new:nnn {acro} {undefined}
- {
- You've~ requested~ acronym~ `#1'~ \msg_line_context: \ but~ you~
- apparently~ haven't~ defined~ it,~ yet! \\
- Maybe~ you've~ misspelled~ `#1'?
- }
+% document hooks:
+\tl_new:N \g_acro_end_document_hook_tl
+\tl_new:N \g_acro_begin_document_hook_tl
-\msg_new:nnn {acro} {macro}
- {
- A~ macro~ with~ the~ csname~ `#1'~ already~ exists! \\
- Unless~ you~ set~ acro's~ option~ `strict'~ I~ won't~ redefine~ it~
- \msg_line_context: .
- }
+\AtBeginDocument { \tl_use:N \g_acro_begin_document_hook_tl }
+\AtEndDocument { \tl_use:N \g_acro_end_document_hook_tl }
+
+\cs_new_protected:Npn \acro_at_begin_document:n #1
+ { \tl_gput_right:Nn \g_acro_begin_document_hook_tl {#1} }
-\msg_new:nnn {acro} {replaced}
+\cs_new_protected:Npn \acro_at_end_document:n #1
+ { \tl_gput_right:Nn \g_acro_end_document_hook_tl {#1} }
+
+% --------------------------------------------------------------------------
+% load-time messages:
+\msg_new:nnn {acro} {load-time-option}
{
- The~ #1~ `#2' ~you ~used~ \msg_line_context: \ is~ deprecated~ and~ has~
- been~ replaced~ by~ `#3'. ~Since~ I~ will~ not~ guarantee~ that~ #1~ `#2'~
- will~ be~ kept~ forever~ I~ strongly~ encourage~ you~ to~ switch!
+ `#1'~ is~ a~ load-time~ option! \\
+ You~ cannot~ set~ it~ with~ \token_to_str:N \acsetup ! \\
+ You~ need~ to~ use~ \token_to_str:N \usepackage [#1] {acro} .
}
-\msg_new:nnn {acro} {deprecated}
+\msg_new:nnn {acro} {unknown-option}
{
- The~ #1~ `#2'~ you~ used~ \msg_line_context: \ is~ deprecated~and~ there~
- is~ no~ replacement.~ Since~ I~ will~ not~ guarantee~ that~ #1~ `#2'~
- will~ be~ kept~ forever~ I~ strongly~ encourage~ you~ to~ remove~ it~
- from~ your~ document.
+ Unknown~ option~ `#1' \\
+ I~ dont'~ know~ the~ option~ `#1'.~ Please~ make~ sure~ there~ is~ no~
+ typo.~ Check~ the~ manual~ for~ help.
}
-\msg_new:nnn {acro} {substitute-short}
+% --------------------------------------------------------------------------
+% re-compile mechanism:
+\bool_new:N \g__acro_rerun_bool
+\tl_new:N \g__acro_rerun_message_tl
+
+\tl_const:Nn \l__acro_rerun_general_tl
+ { Rerun~ to~ get~ `acro'~ synchronized. }
+
+\tl_const:Nn \l__acro_rerun_property_tl
{
- There~ is~ no~ short~ form~ set~ for~ acronym~ `#1'! \\
- I~ am~ setting~ the~ short~ form~ equal~ to~ the~ ID~ `#1'. \\
- If~ that~ is~ not~ what~ you~ want~ make~ sure~ to~ add~ an~ explicit~
- short~ form.
+ Acronym~ properties~ may~ have~ changed.~ Rerun~ to~ get~ them~
+ synchronized.
}
-\msg_new:nnn {acro} {ending-exists}
+
+\tl_const:Nn \l__acro_rerun_list_tl
{
- An~ ending~ with~ the~ name~ `#1'~ already~ exists! \\ \\
- I~ am~ overwriting~ the~ defaults.
+ Empty~ acronym~ list.~ If~ you~ have~ used~ acronyms~ then~ re-compile~
+ to~ get~ the~ list~ filled.~ Otherwise~ remove~ \token_to_str:N
+ \printacronyms
}
-\msg_new:nnn {acro} {ending-before-acronyms}
+\msg_new:nnn {acro} {rerun} { \use:c {l__acro_rerun_#1_tl} }
+
+\prg_new_conditional:Npnn \acro_if_rerun: {p,T,F,TF}
{
- You~ are~ using~ \token_to_str:N \ProvideAcroEnding \ after~ you've~
- declared~ at~ least~ one~ acronym.~ This~ will~ lead~ to~ trouble! \\
- Make~ sure~ to~ define~ endings~ before~ *any*~ acronym~ declarations!
+ \bool_if:NTF \g__acro_rerun_bool
+ { \prg_return_true: }
+ { \prg_return_false: }
}
-\msg_new:nnn {acro} {no-alternative}
+\cs_new_protected:Npn \acro_rerun:n #1
{
- There~ is~ no~ alternative~ form~ for~ acronym~ `#1'! \\ \\
- I~ am~ using~ the~ short~ form~ instead.
+ \bool_gset_true:N \g__acro_rerun_bool
+ \tl_map_inline:Nn \g__acro_rerun_message_tl
+ {
+ \tl_if_eq:nnT {##1} {#1}
+ { \tl_map_break:n { \use_none:nn } }
+ }
+ \use:n { \tl_gput_right:Nn \g__acro_rerun_message_tl {{#1}} }
}
-\msg_new:nnn {acro} {unknown}
+\cs_new_protected:Npn \acro_do_rerun:
{
- You're~ trying~ to~ use~ the~ #1~ `#2'~ \msg_line_context: . \\
- However,~ I~ do~ not~ know~ #1~ `#2'! \\
- If~ this~ is~ no~ typo~ please~ contact~ the~ package~ author. \\ \\
- I~ am~ going~ to~ use~ the~ #1~ `#3'~ instead.
+ \acro_if_rerun:T
+ {
+ \tl_map_inline:Nn \g__acro_rerun_message_tl
+ {
+ \str_case:nnTF {##1}
+ {
+ {property} { \msg_warning:nnn {acro} {rerun} {property} }
+ {list} { \msg_warning:nnn {acro} {rerun} {list} }
+ {general} { \msg_warning:nnn {acro} {rerun} {general} }
+ }
+ { \tl_map_break: }
+ { \msg_warning:nnn {acro} {rerun} {general} }
+ }
+ }
}
-\msg_new:nnn {acro} {definitions-missing}
+
+% --------------------------------------------------------------------------
+% debugging mechanism:
+\bool_new:N \g__acro_debug_bool
+
+\prg_new_conditional:Npnn \acro_if_debug: {p,T,F,TF}
{
- I~ cannot~ find~ the~ file~ \c_acro_definition_file_name_tl
- .\c_acro_definition_file_extension_tl !~ This~ file~ contains~ all~
- essential~ user~ commands~ of~ acro~ and~ is~ a~ crucial~ part~ of~ the~
- package!~ Please~ check~ your~ installation.
+ \bool_if:NTF \g__acro_debug_bool
+ { \prg_return_true: }
+ { \prg_return_false: }
}
% --------------------------------------------------------------------------
-% temporary variables
-\tl_new:N \l__acro_tmpa_tl
-\tl_new:N \l__acro_tmpb_tl
-\tl_new:N \l__acro_tmpc_tl
-\prop_new:N \l__acro_tmpa_prop
-\prop_new:N \l__acro_tmpb_prop
-\seq_new:N \l__acro_tmpa_seq
-\seq_new:N \l__acro_tmpb_seq
-\int_new:N \l__acro_tmpa_int
-\int_new:N \l__acro_tmpb_int
-\int_new:N \l__acro_tmpc_int
-\int_new:N \l__acro_tmpd_int
+% check for stuff changed in the new version:
+\bool_new:N \g__acro_upgrade_bool
-% --------------------------------------------------------------------------
-% variants of kernel commands
-\cs_generate_variant:Nn \quark_if_no_value:nTF {V}
-\cs_generate_variant:Nn \tl_put_right:Nn {NV,Nv}
-\cs_generate_variant:Nn \tl_if_eq:nnT {V}
-\cs_generate_variant:Nn \tl_if_eq:nnF {V}
-\cs_generate_variant:Nn \seq_use:Nnnn {c}
-\cs_generate_variant:Nn \seq_gset_split:Nnn {c}
-\cs_generate_variant:Nn \seq_set_split:Nnn {NnV}
-\cs_generate_variant:Nn \seq_if_in:NnT {NV}
-\cs_generate_variant:Nn \seq_if_in:NnTF {Ne}
-\cs_generate_variant:Nn \prop_put:Nnn {NnV,cnx,cnv}
-\cs_generate_variant:Nn \prop_get:NnNTF {cnc}
-\cs_generate_variant:Nn \prop_get:NnNF {cn,cnc}
-\cs_generate_variant:Nn \prop_get:NnN {cnc}
-\cs_generate_variant:Nn \cs_generate_variant:Nn {c}
-\cs_generate_variant:Nn \str_case:nn {V}
+\prg_new_conditional:Npnn \acro_if_upgrade: {p,T,F,TF}
+ {
+ \bool_if:NTF \g__acro_upgrade_bool
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
% --------------------------------------------------------------------------
-% variables:
-\bool_new:N \l__acro_acc_supp_bool
-\bool_new:N \l__acro_addto_index_bool
-\bool_new:N \l__acro_capitalize_list_bool
-\bool_new:N \g__acro_case_sensitive_bool
-\bool_new:N \l__acro_citation_all_bool
-\bool_new:N \l__acro_citation_first_bool
-\bool_set_true:N \l__acro_citation_first_bool
-\bool_new:N \l__acro_create_macros_bool
-\bool_new:N \l__acro_custom_alt_format_bool
-\bool_new:N \l__acro_custom_long_format_bool
-\bool_new:N \l__acro_custom_short_format_bool
-\bool_new:N \l__acro_custom_foreign_format_bool
-\bool_new:N \l__acro_extra_punct_bool
-\bool_new:N \l__acro_extra_use_brackets_bool
-\bool_new:N \g__acro_first_acronym_declared_bool
-\bool_new:N \l__acro_first_instance_bool
-\bool_new:N \l__acro_first_only_short_bool
-\bool_new:N \l__acro_first_only_long_bool
-\bool_new:N \l__acro_first_reversed_bool
-\bool_new:N \l__acro_first_switched_bool
-\bool_new:N \l__acro_first_use_brackets_bool
-\bool_new:N \l__acro_first_upper_bool
-\bool_new:N \l__acro_following_page_bool
-\bool_new:N \l__acro_following_pages_bool
-\bool_new:N \l__acro_foreign_bool
-\bool_set_true:N \l__acro_foreign_bool
-\bool_new:N \l__acro_group_citation_bool
-\bool_new:N \l__acro_hyperref_loaded_bool
-\bool_new:N \l__acro_hyperref_use_bool
-\bool_new:N \l__acro_include_endings_format_bool
-\bool_new:N \l__acro_indefinite_bool
-\bool_new:N \l__acro_in_list_bool
-\bool_new:N \l__acro_is_included_bool
-\bool_new:N \l__acro_is_excluded_bool
-\bool_new:N \l__acro_list_all_pages_bool
-\bool_set_true:N \l__acro_list_all_pages_bool
-\bool_new:N \l__acro_list_reverse_long_extra_bool
-\bool_new:N \l__acro_log_acronyms_bool
-\bool_new:N \l__acro_log_acronyms_verbose_bool
-\bool_new:N \l__acro_mark_as_used_bool
-\bool_new:N \g__acro_mark_first_as_used_bool
-\bool_new:N \l__acro_override_list_format_bool
-\bool_new:N \l__acro_page_brackets_bool
-\bool_new:N \l__acro_page_display_bool
-\bool_new:N \l__acro_page_punct_bool
-\bool_new:N \l__acro_place_label_bool
-\bool_new:N \l__acro_print_only_used_bool
-\bool_set_true:N \l__acro_print_only_used_bool
-\bool_new:N \g__acro_rerun_bool
-\bool_new:N \g__acro_reset_at_barrier_bool
-\bool_new:N \l__acro_silence_bool
-\bool_new:N \l__acro_single_use_bool
-\bool_new:N \l__acro_sort_bool
-\bool_set_true:N \l__acro_sort_bool
-\bool_new:N \l__acro_strict_bool
-\bool_new:N \l__acro_trailing_tokens_bool
-\bool_new:N \l__acro_tooltip_bool
-\bool_new:N \l__acro_tooltip_inside_bool
-\bool_new:N \l__acro_upper_indefinite_bool
-\bool_new:N \l__acro_upper_short_bool
-\bool_new:N \l__acro_use_acronyms_bool
-\bool_set_true:N \l__acro_use_acronyms_bool
-\bool_new:N \l__acro_use_barrier_bool
-\bool_new:N \g__acro_use_barriers_bool
-\bool_new:N \l__acro_use_ending_form_bool
-\bool_new:N \l__acro_use_note_bool
-\bool_new:N \l__acro_xspace_bool
-
-\str_new:N \l__acro_current_id_str
-
-\tl_new:N \l__acro_list_entries_tl
-\tl_new:N \l__acro_endings_tl
-\tl_new:N \l__acro_trailing_tokens_tl
-\tl_new:N \l__acro_included_classes_tl
-\tl_new:N \l__acro_excluded_classes_tl
-\tl_new:N \l__acro_ignore_tl
-\tl_new:N \l__acro_default_indefinite_tl
-\tl_set:Nn \l__acro_default_indefinite_tl {a}
-\tl_new:N \l__acro_foreign_sep_tl
-\tl_new:N \l__acro_extra_instance_tl
-\tl_set:Nn \l__acro_extra_instance_tl {default}
-\tl_new:N \l__acro_page_instance_tl
-\tl_set:Nn \l__acro_page_instance_tl {none}
-\tl_new:N \l__acro_page_name_tl
-\tl_new:N \l__acro_pages_name_tl
-\tl_new:N \l__acro_next_page_tl
-\tl_new:N \l__acro_next_pages_tl
-\tl_new:N \l__acro_list_instance_tl
-\tl_set:Nn \l__acro_list_instance_tl {description}
-\tl_new:N \l__acro_list_type_tl
-\tl_new:N \l__acro_list_heading_cmd_tl
-\tl_set:Nn \l__acro_list_heading_cmd_tl {section*}
-\tl_new:N \l__acro_list_name_tl
-\tl_new:N \l__acro_list_before_tl
-\tl_new:N \l__acro_list_after_tl
-\tl_new:N \l__acro_custom_short_format_tl
-\tl_new:N \l__acro_first_between_tl
-\tl_new:N \l__acro_citation_connect_tl
-\tl_new:N \l__acro_between_group_connect_citation_tl
-\tl_new:N \l__acro_extra_brackets_tl
-\tl_new:N \l__acro_extra_punct_tl
-\tl_new:N \l__acro_first_brackets_tl
-\tl_new:N \l__acro_page_punct_tl
-\tl_new:N \l__acro_page_brackets_tl
-\tl_new:N \l__acro_last_page_tl
-\tl_new:N \l__acro_current_page_tl
-\tl_new:N \l__acro_list_table_tl
-\tl_new:N \l__acro_list_table_spec_tl
-\tl_new:N \l__acro_acc_supp_tl
-\tl_new:N \l__acro_acc_supp_options_tl
-\tl_new:N \l__acro_label_prefix_tl
-\tl_set:Nn \l__acro_label_prefix_tl {ac:}
-\tl_new:N \l__acro_index_short_tl
-\tl_new:N \l__acro_first_instance_tl
-\tl_set:Nn \l__acro_first_instance_tl {default}
-\tl_new:N \l__acro_short_tl
-\tl_new:N \l__acro_short_format_tl
-\tl_new:N \l__acro_list_short_format_tl
-\tl_new:N \l__acro_alt_tl
-\tl_new:N \l__acro_alt_format_tl
-\tl_new:N \l__acro_long_tl
-\tl_new:N \l__acro_long_format_tl
-\tl_new:N \l__acro_list_long_format_tl
-\tl_new:N \l__acro_single_form_tl
-\tl_set:Nn \l__acro_single_form_tl {long}
-\tl_new:N \l__acro_extra_format_tl
-\tl_new:N \l__acro_foreign_format_tl
-\tl_new:N \l__acro_foreign_list_format_tl
-\tl_set:Nn \l__acro_foreign_list_format_tl { \acroenparen }
-\tl_new:N \l__acro_index_format_tl
-
-\skip_new:N \l__acro_page_space_skip
-
-\dim_new:N \l__acro_short_width_dim
-\dim_set:Nn \l__acro_short_width_dim {3em}
-
-\int_new:N \g__acro_barrier_int
-
-\seq_new:N \l__acro_endings_seq
-\seq_new:N \l__acro_actions_seq
-\seq_new:N \g__acro_declared_acronyms_seq
-
-\prop_new:N \l__acro_citation_prop
-\prop_new:N \l__acro_citation_pre_prop
-\prop_new:N \l__acro_citation_post_prop
-\prop_new:N \l__acro_pdfstring_alt_prop
-\prop_new:N \l__acro_pdfstring_short_prop
-\prop_new:N \g__acro_properties_prop
-\prop_new:N \l__acro_trailing_tokens_prop
-\prop_new:N \l__acro_trailing_actions_prop
-\prop_new:N \l__acro_list_styles_prop
-\prop_new:N \l__acro_list_headings_prop
-\prop_new:N \l__acro_first_styles_prop
-\prop_new:N \l__acro_extra_styles_prop
-\prop_new:N \l__acro_page_styles_prop
+%
+\bool_new:N \g__acro_final_bool
-% --------------------------------------------------------------------------
-% logging:
-\prg_new_conditional:Npnn \acro_if_log: {p,T,F,TF}
+\prg_new_conditional:Npnn \acro_if_final: {p,T,F,TF}
{
- \bool_if:NTF \l__acro_log_acronyms_bool
+ \bool_if:NTF \g__acro_final_bool
{ \prg_return_true: }
{ \prg_return_false: }
}
-\keys_define:nn {acro}
+% --------------------------------------------------------------------------
+% load-time options:
+% #1: message name
+\cs_new_protected:Npn \__acro_loadtime_error:n #1
+ { \msg_error:nnV {acro} {#1} \l_keys_key_str }
+
+\cs_new_protected:Npn \__acro_loadtime_warning:n #1
+ { \msg_warning:nnV {acro} {#1} \l_keys_key_str }
+
+\cs_generate_variant:Nn \msg_error:nnn {nnV}
+\cs_generate_variant:Nn \msg_warning:nnn {nnV}
+
+\int_new:N \g__acro_version_int
+
+\keys_define:nn {acro/package}
{
- log .choice: ,
- log / true .code:n =
- \bool_set_true:N \l__acro_log_acronyms_bool
- \bool_set_false:N \l__acro_log_acronyms_verbose_bool ,
- log / silent .meta:n = { log = true } ,
- log / verbose .code:n =
- \bool_set_true:N \l__acro_log_acronyms_bool
- \bool_set_true:N \l__acro_log_acronyms_verbose_bool ,
- log / false .code:n =
- \bool_set_false:N \l__acro_log_acronyms_bool
- \bool_set_false:N \l__acro_log_acronyms_verbose_bool ,
- log .default:n = true ,
- log .initial:n = false
- }
-
-\cs_new:Npn \__acro_write_log:nn #1#2 { \ \ \ #1 ~ = ~ {#2} }
-\cs_new:Npn \__acro_write_log_property:nnn #1#2#3
- { \__acro_write_log:nn {#2} { \__acro_property_get:nn {#3} {#1} } }
-
-\cs_new:Npn \__acro_ending_log_entry:nn #1#2
- {
- | \\
- | \__acro_write_log_property:nnn {#1} {short-#2} {short_#2} \\
- | \__acro_write_log_property:nnn {#1} {short-#2-form} {short_#2_form} \\
- | \__acro_write_log_property:nnn {#1} {long-#2} {long_#2} \\
- | \__acro_write_log_property:nnn {#1} {long-#2-form} {long_#2_form} \\
- | \__acro_write_log_property:nnn {#1} {alt-#2} {alt_#2} \\
- | \__acro_write_log_property:nnn {#1} {alt-#2-form} {alt_#2_form} \\
- | \__acro_write_log_property:nnn {#1} {foreign-#2} {foreign_#2} \\
- | \__acro_write_log_property:nnn {#1} {foreign-#2-form} {foreign_#2_form} \\
+ debug .bool_gset:N = \g__acro_debug_bool ,
+ debug .initial:n = false ,
+ upgrade .bool_gset:N = \g__acro_upgrade_bool ,
+ upgrade .initial:n = true ,
+ final .bool_set:N = \g__acro_final_bool ,
+ final .initial:n = false ,
+ version .choice: ,
+ version / 2 .code:n = \int_set:Nn \g__acro_version_int {2} ,
+ version / 3 .code:n = \int_set:Nn \g__acro_version_int {3} ,
+ version .initial:n = 3 ,
+ unknown .code:n = \__acro_loadtime_warning:n {unknown-option}
}
-
-\msg_new:nnn {acro} {log-acronym-verbose}
- {
- ================================================= \\
- | ~ \msg_info_text:n {acro}~ --~ defining~ new~ acronym: \\
- | \__acro_write_log:nn {ID} {#1} \\
- | \__acro_write_log_property:nnn {#1} {short} {short} \\
- | \__acro_write_log_property:nnn {#1} {long} {long} \\
- | \__acro_write_log_property:nnn {#1} {alt} {alt} \\
- | \__acro_write_log_property:nnn {#1} {sort} {sort} \\
- | \__acro_write_log_property:nnn {#1} {class} {class} \\
- | \__acro_write_log_property:nnn {#1} {list} {list} \\
- | \__acro_write_log_property:nnn {#1} {extra} {extra} \\
- | \__acro_write_log_property:nnn {#1} {foreign} {foreign} \\
- | \__acro_write_log_property:nnn {#1} {single} {single} \\
- | \__acro_write_log_property:nnn {#1} {pdfstring} {pdfstring} \\
- | \__acro_write_log_property:nnn {#1} {accsupp} {accsupp} \\
- | \__acro_write_log_property:nnn {#1} {tooltip} {tooltip} \\
- | \\
- | \__acro_write_log_property:nnn {#1} {short-indefinite} {short_indefinite} \\
- | \__acro_write_log_property:nnn {#1} {long-indefinite} {long_indefinite} \\
- | \__acro_write_log_property:nnn {#1} {alt-indefinite} {alt_indefinite} \\
- \seq_map_function:NN \l__acro_endings_seq \__acro_ending_log_entry:n
- | \\
- | \__acro_write_log_property:nnn {#1} {short-format} {short_format} \\
- | \__acro_write_log_property:nnn {#1} {long-format} {long_format} \\
- | \__acro_write_log_property:nnn {#1} {first-long-format} {first_long_format} \\
- | \__acro_write_log_property:nnn {#1} {single-format} {single_format} \\
- | \__acro_write_log_property:nnn {#1} {foreign-lang} {foreign_lang} \\
- | \\
- | \__acro_write_log_property:nnn {#1} {cite} {citation} \\
- | \__acro_write_log_property:nnn {#1} {before-citation} {before_citation} \\
- | \__acro_write_log_property:nnn {#1} {after-citation} {after_citation} \\
- | \__acro_write_log_property:nnn {#1} {index} {index} \\
- | \__acro_write_log_property:nnn {#1} {index-sort} {index_sort} \\
- | \\
- | \__acro_write_log_property:nnn {#1} {long-pre} {long_pre} \\
- | \__acro_write_log_property:nnn {#1} {long-post} {long_post} \\
- | \__acro_write_log_property:nnn {#1} {post} {post} \\
- | \__acro_write_log_property:nnn {#1} {index-cmd} {index_cmd} \\
- | \__acro_write_log_property:nnn {#1} {first-style} {first_style} \\
- =================================================
- }
-
-\msg_new:nnn {acro} {log-acronym-silent}
- {
- ================================================= \\
- | ~ \msg_info_text:n {acro}~ --~ defining~ new~ acronym: \\
- | \__acro_write_log:nn {ID} {#1} \\
- | \__acro_write_log_property:nnn {#1} {short} {short} \\
- | \__acro_write_log_property:nnn {#1} {long} {long} \\
- | \__acro_write_log_property:nnn {#1} {alt} {alt} \\
- | \__acro_write_log_property:nnn {#1} {sort} {sort} \\
- | \__acro_write_log_property:nnn {#1} {class} {class} \\
- | \__acro_write_log_property:nnn {#1} {list} {list} \\
- | \__acro_write_log_property:nnn {#1} {extra} {extra} \\
- | \__acro_write_log_property:nnn {#1} {foreign} {foreign} \\
- | \__acro_write_log_property:nnn {#1} {cite} {citation} \\
- =================================================
+
+\ProcessKeysPackageOptions {acro/package}
+
+\int_compare:nNnT \g__acro_version_int = 2
+ {
+ \RequirePackage {acro2}
+ \file_input_stop:
}
-
-\cs_new_protected:Npn \__acro_log_acronym:n #1
+
+\keys_define:nn {acro/package}
{
- \bool_if:NT \l__acro_log_acronyms_bool
- {
- \cs_set:Npn \__acro_ending_log_entry:n ##1
- { \__acro_ending_log_entry:nn {#1} {##1} }
- \bool_if:NTF \l__acro_log_acronyms_verbose_bool
- { \msg_log:nnn {acro} {log-acronym-verbose} {#1} }
- { \msg_log:nnn {acro} {log-acronym-silent} {#1} }
- }
- }
+ debug .code:n = \__acro_loadtime_error:n {load-time-option} ,
+ upgrade .code:n = \__acro_loadtime_error:n {load-time-option} ,
+ final .code:n = \__acro_loadtime_error:n {load-time-option}
+ }
-% --------------------------------------------------------------------------
-% message macros:
-\cs_new:Npn \__acro_remove_backslash:N #1
- { \exp_after:wN \use_none:n \token_to_str:N #1 }
+% ----------------------------------------------------------------------------
+% temporary variables:
+\tl_new:N \l__acro_tmpa_tl
+\tl_new:N \l__acro_tmpb_tl
+\tl_new:N \l__acro_tmpc_tl
+
+\str_new:N \l__acro_tmpa_str
+\str_new:N \l__acro_tmpb_str
+\str_new:N \l__acro_tmpc_str
+
+\bool_new:N \l__acro_tmpa_bool
+\bool_new:N \l__acro_tmpb_bool
+\bool_new:N \l__acro_tmpc_bool
+
+\seq_new:N \l__acro_tmpa_seq
+\seq_new:N \l__acro_tmpb_seq
+\seq_new:N \l__acro_tmpc_seq
+
+\int_new:N \l__acro_tmpa_int
+\int_new:N \l__acro_tmpb_int
+\int_new:N \l__acro_tmpc_int
+\int_new:N \l__acro_tmpd_int
+
+\clist_new:N \l__acro_tmpa_clist
+\clist_new:N \l__acro_tmpb_clist
+\clist_new:N \l__acro_tmpc_clist
-\cs_new_protected:Npn \acro_new_message_commands:Nnnn #1#2#3#4
+% ----------------------------------------------------------------------------
+% module mechanism:
+\msg_new:nnn {acro} {module-missing}
{
- \clist_map_inline:nn {#2}
+ You've~ requested~ the~ acro~ module~ `#1'~ but~ it~ appears~ to~
+ be~ missing~ on~ your~ system.~ Maybe~ you've~ misspelled~ the~ name?~
+ Loading~ the~ module~ will~ abort~ \msg_line_context:
+ }
+
+\msg_new:nnn {acro} {loading-module}
+ { Loading~ module~ `#1'~ ... }
+
+\msg_new:nnn {acro} {wrong-module-name}
+ { The~ module~ file~ name~ is~ `#2'~ but~ it~ provides~ module~ `#1'. }
+
+\msg_new:nnn {acro} {forbidden-module}
+ {
+ You've~ requested~ the~ acro~ module~ `modules'~ \msg_line_context: .~
+ This~ module~ is~ a~ pseudo~ module~ which~ may~ not~ be~ loaded~ through~
+ the~ module~ loading~ mechansim.
+ }
+
+% ----------------------------------------------------------------------------
+\cs_generate_variant:Nn \str_if_eq:nnF {xx}
+\cs_generate_variant:Nn \msg_error:nnnn {nnnx}
+
+\prg_new_conditional:Npnn \acro_package_if_loaded:n #1 {p,T,F,TF}
+ {
+ \cs_if_exist:cTF {ver@#1.sty}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+
+% ----------------------------------------------------------------------------
+% this is for external file modules called "styles":
+\tl_const:Nn \c__acro_module_extension_tl {code.tex}
+\tl_const:Nn \c__acro_module_prefix_tl {acro}
+
+\tl_new:N \g__acro_modules_loaded_tl
+
+\cs_new_protected:Npn \acro_modules_load:n #1
+ { \clist_map_inline:nn {#1} { \acro_module_load:n {##1} } }
+
+\cs_new_protected:Npn \acro_module_load:n #1
+ {
+ \tl_set:Nx \l_tmpa_tl { \tl_trim_spaces:n {#1} }
+ \str_if_eq:VnTF \l_tmpa_tl {modules}
+ { \msg_error:nn {acro} {forbidden-module} }
+ { \__acro_module_load:V \l_tmpa_tl }
+ }
+
+\cs_new_protected:Npn \__acro_module_load:n #1
+ {
+ \acro_if_module_loaded:nF {#1}
{
- \cs_new_protected:cpn { \__acro_remove_backslash:N #1 ##1 }
+ \acro_module_if_exist:nTF {#1}
{
- \bool_if:NTF \l__acro_silence_bool
- { \use:c { \__acro_remove_backslash:N #3 n##1 } {acro} }
- { \use:c { \__acro_remove_backslash:N #4 n##1 } {acro} }
+ \__acro_module_hook_use:nn {#1} {before}
+ \msg_info:nnn {acro} {loading-module} {#1}
+ \@onefilewithoptions
+ {\c__acro_module_prefix_tl.#1}[][]
+ \c__acro_module_extension_tl
+ \__acro_module_hook_use:nn {#1} {after}
}
+ { \msg_error:nnn {acro} {module-missing} {#1} }
}
}
+\cs_generate_variant:Nn \__acro_module_load:n {V}
-\acro_new_message_commands:Nnnn \acro_serious_message: {n,nn,nnn}
- { \msg_warning: }
- { \msg_error: }
+\prg_new_conditional:Npnn \acro_if_module_loaded:n #1 {p,T,F,TF}
+ {
+ \tl_if_in:NnTF \g__acro_modules_loaded_tl {#1}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
-\acro_new_message_commands:Nnnn \acro_harmless_message: {n,nn,nnn,nnnn}
- { \msg_info: }
- { \msg_warning: }
+\prg_new_conditional:Npnn \acro_module_if_exist:n #1 {p,T,F,TF}
+ {
+ \file_if_exist:nTF
+ {\c__acro_module_prefix_tl.#1.\c__acro_module_extension_tl}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
-\cs_new_protected:Npn \acro_option_deprecated:nn #1#2
+% --------------------------------------------------------------------------
+% module hooks:
+% #1: module
+% #2: code
+\cs_new_protected:Npn \acro_module_after:nn #1#2
{
- \tl_if_blank:nTF {#2}
- { \acro_harmless_message:nnn {deprecated} {option} {#1} }
- { \acro_harmless_message:nnnn {replaced} {option} {#1} {#2} }
+ \acro_if_module_loaded:nTF {#1}
+ {#2}
+ { \__acro_add_to_module_hook:nnn {#1} {after} {#2} }
}
-\cs_new_protected:Npn \acro_option_deprecated:n #1
- { \acro_option_deprecated:nn {#1} {} }
-\cs_new_protected:Npn \acro_command_deprecated:NN #1#2
+% #1: module
+% #2: code
+\cs_new_protected:Npn \acro_module_before:nn #1#2
{
- \tl_if_blank:nTF {#2}
+ % TODO: error in T case?
+ \acro_if_module_loaded:nF {#1}
+ { \__acro_add_to_module_hook:nnn {#1} {before} {#2} }
+ }
+
+% #1: module
+% #2: hook name
+% #3: code
+\cs_new_protected:Npn \__acro_add_to_module_hook:nnn #1#2#3
+ {
+ \acro_if_module_loaded:nF {#1}
{
- \acro_harmless_message:nnn {deprecated} {command}
- { \token_to_str:N #1 }
+ \tl_if_exist:cF {g__acro_module_hook_#1_#2_tl}
+ { \tl_new:c {g__acro_module_hook_#1_#2_tl} }
+ \tl_gput_right:cn {g__acro_module_hook_#1_#2_tl} {#3}
}
+ }
+
+% #1: module
+% #2: hook name
+\cs_new_protected:Npn \__acro_module_hook_use:nn #1#2
+ {
+ \tl_if_exist:cT {g__acro_module_hook_#1_#2_tl}
{
- \acro_harmless_message:nnnn {replaced} {command}
- { \token_to_str:N #1 }
- { \token_to_str:N #2 }
+ \tl_use:c {g__acro_module_hook_#1_#2_tl}
+ \tl_gclear:c {g__acro_module_hook_#1_#2_tl}
}
}
+\cs_generate_variant:Nn \__acro_module_hook_use:nn {V}
% --------------------------------------------------------------------------
-% small commands for use at various places
-\cs_new:Npn \acro_no_break: { \tex_penalty:D 10000 \scan_stop: }
+\tl_new:N \l__acro_module_date_tl
+\tl_new:N \l__acro_module_version_tl
-\cs_new_protected:Npn \__acro_first_upper_case:n #1
- { \text_titlecase_first:n {#1} }
-\cs_generate_variant:Nn \__acro_first_upper_case:n {x}
+\tl_set_eq:NN \l__acro_module_date_tl \c_acro_date_tl
+\tl_set_eq:NN \l__acro_module_version_tl \c_acro_version_tl
-\cs_new_eq:NN \acro_first_upper_case:n \__acro_first_upper_case:n
+\cs_new_protected:Npn \__acro_module:nn #1#2
+ {
+ \tl_gput_right:Nn \g__acro_modules_loaded_tl {{#1}}
+ \str_if_eq:xxF
+ {\c__acro_module_prefix_tl.#1.\c__acro_module_extension_tl}
+ {\@currname.\@currext}
+ {
+ \msg_error:nnnxx {acro} {wrong-module-name}
+ {#1}
+ {\@currname.\@currext}
+ }
+ \ProvidesFile
+ {\c__acro_module_prefix_tl.#1.\c__acro_module_extension_tl}
+ [
+ \l__acro_module_date_tl
+ \c_space_tl
+ v \l__acro_module_version_tl
+ \c_space_tl
+ acro~ style~ file~ `#1'~ (#2)
+ ]
+ }
% --------------------------------------------------------------------------
-\tl_new:N \l_acro_config_file_name_tl
-\tl_new:N \l_acro_config_file_extension_tl
+% define internal acro modules:
+\tl_new:N \g_acro_module_tl
+\tl_new:N \g__acro_module_stop_tl
-\tl_set:Nn \l_acro_config_file_name_tl {acro}
-\tl_set:Nn \l_acro_config_file_extension_tl {cfg}
+\cs_new_protected:Npn \acro_stop_module:n #1
+ { \tl_gput_right:Nn \g__acro_module_stop_tl {{#1}} }
+
+% #1: name
+% #2: description
+\cs_new_protected:Npn \AcroModule #1#2
+ {
+ \msg_log:nnnn {acro} {loading-module} {#1} {#2}
+ \tl_gput_right:Nn \g__acro_modules_loaded_tl {{#1}}
+ \tl_gset:Nn \g_acro_module_tl {#1}
+ \__acro_module_hook_use:nn {#1} {before}
+ \tl_map_inline:Nn \g__acro_module_stop_tl
+ {
+ \str_if_eq:nnT {##1} {#1}
+ { \tl_map_break:n { \__acro_gobble_module:w } }
+ }
+ }
+
+\cs_new_protected:Npn \AcroModuleEnd
+ { \__acro_module_hook_use:Vn \g_acro_module_tl {after} }
+
+\cs_new_protected:Npn \__acro_gobble_module:w #1 \AcroModuleEnd {}
+
+\bool_lazy_or:nnT
+ { \acro_if_final_p: }
+ { !\acro_if_upgrade_p: }
+ { \acro_stop_module:n {upgrade} }
+
+% --------------------------------------------------------------------------
+% style files
+\NewDocumentCommand \AcroStyle {smO{}}
+ {
+ \__acro_module:nn {style.#2} {#3}
+ \IfBooleanT {#1} { \ExplSyntaxOn }
+ }
+
+\cs_new_protected:Npn \acro_style_load:n #1
+ { \clist_map_inline:nn {#1} { \acro_module_load:n {style.##1} } }
-% options:
\keys_define:nn {acro}
+ { load-style .code:n = \acro_style_load:n {#1} }
+
+% --------------------------------------------------------------------------
+\acro_if_debug:TF
+ {
+ \cs_new_protected:Npn \__acro_debug_start:n #1
+ {
+ \iow_term:n {}
+ \iow_term:n {#1}
+ \acro_package_if_loaded:nT {l3benchmark} { \benchmark_tic: }
+ }
+ \cs_new_protected:Npn \__acro_debug_stop:
+ { \acro_package_if_loaded:nT {l3benchmark} { \benchmark_toc: } }
+ }
{
- messages .choice: ,
- messages / silent .code:n =
- \bool_set_true:N \l__acro_silence_bool ,
- messages / loud .code:n =
- \bool_set_false:N \l__acro_silence_bool ,
- messages .value_required:n = true ,
- config-file-name .tl_set:N = \l_acro_config_file_name_tl ,
- config-file-name .initial:n = acro ,
- config-file-extension .tl_set:N = \l_acro_config_file_extension_tl ,
- config-file-extension .initial:n = cfg ,
- accsupp .bool_set:N = \l__acro_acc_supp_bool ,
- accsupp-options .tl_set:N = \l__acro_acc_supp_options_tl ,
- tooltip .bool_set:N = \l__acro_tooltip_bool ,
- tooltip-cmd .code:n = \cs_set:Npn \__acro_tooltip_cmd:nn {#1} ,
- tooltip-cmd .value_required:n = true ,
- macros .bool_set:N = \l__acro_create_macros_bool ,
- xspace .bool_set:N = \l__acro_xspace_bool ,
- % xspace .code:n = \acro_option_deprecated:nn {xspace} {} ,
- strict .bool_set:N = \l__acro_strict_bool ,
- case-sensitive .bool_set:N = \g__acro_case_sensitive_bool ,
- case-sensitive .initial:n = true ,
- sort .bool_set:N = \l__acro_sort_bool ,
- short-format .code:n =
- \tl_set:Nn \l__acro_short_format_tl {#1}
- \tl_set_eq:NN \l__acro_alt_format_tl \l__acro_short_format_tl
- \tl_set:Nn \l__acro_list_short_format_tl {#1} ,
- short-format .value_required:n = true ,
- alt-format .tl_set:N = \l__acro_alt_format_tl ,
- alt-format .value_required:n = true ,
- long-format .code:n =
- \tl_set:Nn \l__acro_long_format_tl {#1}
- \tl_set:Nn \l__acro_first_long_format_tl {#1}
- \tl_set:Nn \l__acro_list_long_format_tl {#1} ,
- long-format .value_required:n = true ,
- first-long-format .code:n =
- \tl_set:Nn \l__acro_first_long_format_tl {#1} ,
- first-long-format .value_required:n = true ,
- single-format .tl_set:N = \l__acro_single_format_tl ,
- single-format .value_required:n = true ,
- format-include-endings .bool_set:N = \l__acro_include_endings_format_bool ,
- display-foreign .bool_set:N = \l__acro_foreign_bool ,
- foreign-format .tl_set:N = \l__acro_foreign_format_tl ,
- foreign-format .value_required:n = true ,
- list-short-format .tl_set:N = \l__acro_list_short_format_tl ,
- list-short-format .value_required:n = true ,
- list-short-width .dim_set:N = \l__acro_short_width_dim ,
- list-short-width .value_required:n = true ,
- list-long-format .tl_set:N = \l__acro_list_long_format_tl ,
- list-long-format .value_required:n = true ,
- list-foreign-format .tl_set:N = \l__acro_foreign_list_format_tl ,
- list-foreign-format .value_required:n = true ,
- override-list-format .bool_set:N = \l__acro_override_list_format_bool ,
- override-list-format .initial:n = true ,
- extra-format .tl_set:N = \l__acro_extra_format_tl ,
- extra-format .value_required:n = true ,
- single .bool_set:N = \l__acro_single_use_bool ,
- single-form .tl_set:N = \l__acro_single_form_tl ,
- single-form .value_required:n = true ,
- first-style .code:n = \acro_set_first_style:n {#1} ,
- first-style .value_required:n = true ,
- extra-style .code:n = \acro_set_extra_style:n {#1} ,
- extra-style .value_required:n = true ,
- label .bool_set:N = \l__acro_place_label_bool ,
- label-prefix .tl_set:N = \l__acro_label_prefix_tl ,
- label-prefix .value_required:n = true ,
- pages .choice: ,
- pages / all .code:n =
- \bool_set_true:N \l__acro_list_all_pages_bool ,
- pages / first .code:n =
- \bool_set_true:N \l__acro_place_label_bool
- \bool_set_false:N \l__acro_list_all_pages_bool ,
- pages .value_required:n = true ,
- page-ref .code:n =
- \acro_option_deprecated:nn {page-ref} {page-style}
- \acro_set_page_style:n {#1} ,
- page-style .code:n = \acro_set_page_style:n {#1} ,
- page-style .value_required:n = true ,
- page-name .tl_set:N = \l__acro_page_name_tl ,
- page-name .value_required:n = true ,
- pages-name .tl_set:N = \l__acro_pages_name_tl ,
- pages-name .value_required:n = true ,
- following-page .bool_set:N = \l__acro_following_page_bool ,
- following-pages .bool_set:N = \l__acro_following_pages_bool ,
- following-pages* .meta:n =
- { following-page = #1 , following-pages = #1 } ,
- following-pages* .default:n = true ,
- next-page .tl_set:N = \l__acro_next_page_tl ,
- next-page .value_required:n = true ,
- next-pages .tl_set:N = \l__acro_next_pages_tl ,
- next-pages .value_required:n = true ,
- list-style .code:n = \acro_set_list_style:n {#1} ,
- list-style .value_required:n = true ,
- list-heading .code:n = \acro_set_list_heading:n {#1} ,
- list-heading .value_required:n = true ,
- list-name .tl_set:N = \l__acro_list_name_tl ,
- list-name .value_required:n = true ,
- hyperref .bool_set:N = \l__acro_hyperref_use_bool ,
- only-used .bool_set:N = \l__acro_print_only_used_bool ,
- mark-as-used .choice: ,
- mark-as-used / first .code:n =
- \bool_gset_true:N \g__acro_mark_first_as_used_bool ,
- mark-as-used / any .code:n =
- \bool_gset_false:N \g__acro_mark_first_as_used_bool ,
- mark-as-used .default:n = any ,
- list-caps .bool_set:N = \l__acro_capitalize_list_bool ,
- cite .choice: ,
- cite / all .code:n =
- \bool_set_true:N \l__acro_citation_all_bool
- \bool_set_true:N \l__acro_citation_first_bool ,
- cite / none .code:n =
- \bool_set_false:N \l__acro_citation_all_bool
- \bool_set_false:N \l__acro_citation_first_bool ,
- cite / first .code:n =
- \bool_set_false:N \l__acro_citation_all_bool
- \bool_set_true:N \l__acro_citation_first_bool ,
- cite .default:n = all ,
- cite-cmd .code:n =
- \cs_set:Npn \__acro_citation_cmd:w {#1} ,
- cite-cmd .value_required:n = true ,
- group-cite-cmd .code:n =
- \cs_set:Npn \__acro_group_citation_cmd:w {#1} ,
- group-cite-cmd .value_required:n = true ,
- group-citation .bool_set:N = \l__acro_group_citation_bool ,
- cite-connect .tl_set:N = \l__acro_citation_connect_tl ,
- cite-connect .initial:n = \nobreakspace ,
- cite-connect .value_required:n = true ,
- group-cite-connect .tl_set:N = \l__acro_between_group_connect_citation_tl ,
- group-cite-connect .initial:n = {,\nobreakspace} ,
- group-cite-connect .value_required:n = true ,
- index .bool_set:N = \l__acro_addto_index_bool ,
- index-cmd .code:n =
- \cs_set:Npn \__acro_index_cmd:n {#1} ,
- index-cmd .value_required:n = true ,
- uc-cmd .code:n =
- \cs_set_eq:NN \__acro_first_upper_case:n #1 ,
- uc-cmd .value_required:n = true ,
- uppercase-short .bool_set:N = \l__acro_upper_short_bool ,
- uppercase-short .initial:n = true
- }
-
-\AtBeginDocument
- {
- \bool_if:NTF \l__acro_xspace_bool
- {
- \@ifpackageloaded {xspace}
- { }
- { \RequirePackage {xspace} }
- \cs_new_eq:NN \acro_xspace: \xspace
- }
- { \cs_new:Npn \acro_xspace: {} }
+ \cs_new_protected:Npn \__acro_debug_start:n #1 {}
+ \cs_new_protected:Npn \__acro_debug_stop: {}
}
+% --------------------------------------------------------------------------
+\AcroModule{base}{basic functionality of the package}
% --------------------------------------------------------------------------
-% we use xtemplate for different object types and with a different number of
-% arguments; let's declare functions for usage later so we don't have to
-% bother
+% variants of kernel functions:
+\cs_generate_variant:Nn \bool_lazy_any:nTF {e}
+\cs_generate_variant:Nn \bool_lazy_all:nTF {e}
+\cs_generate_variant:Nn \seq_gset_split:Nnn {cVx}
+\cs_generate_variant:Nn \seq_use:Nn {cV}
+\cs_generate_variant:Nn \seq_set_split:Nnn {Nnx}
+\cs_generate_variant:Nn \seq_if_in:NnTF {Ne}
+\cs_generate_variant:Nn \seq_if_in:NnF {ceF}
+\cs_generate_variant:Nn \seq_gremove_all:Nn {cV}
+\cs_generate_variant:Nn \seq_put_right:Nn {Ne}
+\cs_generate_variant:Nn \seq_gput_right:Nn {Ne,ce}
+\cs_generate_variant:Nn \seq_set_split:Nnn {Nne}
+\cs_generate_variant:Nn \clist_if_empty:nTF {e}
+\cs_generate_variant:Nn \clist_item:nn {e}
+\cs_generate_variant:Nn \int_set:Nn {Nx}
+\cs_generate_variant:Nn \tl_set:Nn {Ne}
+\cs_generate_variant:Nn \tl_remove_all:Nn {NV}
+\cs_generate_variant:Nn \tl_remove_once:Nn {NV}
+\cs_generate_variant:Nn \tl_if_in:NnF {NV}
+\cs_generate_variant:Nn \tl_put_right:Nn {Ne}
+\cs_generate_variant:Nn \clist_set:Nn {Ne}
+\cs_generate_variant:Nn \str_if_eq:nnT {x}
+\cs_generate_variant:Nn \str_fold_case:n {e}
+\cs_generate_variant:Nn \str_lowercase:n {e}
+\cs_generate_variant:Nn \msg_error:nnnnn {nnnxx}
+\cs_generate_variant:Nn \msg_warning:nn {nV}
+\cs_generate_variant:Nn \msg_error:nnnn {nne}
+\cs_generate_variant:Nn \prg_new_conditional:Npnn {c}
+\cs_generate_variant:Nn \file_get_mdfive_hash:nN {V}
+\cs_generate_variant:Nn \iow_open:Nn {NV}
+\cs_generate_variant:Nn \use_ii:nn {ne}
+\cs_generate_variant:Nn \keys_set:nn {nV}
+
+% --------------------------------------------------------------------------
+\prg_new_conditional:Npnn \acro_class_if_loaded:n #1 {p,T,F,TF}
+ {
+ \cs_if_exist:cTF {ver@#1.cls}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
-% objects with one argument:
-\cs_new_protected:Npn \acro_page_number_instance:nn #1#2
- { \UseInstance {acro-page-number} {#1} {#2} }
-\cs_generate_variant:Nn \acro_page_number_instance:nn {V}
+\prg_new_conditional:Npnn \acro_if_komascript: {p,T,F,TF}
+ {
+ \cs_if_exist:NTF \KOMAClassName
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
-\cs_new_protected:Npn \acro_extra_instance:nn #1#2
- { \UseInstance {acro-extra} {#1} {#2} }
-\cs_generate_variant:Nn \acro_extra_instance:nn {VV}
+% --------------------------------------------------------------------------
+% attributes instead of property lists:
+\msg_new:nnn {acro} {attribute-not-set}
+ { The~ attribute~ `#1'~ is~ not~ set~ \msg_line_context: }
-\cs_new_protected:Npn \acro_title_instance:nn #1#2
- { \UseInstance {acro-title} {#1} {#2} }
-\cs_generate_variant:Nn \acro_title_instance:nn {VV}
+\msg_new:nnn {acro} {attribute-defined}
+ { The~ attribute~ `#1'~ is~ already~ defined~ \msg_line_context: }
-% objects with two arguments:
-\cs_new_protected:Npn \acro_list_instance:nnn #1#2#3
- { \UseInstance {acro-list} {#1} {#2} {#3} }
-\cs_generate_variant:Nn \acro_list_instance:nnn {VVV}
+\msg_new:nnn {acro} {attribute-undefined}
+ { The~ attribute~ `#1'~ is~ not~ yet~ defined~ \msg_line_context: }
-\cs_new_protected:Npn \acro_first_instance:nn #1#2
+\prg_new_conditional:Npnn \acro_attribute_if_exist:n #1 {p,T,F,TF}
{
- \acro_property_if_set:nnTF {#1} {first-style}
+ \cs_if_exist:cTF {____acro_attribute_main_ \tl_to_str:n {#1} :}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+
+% #1: attribute
+\cs_new_protected:Npn \acro_attribute_new:n #1
+ {
+ \acro_attribute_if_exist:nTF {#1}
+ { \msg_error:nnn {acro} {attribute-defined} {#1} }
+ { \cs_gset:cpx {____acro_attribute_main_ \tl_to_str:n {#1} :} {} }
+ }
+
+% #1: attribute
+% #2: item
+% #3: value
+\cs_new_protected:Npn \acro_attribute_set:nnn #1#2#3
+ {
+ \acro_attribute_if_exist:nTF {#1}
{
- \tl_set_eq:NN
- \l__acro_tmpa_tl
- \l__acro_first_style_tl
+ \cs_gset:cpx
+ {____acro_attribute_ \tl_to_str:n {#1::#2} :}
+ { \exp_not:n { \exp_not:n {#3} } }
}
+ { \msg_error:nnn {acro} {attribute-undefined} {#1} }
+ }
+\cs_generate_variant:Nn \acro_attribute_set:nnn {nnx,nne}
+
+% #1: attribute
+% #2: item
+\cs_new_protected:Npn \acro_attribute_unset:nn #1#2
+ { \cs_undefine:c {____acro_attribute_ \tl_to_str:n {#1::#2} :} }
+
+% #1: attribute
+% #2: item
+\cs_new:Npn \acro_attribute_get:nn #1#2
+ {
+ \acro_attribute_if_exist:nTF {#1}
{
- \tl_set_eq:NN
- \l__acro_tmpa_tl
- \l__acro_first_instance_tl
+ \cs_if_exist:cTF {____acro_attribute_ \tl_to_str:n {#1::#2} :}
+ { \use:c {____acro_attribute_ \tl_to_str:n {#1::#2} :} }
+ {
+ \acro_if_debug:T
+ { \msg_expandable_error:nnn {acro} {attribute-not-set} {#1::#2} }
+ }
}
- \acro_if_defined:nT {#1}
+ { \msg_expandable_error:nnn {acro} {attribute-undefined} {#1} }
+ }
+\cs_generate_variant:Nn \acro_attribute_get:nn {ne}
+
+% #1: attribute
+% #2: item
+\prg_new_conditional:Npnn \acro_attribute_if_set:nn #1#2 {p,T,F,TF}
+ {
+ \acro_attribute_if_exist:nTF {#1}
{
- \use:x {
- \UseInstance {acro-first}
- { \exp_not:V \l__acro_tmpa_tl }
- { \exp_not:n {#1} }
- { \exp_not:n {#2} }
- }
+ \cs_if_exist:cTF {____acro_attribute_ \tl_to_str:n {#1::#2} :}
+ { \prg_return_true: }
+ { \prg_return_false: }
}
+ { \prg_return_false: }
}
-\cs_generate_variant:Nn \acro_first_instance:nn {nV}
+\prg_generate_conditional_variant:Nnn \acro_attribute_if_set:nn {ne} {p,T,F,TF}
-% --------------------------------------------------------------------------
-% hyperref support
-\cs_new_eq:NN \acro_hyper_target:nn \use_ii:nn
-\cs_new_eq:NN \acro_hyper_link:nn \use_ii:nn
+% #1: attribute
+% #2: item
+\prg_new_conditional:Npnn \__acro_if_attribute_eq:nnn #1#2#3 {p,T,F,TF}
+ {
+ \tl_if_eq:enTF
+ { \use:c {____acro_attribute_ \tl_to_str:n {#1::#2} :} }
+ {#3}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
-\cs_new_protected:Npn \acro_activate_hyperref_support:
+% #1: attribute
+% #2: item
+\cs_new_protected:Npn \acro_attribute_show:nn #1#2
{
- \bool_lazy_and:nnT
- { \l__acro_hyperref_loaded_bool }
- { \l__acro_hyperref_use_bool }
+ \acro_attribute_if_exist:nTF {#1}
{
- \sys_if_engine_xetex:TF
+ \iow_term:n {}
+ \iow_term:x
{
- \cs_set:Npn \acro_hyper_link:nn ##1##2
- { \hyperlink {##1} { \XeTeXLinkBox {##2} } }
+ \c_space_tl \c_space_tl
+ \tl_to_str:n {#1::#2}
+ \c_space_tl \c_space_tl == \c_space_tl \c_space_tl
+ {\use:c {____acro_attribute_ \tl_to_str:n {#1::#2} :}}
}
- { \cs_set_eq:NN \acro_hyper_link:nn \hyperlink }
- \cs_set:Npn \acro_hyper_target:nn ##1##2
- { \raisebox {3ex} [0pt] { \hypertarget {##1} { } } ##2 }
+ \iow_term:n {}
}
+ { \msg_error:nnn {acro} {attribute-undefined} {#1} }
}
-% #1: id
-% #2: text
-\cs_new_protected:Npn \__acro_make_link:nn #1#2
+% ----------------------------------------------------------------------------
+% option setup:
+\cs_new_protected:Npn \acro_setup:n #1
+ { \keys_set:nn {acro} {#1} }
+
+% ----------------------------------------------------------------------------
+\AcroModuleEnd
+\AcroModule{interface}{definitions of user commands}
+
+% --------------------------------------------------------------------------
+% helper commands
+\NewDocumentCommand \AcroAddRow {+m}
{
- \bool_lazy_and:nnTF
- { \l__acro_hyperref_use_bool }
- { \l__acro_hyperref_loaded_bool }
+ \tl_put_right:Ne \AcronymTable
{
- \acro_hyper_link:nn {#1} { \phantom {#2} }
- \acro_if_is_single:nTF {#1}
- { \hbox_overlap_left:n {#2} }
- { \acro_color_link:n { \hbox_overlap_left:n {#2} } }
- }
- {#2}
+ \exp_not:n { \tl_gset:Nn \AcronymID } { \AcronymID }
+ \exp_not:n {#1}
+ }
}
-\cs_new:Npn \acro_color_link:n #1
+\NewDocumentCommand \AcroRerun {}
+ { \acro_rerun:n {list} }
+
+\NewDocumentCommand \AcroPropertiesMap {+m}
+ { \acro_properties_map:n {#1} }
+
+\NewDocumentCommand \AcroMap {m+m}
+ { \acro_list_map:nn {#1} {#2} }
+
+\NewDocumentCommand \AcroNeedPackage {m}
{
- \cs_if_exist:NTF \hypersetup
- {
- \ifHy@colorlinks
- \exp_after:wN \use_i:nn
- \else
- \ifHy@ocgcolorlinks
- \exp_after:wN \use_i:nn
- \else
- \exp_after:wN \exp_after:wN \exp_after:wN \use_ii:nn
- \fi
- \fi
- { \textcolor { \@linkcolor } {#1} }
- {#1}
- }
- {#1}
+ \acro_package_if_loaded:nF {m}
+ { \msg_error:nnen {acro} {package-needed} { \TemplateName } {#1} }
}
-\AtBeginDocument{
- \cs_if_exist:NF \textcolor { \cs_new_eq:NN \textcolor \use_ii:nn }
-}
+% --------------------------------------------------------------------------
+% general commands:
+\NewDocumentCommand \acsetup {+m}
+ { \acro_setup:n {#1} }
+
+\NewDocumentCommand \acroloadstyle {m}
+ { \acro_style_load:n {#1} }
+
+\NewExpandableDocumentCommand \acroifusedTF {m}
+ { \acro_boolean_property_if:nnTF {#1} {used} }
+
+\NewDocumentCommand \acuse {m}
+ { \acro_use:n {#1} }
+
+\NewDocumentCommand \acuseall {}
+ { \acro_use_all: }
+
+\NewDocumentCommand \acreset {m}
+ { \acro_reset:n {#1} }
+
+\NewDocumentCommand \acresetall {}
+ { \acro_reset_all: }
+
+\NewExpandableDocumentCommand \acsimple {mm}
+ { \acro_pdfstring_template:nn {#1} {#2} }
+
+\NewDocumentCommand \acbarrier {}
+ { \acro_barrier: }
+
+\NewDocumentCommand \acswitchoff {}
+ { \acro_switch_off: }
+
+\NewDocumentCommand \acswitchon {}
+ { \acro_switch_on: }
% --------------------------------------------------------------------------
-% output style of the first time an acronym is used
+\NewDocumentCommand \DeclareAcroProperty {st?t!t|m}
+ { \acro_property_declare:nnnnn {#1} {#2} {#3} {#4} {#5} }
-% helper macros for the styles
-% #1: short|long
-% #2: id
-% #3: long
-\cs_new_protected:Npn \__acro_print_form_and_indefinite:nnn #1#2#3
+\NewDocumentCommand \DeclareAcroPropertyAlias {st?t!t|mm}
{
- \group_begin:
- \acro_for_all_trailing_tokens_do:n
- { \acro_deactivate_trailing_action:n {##1} }
- \str_case:nn {#1}
- {
- {long} {
- \bool_lazy_or:nnT
- { \l__acro_first_only_long_bool }
- { !\l__acro_first_only_short_bool }
- {
- \acro_write_indefinite:nn {#2} {long}
- \acro_write_expanded:nnn {#2} {first-long} {#3}
- }
- }
- {short} {
- \bool_lazy_or:nnT
- { !\l__acro_first_only_long_bool }
- { \l__acro_first_only_short_bool }
- {
- \acro_soft_upper:
- \acro_write_indefinite:nn {#2} {short}
- \acro_write_compact:nn {#2} {short}
- }
- }
- }
- \group_end:
+ \acro_property_declare:nnnnn {#1} {#2} {#3} {#4} {#5}
+ \acro_property_make_alias:nn {#5} {#6}
}
-\cs_new_protected:Npn \__acro_open_bracket:
+\NewDocumentCommand \MakeAcroPropertyAlias {mm}
+ { \acro_property_make_alias:nn {#1} {#2} }
+
+\NewDocumentCommand \UseAcroTemplate {O{acronym}mO{1}}
+ { \acro_template_use:nnn {#3} {#1} {#2} }
+
+\NewDocumentCommand \NewAcroTemplate {O{acronym}m+m}
+ { \use:c {acro_#1_template_new:nn} {#2} {#3} }
+
+\NewDocumentCommand \RenewAcroTemplate {O{acronym}m+m}
+ { \use:c {acro_#1_template_renew:nn} {#2} {#3} }
+
+\NewDocumentCommand \DeclareAcronym {m+m}
+ { \acro_declare_acronym:nn {#1} {#2} }
+
+\NewDocumentCommand \DeclareAcroEnding {mmm}
+ { \acro_declare_ending:nnn {#1} {#2} {#3} }
+
+\NewDocumentCommand \DeclareAcroArticle {mm}
+ { \acro_article_declare:nn {#1} {#2} }
+
+\NewDocumentCommand \DeclareAcroTranslation {m+m}
+ { \acro_declare_translations:nn {#1} {#2} }
+
+\NewDocumentCommand \AddAcroTranslations {m+m}
+ { \acro_add_translations:nn {#1} {#2} }
+
+\NewExpandableDocumentCommand \acrotranslate {m}
+ { \acro_translate:n {#1} }
+
+\NewExpandableDocumentCommand \aciftrailing {}
+ { \acro_trailing_if_tokens:nTF }
+
+\NewDocumentCommand \acfootnote {m}
+ { \acro_footnote:n {#1} }
+
+\NewDocumentCommand \acgobbletrail {}
+ { \bool_gset_true:N \g__acro_gobble_trail_bool }
+
+\NewExpandableDocumentCommand \acdot {} { \acro_dot: }
+\NewExpandableDocumentCommand \acspace {} { \acro_space: }
+\NewExpandableDocumentCommand \abbrdot {} { .\@ }
+
+\NewDocumentCommand \acroupper {} { \acro_upper: }
+\NewDocumentCommand \acrofull {} { \acro_first: }
+
+\NewDocumentCommand \printacronyms {o}
{
- \bool_lazy_and:nnT
- { !\l__acro_first_only_long_bool }
- { !\l__acro_first_only_short_bool }
- {
- \acro_space:
- \tl_if_blank:VF \l__acro_first_between_tl
- {
- \tl_use:N \l__acro_first_between_tl
- \acro_space:
- }
- \bool_if:NT \l__acro_first_use_brackets_bool
- { \tl_head:N \l__acro_first_brackets_tl }
- }
+ \group_begin:
+ \IfNoValueF {#1}
+ { \keys_set:nn {acro/list} {#1} }
+ \acro_list:
+ \group_end:
}
-\cs_new_protected:Npn \__acro_close_bracket:
+% --------------------------------------------------------------------------
+% commands for list templates
+\NewDocumentCommand \acroheading {} { \acro_heading: }
+\NewDocumentCommand \acropreamble {} { \acro_preamble: }
+
+\NewExpandableDocumentCommand \acrolistname {}
+ { \tl_use:N \l__acro_list_name_tl }
+
+% --------------------------------------------------------------------------
+% cmmands for use in templates:
+\NewDocumentCommand \acronymsmapTF {+m+m+m}
{
- \bool_lazy_all:nT
+ \acro_acronyms_map:nTF
{
- { \l__acro_first_use_brackets_bool }
- { !\l__acro_first_only_short_bool }
- { !\l__acro_first_only_long_bool }
+ \tl_set:Nn \AcronymID {##1}
+ #1
}
- { \tl_tail:N \l__acro_first_brackets_tl }
+ {#2}
+ {#3}
}
-
-% #1: short|long
-% #2: id
-% #3: long
-\cs_new_protected:Npn \__acro_print_form:nnn #1#2#3
+
+\NewDocumentCommand \acronymsmapT {+m+m}
+ { \acronymsmapTF {#1} {#2} {} }
+
+\NewDocumentCommand \acronymsmapF {+m+m}
+ { \acronymsmapTF {#1} {} {#2} }
+
+\NewDocumentCommand \acronymsmap {+m}
+ { \acronymsmapTF {#1} {} {} }
+
+\NewExpandableDocumentCommand \acrofield {mm}
+ { \acro_property_get:nn {#1} {#2} }
+
+\NewDocumentCommand \acroprintfield {mm}
{
- \str_case:nn {#1}
+ \acro_property_if_eq:nnTF {#2} {list}
{
- {long} {
- \bool_lazy_or:nnT
- { \l__acro_first_only_long_bool }
- { !\l__acro_first_only_short_bool }
- {
- \group_begin:
- \bool_set_false:N \l__acro_first_upper_bool
- \acro_write_expanded:nnn {#2} {first-long} {#3}
- \group_end:
- }
- }
- {short} {
- \bool_lazy_or:nnT
- { !\l__acro_first_only_long_bool }
- { \l__acro_first_only_short_bool }
- {
- \group_begin:
- \acro_soft_upper:
- \acro_write_compact:nn {#2} {short}
- \group_end:
- }
- }
+ \bool_if:NT \l__acro_upper_list_bool { \acro_upper: }
+ \acro_write:en {#1} {#2}
}
+ { \acro_write:en {#1} {#2} }
}
-% #1: id
-\cs_new_protected:Npn \__acro_foreign_sep:n #1
+\NewExpandableDocumentCommand \acrofieldifTF {+m+m+m+m}
+ { \acro_property_if_set:nnTF {#1} {#2} {#3} {#4} }
+
+\NewDocumentCommand \acroifanyfieldTF {mm+m+m}
+ { \acro_property_if_any:nnTF {#1} {#2} {#3} {#4} }
+
+\NewDocumentCommand \acroifallfieldsTF {mm+m+m}
+ { \acro_property_if_all:nnTF {#1} {#2} {#3} {#4} }
+
+\NewExpandableDocumentCommand \acroifpagefieldTF {m}
+ { \acro_if_pages:nTF {#1} }
+
+\NewDocumentCommand \acrowrite {m}
+ { \acroprintfield { \AcronymID } {#1} }
+
+\NewDocumentCommand \acroshow {m}
+ { \acro_property_show:en { \AcronymID } {#1} }
+
+\NewDocumentCommand \acrodonotuse {}
+ { \acro_use_false: }
+
+\NewDocumentCommand \acroformat {mm}
+ { \acro_format:enn { \AcronymID } {#1} {#2} }
+
+\NewDocumentCommand \acrogroupcite {}
{
- \bool_lazy_all:nT
+ \bool_if:NT \l__acro_cite_group_bool
{
- { \l__acro_foreign_bool }
- { !\l__acro_first_only_short_bool }
- { !\l__acro_first_only_long_bool }
+ \tl_set_eq:NN \l__acro_cite_pre_tl \l__acro_cite_between_tl
+ \cs_set_eq:NN \__acro_cite_cmd:w \__acro_cite_group_cmd:w
+ \acro_cite_if:neT { \l__acro_star_bool } { \AcronymID }
+ { \acro_cite:e { \AcronymID } }
}
- { \acro_if_foreign:nT {#1} { \tl_use:N \l__acro_foreign_sep_tl } }
}
-
-% #1: id
-\cs_new_protected:Npn \__acro_print_foreign:n #1
+
+\NewDocumentCommand \acrocite {}
+ { \bool_set_true:N \l__acro_cite_always_bool }
+
+\NewDocumentCommand \acroifTF {m+m+m}
+ { \acro_property_if_set:enTF { \AcronymID } {#1} {#2} {#3} }
+\NewDocumentCommand \acroifT {m+m}
+ { \acro_property_if_set:enTF { \AcronymID } {#1} {#2} {} }
+\NewDocumentCommand \acroifF {m+m}
+ { \acro_property_if_set:enTF { \AcronymID } {#1} {} {#2} }
+
+\NewDocumentCommand \acroifanyTF {m+m+m}
+ { \acro_property_if_any:enTF { \AcronymID } {#1} {#2} {#3} }
+\NewDocumentCommand \acroifanyT {m+m}
+ { \acro_property_if_any:enTF { \AcronymID } {#1} {#2} {} }
+\NewDocumentCommand \acroifanyF {m+m}
+ { \acro_property_if_any:enTF { \AcronymID } {#1} {} {#2} }
+
+\NewDocumentCommand \acroifallTF {m+m+m}
+ { \acro_property_if_all:enTF { \AcronymID } {#1} {#2} {#3} }
+\NewDocumentCommand \acroifallT {m+m}
+ { \acro_property_if_all:enTF { \AcronymID } {#1} {#2} {} }
+\NewDocumentCommand \acroifallF {m+m}
+ { \acro_property_if_all:enTF { \AcronymID } {#1} {} {#2} }
+
+\NewDocumentCommand \acroifsingleTF {+m+m}
+ { \acro_if_single:eTF { \AcronymID } {#1} {#2} }
+\NewDocumentCommand \acroifsingleT {+m}
+ { \acro_if_single:eTF { \AcronymID } {#1} {} }
+\NewDocumentCommand \acroifsingleF {+m}
+ { \acro_if_single:eTF { \AcronymID } {} {#1} }
+
+\NewDocumentCommand \acroiffirstTF {+m+m}
+ { \acro_if_first:eTF { \AcronymID } {#1} {#2} }
+\NewDocumentCommand \acroiffirstT {+m}
+ { \acro_if_first:eTF { \AcronymID } {#1} {} }
+\NewDocumentCommand \acroiffirstF {+m}
+ { \acro_if_first:eTF { \AcronymID } {} {#1} }
+
+\NewDocumentCommand \acroiftagTF {m+m+m}
+ { \acro_if_tag:enTF { \AcronymID } {#1} {#2} {#3} }
+\NewDocumentCommand \acroiftagT {m+m}
+ { \acro_if_tag:enT { \AcronymID } {#1} {#2} }
+\NewDocumentCommand \acroiftagF {m+m}
+ { \acro_if_tag:enF { \AcronymID } {#1} {#2} }
+
+\NewDocumentCommand \acropages {mm}
+ { \acro_print_pages:enn { \AcronymID } {#1} {#2} }
+
+\NewDocumentCommand \acronopagerange {}
+ { \acro_no_page_ranges:e { \TemplateName } }
+
+\NewDocumentCommand \acropagefill {}
+ { \acro_if_pages:eT { \AcronymID } { \tl_use:N \l__acro_pages_fill_tl } }
+
+\NewExpandableDocumentCommand \acroifpagesTF {}
+ { \acro_if_pages:eTF { \AcronymID } }
+
+\NewExpandableDocumentCommand \acroifpagesT {}
+ { \acro_if_pages:eT { \AcronymID } }
+
+\NewExpandableDocumentCommand \acroifpagesF {}
+ { \acro_if_pages:eF { \AcronymID } }
+
+\NewExpandableDocumentCommand \acroifchapterTF {}
+ { \cs_if_exist:NTF \chapter }
+
+\NewExpandableDocumentCommand \acroifchapterT {}
+ { \cs_if_exist:NT \chapter }
+
+\NewExpandableDocumentCommand \acroifchapterF {}
+ { \cs_if_exist:NF \chapter }
+
+% --------------------------------------------------------------------------
+\AcroModuleEnd
+\AcroModule{aux}{usage of auxiliary files}
+
+\cs_new_protected:Npn \ACRO #1 { \use:c {__acro_aux_#1:} }
+
+\cs_new_protected:Npn \__acro_auxlist_field_new:cpn #1
+ { \cs_new_protected:cpn {__acro_aux_#1:} }
+
+\cs_new_protected:Npn \acro_auxlist_to_aux:nn #1#2
+ { \acro_write_to_aux:x { \token_to_str:N \ACRO {#1} #2 } }
+
+\tl_const:Nx \c_acro_auxfile_tl { \c_sys_jobname_str .acr }
+
+\iow_new:N \l__acro_aux_file_iow
+\tl_new:N \g__acro_mdfive_hash_tl
+
+\acro_at_begin_document:n
{
- \acro_if_foreign:nT {#1}
+ \legacy_if:nT {@filesw}
{
- \bool_lazy_all:nT
- {
- { \l__acro_foreign_bool }
- { !\l__acro_first_only_short_bool }
- { !\l__acro_first_only_long_bool }
- }
- {
- \acro_write_foreign:n {#1}
- \acro_endings:nn {#1} {foreign}
- }
+ \iow_now:Nx \@auxout
+ { \token_to_str:N \providecommand \token_to_str:N \ACRO [1] {} }
}
+ \file_get_mdfive_hash:VN
+ \c_acro_auxfile_tl
+ \g__acro_mdfive_hash_tl
+ \iow_open:NV \l__acro_aux_file_iow \c_acro_auxfile_tl
}
-\cs_new_protected:Npn \__acro_print_citation:n #1
+\cs_new_protected:Npn \acro_close_aux:
{
- \bool_if:NT \l__acro_group_citation_bool
- { \acro_group_cite:n {#1} }
+ \iow_close:N \l__acro_aux_file_iow
+ \file_get_mdfive_hash:VN
+ \c_acro_auxfile_tl
+ \l__acro_tmpa_tl
+ \tl_if_eq:NNF \g__acro_mdfive_hash_tl \l__acro_tmpa_tl
+ { \acro_rerun:n {general} }
+ \legacy_if:nT {@filesw}
+ { \iow_now:Nx \@auxout { \token_to_str:N \ACRO {readaux} } }
}
-\cs_new_protected:Npn \__acro_finalize_first:n #1
+\cs_new_protected:Npn \acro_write_to_aux:n #1
{
- \bool_if:NF \l__acro_group_citation_bool
- { \acro_cite_if:Nn \l__acro_citation_first_bool {#1} }
- \acro_index_if:Nn \l__acro_addto_index_bool {#1}
- \acro_property_get:nnT {#1} {post}
- { \tl_use:N \l__acro_post_tl }
+ \legacy_if:nT {@filesw}
+ { \iow_now:Nn \l__acro_aux_file_iow {#1} }
}
+\cs_generate_variant:Nn \acro_write_to_aux:n {x}
-% --------------------------------------------------------------------------
-% the `acro-first' object, templates, instances:
-% #1: id
-% #2: long
-\DeclareObjectType {acro-first} {2}
-
-% template for inline appearance:
-\DeclareTemplateInterface {acro-first} {inline} {2}
- {
- brackets : boolean = true ,
- brackets-type : tokenlist = () ,
- only-short : boolean = false ,
- only-long : boolean = false ,
- reversed : boolean = false ,
- between : tokenlist ,
- foreign-sep : tokenlist = {,~}
- }
-\DeclareTemplateCode {acro-first} {inline} {2}
- {
- brackets = \l__acro_first_use_brackets_bool ,
- brackets-type = \l__acro_first_brackets_tl ,
- only-short = \l__acro_first_only_short_bool ,
- only-long = \l__acro_first_only_long_bool ,
- reversed = \l__acro_first_reversed_bool ,
- between = \l__acro_first_between_tl ,
- foreign-sep = \l__acro_foreign_sep_tl
- }
- {
- \AssignTemplateKeys
- \bool_set_true:N \l__acro_first_instance_bool
- \bool_if:NTF \l__acro_first_reversed_bool
- { % zuerst kurze Form, dann lange Form:
- \__acro_print_form_and_indefinite:nnn {short} {#1} {#2}
- \__acro_open_bracket:
- \__acro_print_foreign:n {#1}
- \__acro_foreign_sep:n {#1}
- \__acro_print_form:nnn {long} {#1} {#2}
- \__acro_print_citation:n {#1}
- \__acro_close_bracket:
- \__acro_finalize_first:n {#1}
- }
- { % zuerst lange Form, dann kurze Form:
- \__acro_print_form_and_indefinite:nnn {long} {#1} {#2}
- \__acro_open_bracket:
- \__acro_print_foreign:n {#1}
- \__acro_foreign_sep:n {#1}
- \__acro_print_form:nnn {short} {#1} {#2}
- \__acro_print_citation:n {#1}
- \__acro_close_bracket:
- \__acro_finalize_first:n {#1}
- }
- }
-
-% template for footnotes, sidenotes, ...
-\cs_new:Npn \__acro_note_command:n #1 {#1}
-\DeclareTemplateInterface {acro-first} {note} {2}
+\__acro_auxlist_field_new:cpn {readaux}
{
- use-note : boolean = true ,
- note-command : function 1 = \footnote {#1} ,
- foreign-sep : tokenlist = {,~} ,
- reversed : boolean = false ,
+ \file_if_exist:nT { \c_sys_jobname_str .acr }
+ { \file_input:n { \c_sys_jobname_str .acr } }
}
-\DeclareTemplateCode {acro-first} {note} {2}
+% ----------------------------------------------------------------------------
+% list for recording values that need to be written to the aux file and
+% updated at begin document
+
+\str_new:N \l__acro_auxlist_split_str
+\keys_define:nn {acro}
{
- use-note = \l__acro_use_note_bool ,
- note-command = \__acro_note_command:n ,
- foreign-sep = \l__acro_foreign_sep_tl ,
- reversed = \l__acro_first_reversed_bool
+ auxlist-split .code:n = \str_set:Nn \l__acro_auxlist_split_str {#1} ,
+ auxlist-split .initial:n = ||
}
- {
- \AssignTemplateKeys
- \bool_if:NTF \l__acro_first_reversed_bool
- { % long in text and short in note
- \__acro_print_form_and_indefinite:nnn {long} {#1} {#2}
- \bool_if:NT \l__acro_use_note_bool
+
+% define list:
+% #1: name
+\cs_new_protected:Npn \__acro_auxlist_new:n #1
+ {
+ % entries collected during the run:
+ \seq_new:c {g__acro_auxlist_#1_seq}
+ % entries read from the auxfile:
+ \seq_new:c {g__acro_auxlist_recorded_#1_seq}
+ \acro_attribute_new:n {#1}
+ \__acro_auxlist_field_new:cpn {#1} ##1
+ {
+ \tl_if_blank:nF {##1}
{
- \__acro_note_command:n
- {
- \__acro_print_foreign:n {#1}
- \__acro_foreign_sep:n {#1}
- \__acro_print_form:nnn {short} {#1} {#2}
- \__acro_print_citation:n {#1}
- \__acro_finalize_first:n {#1}
- }
+ \seq_gset_split:cVx {g__acro_auxlist_#1_seq}
+ \l__acro_auxlist_split_str
+ { \tl_to_str:n {##1} }
+ \seq_map_inline:cn {g__acro_auxlist_#1_seq}
+ { \acro_attribute_set:nnn {#1} {####1} {} }
}
}
- { % short in text and long in note
- \__acro_print_form_and_indefinite:nnn {short} {#1} {#2}
- \bool_if:NT \l__acro_use_note_bool
+ \acro_at_begin_document:n
+ {
+ \seq_gclear:c {g__acro_auxlist_recorded_#1_seq}
+ \seq_set_eq:Nc \l__acro_tmpa_seq {g__acro_auxlist_#1_seq}
+ \seq_map_inline:Nn \l__acro_tmpa_seq
{
- \__acro_note_command:n
- {
- \__acro_print_foreign:n {#1}
- \__acro_foreign_sep:n {#1}
- \__acro_print_form:nnn {long} {#1} {#2}
- \__acro_print_citation:n {#1}
- \__acro_finalize_first:n {#1}
- }
+ \str_set:Nn \l__acro_tmpa_str {##1}
+ \seq_gput_right:cV {g__acro_auxlist_recorded_#1_seq} \l__acro_tmpa_str
}
+ \seq_gremove_duplicates:c {g__acro_auxlist_recorded_#1_seq}
}
}
-% --------------------------------------------------------------------------
-% declare new first styles:
-\cs_new_protected:Npn \acro_declare_first_style:nnn #1#2#3
+% add to or remove from list:
+% #1: name
+% #2: entry
+\cs_new_protected:Npn \__acro_auxlist_add:nn #1#2
{
- \DeclareInstance {acro-first} {#1} {#2} {#3}
- \prop_put:Nnn \l__acro_first_styles_prop {#1} {#2}
+ \str_set:Nn \l__acro_tmpa_str {#2}
+ \acro_attribute_set:nnn {#1} {#2} {}
+ \seq_if_in:cVT {g__acro_auxlist_#1_seq} \l__acro_tmpa_str
+ { \seq_gremove_all:cV {g__acro_auxlist_#1_seq} \l__acro_tmpa_str }
+ \seq_gput_right:cV {g__acro_auxlist_#1_seq} \l__acro_tmpa_str
}
+\cs_generate_variant:Nn \__acro_auxlist_add:nn {nx}
-% set a list style
-\cs_new_protected:Npn \acro_set_first_style:n #1
+% #1: name
+% #2: entry
+\cs_new_protected:Npn \__acro_auxlist_remove:nn #1#2
{
- \prop_if_in:NnTF \l__acro_first_styles_prop {#1}
- { \__acro_set_first_style:n {#1} }
- {
- \msg_warning:nnnnn {acro} {unknown}
- {first~ style}
- {#1}
- {default}
- \__acro_set_first_style:n {default}
- }
+ \str_set:Nn \l__acro_tmpa_str {#2}
+ \acro_attribute_if_set:nnT {#1} {#2}
+ { \acro_attribute_unset:nn {#1} {#2} }
+ \seq_if_in:cVT {g__acro_auxlist_#1_seq} \l__acro_tmpa_str
+ { \seq_gremove_all:cV {g__acro_auxlist_#1_seq} \l__acro_tmpa_str }
+ \seq_if_in:cVT {g__acro_auxlist_recorded#1_seq} \l__acro_tmpa_str
+ { \seq_gremove_all:cV {g__acro_auxlist_recorded_#1_seq} \l__acro_tmpa_str }
}
+\cs_generate_variant:Nn \__acro_auxlist_remove:nn {nx}
-\cs_new_protected:Npn \__acro_set_first_style:n #1
+% check if in list:
+% #1: name
+% #2: entry
+\prg_new_conditional:Npnn \__acro_auxlist_if_in:nn #1#2 {p,T,F,TF}
{
- \tl_set:Nn \l__acro_first_instance_tl {#1}
- \prop_get:NnN \l__acro_first_styles_prop {#1} \l__acro_tmpa_tl
+ \acro_attribute_if_set:nnTF {#1} {#2}
+ { \prg_return_true: }
+ { \prg_return_false: }
}
+\prg_generate_conditional_variant:Nnn \__acro_auxlist_if_in:nn {nx} {T,TF}
-% --------------------------------------------------------------------------
-% formatting the extras information:
-\DeclareObjectType {acro-extra} {1}
+\bool_new:N \l__acro_auxlists_clear_bool
+\cs_new_protected:Npn \acro_auxlists_clear:
+ { \bool_set_true:N \l__acro_auxlists_clear_bool }
-\DeclareTemplateInterface {acro-extra} {inline} {1}
- {
- punct : boolean = false ,
- punct-symbol : tokenlist = {,} ,
- brackets : boolean = true ,
- brackets-type : tokenlist = ()
+% update list (should be used inside \acro_at_end_document:n):
+% #1: name
+\cs_new_protected:Npn \__acro_auxlist_update:n #1
+ {
+ \seq_remove_duplicates:c {g__acro_auxlist_#1_seq}
+ \seq_remove_duplicates:c {g__acro_auxlist_recorded_#1_seq}
+ \str_set:Nx \l__acro_tmpa_str
+ { \seq_use:cn {g__acro_auxlist_#1_seq} {} }
+ \str_set:Nx \l__acro_tmpb_str
+ { \seq_use:cn {g__acro_auxlist_recorded_#1_seq} {} }
+ \str_if_eq:NNF \l__acro_tmpa_str \l__acro_tmpb_str
+ { \acro_rerun:n {property} }
+ \bool_if:NF \l__acro_auxlists_clear_bool
+ {
+ \acro_auxlist_to_aux:nn {#1}
+ { { \seq_use:cV {g__acro_auxlist_#1_seq} \l__acro_auxlist_split_str } }
+ }
}
-\DeclareTemplateCode {acro-extra} {inline} {1}
- {
- punct = \l__acro_extra_punct_bool ,
- punct-symbol = \l__acro_extra_punct_tl ,
- brackets = \l__acro_extra_use_brackets_bool ,
- brackets-type = \l__acro_extra_brackets_tl
- }
- {
- \AssignTemplateKeys
- \bool_if:NT \l__acro_extra_punct_bool
- { \tl_use:N \l__acro_extra_punct_tl \tl_use:N \c_space_tl }
- \bool_if:NT \l__acro_extra_use_brackets_bool
- { \tl_head:N \l__acro_extra_brackets_tl }
- \acro_write_long:Vn \l__acro_extra_format_tl {#1}
- \bool_if:NT \l__acro_extra_use_brackets_bool
- { \tl_tail:N \l__acro_extra_brackets_tl }
- }
+% loop over list:
+% #1: name
+% #2: code
+\cs_new_protected:Npn \__acro_auxlist_foreach_entry:nn #1#2
+ { \seq_map_inline:cn {g__acro_auxlist_recorded_#1_seq} {#2} }
+
+\cs_new_protected:Npn \__acro_auxlist_foreach_new_entry:nn #1#2
+ { \seq_map_inline:cn {g__acro_auxlist_#1_seq} {#2} }
+
+% length of a list:
+% #1: name
+\cs_new:Npn \__acro_auxlist_count:n #1
+ { \seq_count:c {g__acro_auxlist_recorded_#1_seq} }
+
+% item of a list:
+% #1: name
+% #2: integer
+\cs_new:Npn \__acro_auxlist_item:nn #1#2
+ { \seq_item:cn {g__acro_auxlist_recorded_#1_seq} {#2} }
-% declare new extra styles:
-\cs_new_protected:Npn \acro_declare_etxra_style:nnn #1#2#3
+% ----------------------------------------------------------------------------
+\AcroModuleEnd
+\AcroModule{properties}{properties of acronyms}
+
+% ----------------------------------------------------------------------------
+% messages:
+\msg_new:nnn {acro} {unknown-property}
{
- \DeclareInstance {acro-etxra} {#1} {#2} {#3}
- \prop_put:Nnn \l__acro_etxra_styles_prop {#1} {#2}
+ You~ tried~ to~ set~ the~ property~ `#1'~ \msg_line_context: . \\
+ This~ property~ does~ not~ exist.~ Check~ for~ a~ typo~ or~ \\
+ define~ the~ property~ yourself.
}
-% set an extra style
-\cs_new_protected:Npn \acro_set_extra_style:n #1
+\msg_new:nnn {acro} {property-unique}
{
- \prop_if_in:NnTF \l__acro_extra_styles_prop {#1}
- { \__acro_set_extra_style:n {#1} }
- {
- \msg_warning:nnnnn {acro} {unknown}
- {extra~ style}
- {#1}
- {default}
- \__acro_set_extra_style:n {default}
- }
+ You~ tried~ to~ set~ the~ property~ `#1'~ \msg_line_context: . \\
+ This~ property~ has~ to~ have~ a~ unique~ value~ and~ thus~ \\
+ cannot~ be~ set~ to~ `#2'~ since~ this~ value~ is~ already~ talen.
}
-\cs_new_protected:Npn \__acro_set_extra_style:n #1
+\msg_new:nnn {acro} {no-boolean-property}
{
- \tl_set:Nn \l__acro_extra_instance_tl {#1}
- \prop_get:NnN \l__acro_extra_styles_prop {#1} \l__acro_tmpa_tl
+ You~ tried~ to~ check~ the~ boolean~ value~ of~ property~ `#1'~
+ \msg_line_context: . \\
+ However,~ property~ `#1'~ is~ not~ a~ boolean~ property!
}
-\cs_new_protected:Npn \acro_declare_extra_style:nnn #1#2#3
+\msg_new:nnn {acro} {unbalanced-property-list}
{
- \DeclareInstance {acro-extra} {#1} {#2} {#3}
- \prop_put:Nnn \l__acro_extra_styles_prop {#1} {#2}
+ There~ is~ a~ mis-match~ in~ the~ property~ list: \\
+ `#1' \\
+ \msg_line_context:
}
-% --------------------------------------------------------------------------
-% outputting the page numbers:
-\RequirePackage {zref-abspage}
-
-\cs_new_protected:Npn \__acro_create_page_records:n #1
+\msg_new:nnn {acro} {value-required}
{
- \seq_new:c { g__acro_#1_pages_seq }
- \tl_new:c { g__acro_#1_recorded_pages_tl }
+ The~ property~ `#2'~ for~ acroynm~ `#1'~ \msg_line_context: \
+ needs~ a~ (possibly~ empty)~ value!
}
+
-\cs_new_protected:Npn \acro_hyper_page:n #1 { \use:n {#1} }
-
-\cs_new:Npn \acro_get_thepage:nnn #1#2#3 { \acro_hyper_page:n {#1} }
-\cs_new:Npn \acro_get_thepage_from:N #1
- { \exp_after:wN \acro_get_thepage:nnn #1 }
+% ----------------------------------------------------------------------------
+% declare properties:
+\seq_new:N \l__acro_properties_seq
-\cs_new:Npn \acro_get_page_number:nnn #1#2#3 {#2}
-\cs_new:Npn \acro_get_page_number_from:N #1
- { \exp_after:wN \acro_get_page_number:nnn #1 }
+\cs_new_protected:Npn \acro_properties_map:n #1
+ { \seq_map_inline:Nn \l__acro_properties_seq {#1} }
-\cs_new:Npn \acro_get_abspage:nnn #1#2#3 {#3}
-\cs_new:Npn \acro_get_abspage_from:N #1
- { \exp_after:wN \acro_get_abspage:nnn #1 }
+\acro_attribute_new:n {boolean}
+\acro_attribute_new:n {unique}
+\acro_attribute_new:n {mandatory}
+\acro_attribute_new:n {dynamic}
-\cs_new:Npn \acro_page_range_comma: {}
+% \seq_new:N \l__acro_mandatory_properties_seq
+\tl_new:N \l__acro_mandatory_properties_tl
-\cs_new_protected:Npn \acro_print_page_numbers:n #1
+% new property:
+% #1: boolean (true = unique)
+% #2: boolean (true = boolean)
+% #3: boolean (true = mandatory)
+% #4: boolean (true = static != dynamic)
+% #5: property name
+\cs_new_protected:Npn \acro_property_declare:nnnnn #1#2#3#4#5
{
- \seq_if_empty:cF {g__acro_#1_pages_seq}
+ \acro_property_if_exist:nF {#5}
{
- \bool_if:NTF \l__acro_list_all_pages_bool
+ \seq_put_right:Ne \l__acro_properties_seq { \tl_to_str:n {#5} }
+ \acro_attribute_new:n {property::#5}
+ \bool_if:nF {#4}
+ { \acro_attribute_set:nnn {dynamic} {#5} {true} }
+ \__acro_auxlist_new:n {#5}
+ \bool_if:nT {#3}
{
- % have the numbers changed?
- \tl_set:Nx \l__acro_tmpa_tl
- { \seq_use:cn {g__acro_#1_pages_seq} {|} }
- \tl_if_eq:cNF {g__acro_#1_recorded_pages_tl} \l__acro_tmpa_tl
- {
- \@latex@warning@no@line
- {Rerun~to~get~page~numbers~of~acronym~#1~in~acronym~list~right}
- }
- \tl_clear:N \l__acro_write_pages_tl
- \tl_clear:N \l__acro_last_page_tl
- \tl_clear:N \l__acro_current_page_tl
- \seq_set_eq:Nc \l__acro_tmpb_seq { g__acro_#1_pages_seq }
- \seq_remove_duplicates:N \l__acro_tmpb_seq
- \seq_clear:N \l__acro_tmpa_seq
- \cs_set_protected:Npn \acro_page_range_comma:
- { \cs_set:Npn \acro_page_range_comma: { ,~ } }
- % get the numbers:
- \int_compare:nNnTF { \seq_count:N \l__acro_tmpb_seq } = { 1 }
- {
- \tl_use:N \l__acro_page_name_tl
- \seq_get_right:cN { g__acro_#1_pages_seq } \l__acro_tmpa_tl
- \acro_get_thepage_from:N \l__acro_tmpa_tl
- }
- {
- \tl_use:N \l__acro_pages_name_tl
- \seq_map_inline:cn { g__acro_#1_pages_seq }
- {
- \tl_if_blank:VTF \l__acro_last_page_tl
- {% we're at the beginning
- \seq_put_right:Nn \l__acro_tmpa_seq {##1}
- \tl_set:Nn \l__acro_last_page_tl {##1}
- }
- {% we'at least at the second page
- % current page:
- \tl_set:Nn \l__acro_current_page_tl {##1}
- % last page:
- \seq_get_right:NN \l__acro_tmpa_seq \l__acro_last_page_tl
- \tl_if_eq:NNTF \l__acro_current_page_tl \l__acro_last_page_tl
- {% there were more than one appearance on the current page
- \seq_put_right:Nn \l__acro_tmpa_seq {##1}
- }
- {% new page
- \acro_determine_page_ranges:NNn
- \l__acro_tmpa_seq
- \l__acro_write_pages_tl
- {##1}
- }
- }
- }
- \seq_if_empty:NF \l__acro_tmpa_seq
- {
- \acro_determine_page_ranges:NNV
- \l__acro_tmpa_seq
- \l__acro_write_pages_tl
- \l__acro_current_page_tl
- }
- \tl_use:N \l__acro_write_pages_tl
- \tl_clear:N \l__acro_write_pages_tl
- }
+ \acro_attribute_set:nnn {mandatory} {#5} {true}
+ % \seq_put_right:Nn \l__acro_mandatory_properties_seq {#5}
+ \tl_put_right:Nn \l__acro_mandatory_properties_tl {{#5}}
}
+ \bool_if:nT {#2}
+ { \acro_attribute_set:nnn {boolean} {#5} {true} }
+ \bool_if:nT {#1}
{
- \tl_use:N \l__acro_page_name_tl
- \pageref{\l__acro_label_prefix_tl #1}
- }
- }
- \seq_clear:N \l__acro_tmpa_seq
- \seq_clear:N \l__acro_tmpb_seq
- }
-
-\cs_new:Npn \acro_determine_page_ranges:NNn #1#2#3
- {
- \seq_remove_duplicates:N #1
- % current page:
- \int_set:Nn \l__acro_tmpa_int { \acro_get_abspage:nnn #3 }
- \int_set:Nn \l__acro_tmpb_int { \acro_get_page_number:nnn #3 }
- % last page:
- \seq_get_right:NN #1 \l__acro_last_page_tl
- \int_set:Nn \l__acro_tmpc_int
- { \acro_get_abspage_from:N \l__acro_last_page_tl }
- \int_set:Nn \l__acro_tmpd_int
- { \acro_get_page_number_from:N \l__acro_last_page_tl }
- \bool_lazy_and:nnTF
- {
- \int_compare_p:nNn
- { \l__acro_tmpa_int - \l__acro_tmpc_int }
- =
- { \l__acro_tmpb_int - \l__acro_tmpd_int }
- }
- {
- \int_compare_p:nNn
- { \l__acro_tmpb_int - \l__acro_tmpd_int } = {1}
- }
- {% same kind of page numbering, one page ahead
- % => possible range
- \seq_put_right:Nn #1 {#3}
- }
- {% any possible range ended
- \tl_put_right:Nn #2 { \acro_page_range_comma: }
- \int_compare:nNnTF
- { \seq_count:N #1 } > {2}
- {% real range
- \seq_get_left:NN #1 \l__acro_tmpa_tl
- \tl_put_right:Nx #2 { \acro_get_thepage_from:N \l__acro_tmpa_tl }
- \bool_if:NTF \l__acro_following_pages_bool
- { \tl_put_right:Nn #2 { \l__acro_next_pages_tl } }
- {
- \tl_put_right:Nn #2 { -- }
- \seq_get_right:NN #1 \l__acro_tmpa_tl
- \tl_put_right:Nx #2 { \acro_get_thepage_from:N \l__acro_tmpa_tl }
- }
+ \acro_attribute_set:nnn {unique} {#5} {true}
+ \seq_new:c {l__acro_unique_#5_seq}
}
+ \bool_if:nT {#4}
{
- \int_compare:nNnTF
- { \seq_count:N #1 } = {2}
- {% range of two pages
- \seq_get_left:NN #1 \l__acro_tmpa_tl
- \tl_put_right:Nx #2 { \acro_get_thepage_from:N \l__acro_tmpa_tl }
- \bool_if:NTF \l__acro_following_page_bool
- { \tl_put_right:Nn #2 { \l__acro_next_page_tl } }
- {
- \tl_put_right:Nn #2 { ,~ }
- \seq_get_right:NN #1 \l__acro_tmpa_tl
- \tl_put_right:Nx #2 { \acro_get_thepage_from:N \l__acro_tmpa_tl }
- }
- }
- {% no range at all
- \seq_get_right:NN #1 \l__acro_tmpa_tl
- \tl_put_right:Nx #2 { \acro_get_thepage_from:N \l__acro_tmpa_tl }
- }
+ \AtEndDocument { \__acro_auxlist_update:n {#5} }
+ \acro_at_begin_document:n { \__acro_property_set_from_auxlist:n {#5} }
}
- \seq_clear:N #1
- \seq_put_right:Nn #1 {#3}
}
}
-\cs_generate_variant:Nn \acro_determine_page_ranges:NNn {NNV}
-
-% --------------------------------------------------------------------------
-\DeclareObjectType {acro-page-number} {1}
-\DeclareTemplateInterface {acro-page-number} {inline} {1}
+% ----------------------------------------------------------------------------
+% property conditionals:
+\prg_new_conditional:Npnn \acro_property_if_exist:n #1 {T,F,TF}
{
- display : boolean = true ,
- punct : boolean = false ,
- punct-symbol : tokenlist = {,} ,
- brackets : boolean = false ,
- brackets-type : tokenlist = () ,
- space : skip = .333333em plus .166666em minus .111111em
+ \acro_attribute_if_exist:nTF {property::#1}
+ { \prg_return_true: }
+ { \prg_return_false: }
}
+\cs_generate_variant:Nn \acro_property_if_exist:nTF {x}
-\DeclareTemplateCode {acro-page-number} {inline} {1}
+% #1: id
+% #2: property
+\prg_new_conditional:Npnn \acro_property_if_set:nn #1#2 {p,T,F,TF}
{
- display = \l__acro_page_display_bool ,
- punct = \l__acro_page_punct_bool ,
- punct-symbol = \l__acro_page_punct_tl ,
- brackets = \l__acro_page_brackets_bool ,
- brackets-type = \l__acro_page_brackets_tl ,
- space = \l__acro_page_space_skip
+ \acro_attribute_if_set:neTF {#2} { \acro_case_insensitive:n {#1} }
+ { \prg_return_true: }
+ { \prg_return_false: }
}
- {
- \AssignTemplateKeys
- \bool_if:NT \l__acro_page_display_bool
- {
- \bool_if:NT \l__acro_page_punct_bool
- { \tl_use:N \l__acro_page_punct_tl }
- % \tl_use:N \c_space_tl
- \dim_compare:nNnF { \l__acro_page_space_skip } = { 0pt }
- { \skip_horizontal:N \l__acro_page_space_skip }
- \bool_if:NT \l__acro_page_brackets_bool
- { \tl_head:N \l__acro_page_brackets_tl }
- \acro_print_page_numbers:n {#1}
- \bool_if:NT \l__acro_page_brackets_bool
- { \tl_tail:N \l__acro_page_brackets_tl }
- }
+\prg_generate_conditional_variant:Nnn \acro_property_if_set:nn
+ {nx,xx,nV,e,ne}
+ {p,T,F,TF}
+
+
+% #1: id
+% #2: properties
+\prg_new_protected_conditional:Npnn \acro_property_if_any:nn #1#2 {T,F,TF}
+ {
+ \seq_set_from_clist:Nn \l__acro_tmpa_seq {#2}
+ \seq_set_map:NNn \l__acro_tmpa_seq \l__acro_tmpa_seq
+ { { \exp_not:N \acro_property_if_set_p:nn {#1} {##1} } }
+ \bool_lazy_any:eTF
+ { \seq_use:Nn \l__acro_tmpa_seq {} }
+ { \prg_return_true: }
+ { \prg_return_false: }
}
+\prg_generate_conditional_variant:Nnn \acro_property_if_any:nn {e} {TF}
-% declare new page styles:
-\cs_new_protected:Npn \acro_declare_page_style:nnn #1#2#3
- {
- \DeclareInstance {acro-page-number} {#1} {#2} {#3}
- \prop_put:Nnn \l__acro_page_styles_prop {#1} {#2}
+% #1: id
+% #2: properties
+\prg_new_protected_conditional:Npnn \acro_property_if_all:nn #1#2 {T,F,TF}
+ {
+ \seq_set_from_clist:Nn \l__acro_tmpa_seq {#2}
+ \seq_set_map:NNn \l__acro_tmpa_seq \l__acro_tmpa_seq
+ { { \exp_not:N \acro_property_if_set_p:nn {#1} {##1} } }
+ \bool_lazy_all:eTF
+ { \seq_use:Nn \l__acro_tmpa_seq {} }
+ { \prg_return_true: }
+ { \prg_return_false: }
}
+\prg_generate_conditional_variant:Nnn \acro_property_if_all:nn {e} {TF}
-% set a page style
-\cs_new_protected:Npn \acro_set_page_style:n #1
+\prg_new_conditional:Npnn \acro_property_if_eq:nn #1#2 {p,T,F,TF}
{
- \prop_if_in:NnTF \l__acro_page_styles_prop {#1}
- { \__acro_set_page_style:n {#1} }
- {
- \msg_warning:nnnnn {acro} {unknown}
- {page~ style}
- {#1}
- {none}
- \__acro_set_page_style:n {none}
- }
+ \str_if_eq:nnTF {#1} {#2}
+ { \prg_return_true: }
+ { \prg_return_false: }
}
-\cs_new_protected:Npn \__acro_set_page_style:n #1
+\prg_new_conditional:Npnn \acro_property_if_mandatory:n #1 {p,T,F,TF}
{
- \tl_set:Nn \l__acro_page_instance_tl {#1}
- \prop_get:NnN \l__acro_page_styles_prop {#1} \l__acro_tmpa_tl
+ \acro_attribute_if_set:nnTF {mandatory} {#1}
+ { \prg_return_true: }
+ { \prg_return_false: }
}
+\cs_generate_variant:Nn \acro_property_if_mandatory:nF {V}
-% --------------------------------------------------------------------------
-% the title of the list:
-\cs_new:Npn \acro_list_title_format:n #1 {#1}
-
-\DeclareObjectType {acro-title} {1}
+\cs_new_protected:Npn \acro_property_foreach_mandatory:n #1
+ { \tl_map_inline:Nn \l__acro_mandatory_properties_tl {#1} }
-\DeclareTemplateInterface {acro-title} {sectioning} {1}
- { name-format : function 1 = #1 }
+\prg_new_conditional:Npnn \acro_property_if_boolean:n #1 {p,T,F,TF}
+ {
+ \acro_attribute_if_set:nnTF {boolean} {#1}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
-\DeclareTemplateCode {acro-title} {sectioning} {1}
- { name-format = \acro_list_title_format:n }
+\prg_new_conditional:Npnn \acro_property_if_unique:n #1 {p,T,F,TF}
{
- \AssignTemplateKeys
- \acro_list_title_format:n {#1}
+ \acro_attribute_if_set:nnTF {unique} {#1}
+ { \prg_return_true: }
+ { \prg_return_false: }
}
-% set a list heading:
-\cs_new_protected:Npn \acro_set_list_heading:n #1
+% #1: property
+% #2: value
+\prg_new_protected_conditional:Npnn \acro_property_if_unique_value:nn #1#2 {T,F,TF}
{
- \prop_if_in:NnTF \l__acro_list_headings_prop {#1}
- { \__acro_set_list_heading:n {#1} }
+ \acro_property_if_unique:nTF {#1}
{
- \msg_warning:nnnnn {acro} {unknown}
- {list~ heading}
- {#1}
- {section*}
- \__acro_set_list_heading:n {section*}
+ \seq_if_in:cnTF {l__acro_unique_#1_seq} {#2}
+ { \prg_return_true: }
+ { \prg_return_false: }
}
+ { \prg_return_false: }
}
-\cs_new_protected:Npn \__acro_set_list_heading:n #1
- { \tl_set:Nn \l__acro_list_heading_cmd_tl {#1} }
-
-\cs_new_protected:Npn \acro_declare_list_heading:nn #1#2
+% #1: id
+% #2: property
+\prg_new_conditional:Npnn \acro_property_get_if_set:nn #1#2 {T,F,TF}
{
- \prop_put:Nnn \l__acro_list_headings_prop {#1} {#2}
- \DeclareInstance {acro-title} {#1} {sectioning}
- { name-format = #2 {##1} }
+ \acro_property_if_set:nnTF {#1} {#2}
+ {
+ \acro_property_get:nn {#1} {#2}
+ \prg_return_true:
+ }
+ { \prg_return_false: }
}
-
-% --------------------------------------------------------------------------
-% typesetting the acronym list
-\DeclareObjectType {acro-list} {2}
+\prg_generate_conditional_variant:Nnn \acro_property_if_set:nn {V} {TF}
% #1: id
-% #2: excluded classes
-\prg_new_protected_conditional:Npnn \acro_if_is_excluded:nn #1#2 {T,F,TF}
+% #2: property
+\prg_new_conditional:Npnn \acro_boolean_property_if:nn #1#2 {p,T,F,TF}
{
- \bool_set_false:N \l__acro_is_excluded_bool
- \tl_if_blank:nF {#2}
+ \acro_property_if_exist:nTF {#2}
{
- \acro_property_get:nnT {#1} {class}
+ \acro_property_if_boolean:nTF {#2}
{
- \seq_set_split:NnV \l__acro_tmpa_seq {,} \l__acro_class_tl
- \clist_map_inline:nn {#2}
+ \acro_property_if_set:nnTF {#1} {#2}
{
- \seq_if_in:NnT \l__acro_tmpa_seq {##1}
- { \bool_set_true:N \l__acro_is_excluded_bool }
+ \bool_if:cTF
+ {c_ \acro_property_get:nn {#1} {#2} _bool}
+ { \prg_return_true: }
+ { \prg_return_false: }
}
+ { \prg_return_false: }
}
+ { \prg_return_false: }
}
- \bool_if:NTF \l__acro_is_excluded_bool
- { \prg_return_true: }
{ \prg_return_false: }
}
+\cs_generate_variant:Nn \acro_boolean_property_if:nnTF {oo}
+\cs_generate_variant:Nn \acro_boolean_property_if:nnF {nV}
+% ----------------------------------------------------------------------------
+% set properties:
% #1: id
-% #2: included classes
-\prg_new_protected_conditional:Npnn \acro_if_is_included:nn #1#2 {T,F,TF}
+% #2: property
+% #3: value
+\cs_new_protected:Npn \acro_property_set:nnn #1#2#3
{
- \bool_set_false:N \l__acro_is_included_bool
- \tl_if_blank:nTF {#2}
- { \bool_set_true:N \l__acro_is_included_bool }
+ \acro_property_if_exist:nTF {#2}
{
- \acro_property_get:nnT {#1} {class}
+ \acro_property_if_set:nnTF {#1} {#2}
+ {
+ \acro_property_if_unique:nTF {#2}
+ {
+ \acro_property_if_unique_value:nnTF {#2} {#3}
+ { \__acro_unique_property_set:nnn {#1} {#2} {#3} }
+ { \msg_warning:nnnn {acro} {property-unique} {#2} {#3} }
+ }
+ {
+ \acro_property_if_boolean:nTF {#2}
+ { \__acro_boolean_property_set:nnn {#1} {#2} {#3} }
+ { \__acro_property_set:nnn {#1} {#2} {#3} }
+ }
+ }
{
- \seq_set_split:NnV \l__acro_tmpa_seq {,} \l__acro_class_tl
- \clist_map_inline:nn {#2}
+ \acro_property_if_boolean:nTF {#2}
+ { \__acro_boolean_property_set:nnn {#1} {#2} {#3} }
{
- \seq_if_in:NnT \l__acro_tmpa_seq {##1}
- { \bool_set_true:N \l__acro_is_included_bool }
+ \acro_property_if_unique:nTF {#2}
+ { \__acro_unique_property_set:nnn {#1} {#2} {#3} }
+ { \__acro_property_set:nnn {#1} {#2} {#3} }
}
}
}
- \bool_if:NTF \l__acro_is_included_bool
- { \prg_return_true: }
- { \prg_return_false: }
+ { \msg_error:nnn {acro} {unknown-property} {#2} }
}
+\cs_generate_variant:Nn \acro_property_set:nnn {nnV,nxx,nnx,e,nne,nnv}
% #1: id
-\cs_new_protected:Npn \__acro_list_entry_short:n #1
+% #2: property
+% #3: value
+\cs_new_protected:Npn \__acro_boolean_property_set:nnn #1#2#3
{
- \group_begin:
- \acro_get:n {#1}
- \acro_hyper_target:nn
- {#1}
- {
- \acro_acc_supp:nn
- {#1}
- {
- \bool_lazy_and:nnTF
- { \l__acro_custom_short_format_bool }
- { \l__acro_override_list_format_bool }
- { \l__acro_custom_short_format_tl }
- { \l__acro_list_short_format_tl }
- { \__acro_property_get:nn {short} {#1} }
- }
- }
- \group_end:
+ \str_case_e:nnTF { \str_lowercase:n {#3} }
+ {
+ {} {}
+ {true} {}
+ }
+ { \__acro_property_set:nnn {#1} {#2} {true} }
+ { \__acro_property_set:nnn {#1} {#2} {false} }
}
% #1: id
-\cs_new_protected:Npn \__acro_list_entry_long:n #1
+% #2: property
+% #3: value
+\cs_new_protected:Npn \__acro_unique_property_set:nnn #1#2#3
+ { \__acro_property_set:nnn {#1} {#2} {#3} }
+
+% #1: id
+% #2: property
+\cs_new_protected:Npn \__acro_property_unset:nn #1#2
{
- \group_begin:
- \bool_if:NT \l__acro_capitalize_list_bool
- { \bool_set_true:N \l__acro_first_upper_bool }
- \acro_write_long:Vf \l__acro_list_long_format_tl
- {
- \prop_if_in:NnTF \l__acro_list_prop {#1}
- { \__acro_property_get:nn {list} {#1} }
- { \__acro_property_get:nn {long} {#1} }
- }
- \group_end:
- \bool_if:NT \l__acro_foreign_bool
- { \acro_get_foreign:n {#1} }
- \acro_cite_if:Nn \l__acro_citation_all_bool {#1}
+ \__acro_property_remove_from_auxlist:nn {#1} {#2}
+ \acro_attribute_unset:nn {#2} {#1}
}
% #1: id
-\cs_new_protected:Npn \__acro_list_entry_extra:n #1
+% #2: property
+\cs_new_protected:Npn \acro_property_unset:nn #1#2
{
- \acro_property_get:nnT {#1} {extra}
- {
- \acro_extra_instance:VV
- \l__acro_extra_instance_tl
- \l__acro_extra_tl
- }
+ \acro_property_if_exist:nTF {#2}
+ { \__acro_property_unset:nn {#1} {#2} }
+ { \msg_error:nnn {acro} {unknown-property} {#2} }
}
+\cs_generate_variant:Nn \acro_property_unset:nn {nx,nV}
% #1: id
-\cs_new_protected:Npn \__acro_list_entry_page:n #1
+% #2: property
+% #3: value
+\cs_new_protected:Npn \__acro_property_set:nnn #1#2#3
{
- \cs_if_exist:cT {acro@#1@once}
- {
- \acro_page_number_instance:Vn
- \l__acro_page_instance_tl
- {#1}
- }
+ \__acro_property_remove_from_auxlist:nn {#1} {#2}
+ % now we can safely add the property to the list:
+ \__acro_auxlist_add:nn {#2} {#1=={#3}}
+ \acro_attribute_set:nnn {#2} {#1} {#3}
}
-
-% macro for retrieval of items in the list:
-% #1: property
-% #2: id
-\cs_new_protected:Npn \acro_list_entry:nn #1#2
+\cs_generate_variant:Nn \__acro_property_set:nnn {VnV,nne}
+
+\tl_set:Nx \l__acro_tmpa_tl { \cs_to_str:N \{ }
+\tl_set:Nx \l__acro_tmpb_tl { \cs_to_str:N \} }
+\use:x
{
- \str_case:nnF {#1}
- {
- {short} { \__acro_list_entry_short:n {#2} }
- {long} { \__acro_list_entry_long:n {#2} }
- {extra} { \__acro_list_entry_extra:n {#2} }
- {page} { \__acro_list_entry_page:n {#2} }
- }
- { \__acro_property_get:nn {#1} {#2} }
+ \cs_new_protected:Npn
+ \exp_not:N \__acro_property_extract_auxlist_entry:NNww
+ ##1##2##3 == \l__acro_tmpa_tl ##4 \l__acro_tmpb_tl
+ \exp_not:N \q_stop
+ }
+ {
+ \str_set:Nn #1 {#3}
+ \str_set:Nn #2 {#4}
}
-% this macro may/should be redefined in templates:
-% #1: short
-% #2: long
-% #3: extra
-% #4: page number(s)
-\cs_new_protected:Npn \acro_print_list_entry:nnnn #1#2#3#4
- { #1 #2 #3 #4 }
-
-\cs_new_protected:Npn \acro_for_all_acronyms_do:n #1
- { \prop_map_inline:Nn \l__acro_short_prop {#1} }
-
-% test, if acronyms should be printed or not; needs testing for in/excluded
-% classes and options `only-used' and `single' -- this macro should be used in
-% the template code for retrieving the list
-
% #1: id
-% #2: included classes
-% #3: excluded classes
-\prg_new_protected_conditional:Npnn \acro_if_entry:nnn #1#2#3 {T,F,TF}
+% #2: property
+\cs_new_protected:Npn \__acro_property_remove_from_auxlist:nn #1#2
{
- \bool_lazy_or:nnTF
- {
- \bool_lazy_and_p:nn
- { !\l__acro_single_use_bool }
- { !\l__acro_print_only_used_bool }
- }
+ % make sure we change the entry if it has been recorded previously:
+ \__acro_auxlist_foreach_entry:nn {#2}
{
- \bool_lazy_and_p:nn
- { \bool_if_p:c {g__acro_#1_in_list_bool} }
+ \__acro_property_extract_auxlist_entry:NNww
+ \l__acro_tmpa_str \l__acro_tmpb_str ##1 \q_stop
+ \str_if_eq:xnT { \l__acro_tmpa_str } {#1}
{
- \bool_lazy_or_p:nn
- {
- \bool_lazy_and_p:nn
- { \l__acro_single_use_bool }
- { \cs_if_exist_p:c {acro@#1@twice} }
- }
- {
- \bool_lazy_all_p:n
- {
- { !\l__acro_single_use_bool }
- { \cs_if_exist_p:c {acro@#1@once} }
- { \l__acro_print_only_used_bool }
- }
- }
+ \__acro_auxlist_remove:nx {#2}
+ { #1 == {\l__acro_tmpb_str} }
}
}
+ % make sure we change the entry if it has been set during the current run:
+ \__acro_auxlist_foreach_new_entry:nn {#2}
{
- \acro_if_is_excluded:nnTF {#1} {#3}
- { \prg_return_false: }
+ \__acro_property_extract_auxlist_entry:NNww
+ \l__acro_tmpa_str \l__acro_tmpb_str ##1 \q_stop
+ \str_if_eq:xnT { \l__acro_tmpa_str } {#1}
{
- \acro_if_is_included:nnTF {#1} {#2}
- {
- \bool_lazy_and:nnTF
- { \g__acro_use_barriers_bool }
- { \l__acro_use_barrier_bool }
- {
- \acro_if_in_barrier:nxTF {#1}
- { \int_use:N \g__acro_barrier_int }
- { \prg_return_true: }
- { \prg_return_false: }
- }
- { \prg_return_true: }
- }
- { \prg_return_false: }
+ \__acro_auxlist_remove:nx {#2}
+ { #1 == {\l__acro_tmpb_str} }
}
}
- { \prg_return_false: }
}
-% this macro is used in templates for fetching all items to be printed; it
-% collects all entries in a tl which then is used where needed
-%
-% #1: tl containing the entries
-% #2: included classes
-% #3: excluded classes
-\cs_new_protected:Npn \acro_build_list_entries:Nnn #1#2#3
+% #1: property
+\cs_new_protected:Npn \__acro_property_set_from_auxlist:n #1
{
- \tl_clear:N #1
- \acro_for_all_acronyms_do:n
- {% ##1: id; ##2: short form
- \group_begin:
- \acro_get:n {##1}
- \acro_if_entry:nnnT {##1} {#2} {#3}
- {
- \tl_gput_right:Nn #1
- {
- \acro_print_list_entry:nnnn
- { \acro_list_entry:nn {short} {##1} }
- { \acro_list_entry:nn {long} {##1} }
- { \acro_list_entry:nn {extra} {##1} }
- { \acro_list_entry:nn {page} {##1} }
- }
- }
- \group_end:
+ \__acro_auxlist_foreach_entry:nn {#1}
+ {
+ \__acro_property_extract_auxlist_entry:NNww
+ \l__acro_tmpa_str \l__acro_tmpb_str ##1 \q_stop
+ \tl_set_rescan:Nnx \l__acro_tmpa_tl {} { \l__acro_tmpb_str }
+ \__acro_property_set:VnV \l__acro_tmpa_str {#1} \l__acro_tmpa_tl
}
}
-% this macro is used in templates for fetching all items to be printed:
-\cs_new_protected:Npn \acro_list_items:nn #1#2
- {
- \acro_build_list_entries:Nnn \l__acro_list_entries_tl {#1} {#2}
- \tl_use:N \l__acro_list_entries_tl
- }
-
-% --------------------------------------------------------------------------
-% declare templates for the list:
-% `list' template:
-\DeclareTemplateInterface {acro-list} {list} {2}
+% set properties:
+% #1: id
+% #2: csv list of properties
+\cs_new_protected:Npn \acro_properties_set:nn #1#2
{
- foreign-sep : tokenlist = {~} ,
- list : tokenlist = {description} ,
- reverse : boolean = false ,
- before : tokenlist = ,
- after : tokenlist =
+ \cs_set_protected:Npn \__acro_parse_property:nn ##1##2
+ { \acro_property_set:nnn {#1} {##1} {##2} }
+ \cs_set_protected:Npn \__acro_parse_property:n ##1
+ {
+ \acro_property_if_boolean:nTF {##1}
+ { \acro_property_set:nnn {#1} {##1} {true} }
+ { \msg_error:nnnn {acro} {value-required} {#1} {##1} }
+ }
+ \keyval_parse:NNn
+ \__acro_parse_property:n
+ \__acro_parse_property:nn
+ {#2}
}
+\cs_generate_variant:Nn \acro_properties_set:nnn {nnx,nxx,nV,nVx}
-\DeclareTemplateCode {acro-list} {list} {2}
- {
- foreign-sep = \l__acro_foreign_sep_tl ,
- list = \l__acro_list_tl ,
- reverse = \l__acro_list_reverse_long_extra_bool ,
- before = \l__acro_list_before_tl ,
- after = \l__acro_list_after_tl
- }
+% ----------------------------------------------------------------------------
+% inspect properties:
+\cs_new_protected:Npn \acro_property_show:nn #1#2
{
- \AssignTemplateKeys
- \bool_set_true:N \l__acro_in_list_bool
- \acro_activate_hyperref_support:
- \bool_if:NTF \l__acro_list_reverse_long_extra_bool
+ \acro_property_if_set:nnT {#1} {#2}
{
- \cs_set_protected:Npn \acro_print_list_entry:nnnn ##1##2##3##4
- { \item [##1] ##3 ##2 ##4 }
- }
- {
- \cs_set_protected:Npn \acro_print_list_entry:nnnn ##1##2##3##4
- { \item [##1] ##2 ##3 ##4 }
- }
- \use:x
- {
- \exp_not:V \l__acro_list_before_tl
- \exp_not:N \begin { \exp_not:V \l__acro_list_tl }
- \exp_not:n { \acro_list_items:nn {#1} {#2} }
- \exp_not:N \end { \exp_not:V \l__acro_list_tl }
- \exp_not:V \l__acro_list_after_tl
+ \iow_term:x
+ {
+ \c_space_tl \c_space_tl
+ \tl_to_str:n {#2}
+ \c_space_tl \c_space_tl => \c_space_tl \c_space_tl
+ { \acro_property_get:nn {#1} {#2} }
+ }
}
}
+\cs_generate_variant:Nn \acro_property_show:nn {e}
-% `list-of' template:
-\DeclareTemplateInterface {acro-list} {list-of} {2}
+% ----------------------------------------------------------------------------
+% alias properties:
+\tl_new:N \g__acro_property_aliases_tl
+
+% #1: property
+\prg_new_conditional:Npnn \acro_property_if_alias:n #1 {p,T,F,TF}
{
- foreign-sep : tokenlist = {~} ,
- style : tokenlist = {toc} ,
- reverse : boolean = false ,
- before : tokenlist = ,
- after : tokenlist =
+ \tl_map_tokens:Nn \g__acro_property_aliases_tl
+ { \__acro_property_if_alias:nn {#1} }
+ \use_ii:nn
+ { \prg_return_true: }
+ { \prg_return_false: }
}
-\DeclareTemplateCode {acro-list} {list-of} {2}
+% #1: tl
+% #2: tl
+\cs_new:Npn \__acro_property_if_alias:nn #1#2
{
- foreign-sep = \l__acro_foreign_sep_tl ,
- style = \l__acro_list_of_style ,
- reverse = \l__acro_list_reverse_long_extra_bool ,
- before = \l__acro_list_before_tl ,
- after = \l__acro_list_after_tl
+ \str_if_eq:nnT {#1} {#2}
+ { \tl_map_break:n { \use_ii:nnn } }
}
+
+% #1: property
+\cs_new:Npn \acro_property_alias:n #1
+ { \acro_attribute_get:nn {#1} {alias} }
+\cs_generate_variant:Nn \acro_property_alias:n {e}
+
+% #1: property
+% #2: alias of
+\cs_new_protected:Npn \acro_property_make_alias:nn #1#2
{
- \AssignTemplateKeys
- \bool_set_true:N \l__acro_in_list_bool
- \tl_if_eq:VnT \l__acro_page_instance_tl {none}
- { \tl_set:Nn \l__acro_page_instance_tl {plain} }
- \tl_set:Nn \l__acro_page_name_tl {}
- \tl_set:Nn \l__acro_pages_name_tl {}
- \acro_activate_hyperref_support:
- \str_case:Vn \l__acro_list_of_style
+ \acro_property_if_alias:nF {#1}
{
- {toc}
- { % similar to the table of contents
- \bool_if:NTF \l__acro_list_reverse_long_extra_bool
- {
- \cs_if_exist:NTF \chapter
- {
- \cs_set_protected:Npn \acro_print_list_entry:nnnn ##1##2##3##4
- {
- \contentsline{chapter}{##1}{}{}
- \contentsline{section}{##3##2}{##4}{}
- }
- }
- {
- \cs_set_protected:Npn \acro_print_list_entry:nnnn ##1##2##3##4
- {
- \contentsline{section}{##1}{}{}
- \contentsline{subsection}{##3##2}{##4}{}
- }
- }
- }
- {
- \cs_if_exist:NTF \chapter
- {
- \cs_set_protected:Npn \acro_print_list_entry:nnnn ##1##2##3##4
- {
- \contentsline{chapter}{##1}{}{}
- \contentsline{section}{##2##3}{##4}{}
- }
- }
- {
- \cs_set_protected:Npn \acro_print_list_entry:nnnn ##1##2##3##4
- {
- \contentsline{section}{##1}{}{}
- \contentsline{subsection}{##2##3}{##4}{}
- }
- }
- }
- }
- {lof}
- { % similar to the list of figures
- \cs_set_protected:Npn \l@acro
- { \@dottedtocline {1} {1.5em} {\l__acro_short_width_dim} }
- \bool_if:NTF \l__acro_list_reverse_long_extra_bool
- {
- \cs_set_protected:Npn \acro_print_list_entry:nnnn ##1##2##3##4
- { \contentsline{acro}{\numberline{##1}{##3##2}}{##4}{} }
- }
- {
- \cs_set_protected:Npn \acro_print_list_entry:nnnn ##1##2##3##4
- { \contentsline{acro}{\numberline{##1}{##2##3}}{##4}{} }
- }
- }
+ \acro_attribute_set:nnn {#1} {alias} {#2}
+ \tl_gput_right:Nn \g__acro_property_aliases_tl {{#1}}
}
- \use:x
- {
- \exp_not:V \l__acro_list_before_tl
- \exp_not:n { \acro_list_items:nn {#1} {#2} }
- \exp_not:V \l__acro_list_before_tl
- }
- }
-
-% `table' template:
-\DeclareTemplateInterface {acro-list} {table} {2}
- {
- table : tokenlist = tabular ,
- table-spec : tokenlist = lp{.7\linewidth} ,
- foreign-sep : tokenlist = {~} ,
- reverse : boolean = false ,
- before : tokenlist = ,
- after : tokenlist =
}
-\DeclareTemplateCode {acro-list} {table} {2}
- {
- table = \l__acro_list_table_tl ,
- table-spec = \l__acro_list_table_spec_tl ,
- foreign-sep = \l__acro_foreign_sep_tl ,
- reverse = \l__acro_list_reverse_long_extra_bool ,
- before = \l__acro_list_before_tl ,
- after = \l__acro_list_after_tl
- }
+% #1: id
+% #2: alias property
+\cs_new_protected:Npn \acro_property_set_alias:nn #1#2
{
- \AssignTemplateKeys
- \acro_activate_hyperref_support:
- \bool_if:NTF \l__acro_list_reverse_long_extra_bool
- {
- \cs_set_protected:Npn \acro_print_list_entry:nnnn ##1##2##3##4
- { ##1 & ##3 ##2 ##4 \tabularnewline }
- }
+ \acro_property_if_set:nnF {#1} {#2}
{
- \cs_set_protected:Npn \acro_print_list_entry:nnnn ##1##2##3##4
- { ##1 & ##2 ##3 ##4 \tabularnewline }
- }
- \acro_build_list_entries:Nnn \l__acro_list_entries_tl {#1} {#2}
- \use:x
- {
- \exp_not:V \l__acro_list_before_tl
- \exp_not:N \begin { \exp_not:V \l__acro_list_table_tl }
- { \exp_not:V \l__acro_list_table_spec_tl }
- \exp_not:V \l__acro_list_entries_tl
- \exp_not:N \end { \exp_not:V \l__acro_list_table_tl }
- \exp_not:V \l__acro_list_after_tl
+ \acro_property_if_set:neT {#1} { \acro_property_alias:n {#2} }
+ {
+ \__acro_property_set:nne {#1} {#2}
+ { \acro_property_get:ne {#1} { \acro_property_alias:n {#2} } }
+ }
}
}
-% `extra-table' template:
-\DeclareTemplateInterface {acro-list} {extra-table} {2}
+% #1: id
+\cs_new_protected:Npn \acro_property_set_aliases:n #1
{
- table : tokenlist = tabular ,
- table-spec : tokenlist = llll ,
- foreign-sep : tokenlist = {~} ,
- reverse : boolean = false ,
- before : tokenlist = ,
- after : tokenlist =
+ \tl_map_inline:Nn \g__acro_property_aliases_tl
+ { \acro_property_set_alias:nn {#1} {##1} }
}
-\DeclareTemplateCode {acro-list} {extra-table} {2}
+% ----------------------------------------------------------------------------
+% retrieve properties:
+% #1: id
+% #2: property
+\cs_new:Npn \acro_property_get:nn #1#2
+ { \acro_attribute_get:ne {#2} { \acro_case_insensitive:n {#1} } }
+\cs_generate_variant:Nn \acro_property_get:nn {nx,ne,V}
+
+% ----------------------------------------------------------------------------
+\AcroModuleEnd
+% ----------------------------------------------------------------------------
+% the ACRO package - acronyms module
+%
+% Typeset Acronyms
+%
+% --------------------------------------------------------------------------
+% Clemens Niederberger
+% Web: https://github.com/cgnieder/acro/
+% E-Mail: contact@mychemistry.eu
+% --------------------------------------------------------------------------
+% Copyright 2011--2020 Clemens Niederberger
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Clemens Niederberger.
+% --------------------------------------------------------------------------
+% If you have any ideas, questions, suggestions or bugs to report, please
+% feel free to contact me.
+% --------------------------------------------------------------------------
+\AcroModule{acronyms}{define acronyms}
+
+% --------------------------------------------------------------------------
+\msg_new:nnn {acro} {undefined}
{
- table = \l__acro_list_table_tl ,
- table-spec = \l__acro_list_table_spec_tl ,
- foreign-sep = \l__acro_foreign_sep_tl ,
- reverse = \l__acro_list_reverse_long_extra_bool ,
- before = \l__acro_list_before_tl ,
- after = \l__acro_list_after_tl
+ You've~ requested~ acronym~ `#1'~ \msg_line_context: \ but~ you~
+ apparently~ haven't~ defined~ it,~ yet! \\
+ Maybe~ you've~ misspelled~ `#1'?
}
+
+\msg_new:nnn {acro} {mandatory}
{
- \AssignTemplateKeys
- \acro_activate_hyperref_support:
- \bool_if:NTF \l__acro_list_reverse_long_extra_bool
- {
- \cs_set_protected:Npn \acro_print_list_entry:nnnn ##1##2##3##4
- { ##1 & ##3 & ##2 & ##4 \tabularnewline }
- }
- {
- \cs_set_protected:Npn \acro_print_list_entry:nnnn ##1##2##3##4
- { ##1 & ##2 & ##3 & ##4 \tabularnewline }
- }
- \acro_build_list_entries:Nnn \l__acro_list_entries_tl {#1} {#2}
- \use:x
- {
- \exp_not:V \l__acro_list_before_tl
- \exp_not:N \begin { \exp_not:V \l__acro_list_table_tl }
- { \exp_not:V \l__acro_list_table_spec_tl }
- \exp_not:V \l__acro_list_entries_tl
- \exp_not:N \end { \exp_not:V \l__acro_list_table_tl }
- \exp_not:V \l__acro_list_after_tl
- }
+ You~ forgot~ to~ set~ the~ mandatory~ property~ `#2'~ for~ acronym~
+ `#1'~ \msg_line_context:
}
% --------------------------------------------------------------------------
-% declare new list styles:
-\cs_new_protected:Npn \acro_declare_list_style:nnn #1#2#3
- {
- \DeclareInstance {acro-list} {#1} {#2} {#3}
- \prop_put:Nnn \l__acro_list_styles_prop {#1} {#2}
- }
+% short and long list:
+\tl_new:N \l__acro_short_tl
+\tl_new:N \l__acro_long_tl
-% set a list style
-\cs_new_protected:Npn \acro_set_list_style:n #1
+\cs_new_protected:Npn \acro_list_add:nn #1#2
{
- \prop_if_in:NnTF \l__acro_list_styles_prop {#1}
- { \__acro_set_list_style:n {#1} }
+ \clist_map_inline:nn {#2}
{
- \msg_warning:nnnnn {acro} {unknown}
- {list~ style}
- {#1}
- {description}
- \__acro_set_list_style:n {description}
+ \tl_put_right:cn {l__acro_#1_tl} {{##1}}
+ \cs_set:cpn {____acro_#1::##1____:} {}
}
}
-\cs_new_protected:Npn \__acro_set_list_style:n #1
+\cs_new_protected:Npn \acro_list_map:nn #1#2
+ { \tl_map_inline:cn {l__acro_#1_tl} {#2} }
+
+\prg_new_conditional:Npnn \acro_if_short:n #1 {p,T,F,TF}
{
- \tl_set:Nn \l__acro_list_instance_tl {#1}
- \prop_get:NnN \l__acro_list_styles_prop {#1} \l__acro_list_type_tl
+ \cs_if_exist:cTF {____acro_short::#1____:}
+ { \prg_return_true: }
+ { \prg_return_false: }
}
-% --------------------------------------------------------------------------
-% case insensitivity of the ID:
-\cs_new:Npn \acro_case_insensitive:n #1
+\prg_new_conditional:Npnn \acro_if_long:n #1 {p,T,F,TF}
{
- \bool_if:NTF \g__acro_case_sensitive_bool
- { \tl_to_str:n {#1} }
- { \str_lowercase:n {#1} }
+ \cs_if_exist:cTF {____acro_long::#1____:}
+ { \prg_return_true: }
+ { \prg_return_false: }
}
-\cs_new_protected:Npn \acro_protected_case_insensitive:n #1
- { \acro_case_insensitive:n {#1} }
-
-\cs_new:Npn \acro_case_insensitive:Nn #1#2
- { \exp_args:Ne #1 { \acro_case_insensitive:n {#2} } }
+% --------------------------------------------------------------------------
+% define necessary properties:
+% short and long properties:
+\acro_list_add:nn {short} {short,alt}
+\acro_list_add:nn {long} {long,foreign,single,extra,list}
+
+% meta information:
+\DeclareAcroProperty*!{id}
+\DeclareAcroProperty ?{used}
+\DeclareAcroProperty |{usage}
+\DeclareAcroProperty |{pages}
+\DeclareAcroProperty |{barriers}
+\DeclareAcroProperty* {label}
+
+% main properties:
+\DeclareAcroProperty !{short}
+\DeclareAcroProperty {alt}
+\DeclareAcroProperty !{long}
+
+% sorting, indexing, ... :
+\DeclareAcroPropertyAlias {sort} {short}
+\DeclareAcroProperty {index}
+\DeclareAcroProperty?{no-index}
+\DeclareAcroPropertyAlias {index-sort} {sort}
+\DeclareAcroProperty {index-cmd}
+\DeclareAcroProperty {tag}
+\DeclareAcroProperty {cite}
+\DeclareAcroProperty {before-citation}
+\DeclareAcroPropertyAlias {pdfstring} {short}
+\DeclareAcroProperty {pdfcomment}
+
+% locale:
+\DeclareAcroProperty {foreign}
+\DeclareAcroProperty {foreign-babel}
+\DeclareAcroProperty {foreign-locale}
+
+% additional properties:
+\DeclareAcroPropertyAlias {single} {long}
+\DeclareAcroPropertyAlias {list} {long}
+\DeclareAcroPropertyAlias {first-long} {long}
+\DeclareAcroProperty {extra}
+\DeclareAcroProperty {post}
+\DeclareAcroProperty {long-post}
+\DeclareAcroProperty {first-style}
+\DeclareAcroProperty {single-style}
+
+% formatting:
+\DeclareAcroProperty {format}
+\DeclareAcroPropertyAlias {short-format} {format}
+\DeclareAcroProperty {alt-format}
+\DeclareAcroPropertyAlias {long-format} {format}
+\DeclareAcroPropertyAlias {first-long-format} {long-format}
+\DeclareAcroProperty {foreign-format}
+\DeclareAcroProperty {single-format}
+\DeclareAcroProperty {list-format}
+\DeclareAcroProperty {extra-format}
+
+% Accessibility:
+\acro_list_map:nn {short}
+ {
+ \DeclareAcroPropertyAlias {#1-acc} {#1}
+ \acro_list_add:nn {short} {#1-acc}
+ }
+
+\DeclareAcroPropertyAlias {single-acc} {long-acc}
+\acro_list_map:nn {long}
+ {
+ \DeclareAcroPropertyAlias {#1-acc} {#1}
+ \acro_list_add:nn {long} {#1-acc}
+ }
-\cs_new:Npn \acro_case_insensitive:Nnn #1#2#3
- { \exp_args:Ne #1 { \acro_case_insensitive:n {#2} } {#3} }
+% --------------------------------------------------------------------------
+% use id as short entry:
+\bool_new:N \g__acro_use_id_bool
-\cs_new_protected:Npn \acro_case_insensitive_command:Nnnn #1#2#3#4
- { \exp_args:Nnnx #1 {#2} {#3} { \acro_case_insensitive:n {#4} } }
-\cs_generate_variant:Nn \acro_case_insensitive_command:Nnnn {c}
+\keys_define:nn {acro}
+ {
+ use-id-as-short .choice: ,
+ use-id-as-short / true .code:n =
+ \bool_gset_true:N \g__acro_use_id_bool ,
+ use-id-as-short / false .code:n =
+ \bool_gset_false:N \g__acro_use_id_bool ,
+ use-id-as-short .default:n = true
+ }
% --------------------------------------------------------------------------
-% automatic typesetting, the internals of \ac:
-% #1: id
+% declaration of acronyms:
+\seq_new:N \g__acro_acronyms_seq
-\cs_new_protected:Npn \acro_soft_upper:
+\tl_new:N \l__acro_first_style_tl
+
+\acro_attribute_new:n {acronyms}
+
+\keys_define:nn {acro}
{
- \bool_if:NF \l__acro_upper_short_bool
- { \bool_set_false:N \l__acro_first_upper_bool }
+ first-style .tl_set:N = \l__acro_first_style_tl ,
+ first-style .initial:n = long-short
}
-\cs_new_protected:Npn \acro_use:n #1
+\cs_new_protected:Npn \acro_declare_acronym:nn #1#2
+ { \acro_case_insensitive:Nn \__acro_declare_acronym:nn {#1} {#2} }
+
+% #1: id
+% #2: properties
+\cs_new_protected:Npn \__acro_declare_acronym:nn #1#2
{
- % get the acronym and the plural settings:
- \acro_get:n {#1}
- \acro_is_used:nTF {#1}
+ \int_new:c {g__acro_#1_int}
+ \seq_new:c {g__acro_#1_pages_seq}
+ \seq_new:c {g__acro_#1_barriers_seq}
+ \acro_at_begin_document:n
{
- \acro_soft_upper:
- % this is not the first time
- \acro_write_indefinite:nn {#1} {short}
- \acro_write_compact:nn {#1} {short}
- \acro_after:n {#1}
+ \intarray_new:cn
+ {g__acro_#1_barriers_intarray}
+ { \g_acro_barrier_total_int }
}
+ \seq_gput_right:Nn \g__acro_acronyms_seq {#1}
+ \acro_attribute_set:nnn {acronyms} {#1} {}
+ % set defaults:
+ \__acro_set_article_defaults:n {#1}
+ % set user input:
+ \acro_properties_set:nn {#1} {#2}
+ % set defaults which must not be overwritten:
+ \acro_property_set:nnn {#1} {usage} {0}
+ \bool_lazy_and:nnT
+ { \g__acro_use_id_bool }
+ { !\acro_property_if_set_p:nn {#1} {short} }
+ { \acro_property_set:nnn {#1} {short} {#1} }
+ \acro_property_set:nnn {#1} {id} {#1}
+ \acro_property_set_aliases:n {#1}
+ % check mandatory properties:
+ \acro_property_foreach_mandatory:n
{
- % this is the first time
- \bool_gset_true:c { g__acro_#1_first_use_bool }
- \acro_if_is_single:nTF {#1}
- { \acro_single:n {#1} }
- { \acro_first_instance:nV {#1} \l__acro_long_tl }
+ \acro_property_if_set:nnF {#1} {##1}
+ { \msg_error:nnnn {acro} {mandatory} {#1} {##1} }
}
+ % set endings:
+ \acro_set_endings:n {#1}
+ \acro_at_end_document:n
+ {
+ \acro_property_set:nnx {#1} {usage} { \int_use:c {g__acro_#1_int} }
+ \acro_set_barriers:n {#1}
+ }
+ }
+
+\prg_new_conditional:Npnn \acro_if_defined:n #1 {p,T,F,TF}
+ {
+ \acro_attribute_if_set:neTF {acronyms}
+ { \acro_case_insensitive:n {#1} }
+ { \prg_return_true: }
+ { \prg_return_false: }
}
-% single appearances:
-\cs_new_protected:Npn \acro_single:n #1
+\cs_new_protected:Npn \acro_check_definition:n #1
{
- \acro_cite:
- \acro_single_form:nV {#1} \l__acro_single_form_tl
- \acro_after:n {#1}
+ \acro_if_defined:nF {#1}
+ { \msg_error:nnn {acro} {undefined} {#1} }
}
-% #1: ID
-% #2: long|first|<other>
-\cs_new_protected:Npn \acro_single_form:nn #1#2
+% --------------------------------------------------------------------------
+% use and reset:
+\bool_new:N \l__acro_use_bool
+\bool_set_true:N \l__acro_use_bool
+
+\cs_new_protected:Npn \acro_use_false:
+ { \bool_set_false:N \l__acro_use_bool }
+
+\cs_new_protected:Npn \__acro_use:n #1
{
- \acro_write_indefinite:nn {#1} {#2}
- \str_case:nnF {#2}
+ \bool_if:NT \l__acro_use_bool
{
- {long} {
- \tl_if_blank:VT \l__acro_single_format_tl
- {
- \bool_if:NTF \l__acro_custom_long_format_bool
- {
- \tl_set_eq:NN
- \l__acro_single_format_tl
- \l__acro_custom_long_format_tl
- }
- {
- \tl_set_eq:NN
- \l__acro_single_format_tl
- \l__acro_long_format_tl
- }
- }
- \tl_if_blank:VT \l__acro_single_tl
- { \tl_set_eq:NN \l__acro_single_tl \l__acro_long_tl }
- % BUG: should that be \acro_write_expanded:nn ?
- % \acro_write_expanded:nnn {#1} {#2} {\l__acro_single_tl}
- \acro_write_long:VV \l__acro_single_format_tl \l__acro_single_tl
- \acro_endings:nn {#1} {single}
- \l__acro_long_post_tl
- }
- {first} {
- \tl_if_blank:VF \l__acro_single_format_tl
- {
- \tl_set_eq:NN
- \l__acro_first_long_format_tl
- \l__acro_single_format_tl
- }
- \tl_if_blank:VT \l__acro_single_tl
- { \tl_set_eq:NN \l__acro_single_tl \l__acro_long_tl }
- \acro_first_instance:nV {#1} \l__acro_single_tl
- }
- }
- { % other (e.g. short)
- \acro_soft_upper:
- \tl_if_blank:VF \l__acro_single_tl
- { \tl_set_eq:cN {l__acro_#2_tl} \l__acro_single_tl }
- \tl_if_blank:VF \l__acro_single_format_tl
- { \tl_set_eq:cN {l__acro_#2_format_tl} \l__acro_single_format_tl }
- \acro_write_compact:nn {#1} {#2}
+ \acro_property_set:nnn {#1} {used} {true}
+ \acro_step:n {#1}
}
}
-\cs_generate_variant:Nn \acro_single_form:nn {nV}
-\prg_new_conditional:Npnn \acro_if_is_single:n #1 { p,T,TF }
+\cs_new_protected:Npn \acro_use:n #1
+ { \clist_map_inline:nn {#1} { \__acro_use:n {#1} } }
+\cs_generate_variant:Nn \acro_use:n {e}
+
+\cs_new_protected:Npn \acro_use_all:
+ { \seq_map_inline:Nn \g__acro_acronyms_seq { \__acro_use:n {##1} } }
+
+\cs_new_protected:Npn \__acro_reset:n #1
{
- \bool_lazy_or:nnTF
- { !\l__acro_single_use_bool }
- { \cs_if_exist_p:c {acro@#1@twice} }
- { \prg_return_false: }
- { \prg_return_true: }
+ \acro_property_set:nnn {#1} {used} {false}
+ \int_gzero:c {g__acro_ \acro_case_insensitive:n {#1} _int}
+ \int_compare:nNnF
+ { \acro_property_get:nn {#1} {usage} } > 0
+ { \acro_property_set:nnn {#1} {usage} {0} }
}
-\cs_new_protected:Npn \acro_use_acronym:n #1
- { \use:c {bool_set_#1:N} \l__acro_mark_as_used_bool }
+\cs_new_protected:Npn \acro_reset:n #1
+ { \clist_map_inline:nn {#1} { \__acro_reset:n {##1} } }
+
+\cs_new_protected:Npn \acro_reset_all:
+ { \seq_map_inline:Nn \g__acro_acronyms_seq { \__acro_reset:n {##1} } }
+
+\cs_new_protected:Npn \acro_switch_off:
+ { \bool_set_false:N \l__acro_use_bool }
+
+\cs_new_protected:Npn \acro_switch_on:
+ { \bool_set_true:N \l__acro_use_bool }
% --------------------------------------------------------------------------
-% some helpers we'll need more often:
-\prg_new_conditional:Npnn \acro_if_defined:n #1 {p,T,F,TF}
+% check for tags:
+% #1: id
+% #2: tag
+\prg_new_protected_conditional:Npnn \acro_tag_if:nn #1#2 {T,F,TF}
{
- \seq_if_in:NeTF \g__acro_declared_acronyms_seq
- { \acro_case_insensitive:n {#1} }
+ \clist_set:Ne \l__acro_tmpa_clist { \acro_property_get:nn {#1} {tag} }
+ \clist_if_in:NnTF \l__acro_tmpa_clist {#2}
{ \prg_return_true: }
{ \prg_return_false: }
}
+\prg_generate_conditional_variant:Nnn \acro_tag_if:nn {en} {T,F,TF}
-\cs_new_protected:Npn \acro_defined:n #1
+% --------------------------------------------------------------------------
+\AcroModuleEnd
+\AcroModule{formatting}{formatting of acronyms}
+% --------------------------------------------------------------------------
+% formatting:
+\bool_new:N \l__acro_format_replace_bool
+
+% sets the format from the global option:
+% #1: property
+\cs_new:Npn \__acro_global_format:n #1
{
- \acro_if_defined:nF {#1}
- { \acro_serious_message:nn {undefined} {#1} }
+ \acro_property_if_alias:nTF {#1}
+ {
+ \tl_if_empty:cTF {l__acro_format_ #1 _tl}
+ { \__acro_use_global_format:n { \acro_property_alias:n {#1} } }
+ { \__acro_use_global_format:n {#1} }
+ }
+ { \__acro_use_global_format:n {#1} }
}
-% expandably gets property but doesn't transform property name -- internal
-% name is needed
% #1: property
-% #2: id
-\cs_new:Npn \__acro_property_get:nn #1#2
- { \prop_item:cn {l__acro_#1_prop} {#2} }
+\cs_new:Npn \__acro_use_global_format:n #1
+ {
+ \tl_if_exist:cT {l__acro_format_ #1 _tl}
+ { \tl_use:c {l__acro_format_ #1 _tl} }
+ }
% #1: id
% #2: property
-% #3: set case
-% #4: not set case
-\prg_new_protected_conditional:Npnn \acro_property_get:nn #1#2 {T,F,TF}
- {
- \tl_set:Nn \l__acro_tmpa_tl {#2}
- \tl_replace_all:Nnn \l__acro_tmpa_tl {-} {_}
- \prop_get:cncTF
- {l__acro_ \l__acro_tmpa_tl _prop}
- {#1}
- {l__acro_ \l__acro_tmpa_tl _tl}
- { \prg_return_true: }
+% #3: insert if false
+\cs_new:Npn \__acro_property_format:nnF #1#2#3
+ {
+ \acro_property_if_set:nnTF {#1} {#2-format}
+ { \acro_property_get:nn {#1} {#2-format} }
+ {
+ \acro_if_format_alias:nnTF {#1} {#2}
+ {
+ \acro_property_get:nn {#1}
+ { \acro_property_alias:n {#2} -format }
+ }
+ {#3}
+ }
+ }
+
+% #1: id
+% #1: property
+\prg_new_conditional:Npnn \acro_if_format_alias:nn #1#2 {TF}
+ {
+ \acro_property_if_alias:nTF {#2}
+ {
+ \acro_property_if_set:nnTF {#1}
+ { \acro_property_alias:n {#2} -format }
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
{ \prg_return_false: }
}
-\cs_new_protected:Npn \acro_property_get:nn #1#2
- { \acro_property_get:nnTF {#1} {#2} {} {} }
-\cs_generate_variant:Nn \acro_property_get:nn {V}
+% #1: id
+% #1: property
+\cs_new:Npn \__acro_property_format:nn #1#2
+ { \__acro_property_format:nnF {#1} {#2} {} }
-% within this command one can refer to the current id with `#1'
-\cs_new_protected:Npn \acro_add_action:n #1
- { \seq_put_right:Nn \l__acro_actions_seq {#1} }
+% sets the individual format:
+% #1: id
+% #2: property
+% #3: text
+\cs_new:Npn \acro_format:nnn #1#2#3
+ {
+ {
+ \bool_if:NTF \l__acro_format_replace_bool
+ {
+ \__acro_property_format:nnF {#1} {#2}
+ { \__acro_global_format:n {#2} }
+ {#3}
+ }
+ {
+ \__acro_global_format:n {#2}
+ {
+ \__acro_property_format:nn {#1} {#2}
+ {#3}
+ }
+ }
+ }
+ }
+\cs_generate_variant:Nn \acro_format:nnn {e}
-\cs_new_protected:Npn \__acro_get_actions:n #1
+% #1: property:
+\cs_new_protected:Npn \acro_new_format:n #1
{
- \seq_map_inline:Nn \l__acro_actions_seq
+ \tl_new:c {l__acro_format_#1_tl}
+ \keys_define:nn {acro/format}
{
- \cs_set:Npn \__acro_action:n ####1 {##1}
- \__acro_action:n {#1}
+ #1 .tl_set:c = l__acro_format_#1_tl ,
+ #1 .initial:n =
}
}
-\cs_new_protected:Npn \acro_get:n #1
+\acro_new_format:n {short}
+\acro_new_format:n {long}
+\acro_new_format:n {alt}
+\acro_new_format:n {extra}
+\acro_new_format:n {foreign}
+\acro_new_format:n {list}
+\acro_new_format:n {first-long}
+
+\keys_define:nn {acro}
+ {
+ format .meta:n = { format/short = #1 , format/long = #1 } ,
+ format / replace .bool_set:N = \l__acro_format_replace_bool ,
+ format / replace .initial:n = false
+ }
+
+% ----------------------------------------------------------------------------
+\AcroModuleEnd
+\AcroModule{ppfixes}{pre- and postfixes to acronyms}
+% --------------------------------------------------------------------------
+% articles
+\bool_new:N \l__acro_article_bool
+\tl_new:N \g__acro_articles_tl
+
+% #1: name
+% #2: default
+\cs_new_protected:Npn \acro_article_declare:nn #1#2
{
- \bool_if:NF \l__acro_in_list_bool { \leavevmode }
- \acro_activate_hyperref_support:
- % short:
- \acro_property_get:nn {#1} {short}
- % alt:
- \acro_property_get:nnF {#1} {alt}
- { \tl_set_eq:NN \l__acro_alt_tl \l__acro_short_tl }
- % long:
- \acro_property_get:nn {#1} {long}
- % foreign:
- \acro_property_get:nn {#1} {foreign}
- % foreign-lang:
- \acro_property_get:nn {#1} {foreign-lang}
- % extra:
- \acro_property_get:nn {#1} {extra}
- % single:
- \acro_property_get:nn {#1} {single}
- % first-style:
- \acro_property_get:nn {#1} {first-style}
- % formatting
- \acro_property_get:nnTF {#1} {long-format}
- {
- \tl_set_eq:NN \l__acro_custom_long_format_tl \l__acro_long_format_tl
- \bool_set_true:N \l__acro_custom_long_format_bool
- }
- { \bool_set_false:N \l__acro_custom_long_format_bool }
- \acro_property_get:nn {#1} {first-long-format}
- \acro_property_get:nnTF {#1} {format}
+ \tl_gput_right:Nn \g__acro_articles_tl {{#1}}
+ \acro_property_declare:nnnnn
+ { \c_false_bool } { \c_false_bool } { \c_false_bool } { \c_false_bool }
+ {#1}
+ \acro_list_map:nn {short}
{
- \tl_set_eq:NN \l__acro_custom_short_format_tl \l__acro_format_tl
- \bool_set_true:N \l__acro_custom_short_format_bool
+ \DeclareAcroPropertyAlias {##1-#1} {#1}
+ \str_if_in:nnF {##1} {-acc}
+ { \DeclareAcroPropertyAlias {##1-acc-#1} {##1-#1} }
}
- { \bool_set_false:N \l__acro_custom_short_format_bool }
- \acro_property_get:nnTF {#1} {alt-format}
+ \acro_list_map:nn {long}
{
- \tl_set_eq:NN \l__acro_custom_alt_format_tl \l__acro_alt_format_tl
- \bool_set_true:N \l__acro_custom_alt_format_bool
+ \DeclareAcroPropertyAlias {##1-#1} {#1}
+ \str_if_in:nnF {##1} {acc}
+ { \DeclareAcroPropertyAlias {##1-acc-#1} {##1-#1} }
}
- { \bool_set_false:N \l__acro_custom_alt_format_bool }
- \acro_property_get:nnTF {#1} {foreign-format}
+ \bool_new:c {l__acro_article_#1_bool}
+ \tl_new:c {l__acro_article_#1_tl}
+ \exp_args:Nc \NewDocumentCommand {acro#1} {} { \use:c {acro_#1:} }
+ \cs_new_protected:cpn {acro_#1:}
{
- \tl_set_eq:NN \l__acro_custom_foreign_format_tl \l__acro_foreign_format_tl
- \bool_set_true:N \l__acro_custom_foreign_format_bool
+ \bool_if:NF \l__acro_article_bool
+ {
+ \bool_set_true:c {l__acro_article_#1_bool}
+ \bool_set_true:N \l__acro_article_bool
+ }
}
- { \bool_set_false:N \l__acro_custom_foreign_format_bool }
- \acro_property_get:nn {#1} {single-format}
- \acro_for_endings_do:n
+ \keys_define:nn {acro}
{
- \bool_if:cT {l__acro_##1_bool}
- { \__acro_set_ending_for:nnn {##1} {#1} {long} }
+ #1 .tl_set:c = {l__acro_article_#1_tl} ,
+ #1 .initial:n = #2
}
- \acro_property_get:nnF {#1} {long-post}
- { \tl_clear:N \l__acro_long_post_tl }
- \acro_property_get:nnT {#1} {long-pre}
- { \tl_put_left:NV \l__acro_long_tl \l__acro_long_pre_tl }
- \__acro_get_actions:n {#1}
}
+% #1: id
+\cs_new_protected:Npn \__acro_set_article_defaults:n #1
+ {
+ \tl_map_tokens:Nn \g__acro_articles_tl
+ { \__acro_default_article:nn {#1} }
+ }
+
+% #1: id
+% #2: article
+\cs_new_protected:Npn \__acro_default_article:nn #1#2
+ { \acro_property_set:nnv {#1} {#2} {l__acro_article_#2_tl} }
+
% --------------------------------------------------------------------------
-% plural endings and similar concepts:
+% mechanism for endings:
+\tl_new:N \l__acro_endings_tl
-\cs_new_protected:Npn \acro_for_endings_do:n #1
- { \seq_map_inline:Nn \l__acro_endings_seq {#1} }
+\bool_new:N \l__acro_ending_bool
-% #1: ending
-% #2: ID
-\cs_new_protected:Npn \__acro_set_ending:nn #1#2
+\acro_attribute_new:n {short:endings}
+\acro_attribute_new:n {long:endings}
+
+\cs_new_protected:Npn \__acro_declare_ending_properties:n #1
{
- \bool_if:cT {l__acro_#1_bool}
- {
- \__acro_set_ending_for:nnn {#1} {#2} {short}
- \__acro_set_ending_for:nnn {#1} {#2} {alt}
- \__acro_set_ending_for:nnn {#1} {#2} {long}
- \__acro_set_ending_for:nnn {#1} {#2} {foreign} % XXX
- }
+ \acro_property_declare:nnnnn
+ { \c_false_bool } { \c_false_bool } { \c_false_bool } { \c_false_bool }
+ {#1}
+ \acro_property_declare:nnnnn
+ { \c_false_bool } { \c_false_bool } { \c_false_bool } { \c_false_bool }
+ {#1-form}
}
-% this does nothing if a non-existent ending (#1) or non-existent form (#3) is
-% input
% #1: ending
-% #2: id
-% #3: short|alt|long|foreign
-\cs_new_protected:Npn \__acro_set_ending_for:nnn #1#2#3
+% #2: short default
+% #3: long default
+\cs_new_protected:Npn \acro_declare_ending:nnn #1#2#3
{
- \acro_if_ending_form_exist:nnT {#1} {#3}
+ \bool_new:c {l__acro_ending_#1_bool}
+ \exp_args:Nc \NewDocumentCommand {acro#1} {} { \use:c {acro_#1:} }
+ \cs_new_protected:cpn {acro_#1:}
+ {
+ \bool_if:NF \l__acro_ending_bool
+ {
+ \bool_set_true:c {l__acro_ending_#1_bool}
+ \bool_set_true:N \l__acro_ending_bool
+ }
+ }
+ \prg_new_conditional:cpnn {acro_if_#1:} {p,T,F,TF}
+ {
+ \bool_if:cTF {l__acro_ending_#1_bool}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+ \tl_put_right:Nn \l__acro_endings_tl {{#1}}
+ \keys_define:nn {acro}
+ {
+ short-#1-ending .code:n =
+ \acro_attribute_set:nnn {short:endings} {#1} {##1} ,
+ short-#1-ending .initial:n = #2 ,
+ long-#1-ending .code:n =
+ \acro_attribute_set:nnn {long:endings} {#1} {##1} ,
+ long-#1-ending .initial:n = #3
+ }
+ \__acro_declare_ending_properties:n {#1}% plural + plural-form
+ \acro_list_map:nn {short}
{
- \bool_if:cTF
- { c_ \prop_item:cn {l__acro_#3_#1_form_prop} {#2} _bool }
- { \prop_get:cnc {l__acro_#3_#1_prop} {#2} {l__acro_#3_tl} }
- { \prop_get:cnc {l__acro_#3_#1_prop} {#2} {l__acro_#3_#1_tl} }
+ % short-plural + short-plural-form
+ \__acro_declare_ending_properties:n {##1-#1}
+ % short-plural = plural
+ \acro_property_make_alias:nn {##1-#1} {#1}
+ }
+ \acro_list_map:nn {long}
+ {
+ % long-plural + long-plural-form
+ \__acro_declare_ending_properties:n {##1-#1}
+ % long-plural = plural
+ \acro_property_make_alias:nn {##1-#1} {#1}
+ % long-plural-form = plural-form
+ \acro_property_make_alias:nn {##1-#1-form} {#1-form}
}
}
-\cs_new_protected:Npn \__acro_set_endings:n #1
+% #1: id
+% #2: short|long
+\cs_new_protected:Npn \__acro_set_endings:nn #1#2
{
- \acro_for_endings_do:n
- { \__acro_set_ending:nn {##1} {#1} }
+ \acro_list_map:nn {#2}
+ {
+ \tl_map_inline:Nn \l__acro_endings_tl
+ { \__acro_set_ending:nnnn {#1} {#2} {##1} {####1} }
+ }
}
% #1: id
-% #2: short|alt|…
-\cs_new_protected:Npn \acro_get_ending_form:nn #1#2
+% #2: short|long
+% #3: property
+% #4: ending
+\cs_new_protected:Npn \__acro_set_ending:nnnn #1#2#3#4
{
- \acro_for_endings_do:n
+ \acro_property_if_set:nnF {#1} {#3-#4-form}
{
- \acro_if_ending_form_exist:nnT {##1} {#2}
+ \acro_property_if_set:nnF {#1} {#3-#4}
{
- \bool_lazy_and:nnT
- { \use:c {l__acro_##1_bool} }
- { \use:c { c_ \prop_item:cn {l__acro_#2_##1_form_prop} {#1} _bool } }
- { \prop_get:cncF {l__acro_#2_##1_prop} {#1} {l__acro_#2_tl} {} }
+ \__acro_property_set:nne {#1} {#3-#4}
+ { \acro_attribute_get:nn {#2:endings} {#4} }
}
}
}
% #1: id
-% #2: short|alt|…
-\cs_new_protected:Npn \acro_endings:nn #1#2
+\cs_new_protected:Npn \acro_set_endings:n #1
{
- \group_begin:
- \str_if_eq:nnTF {#2} {single}
- {
- \keys_set:nn {acro}
- { long-format= \l__acro_single_format_tl }
- \__acro_endings:nn {#1} {long}
- }
- { \__acro_endings:nn {#1} {#2} }
- \group_end:
+ \__acro_set_endings:nn {#1} {short}
+ \__acro_set_endings:nn {#1} {long}
+ }
+
+% ----------------------------------------------------------------------------
+\AcroModuleEnd
+\AcroModule{tools}{tools for treating different aspects}
+
+% ----------------------------------------------------------------------------
+\bool_new:N \l__acro_label_bool
+\tl_new:N \l_acro_label_prefix_tl
+
+\keys_define:nn {acro}
+ {
+ labels .bool_set:N = \l__acro_label_bool ,
+ labels .initial:n = false ,
+ label-prefix .tl_set:N = \l_acro_label_prefix_tl ,
+ label-prefix .initial:n = ac:
}
-\cs_new_protected:Npn \__acro_endings:nn #1#2
+% --------------------------------------------------------------------------
+% check for first usage:
+\bool_new:N \l__acro_first_bool
+
+\cs_new_protected:Npn \acro_first:
+ { \bool_set_true:N \l__acro_first_bool }
+
+\prg_new_conditional:Npnn \acro_if_first:n #1 {p,T,F,TF}
{
- \acro_for_endings_do:n
+ \bool_if:NTF \l__acro_first_bool
+ { \prg_return_true: }
{
- \__acro_set_ending_for:nnn {##1} {#1} {#2}
- \bool_if:cT {l__acro_##1_bool}
- { \__acro_ending_format:nn {#2} { \tl_use:c {l__acro_#2_##1_tl} } }
+ \acro_boolean_property_if:nnTF {#1} {used}
+ { \prg_return_false: }
+ { \prg_return_true: }
}
}
+\prg_generate_conditional_variant:Nnn \acro_if_first:n {e,V} {T,F,TF}
+
+% --------------------------------------------------------------------------
+% check for single usage:
+\int_new:N \l__acro_minimal_usage_int
-% #1: long|short|alt
-% #2: string
-\cs_new_protected:Npn \__acro_ending_format:nn #1#2
+% #1: id
+\cs_new_protected:Npn \acro_step:n #1
+ { \int_gincr:c {g__acro_ \acro_case_insensitive:n {#1} _int} }
+\cs_generate_variant:Nn \acro_step:n {e}
+
+% #1: id
+\prg_new_conditional:Npnn \acro_if_single:n #1 {p,T,F,TF}
{
- \bool_if:NTF \l__acro_include_endings_format_bool
+ \int_compare:nNnTF
{
- \str_case:nn {#1}
- {
- {long}
- {
- \bool_if:NTF \l__acro_custom_long_format_bool
- { \l__acro_custom_long_format_tl }
- {
- \bool_if:NTF \l__acro_first_instance_bool
- { \l__acro_first_long_format_tl }
- { \l__acro_long_format_tl }
- }
- }
- {short}
- {
- \bool_if:NTF \l__acro_custom_short_format_bool
- { \l__acro_custom_short_format_tl }
- { \l__acro_short_format_tl }
- }
- {alt}
- {
- \bool_if:NTF \l__acro_custom_alt_format_bool
- { \l__acro_custom_alt_format_tl }
- { \l__acro_alt_format_tl }
- }
- {foreign}
- {
- \bool_if:NTF \l__acro_custom_foreign_format_bool
- { \l__acro_custom_foreign_format_tl }
- { \l__acro_foreign_format_tl }
- }
- }
+ \bool_if:NTF \l__acro_usage_local_bool
+ { \acro_barrier_usage:n {#1} }
+ { \acro_property_get:nn {#1} {usage} }
}
- { \use:n }
- {#2}
+ > \l__acro_minimal_usage_int
+ { \prg_return_false: }
+ { \prg_return_true: }
}
-
-\prg_new_conditional:Npnn \acro_if_ending_exist:n #1 {p,T,F,TF}
+\prg_generate_conditional_variant:Nnn \acro_if_single:n {e,V} {p,TF}
+
+\bool_new:N \l__acro_use_only_first_bool
+\tl_new:N \l__acro_single_tl
+
+\keys_define:nn {acro}
{
- \seq_if_in:NnTF \l__acro_endings_seq {#1}
- { \prg_return_true: }
- { \prg_return_false: }
+ single .code:n =
+ \str_case:nnF {#1}
+ {
+ {} { \int_set:Nn \l__acro_minimal_usage_int {1} }
+ {true} { \int_set:Nn \l__acro_minimal_usage_int {1} }
+ {false} { \int_set:Nn \l__acro_minimal_usage_int {0} }
+ }
+ { \int_set:Nn \l__acro_minimal_usage_int {#1} } ,
+ minimal-usage .meta:n = { single = #1 } ,
+ single .initial:n = 0 ,
+ single-style .tl_set:N = \l__acro_single_tl ,
+ single-style .initial:n = long ,
+ use-only-first .bool_set:N = \l__acro_use_only_first_bool ,
+ use-only-first .initial:n = false
}
-% #1: ending
-% #2: short|alt|…
-\prg_new_conditional:Npnn \acro_if_ending_form_exist:nn #1#2 {p,T,F,TF}
+% --------------------------------------------------------------------------
+% uppercasing the first letter:
+\bool_new:N \l__acro_upper_bool
+\bool_new:N \l__acro_upper_short_bool
+\bool_new:N \l__acro_upper_list_bool
+
+\cs_new:Npn \__acro_upper_case:n #1 {}
+\cs_new:Npn \__acro_list_upper_case:n #1 {}
+
+\cs_new_protected:Npn \acro_soft_upper:
{
- \cs_if_exist:cTF {l__acro_#2_#1_prop}
- { \prg_return_true: }
- { \prg_return_false: }
+ \bool_if:NF \l__acro_upper_short_bool
+ { \bool_set_false:N \l__acro_upper_bool }
}
-
-% #1: name
-% #2: default short
-% #3: default long
-\cs_new_protected:Npn \acro_provide_ending:nnn #1#2#3
- {
- \acro_if_ending_exist:nTF {#1}
- {
- \acro_harmless_message:nn {ending-exists} {#1}
- % short variables
- \acro_set_ending_variables:nnn {short} {#1} {#2}
- % alt variables
- \acro_set_ending_variables:nnn {alt} {#1} {#2}
- % long variables
- \acro_set_ending_variables:nnn {long} {#1} {#3}
- % foreign variables % XXX
- \acro_set_ending_variables:nnn {foreign} {#1} {#3}
- }
- {
- % registering:
- \bool_if:NT \g__acro_first_acronym_declared_bool
- { \acro_serious_message:n {ending-before-acronyms} }
- \seq_put_right:Nn \l__acro_endings_seq {#1}
- \bool_new:c {l__acro_#1_bool}
- % short variables
- \acro_define_and_set_ending_variables:nnn {short} {#1} {#2}
- % alt variables
- \acro_define_and_set_ending_variables:nnn {alt} {#1} {#2}
- % long variables
- \acro_define_and_set_ending_variables:nnn {long} {#1} {#3}
- % foreign variables % XXX
- \acro_define_and_set_ending_variables:nnn {foreign} {#1} {#3}
- % define setup command:
- \tl_set:Nn \l__acro_tmpa_tl {#1}
- \tl_replace_all:Nnn \l__acro_tmpa_tl {-} {_}
- \cs_new_protected:cpn {acro_ \l__acro_tmpa_tl :}
- { \bool_set_true:c {l__acro_#1_bool} }
- % acronym properties:
- % short-<ending>:
- \acro_declare_property:nnn {short_#1} {short-#1}
- {
- \prop_put:cnn {l__acro_short_#1_form_prop} {##1} {false}
- \prop_put:cnx {l__acro_pdfstring_short_#1_prop}
- {##1} { \prop_item:Nn \l__acro_short_prop {##1} \exp_not:n {##2} }
- }
- % short-<ending>-form:
- \acro_declare_property_generic:nnn {short_#1_form} {short-#1-form}
- {
- \__acro_property_check:nn {##1} {short-#1-form}
- \prop_put:cnn {l__acro_short_#1_form_prop} {##1} {true}
- \prop_put:cnn {l__acro_short_#1_prop} {##1} {##2}
- \prop_put:cnn {l__acro_pdfstring_short_#1_prop} {##1} {##2}
- }
- % alt-<ending>:
- \acro_declare_property:nnn {alt_#1} {alt-#1}
- {
- \prop_put:cnn {l__acro_alt_#1_form_prop} {##1} {false}
- \prop_put:cnx {l__acro_pdfstring_alt_#1_prop}
- {##1} { \prop_item:Nn \l__acro_alt_prop {##1} \exp_not:n {##2} }
- }
- % alt-<ending>-form:
- \acro_declare_property_generic:nnn {alt_#1_form} {alt-#1-form}
- {
- \__acro_property_check:nn {##1} {alt-#1-form}
- \prop_put:cnn {l__acro_alt_#1_form_prop} {##1} {true}
- \prop_put:cnn {l__acro_alt_#1_prop} {##1} {##2}
- \prop_put:cnn {l__acro_pdfstring_alt_#1_prop} {##1} {##2}
- }
- % long-<ending>:
- \acro_declare_property:nnn {long_#1} {long-#1}
- { \prop_put:cnn {l__acro_long_#1_form_prop} {##1} {false} }
- % long-<ending>-form:
- \acro_declare_property_generic:nnn {long_#1_form} {long-#1-form}
- {
- \__acro_property_check:nn {##1} {long-#1-form}
- \prop_put:cnn {l__acro_long_#1_form_prop} {##1} {true}
- \prop_put:cnn {l__acro_long_#1_prop} {##1} {##2}
- }
- % foreign-<ending>: % XXX
- \acro_declare_property:nnn {foreign_#1} {foreign-#1}
- { \prop_put:cnn {l__acro_foreign_#1_form_prop} {##1} {false} }
- % foreign-<ending>-form: % XXX
- \acro_declare_property_generic:nnn {foreign_#1_form} {foreign-#1-form}
- {
- \__acro_property_check:nn {##1} {foreign-#1-form}
- \prop_put:cnn {l__acro_foreign_#1_form_prop} {##1} {true}
- \prop_put:cnn {l__acro_foreign_#1_prop} {##1} {##2}
- }
- % options:
- % short-<ending>-ending
- % alt-<ending>-ending
- % long-<ending>-ending
- % foreign-<ending>-ending % XXX
- % <ending>-ending
- \keys_define:nn {acro}
- {
- short-#1-ending .code:n =
- \bool_if:NT \g__acro_first_acronym_declared_bool
- { \acro_serious_message:n {ending-before-acronyms} }
- \tl_set:cn {l__acro_default_short_#1_tl} {##1} ,
- alt-#1-ending .code:n =
- \bool_if:NT \g__acro_first_acronym_declared_bool
- { \acro_serious_message:n {ending-before-acronyms} }
- \tl_set:cn {l__acro_default_alt_#1_tl} {##1} ,
- long-#1-ending .code:n =
- \bool_if:NT \g__acro_first_acronym_declared_bool
- { \acro_serious_message:n {ending-before-acronyms} }
- \tl_set:cn {l__acro_default_long_#1_tl} {##1} ,
- foreign-#1-ending .code:n =
- \bool_if:NT \g__acro_first_acronym_declared_bool
- { \acro_serious_message:n {ending-before-acronyms} }
- \tl_set:cn {l__acro_default_foreign_#1_tl} {##1} ,
- #1-ending .code:n =
- \bool_if:NT \g__acro_first_acronym_declared_bool
- { \acro_serious_message:n {ending-before-acronyms} }
- \__acro_read_ending_settings:nww {#1} ##1// \acro_stop:
- }
- % pdfstrings:
- % TODO: add long forms:
- \prop_new:c {l__acro_pdfstring_short_#1_prop}
- \cs_new:cpn {acro_pdf_string_short_#1:n} ##1
- {
- \acro_if_star_gobble:nTF {##1}
- { \use:e { \prop_item:cn {l__acro_pdfstring_short_#1_prop} } }
- { \use:e {\prop_item:cn {l__acro_pdfstring_short_#1_prop} {##1} } }
- }
- \cs_new:cpn {acpdfstring#1} { \use:c {acro_pdf_string_short_#1:n} }
- \prop_new:c {l__acro_pdfstring_alt_#1_prop}
- \cs_new:cpn {acro_pdf_string_alt_#1:n} ##1
- {
- \acro_if_star_gobble:nTF {##1}
- { \prop_item:cn {l__acro_pdfstring_alt_#1_prop} }
- { \prop_item:cn {l__acro_pdfstring_alt_#1_prop} {##1} }
- }
- \cs_new:cpn {acpdfstringalt#1} { \use:c {acro_pdf_string_alt_#1:n} }
- }
+
+\cs_new_protected:Npn \acro_upper:
+ {
+ \bool_if:NT \l__acro_article_bool
+ { \bool_set_false:N \l__acro_article_bool }
+ \bool_set_true:N \l__acro_upper_bool
+ }
+
+\cs_new:Npn \__acro_upper:n #1
+ {
+ \bool_if:NTF \l__acro_upper_bool
+ { \__acro_upper_case:n {#1} }
+ {#1}
}
+\cs_generate_variant:Nn \__acro_upper:n {e}
-% #1: short|alt|long
-% #2: ending name
-% #3: default ending
-\cs_new_protected:Npn \acro_define_and_set_ending_variables:nnn #1#2#3
+\keys_define:nn {acro/uppercase}
{
- \acro_define_ending_variables:nn {#1} {#2}
- \acro_set_ending_variables:nnn {#1} {#2} {#3}
+ cmd .cs_set:Np = \__acro_upper_case:n ,
+ cmd .value_required:n = true ,
+ first .meta:n = { cmd = \text_titlecase_first:n } ,
+ first .value_forbidden:n = true ,
+ all .meta:n = { cmd = \text_uppercase:n } ,
+ all .value_forbidden:n = true ,
+ none .meta:n = { cmd = \text_lowercase:n } ,
+ none .value_forbidden:n = true ,
+ title .meta:n = { first } ,
+ title .value_forbidden:n = true ,
+ short .bool_set:N = \l__acro_upper_short_bool ,
+ short .initial:n = true ,
+ list .bool_set:N = \l__acro_upper_list_bool ,
+ list .initial:n = false
}
-% #1: short|alt|long
-% #2: ending name
-\cs_new_protected:Npn \acro_define_ending_variables:nn #1#2
+\keys_define:nn {acro/list/uppercase}
{
- \prop_new:c {l__acro_#1_#2_prop}
- \prop_new:c {l__acro_#1_#2_form_prop}
- \tl_new:c {l__acro_#1_#2_tl}
- \tl_new:c {l__acro_default_#1_#2_tl}
+ cmd .cs_set:Np = \__acro_list_upper_case:n ,
+ cmd .value_required:n = true ,
+ first .meta:n = { cmd = \text_titlecase_first:n } ,
+ first .value_forbidden:n = true ,
+ all .meta:n = { cmd = \text_uppercase:n } ,
+ all .value_forbidden:n = true ,
+ none .meta:n = { cmd = \text_lowercase:n } ,
+ none .value_forbidden:n = true ,
+ title .meta:n = { first } ,
+ title .value_forbidden:n = true ,
}
-% #1: short|alt|long
-% #2: ending name
-% #3: default ending
-\cs_new_protected:Npn \acro_set_ending_variables:nnn #1#2#3
- { \tl_set:cn {l__acro_default_#1_#2_tl} {#3} }
+\keys_set:nn {acro} { list/uppercase/first , uppercase/first }
-% #1: ending name
-% #2: short (and long if #4 is blank)
-% #3: long
-\cs_new_protected:Npn \__acro_read_ending_settings:nww #1#2/#3/#4 \acro_stop:
+% --------------------------------------------------------------------------
+% citing:
+\bool_new:N \l__acro_cite_bool
+\bool_new:N \l__acro_cite_always_bool
+\bool_new:N \l__acro_cite_group_bool
+\bool_new:N \g__acro_cited_bool
+
+\tl_new:N \l__acro_cite_pre_tl
+\tl_new:N \l__acro_cite_between_tl
+
+% #1: id
+\cs_new_protected:Npn \__acro_cite:n #1
{
- \acro_set_ending_variables:nnn {short} {#1} {#2}
- \acro_set_ending_variables:nnn {alt} {#1} {#2}
- \tl_if_blank:nTF {#4}
+ \use:e
{
- \acro_set_ending_variables:nnn {long} {#1} {#3}
- \acro_set_ending_variables:nnn {foreign} {#1} {#3}
- }
- {
- \acro_set_ending_variables:nnn {long} {#1} {#2}
- \acro_set_ending_variables:nnn {foreign} {#1} {#2}
+ \__acro_cite:w
+ \acro_property_get:nn {#1} {cite}
}
+ [\q_no_value]
+ [\q_no_value]
+ \scan_stop:
+ \acro_stop:
}
+\cs_generate_variant:Nn \__acro_cite:n {e}
-% --------------------------------------------------------------------------
-% enable us to know if the acronym is used only once and provide a different
-% style for that:
-\prg_new_protected_conditional:Npnn \acro_is_used:n #1 { T,F,TF }
+% #1: boolean, true if starred
+% #2: id
+\prg_new_conditional:Npnn \acro_cite_if:nn #1#2 {T,F,TF}
{
- \acro_record_barrier:n {#1}
- \bool_lazy_and:nnTF
- { \bool_if_p:c {g__acro_#1_used_bool} }
+ \bool_lazy_all:nTF
{
- \bool_lazy_or_p:nn
- {
- \bool_lazy_and_p:nn
- { \bool_if_p:c {g__acro_#1_first_use_bool} }
- { \g__acro_mark_first_as_used_bool }
- }
- { !\g__acro_mark_first_as_used_bool }
+ { \l__acro_cite_bool }
+ { \l__acro_use_bool }
+ { !#1 }
}
{
- \bool_if:NTF \l__acro_mark_as_used_bool
- {
- \__acro_aux_file:Nxxxx \acro@used@twice
- {#1}
- { \thepage }
- { \arabic {page} }
- { \arabic {abspage} }
- }
- { \__acro_aux_file:Nxxxx \acro@used@twice {#1} {} {} {} }
- \prg_return_true:
+ \bool_lazy_or:nnTF
+ { \l__acro_cite_always_bool }
+ { \acro_if_first_p:n {#2} }
+ { \prg_return_true: }
+ { \prg_return_false: }
}
+ { \prg_return_false: }
+ }
+\prg_generate_conditional_variant:Nnn \acro_cite_if:nn {ne} {T}
+
+% #1: cite key
+\cs_new_protected:Npn \acro_cite:n #1
+ {
+ \acro_property_if_set:nnT {#1} {cite}
{
- \bool_if:NTF \l__acro_mark_as_used_bool
- {
- \__acro_aux_file:Nxxxx \acro@used@once
- {#1}
- { \thepage }
- { \arabic {page} }
- { \arabic {abspage} }
- \bool_lazy_and:nnT
- { !\bool_if_p:c {g__acro_#1_label_bool} }
- { \l__acro_place_label_bool }
- {
- \bool_gset_true:c { g__acro_#1_label_bool }
- \label{\l__acro_label_prefix_tl #1}
- }
- \bool_gset_true:c { g__acro_#1_used_bool }
- }
- {}
- % I can't remember why I want an empty first use case for starred
- % acronyms…
- % { \__acro_aux_file:Nxxxx \acro@used@once {#1} {} {} {} }
- \prg_return_false:
+ \acro_property_get:nn {#1} {before-citation}
+ \l__acro_cite_pre_tl
+ \__acro_cite:n {#1}
+ \bool_gset_true:N \g__acro_cited_bool
}
}
+\cs_generate_variant:Nn \acro_cite:n {e}
-\cs_new:Npn \acro_is_used:n #1
- { \acro_is_used:nTF {#1} { } { } }
+\cs_new_protected:Npn \__acro_cite:w #1[#2]#3[#4]#5#6 \acro_stop:
+ {
+ % no options: #1: key, #6 is blank
+ % 1 option: #3: key, #2: option, #4: \q_no_value
+ % 2 options: #5: property, #2: first option, #4: second option
+ \tl_if_blank:nTF {#6}
+ { \__acro_cite_cmd:w {#1} }
+ {
+ \quark_if_no_value:nTF {#4}
+ { \__acro_cite_cmd:w [{#2}] {#3}}
+ { \__acro_cite_cmd:w [{#2}] [{#4}] {#5} }
+ }
+ }
-\cs_new_protected:Npn \__acro_aux_file:Nnnnn #1#2#3#4#5
- { \iow_shipout:Nn \@auxout { #1 {#2} {#3} {#4} {#5} } }
-\cs_generate_variant:Nn \__acro_aux_file:Nnnnn {Nxxxx}
-
-\cs_new_protected:Npn \__acro_aux_file_now:n #1
- { \iow_now:Nn \@auxout {#1} }
-\cs_generate_variant:Nn \__acro_aux_file_now:n {x}
+\cs_new_protected:Npn \__acro_cite_cmd:w {}
+\cs_new_protected:Npn \__acro_cite_group_cmd:w {}
+
+\keys_define:nn {acro/cite}
+ {
+ cmd .cs_set:Np = \__acro_cite_cmd:w ,
+ cmd .initial:n = \cite ,
+ cmd .value_required:n = true ,
+ group .code:n =
+ \str_case:nnTF {#1}
+ { {true} {} {false} {} }
+ { \use:c {bool_set_#1:N} \l__acro_cite_group_bool }
+ { \msg_error:nnn {kernel} {boolean-values-only} {group} } ,
+ group .initial:n = false ,
+ display .choice: ,
+ display/all .code:n =
+ \bool_set_true:N \l__acro_cite_bool
+ \bool_set_true:N \l__acro_cite_always_bool ,
+ display/first .code:n =
+ \bool_set_true:N \l__acro_cite_bool
+ \bool_set_false:N \l__acro_cite_always_bool ,
+ display/none .code:n = \bool_set_false:N \l__acro_cite_bool ,
+ display .initial:n = first ,
+ pre .tl_set:N = \l__acro_cite_pre_tl ,
+ pre .initial:n = \nobreakspace ,
+ group / pre .tl_set:N = \l__acro_cite_between_tl ,
+ group / pre .initial:n = {,~} ,
+ group / cmd .cs_set:Np = \__acro_cite_group_cmd:w ,
+ group / cmd .initial:n = \cite
+ }
% --------------------------------------------------------------------------
-% the commands for the auxiliary file:
-\cs_new_protected:Npn \acro@used@once #1#2#3#4
+% indexing
+\bool_new:N \l__acro_index_bool
+\tl_new:N \l_acro_index_disable_tl
+
+\cs_new_protected:Npn \__acro_index:n {}
+\cs_generate_variant:Nn \__acro_index:n {e}
+
+% #1: id
+\cs_new_protected:Npn \acro_index:n #1
{
- \cs_gset_nopar:cpn {acro@#1@once} {#1}
- \bool_gset_true:c {g__acro_#1_in_list_bool}
- \tl_if_empty:nF {#2#3#4}
+ \bool_lazy_and:nnT
+ { \l__acro_index_bool }
+ { !\acro_boolean_property_if_p:nn {#1} {no-index} }
{
- % \bool_gset_true:c { g__acro_#1_used_bool }
- \seq_gput_right:cn {g__acro_#1_pages_seq} { {#2}{#3}{#4} }
+ \group_begin:
+ \acro_trailing_map:n
+ { \bool_set_false:c {l__acro_trailing_##1_bool} }
+ \l_acro_index_disable_tl
+ \acro_property_if_set:nnT {#1} {index-cmd}
+ {
+ \exp_args:NNe
+ \cs_set:Npn \__acro_index:n
+ { \acro_property_get:nn {#1} {index-cmd} }
+ }
+ \acro_property_if_set:nnTF {#1} {index}
+ { \__acro_index:e { \acro_property_get:nn {#1} {index} } }
+ {
+ \__acro_index:e
+ {
+ \acro_property_get:nn {#1} {index-sort} @
+ \acro_format:nnn
+ {#1}
+ {short}
+ { \acro_property_get:nn {#1} {short} }
+ }
+ }
+ \group_end:
}
}
-\cs_new_protected:Npn \acro@used@twice #1#2#3#4
+
+\keys_define:nn {acro/index}
{
- \cs_gset_nopar:cpn {acro@#1@twice} {#1}
- \tl_if_empty:nF {#2#3#4}
- { \seq_gput_right:cn {g__acro_#1_pages_seq} { {#2}{#3}{#4} } }
+ use .bool_set:N = \l__acro_index_bool ,
+ use .initial:n = false ,
+ cmd .cs_set:Np = \__acro_index:n ,
+ cmd .initial:n = \index ,
+ cmd .value_required:n = true ,
+ disable .code:n = \tl_put_right:Nn \l_acro_index_disable_tl {#1} ,
+ disable .value_required:n = true ,
+ clear .code:n = \tl_clear:N \l_acro_index_disable_tl ,
+ clear .value_forbidden:n = true
}
-\cs_new_protected:Npn \acro@pages #1#2
- { \tl_gset:cn {g__acro_#1_recorded_pages_tl} {#2} }
+\keys_set:nn {acro/index} { disable = \def\@{} }
-\cs_new_protected:Npn \acro@rerun@check
+% --------------------------------------------------------------------------
+% looking for trailing tokens and define action
+\bool_new:N \l__acro_trailing_tokens_bool
+\tl_new:N \l__acro_trailing_tokens_tl
+\tl_new:N \g__acro_trailing_tokens_tl
+\acro_attribute_new:n {trailing:token}
+\acro_attribute_new:n {trailing:action}
+
+\cs_new_protected:Npn \acro_trailing_action_new:n #1
+ { \bool_new:c {l__acro_trailing_#1_bool} }
+
+\cs_new_protected:Npn \acro_trailing_action_activate:n #1
+ { \bool_set_true:c {l__acro_trailing_#1_bool} }
+
+\cs_new_protected:Npn \acro_trailing_action_deactivate:n #1
+ { \bool_set_false:c {l__acro_trailing_#1_bool} }
+
+% register a new token but don't activate its action:
+% #1: token
+% #2: action
+\cs_new_protected:Npn \acro_trailing_token_register:Nn #1#2
{
- \bool_if:NT \g__acro_rerun_bool
- {
- \@latex@warning@no@line
- {Acronyms~ may~ have~ changed.~ Please~ rerun~ LaTeX}
- }
+ \tl_gput_right:Nn \g__acro_trailing_tokens_tl {{#2}}
+ \acro_attribute_set:nnn {trailing:token} {#2} {#1}
+ \acro_attribute_set:nnn {trailing:action} {#1}
+ { \acro_trailing_action_activate:n {#2} }
+ \acro_trailing_action_new:n {#2}
}
-\AtEndDocument
+% maps over actions
+\cs_new_protected:Npn \acro_trailing_map:n #1
+ { \tl_map_inline:Nn \g__acro_trailing_tokens_tl {#1} }
+
+% activate a token:
+% #1: action
+\cs_new_protected:Npn \acro_trailing_token_activate:n #1
{
- \bool_gset_false:N \g__acro_rerun_bool
- \cs_gset_protected:Npn \acro@used@once #1#2#3#4
+ \tl_set:Ne \l__acro_tmpa_tl { \acro_attribute_get:nn {trailing:token} {#1} }
+ \tl_if_blank:VF \l__acro_tmpa_tl
{
- \tl_set:Nn \l__acro_tmpa_tl {#1}
- \tl_if_eq:cNF {acro@#1@once} \l__acro_tmpa_tl
- { \bool_gset_true:N \g__acro_rerun_bool }
+ \tl_remove_all:NV \l__acro_trailing_tokens_tl \l__acro_tmpa_tl
+ \tl_put_right:NV \l__acro_trailing_tokens_tl \l__acro_tmpa_tl
}
- \cs_gset_protected:Npn \acro@used@twice #1#2#3#4
+ }
+
+% deactivate a token:
+% #1: action
+\cs_new_protected:Npn \acro_trailing_token_deactivate:n #1
+ {
+ \tl_set:Ne \l__acro_tmpa_tl { \acro_attribute_get:nn {trailing:token} {#1} }
+ \tl_if_blank:VF \l__acro_tmpa_tl
+ { \tl_remove_once:NV \l__acro_trailing_tokens_tl \l__acro_tmpa_tl }
+ }
+
+% #1: action
+\prg_new_conditional:Npnn \acro_trailing_if_token:n #1 {p,T,F,TF}
+ {
+ \bool_if:cTF {l__acro_trailing_#1_bool}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+
+% #1: csv list of actions
+\prg_new_conditional:Npnn \acro_trailing_if_tokens:n #1 {T,F,TF}
+ {
+ \clist_map_function:nN {#1} \__acro_trailing_if_tokens:n
+ \use_ii:nn
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+
+% #1: action
+\cs_new:Npn \__acro_trailing_if_tokens:n #1
+ {
+ \bool_if:cT {l__acro_trailing_#1_bool}
+ { \clist_map_break:n { \use_ii:nnn } }
+ }
+
+\cs_new_protected:Npn \__acro_trailing_check:N #1
+ {
+ \tl_map_inline:Nn \l__acro_trailing_tokens_tl
{
- \tl_set:Nn \l__acro_tmpa_tl {#1}
- \tl_if_eq:cNF {acro@#1@twice} \l__acro_tmpa_tl
- { \bool_gset_true:N \g__acro_rerun_bool }
+ \token_if_eq_meaning:NNT #1 ##1
+ { \acro_attribute_get:nn {trailing:action} {##1} }
}
- \acro_for_all_acronyms_do:n
+ }
+
+\cs_new_protected:Npn \acro_begin:
+ {
+ \group_begin:
+ \__acro_check_after_end:w
+ }
+
+\cs_new_protected:Npn \__acro_check_after_end:w #1 \acro_end:
+ {
+ \cs_set:Npn \__acro_execute:
{
- \seq_if_empty:cF {g__acro_#1_pages_seq}
- {
- \__acro_aux_file_now:x
- {
- \acro@pages {#1}
- { \seq_use:cn {g__acro_#1_pages_seq} {|} } ^^J
- \acro@barriers {#1}
- { \seq_use:cn {g__acro_#1_barriers_seq} {,} }
- }
- }
- \acro_check_barriers:n {#1}
+ \__acro_trailing_check:N \l_peek_token
+ #1
+ \acro_end: % this will end the group opened by \acro_begin:
}
- \__acro_aux_file_now:n { \acro@rerun@check }
+ \peek_after:Nw \__acro_execute:
}
-% if `acro' is deactivated prevent unnecessary errors from aux file:
-\if@filesw
-\AtBeginDocument
+\bool_new:N \g__acro_gobble_trail_bool
+
+\cs_new_protected:Npn \acro_end:
{
- \__acro_aux_file_now:n
+ \bool_if:NT \g__acro_gobble_trail_bool
{
- \providecommand \acro@used@once [4] {} ^^J
- \providecommand \acro@used@twice [4] {} ^^J
- \providecommand \acro@pages [2] {} ^^J
- \providecommand \acro@rerun@check {} ^^J
- \providecommand \acro@print@list {} ^^J
- \providecommand \acro@barriers [2] {}
+ \bool_gset_false:N \g__acro_gobble_trail_bool
+ \use_i:nn
}
+ \group_end:
}
-\fi
-% --------------------------------------------------------------------------
-% #1: short|alt|long
-% #2: string to be typeset
-\cs_new_protected:Npn \__acro_typeset:nn #1#2
+% register some tokens to be checked for:
+\acro_trailing_token_register:Nn . {dot}
+\acro_trailing_token_register:Nn , {comma}
+\acro_trailing_token_register:Nn - {dash}
+\acro_trailing_token_register:Nn \babelhyphen {babel-hyphen}
+
+\tl_new:N \l__acro_fnpct_check_tl
+
+\cs_new_protected:Npn \acro_footnote:n #1
{
- \mode_if_horizontal:F { \leavevmode }
- \group_begin:
- \use:x
- {
- \bool_if:cTF {l__acro_custom_#1_format_bool}
- { \exp_not:v {l__acro_custom_#1_format_tl} }
- { \exp_not:v {l__acro_#1_format_tl} }
- {#2}
- }
- \group_end:
+ \tl_set:Ne \l__acro_fnpct_check_tl { \l__acro_fnpct_check_tl }
+ \exp_last_unbraced:Nno
+ \footnote {#1}
+ \l__acro_fnpct_check_tl
}
-% typeset the short form:
-% #1: ID
-% #2: short form
-\cs_new_protected:Npn \acro_write_short:nn #1#2
+% options for activating actions:
+\keys_define:nn {acro/trailing}
{
- \__acro_make_link:nn {#1}
+ activate .code:n =
+ \clist_map_inline:nn {#1} { \acro_trailing_token_activate:n {##1} } ,
+ activate .initial:n = {dot,comma} ,
+ deactivate .code:n =
+ \clist_map_inline:nn {#1} { \acro_trailing_token_deactivate:n {##1} } ,
+ register .code:n = \acro_trailing_token_register:Nn #1 ,
+ fnpct-check .tl_set:N = \l__acro_fnpct_check_tl ,
+ fnpct-check .initial:n =
+ \aciftrailing {dot} { . \acgobbletrail } {}
+ \aciftrailing {comma} { , \acgobbletrail } {}
+ }
+
+% some user macros:
+\cs_new:Npn \acro_dot:
+ { \acro_trailing_if_token:nF {dot} {.\@} }
+
+\cs_new:Npn \acro_space:
+ { \acro_trailing_if_tokens:nF {dash,babel-hyphen} { \c_space_tl } }
+
+% ----------------------------------------------------------------------------
+% sorting the list:
+% the following code is an adaption of expl3 code used for \str_if_eq:NN(TF)
+\sys_if_engine_luatex:TF
+ {
+ \cs_new_protected:Npn \__acro_strcmp:nn #1#2
{
- \__acro_typeset:nn {short}
+ \lua_now:e
{
- \bool_if:NTF \l__acro_first_upper_bool
- { \exp_not:N \__acro_first_upper_case:n { \exp_not:n {#2} } }
- { \exp_not:n {#2} }
+ l3kernel.strcmp
+ (
+ " \__acro_escape_x:n {#1} " ,
+ " \__acro_escape_x:n {#2} "
+ )
}
}
+ \cs_new:Npn \__acro_escape_x:n #1
+ {
+ \lua_escape:e
+ { \tex_detokenize:D \use:e { {#1} } }
+ }
}
-\cs_generate_variant:Nn \acro_write_short:nn {nV,nv}
+ { \cs_new_eq:NN \__acro_strcmp:nn \tex_strcmp:D }
-% typeset the alternative form:
-% #1: ID
-% #2: alt form
-\cs_new_protected:Npn \acro_write_alt:nn #1#2
+\cs_new_protected:Npn \acro_list_sort:
{
- \__acro_make_link:nn {#1}
+ \seq_sort:Nn \g__acro_list_seq
{
- \__acro_typeset:nn {alt}
+ \int_compare:nNnTF
{
- \bool_lazy_and:nnTF
- { \l__acro_first_upper_bool }
- { \l__acro_upper_short_bool }
- { \exp_not:N \__acro_first_upper_case:n { \exp_not:n {#2} } }
- { \exp_not:n {#2} }
- }
+ \__acro_strcmp:nn
+ { \str_fold_case:e { \acro_property_get:nn {##1} {sort} } }
+ { \str_fold_case:e { \acro_property_get:nn {##2} {sort} } }
+ } = {-1}
+ { \sort_return_same: }
+ { \sort_return_swapped: }
}
}
-\cs_generate_variant:Nn \acro_write_alt:nn {nV,nv}
-% typeset a long form:
-% TODO: rethink the formatting mechanism
-% right now a custom format gets applied additionally to the global one
-% although before it
-% #1: format
-% #2: long form
-\cs_new_protected:Npn \acro_write_long:nn #1#2
+% --------------------------------------------------------------------------
+% barriers:
+\int_new:N \g_acro_barrier_int
+\int_new:N \g_acro_barrier_total_int
+\bool_new:N \l__acro_barriers_bool
+\bool_new:N \l__acro_barriers_reset_bool
+\bool_new:N \l__acro_usage_local_bool
+
+\msg_new:nnn {acro} {barriers}
{
- \__acro_typeset:nn {long}
- {
- \exp_not:n {#1}
- {
- \bool_if:NTF \l__acro_first_upper_bool
- { \exp_not:N \__acro_first_upper_case:n { \exp_not:n {#2} } }
- { \exp_not:n {#2} }
- }
- }
+ You~ seem~ to~ be~ using~ barriers~ but~ haven't~ set~ `barriers/use~ =~
+ true',~ yet!
}
-\cs_generate_variant:Nn \acro_write_long:nn {VV,Vo,Vf,V,v,vv}
-\prg_new_conditional:Npnn \acro_if_foreign:n #1 {T,F,TF}
+\__acro_auxlist_field_new:cpn {total-barriers} #1
+ { \int_gset:Nn \g_acro_barrier_total_int {#1} }
+
+\acro_at_begin_document:n
+ { \int_gset:Nn \g_acro_barrier_int {1} }
+
+\acro_at_end_document:n
{
- \bool_lazy_and:nnTF
- { \l__acro_foreign_bool }
- { \prop_if_in_p:Nn \l__acro_foreign_prop {#1} }
- { \prg_return_true: }
- { \prg_return_false: }
+ \acro_auxlist_to_aux:nn
+ {total-barriers}
+ { { \int_use:N \g_acro_barrier_int } }
}
-\cs_new_protected:Npn \acro_foreign_language:nn #1#2 {}
-\AtBeginDocument{
- \cs_if_exist:NTF \foreignlanguage
- {
- \cs_set_protected:Npn \acro_foreign_language:nn #1#2
- {
- \tl_if_blank:nTF {#1}
- {#2}
- { \foreignlanguage {#1} {#2} }
- }
- }
- {
- \cs_set_protected:Npn \acro_foreign_language:nn #1#2
- { \use_ii:nn {#1} {#2} }
- }
-}
-\cs_generate_variant:Nn \acro_foreign_language:nn {VV}
+\cs_new_protected:Npn \acro_barrier:
+ {
+ \int_gincr:N \g_acro_barrier_int
+ \bool_if:NT \l__acro_barriers_reset_bool
+ { \acro_reset_all: }
+ \bool_if:NF \l__acro_barriers_bool
+ { \msg_warning:nnn {acro} {barriers} }
+ }
-\cs_new_protected:Npn \acro_write_foreign:n #1
+% #1: id
+\cs_new_protected:Npn \acro_record_barrier:n #1
{
- \acro_if_foreign:nT {#1}
+ \bool_if:NT \l__acro_barriers_bool
{
- \acro_property_get:nnT {#1} {foreign}
+ \int_compare:nNnTF
+ { \intarray_count:c {g__acro_#1_barriers_intarray} } > 0
{
- \group_begin:
- \__acro_endings:nn {#1} {foreign}
- \tl_use:N \l__acro_foreign_format_tl
+ \intarray_gset:cnn {g__acro_#1_barriers_intarray}
+ { \int_use:N \g_acro_barrier_int }
{
- \acro_foreign_language:VV
- \l__acro_foreign_lang_tl
- \l__acro_foreign_tl
+ \intarray_item:cn {g__acro_#1_barriers_intarray}
+ { \int_use:N \g_acro_barrier_int }
+ +1
}
- \group_end:
}
+ { \acro_rerun:n {barriers} }
}
}
-\cs_new:Npn \acroenparen #1 { (#1) }
-
-\cs_new_protected:Npn \acro_get_foreign:n #1
+% #1: id
+\cs_new:Npn \acro_barrier_usage:n #1
{
- \acro_property_get:nnT {#1} {foreign}
+ \clist_if_empty:eTF { \acro_property_get:nn {#1} {barriers} }
+ {0}
{
- \tl_use:N \l__acro_foreign_sep_tl
- \group_begin:
- \tl_use:N \l__acro_foreign_list_format_tl
- {
- \acro_foreign_language:VV
- \l__acro_foreign_lang_tl
- \l__acro_foreign_tl
- }
- \group_end:
+ \clist_item:en
+ { \acro_property_get:nn {#1} {barriers} }
+ { \g_acro_barrier_int }
}
}
-% --------------------------------------------------------------------------
% #1: id
-% #2: short|alt
-\cs_set_protected:Npn \acro_write_compact:nn #1#2
+\cs_new_protected:Npn \acro_set_barriers:n #1
{
- \acro_get_ending_form:nn {#1} {#2}
- \acro_acc_supp:nn
- {#1}
+ \bool_if:NT \l__acro_barriers_bool
{
- \acro_write_tooltip:nnV
- {#1}
+ \int_compare:nNnTF
+ { \intarray_count:c {g__acro_#1_barriers_intarray} } = 0
+ { \acro_rerun:n {barriers} }
{
- \use:c {acro_write_#2:nv} {#1} {l__acro_#2_tl}
- \acro_endings:nn {#1} {#2}
+ \int_zero:N \l__acro_tmpa_int
+ \int_do_while:nNnn
+ \l__acro_tmpa_int < { \intarray_count:c {g__acro_#1_barriers_intarray} }
+ {
+ \int_incr:N \l__acro_tmpa_int
+ \seq_gput_right:ce {g__acro_#1_barriers_seq}
+ {
+ \intarray_item:cn {g__acro_#1_barriers_intarray}
+ { \l__acro_tmpa_int }
+ }
+ }
+ \acro_property_set:nnx {#1} {barriers}
+ { \seq_use:cn {g__acro_#1_barriers_seq} {,} }
}
- \l__acro_long_tl
}
}
-% TODO: get rid of argument #3?
-% #1: ID
-% #2: long|first-long|list-long|extra
-% #3: long form
-\cs_new_protected:Npn \acro_write_expanded:nnn #1#2#3
+\keys_define:nn {acro/barriers}
{
- \tl_set:Nn \l__acro_tmpa_tl {#2}
- \tl_replace_all:Nnn \l__acro_tmpa_tl {-} {_}
- \acro_write_long:vn {l__acro_ \l__acro_tmpa_tl _format_tl} {#3}
- \acro_endings:nn {#1} {long}
- \tl_if_in:nnT {#2} {long}
- { \l__acro_long_post_tl }
+ use .bool_set:N = \l__acro_barriers_bool ,
+ use .initial:n = false ,
+ reset .bool_set:N = \l__acro_barriers_reset_bool ,
+ reset .initial:n = false ,
+ single .bool_set:N = \l__acro_usage_local_bool ,
+ single .initial:n = false
}
-\cs_generate_variant:Nn \acro_write_expanded:nnn {nnV}
-% #1: ID
-% #2: long|first-long|list-long|extra
-\cs_new_protected:Npn \acro_write_expanded:nn #1#2
+% ----------------------------------------------------------------------------
+\AcroModuleEnd
+\AcroModule{commands}{frameworks for user commands}
+
+% --------------------------------------------------------------------------
+% case insensitivity of the ID:
+\bool_new:N \g__acro_case_sensitive_bool
+
+\cs_new:Npn \acro_case_insensitive:n #1
{
- \tl_set:Nn \l__acro_tmpa_tl {#2}
- \tl_replace_all:Nnn \l__acro_tmpa_tl {-} {_}
- \acro_write_long:vv
- {l__acro_ \l__acro_tmpa_tl _format_tl}
- {l__acro_ \l__acro_tmpa_tl _tl}
- \acro_endings:nn {#1} {long}
- \tl_if_in:nnT {#2} {long}
- { \l__acro_long_post_tl }
+ \bool_if:NTF \g__acro_case_sensitive_bool
+ { \tl_to_str:n {#1} }
+ { \str_lowercase:n {#1} }
}
+\cs_new_protected:Npn \acro_protected_case_insensitive:n #1
+ { \acro_case_insensitive:n {#1} }
+
+\cs_new:Npn \acro_case_insensitive:Nn #1#2
+ { \exp_args:Ne #1 { \acro_case_insensitive:n {#2} } }
+
+\keys_define:nn {acro}
+ {
+ case-sensitive .bool_set:N = \g__acro_case_sensitive_bool ,
+ case-sensitive .initial:n = true ,
+ }
+
+% ----------------------------------------------------------------------------
+% typeset endings and ending forms:
+\bool_new:N \l__acro_include_endings_bool
+
% #1: id
-\cs_new_protected:Npn \acro_after:n #1
+% #2: property
+% #3: ending
+\cs_new:Npn \__acro_get_ending:nnn #1#2#3
{
- \acro_cite_if:Nn \l__acro_citation_all_bool {#1}
- \acro_index_if:Nn \l__acro_addto_index_bool {#1}
- \acro_property_get:nnT {#1} {post}
- { \tl_use:N \l__acro_post_tl }
+ \use:c {acro_if_#3:T}
+ { \acro_property_get:nn {#1} {#2-#3} }
}
-\cs_new_protected:Npn \acro_check_single:n #1
+% #1: id
+% #2: property
+\cs_new:Npn \__acro_ending:nn #1#2
{
- \acro_if_is_single:nT {#1}
- { \cs_set_eq:NN \acro_hyper_link:nn \use_ii:nn }
+ \tl_map_tokens:Nn \l__acro_endings_tl
+ { \__acro_get_ending:nnn {#1} {#2} }
}
-% --------------------------------------------------------------------------
% #1: id
-\cs_new_protected:Npn \acro_before:n #1
+% #2: property
+% #3: ending
+\cs_new:Npn \__acro_get_ending_form:nnn #1#2#3
{
- \acro_get:n {#1}
- \acro_is_used:n {#1}
- \acro_check_single:n {#1}
+ \acro_property_if_set:nnT {#1} {#2-#3-form}
+ {
+ \use:c {acro_if_#3:T}
+ {
+ \acro_property_get:nn {#1} {#2-#3-form}
+ \tl_map_break:n { \use_ii:nnn }
+ }
+ }
}
-% the standard internals:
% #1: id
-\cs_new_protected:Npn \acro_short:n #1
+% #2: property
+\cs_new:Npn \acro_ending_form:nnTF #1#2#3#4
{
- \acro_before:n {#1}
- \acro_write_indefinite:nn {#1} {short}
- \acro_write_compact:nn {#1} {short}
- \acro_after:n {#1}
+ \tl_map_tokens:Nn \l__acro_endings_tl
+ { \__acro_get_ending_form:nnn {#1} {#2} }
+ \use_ii:nn {#3} {#4}
}
-% get alternative entry:
% #1: id
-\cs_new_protected:Npn \acro_alt:n #1
+% #2: property
+\cs_new:Npn \acro_ending_form:nnT #1#2#3
+ { \acro_ending_form:nnTF {#1} {#2} {#3} {} }
+
+% #1: id
+% #2: property
+\cs_new:Npn \acro_ending_form:nnF #1#2#3
+ { \acro_ending_form:nnTF {#1} {#2} {} {#3} }
+
+% #1: id
+% #2: property
+\cs_new:Npn \acro_ending_form:nn #1#2
+ { \acro_ending_form:nnTF {#1} {#2} {} {} }
+
+% #1: id
+% #2: property
+% #3: ending
+\cs_new:Npn \__acro_check_ending_form:nnn #1#2#3
{
- \acro_before:n {#1}
- \acro_alt_error:n {#1}
- \acro_write_indefinite:nn {#1} {alt}
- \acro_write_compact:nn {#1} {alt}
- \acro_after:n {#1}
+ \acro_property_if_set:nnT {#1} {#2-#3-form}
+ { \use:c {acro_if_#3:T} { \tl_map_break:n { \use_ii:nnn } } }
}
-% get long entry:
% #1: id
-\cs_new_protected:Npn \acro_long:n #1
+% #2: property
+\cs_new:Npn \acro_if_ending_form:nnTF #1#2#3#4
{
- \acro_before:n {#1}
- \acro_write_indefinite:nn {#1} {long}
- \acro_write_expanded:nn {#1} {long}
- \acro_after:n {#1}
+ \tl_map_tokens:Nn \l__acro_endings_tl
+ { \__acro_check_ending_form:nnn {#1} {#2} }
+ \use_ii:nn {#3} {#4}
}
-% get foreign entry:
% #1: id
-\cs_new_protected:Npn \acro_foreign:n #1
+% #2: property
+\cs_new:Npn \acro_if_ending_form:nnT #1#2#3
+ { \acro_if_ending_form:nnTF {#1} {#2} {#3} {} }
+
+% #1: id
+% #2: property
+\cs_new:Npn \acro_if_ending_form:nnF #1#2#3
+ { \acro_if_ending_form:nnTF {#1} {#2} {} {#3} }
+
+% --------------------------------------------------------------------------
+% typeset acronyms:
+% #1: id
+% #2: property
+\cs_new:Npn \__acro_article:nn #1#2
{
- \acro_get:n {#1}
- \tl_if_blank:VF \l__acro_foreign_tl
+ \bool_if:NT \l__acro_article_bool
{
- \acro_is_used:n {#1}
- \acro_check_single:n {#1}
- \acro_write_long:VV \l__acro_foreign_format_tl \l__acro_foreign_tl
- \acro_after:n {#1}
+ \tl_map_tokens:Nn \g__acro_articles_tl
+ { \__acro_article:nnn {#1} {#2} }
}
}
-% get extra entry:
% #1: id
-\cs_new_protected:Npn \acro_extra:n #1
+% #2: property
+% #3: article
+\cs_new:Npn \__acro_article:nnn #1#2#3
{
- \acro_get:n {#1}
- \tl_if_blank:VF \l__acro_extra_tl
+ \bool_if:cT {l__acro_article_#3_bool}
{
- \acro_is_used:n {#1}
- \acro_check_single:n {#1}
- \acro_write_long:VV \l__acro_extra_format_tl \l__acro_extra_tl
- \acro_after:n {#1}
+ \tl_map_break:n
+ { \acro_property_get:nn {#1} {#2-#3} \exp_stop_f: }
}
}
-% output like the first time:
% #1: id
-\cs_new_protected:Npn \acro_first:n #1
+% #2: property
+\cs_new_protected:Npn \__acro_write:nn #1#2
{
- \bool_gset_true:c {g__acro_#1_first_use_bool}
- \acro_before:n {#1}
- \acro_first_instance:nV {#1} \l__acro_long_tl
+ \acro_property_if_exist:nTF {#2-acc}
+ {
+ \__acro_accsupp:ee
+ { \__acro_write_acronym:nn {#1} {#2-acc} }
+ { \__acro_write_acronym:nn {#1} {#2} }
+ }
+ { \__acro_write_acronym:nn {#1} {#2} }
}
-% output like the first time with own long version:
% #1: id
-% #2: instead of long entry
-\cs_new_protected:Npn \acro_first_like:nn #1#2
+% #2: property
+\cs_new:Npn \__acro_write_acronym:nn #1#2
{
- \bool_gset_true:c {g__acro_#1_first_use_bool}
- \acro_before:n {#1}
- \acro_first_instance:nn {#1} {#2}
+ \bool_lazy_and:nnTF
+ { \acro_property_if_eq_p:nn {#2} {long} }
+ { \acro_if_first_p:n {#1} }
+ { \acro_format:nnn {#1} {first-#2} }
+ { \acro_format:nnn {#1} {#2} }
+ {
+ \__acro_upper:n
+ {
+ \__acro_article:nn {#1} {#2}
+ \acro_if_ending_form:nnTF {#1} {#2}
+ { \acro_ending_form:nn {#1} {#2} }
+ { \acro_property_get:nn {#1} {#2} }
+ }
+ }
+ }
+
+% #1: id
+% #2: property
+\cs_new_protected:Npn \acro_write:nn #1#2
+ {
+ \group_begin:
+ \acro_if_short:nT {#2} { \acro_soft_upper: }
+ \__acro_make_link:nnn {#1} {#2}
+ {
+ \acro_locale:nnn {#1} {#2}
+ {
+ \__acro_write:nn {#1} {#2}
+ \bool_if:NT \l__acro_include_endings_bool
+ {
+ \acro_if_ending_form:nnF {#1} {#2}
+ { \__acro_ending:nn {#1} {#2} }
+ }
+ }
+ }
+ \group_end:
+ \acro_if_ending_form:nnF {#1} {#2}
+ {
+ \bool_if:NF \l__acro_include_endings_bool
+ { \__acro_ending:nn {#1} {#2} }
+ }
+ \acro_property_if_eq:nnT {#2} {long}
+ { \acro_property_get:nn {#1} {long-post} }
+ \bool_set_false:N \l__acro_upper_bool
+ \bool_set_false:N \l__acro_article_bool
+ }
+\cs_generate_variant:Nn \acro_write:nn {e}
+
+\keys_define:nn {acro}
+ {
+ include-endings .bool_set:N = \l__acro_include_endings_bool ,
+ include-endings .initial:n = true
}
-% ----------------------------------------------------------------------------
-% citations:
-\cs_new:Npn \__acro_citation_cmd:w { \cite }
-\cs_new:Npn \__acro_group_citation_cmd:w { \cite }
-% #1 pre
-% #2 post
-% #3 key
-\cs_new:Npn \__acro_cite:nnn #1#2#3
+% --------------------------------------------------------------------------
+% #1: boolean
+% #2: id
+\cs_new_protected:Npn \acro_finalize:nn #1#2
{
- \quark_if_no_value:nTF {#1}
- { \__acro_citation_cmd:w {#3} }
+ \bool_if:NF \g__acro_cited_bool
+ { \acro_cite_if:nnT {#1} {#2} { \acro_cite:n {#2} } }
+ \bool_gset_false:N \g__acro_cited_bool
+ \acro_property_if_set:nnT {#1} {post}
+ { \acro_property_get:nn {#2} {post} }
+ \bool_lazy_all:nT
+ {
+ { \l__acro_label_bool }
+ { \l__acro_use_bool }
+ { !#1 }
+ }
+ {
+ \acro_if_first:nT {#2}
+ {
+ \acro_property_if_set:nnF {#2} {label}
+ {
+ \acro_property_set:nnn {#2} {label} {#2}
+ \label { \l_acro_label_prefix_tl #2 }
+ }
+ }
+ }
+ \bool_lazy_and:nnT
+ { \l__acro_use_bool }
+ { !#1 }
{
- \quark_if_no_value:nTF {#2}
- { \__acro_citation_cmd:w [#1] {#3} }
- { \__acro_citation_cmd:w [#1] [#2] {#3} }
+ \acro_use:n {#2}
+ \acro_record_page:n {#2}
+ \acro_record_barrier:n {#2}
+ \acro_index:n {#2}
}
}
-\cs_generate_variant:Nn \__acro_cite:nnn {VVV}
+\cs_generate_variant:Nn \acro_finalize:nn {ne}
-\cs_new_protected:Npn \acro_cite:n #1
+% --------------------------------------------------------------------------
+% define acronym typesetting commands:
+\bool_new:N \l__acro_star_bool
+\tl_new:N \l__acro_options_tl
+
+\cs_new:Npn \__acro_remove_bs:N #1
+ { \exp_after:wN \use_none:n \token_to_str:N #1 }
+
+\tl_new:N \l__acro_begin_command_hook_tl
+\tl_new:N \l__acro_end_command_hook_tl
+
+% #1: csname
+% #2: xparse csname
+% #3: action
+\cs_set_protected:Npn \acro_new_definition_command:NNn #1#2#3
{
- \acro_property_get:nnT {#1} {before-citation}
- { \acro_no_break: \l__acro_before_citation_tl }
- \prop_get:NnNT \l__acro_citation_prop {#1} \l__acro_tmpa_tl
+ % internal command for \NewAcroCommand
+ % ##1: csname
+ % ##2: arg spec
+ % ##3: code with arg numbers n=n+2
+ \cs_new_protected:cpn {acro_command_#3:Nnn} ##1##2##3
{
- \prop_get:NnN \l__acro_citation_pre_prop {#1} \l__acro_tmpb_tl
- \prop_get:NnN \l__acro_citation_post_prop {#1} \l__acro_tmpc_tl
- \acro_no_break:
- \tl_use:N \l__acro_citation_connect_tl
- \__acro_cite:VVV
- \l__acro_tmpb_tl
- \l__acro_tmpc_tl
- \l__acro_tmpa_tl
+ \exp_args:Nc \DeclareDocumentCommand
+ { base \__acro_remove_bs:N ##1 } {##2}
+ {
+ \acro_begin:
+ \l__acro_begin_command_hook_tl
+ \cs_set:Npn \nospace { \exp:w \exp_end_continue_f:w }
+ \acro_check_definition:n {####1}
+ \bool_set_true:N \l__acro_use_bool
+ \keys_set:nV {acro} \l__acro_options_tl
+ \tl_set:Ne \AcronymID { \acro_case_insensitive:n {####1} }
+ \tl_set:Ne \l_acro_id_tl { \acro_case_insensitive:n {####1} }
+ ##3
+ \acro_finalize:ne
+ { \l__acro_star_bool }
+ { \acro_case_insensitive:n {####1} }
+ \l__acro_end_command_hook_tl
+ \acro_end:
+ }
+ \use:x
+ {
+ \exp_not:n { #2 ##1 {so} }
+ {
+ \exp_not:n
+ {
+ \mode_leave_vertical:
+ \bool_set_false:N \l__acro_star_bool
+ \tl_clear:N \l__acro_options_tl
+ \IfBooleanT {####1} { \bool_set_true:N \l__acro_star_bool }
+ \IfNoValueF {####2} { \tl_set:Nn \l__acro_options_tl {####2} }
+ }
+ \exp_not:c { base \__acro_remove_bs:N ##1 }
+ }
+ }
}
- \acro_property_get:nnT {#1} {after-citation}
- { \acro_no_break: \l__acro_after_citation_tl }
+ % define \NewAcroCommand
+ \NewDocumentCommand #1 {mm+m}
+ { \use:c {acro_command_#3:Nnn} ##1 {##2} {##3} }
+ }
+
+\acro_new_definition_command:NNn
+ \NewAcroCommand
+ \NewDocumentCommand
+ {new}
+
+\acro_new_definition_command:NNn
+ \RenewAcroCommand
+ \RenewDocumentCommand
+ {renew}
+
+\acro_new_definition_command:NNn
+ \DeclareAcroCommand
+ \DeclareDocumentCommand
+ {declare}
+
+\acro_new_definition_command:NNn
+ \ProvideAcroCommand
+ \ProvideDocumentCommand
+ {provide}
+
+\keys_define:nn {acro/commands}
+ {
+ begin .code:n =
+ \tl_put_right:Nn \l__acro_begin_command_hook_tl {#1} ,
+ end .code:n =
+ \tl_put_right:Nn \l__acro_end_command_hook_tl {#1} ,
+ clear .choice: ,
+ clear / begin .code:n =
+ \tl_clear:N \l__acro_begin_command_hook_tl ,
+ clear / end .code:n =
+ \tl_clear:N \l__acro_end_command_hook_tl ,
+ clear / all .code:n =
+ \tl_clear:N \l__acro_begin_command_hook_tl
+ \tl_clear:N \l__acro_end_command_hook_tl
}
-\cs_new_protected:Npn \acro_group_cite:n #1
+% --------------------------------------------------------------------------
+\AcroModuleEnd
+\AcroModule{templates}{templates for typesetting exercises}
+
+\msg_new:nnn {acro} {unknown-template}
{
- \group_begin:
- \cs_set_eq:NN \__acro_citation_cmd:w \__acro_group_citation_cmd:w
- \tl_set_eq:NN
- \l__acro_citation_connect_tl
- \l__acro_between_group_connect_citation_tl
- \acro_cite_if:Nn \l__acro_citation_first_bool {#1}
- \group_end:
+ The~ template~ `#1'~ (template~ type~ `#2')~ \msg_line_context: \
+ does~ not~ seem~ to~ be~ defined.
}
-\cs_new_protected:Npn \acro_cite_if:Nn #1#2
- { \bool_if:NT #1 { \acro_cite:n {#2} } }
+\msg_new:nnn {acro} {template-type-exists}
+ { The~ template~ type~ `#1'~ already~ exists~ \msg_line_context: }
+
+\msg_new:nnn {acro} {package-needed}
+ {
+ The~ template~ `#1'~ needs~ the~ package~ `#2'~ loaded~
+ \msg_line_context:
+ }
% ----------------------------------------------------------------------------
-% indexing:
-\cs_new_protected:Npn \acro_index_if:Nn #1#2
+\seq_new:N \l__acro_template_types_seq
+
+% #1: template type
+\cs_new_protected:Npn \acro_template_type_new:n #1
{
- \bool_lazy_and:nnT {#1} { \l__acro_mark_as_used_bool }
+ \seq_if_in:NnTF \l__acro_template_types_seq {#1}
+ { \msg_error:nnn {acro} {template-type-exists} {#1} }
{
- \prop_get:NnN \l__acro_index_cmd_prop {#2} \l__acro_tmpa_tl
- \prop_get:NnN \l__acro_index_sort_prop {#2} \l__acro_tmpb_tl
- \prop_get:NnN \l__acro_index_prop {#2} \l__acro_tmpc_tl
- \__acro_index:VnVV
- \l__acro_tmpa_tl
- {#2}
- \l__acro_tmpb_tl
- \l__acro_tmpc_tl
+ \seq_put_right:Nn \l__acro_template_types_seq {#1}
+ \acro_attribute_new:n {template::#1}
}
}
-\cs_new:Npn \__acro_index_cmd:n { \index }
+% #1: template type
+% #2: template name
+% #3: code
+\cs_new_protected:Npn \__acro_template_add:nnn #1#2#3
+ {
+ \tl_new:c {l__acro_template_#1_#2_setup_tl}
+ \acro_attribute_set:nnn {template::#1} {#2} {#3}
+ }
+
+% #1: template type
+% #2: template name
+% #3: code
+\cs_new_protected:Npn \__acro_template_change:nnn #1#2#3
+ {
+ \acro_template_if_exist:nnTF {#1} {#2}
+ { \acro_attribute_set:nnn {template::#1} {#2} {#3} }
+ { \msg_error:nnnn {acro} {unknown-template} {#2} {#1} }
+ }
-% #1: cmd
-% #2: key
-% #3: sort
-% #4: replace
-\cs_new_protected:Npn \__acro_index:nnnn #1#2#3#4
+% #1: template type
+% #2: template name
+\prg_new_conditional:Npnn \acro_template_if_exist:nn #1#2 {T,F,TF}
{
- \prop_get:NnNF \l__acro_short_prop {#2} \l__acro_index_short_tl {}
- \prop_get:NnNF \l__acro_format_prop {#2} \l__acro_index_format_tl {}
- \quark_if_no_value:VTF \l__acro_index_format_tl
- { \tl_set:Nn \l__acro_tmpa_tl { \l__acro_short_format_tl \l__acro_index_short_tl } }
- { \tl_set:Nn \l__acro_tmpa_tl { \l__acro_index_format_tl \l__acro_index_short_tl } }
- \quark_if_no_value:nF {#1}
- { \cs_set:Npn \__acro_index_cmd:n {#1} }
- \quark_if_no_value:nTF {#4}
+ \acro_attribute_if_set:nnTF {template::#1} {#2}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+
+% #1: parameter number
+% #2: template type
+% #3: template name
+\cs_new_protected:Npn \__acro_template_get:nnn #1#2#3
+ {
+ \use:x
{
- \quark_if_no_value:nTF {#3}
- { \__acro_index_cmd:n { #2 @ { \l__acro_tmpa_tl } } }
- { \__acro_index_cmd:n { #3 @ { \l__acro_tmpa_tl } } }
+ \cs_set:cn { __acro_tmp: \prg_replicate:nn {#1} {n} }
+ { \acro_attribute_get:nn {template::#2} {#3} }
}
- { \__acro_index_cmd:n {#4} }
+ \use:c { __acro_tmp: \prg_replicate:nn {#1} {n} }
}
-\cs_generate_variant:Nn \__acro_index:nnnn {VnVV}
-% ----------------------------------------------------------------------------
-% accessability support
-\cs_new_eq:NN \acro_acc_supp:nn \use_ii:nn
+% using templates:
+% setup up the next usage of `template name':
+% #1: template type
+% #2: template name
+% #3: setup code
+\cs_new_protected:Npn \acro_template_setup:nnn #1#2#3
+ { \tl_set:cn {l__acro_template_#1_#2_setup_tl} {#3} }
+\cs_generate_variant:Nn \acro_template_setup:nnn {nnV,nVn}
+
+% #1: template type
+% #2: template name
+\cs_new_protected:Npn \__acro_template_setup:nn #1#2
+ { \tl_use:c {l__acro_template_#1_#2_setup_tl} }
+
+% #1: template type
+% #2: template name
+\cs_new_protected:Npn \__acro_clear_template_setup:nn #1#2
+ { \tl_clear:c {l__acro_template_#1_#2_setup_tl} }
+
+% #1: template type
+% #2: template name
+\cs_new_protected:Npn \__acro_template_start:nn #1#2
+ {
+ \group_begin:
+ \__acro_template_setup:nn {#1} {#2}
+ \tl_clear_new:N \TemplateType
+ \tl_set:Nn \TemplateType {#1}
+ \tl_clear_new:N \TemplateName
+ \tl_set:Nn \TemplateName {#2}
+ }
+
+% #1: template type
+% #2: template name
+\cs_new_protected:Npn \__acro_template_stop:nn #1#2
+ { \group_end: \__acro_clear_template_setup:nn {#1} {#2} }
+
+% typesetting the first appearance of acronym: pseude template `first'
-\cs_new_protected:Npn \acro_get_acc_supp:nn #1#2
+% #1: parameter number
+% #2: template type
+% #3: template name
+\cs_new_protected:Npn \acro_template_use:nnn #1#2#3
{
- \prop_get:NnNF \l__acro_acc_supp_prop {#1} \l__acro_acc_supp_tl
- { \prop_get:NnNF \l__acro_short_prop {#1} \l__acro_acc_supp_tl {} }
- \acro_for_endings_do:n
+ \bool_set_false:N \l__acro_tmpa_bool
+ \bool_if:NT \l__acro_use_only_first_bool
{
- \bool_if:cT {l__acro_##1_bool}
+ \bool_if:NT \l__acro_use_bool
{
- \tl_put_right:Nv
- \l__acro_acc_supp_tl
- {l__acro_short_##1_tl}
+ \bool_set_true:N \l__acro_tmpa_bool
+ \bool_set_false:N \l__acro_use_bool
}
}
- \acro_do_acc_supp:VVn
- \l__acro_acc_supp_tl
- \l__acro_acc_supp_options_tl
- {#2}
+ \str_case:nnF {#3}
+ {
+ {first} {
+ \bool_if:NT \l__acro_tmpa_bool
+ { \bool_set_true:N \l__acro_use_bool }
+ \bool_lazy_and:nnTF
+ { !\l__acro_first_bool }
+ { \acro_if_single_p:V \l_acro_id_tl }
+ {
+ \acro_property_if_set:VnTF \l_acro_id_tl {single-style}
+ {
+ \tl_set:Ne \l__acro_tmpa_tl
+ { \acro_property_get:Vn \l_acro_id_tl {single-style} }
+ }
+ { \tl_set_eq:NN \l__acro_tmpa_tl \l__acro_single_tl }
+ }
+ {
+ \acro_if_first:VTF \l_acro_id_tl
+ {
+ \acro_property_if_set:VnTF \l_acro_id_tl {first-style}
+ {
+ \tl_set:Ne \l__acro_tmpa_tl
+ { \acro_property_get:Vn \l_acro_id_tl {first-style} }
+ }
+ { \tl_set_eq:NN \l__acro_tmpa_tl \l__acro_first_style_tl }
+ }
+ { \tl_set:Nn \l__acro_tmpa_tl {short} }
+ }
+ }
+ {single} {
+ \acro_property_if_set:VnTF \l_acro_id_tl {single-style}
+ {
+ \tl_set:Ne \l__acro_tmpa_tl
+ { \acro_property_get:Vn \l_acro_id_tl {single-style} }
+ }
+ { \tl_set_eq:NN \l__acro_tmpa_tl \l__acro_single_tl }
+ }
+ }
+ { \tl_set:Nn \l__acro_tmpa_tl {#3} }
+ \str_if_eq:VnT \l__acro_tmpa_tl {first}
+ {
+ \acro_property_if_set:VnTF \l_acro_id_tl {first-style}
+ {
+ \tl_set:Ne \l__acro_tmpa_tl
+ { \acro_property_get:Vn \l_acro_id_tl {first-style} }
+ }
+ { \tl_set_eq:NN \l__acro_tmpa_tl \l__acro_first_style_tl }
+ }
+ \__acro_template_use:nnV {#1} {#2} \l__acro_tmpa_tl
}
+\cs_generate_variant:Nn \acro_template_use:nnn {nnV}
-\cs_new:Npn \acro_do_acc_supp:nnn #1#2#3
+\cs_new_protected:Npn \__acro_template_use:nnn #1#2#3
{
- \BeginAccSupp { ActualText = #1 , #2 }
- #3
- \EndAccSupp { }
+ \acro_template_if_exist:nnTF {#2} {#3}
+ { \__acro_template_get:nnn {#1} {#2} {#3} }
+ {
+ \msg_warning:nnnn {acro} {unknown-template} {#3} {#2}
+ \__acro_template_get:nnn {#1} {#2} {first}
+ }
}
-\cs_generate_variant:Nn \acro_do_acc_supp:nnn {VV}
+\cs_generate_variant:Nn \__acro_template_use:nnn {nnx,nnV}
-\AtEndPreamble
+% ----------------------------------------------------------------------------
+% acronym templates:
+\acro_template_type_new:n {acronym}
+
+% #1: template name
+% #2: code
+\cs_new_protected:Npn \acro_acronym_template_new:nn #1#2
{
- \bool_if:NT \l__acro_acc_supp_bool
+ \__acro_template_add:nnn {acronym} {#1}
{
- \RequirePackage {accsupp}
- \cs_set_eq:NN \acro_acc_supp:nn \acro_get_acc_supp:nn
+ \__acro_template_start:nn {acronym} {#1}
+ #2
+ \__acro_template_stop:nn {acronym} {#1}
}
- \bool_if:NT \l__acro_tooltip_bool
+ }
+
+% #1: template name
+% #2: code
+\cs_new_protected:Npn \acro_acronym_template_renew:nn #1#2
+ {
+ \__acro_template_change:nnn {acronym} {#1}
{
- \RequirePackage {pdfcomment}
- \cs_if_eq:NNT \__acro_tooltip_cmd:nn \use_i:nn
- { \cs_set:Npn \__acro_tooltip_cmd:nn { \pdftooltip } }
+ \__acro_template_start:nn {acronym} {#1}
+ #2
+ \__acro_template_stop:nn {acronym} {#1}
}
}
-% --------------------------------------------------------------------------
-% tooltips for acronyms
+% ----------------------------------------------------------------------------
+% heading templates:
+\acro_template_type_new:n {heading}
-% #1: id
-% #2: printed text
-% #3: tool tip text
-\cs_new_protected:Npn \acro_write_tooltip:nnn #1#2#3
+% #1: template name
+% #2: code
+\cs_new_protected:Npn \acro_heading_template_new:nn #1#2
{
- \acro_property_get:nnTF {#1} {tooltip}
- { \__acro_check_tooltip:nV {#2} \l__acro_tooltip_tl }
- { \__acro_check_tooltip:nn {#2} {#3} }
+ \__acro_template_add:nnn {heading} {#1}
+ {
+ \__acro_template_start:nn {heading} {#1}
+ #2
+ \__acro_template_stop:nn {heading} {#1}
+ }
}
-\cs_generate_variant:Nn \acro_write_tooltip:nnn {nnV}
-% #1: printed text
-% #2: tool tip text
-\cs_new_protected:Npn \__acro_check_tooltip:nn #1#2
+% #1: template name
+% #2: code
+\cs_new_protected:Npn \acro_heading_template_renew:nn #1#2
{
- \bool_if:NTF \l__acro_tooltip_inside_bool
- {#1}
+ \__acro_template_change:nnn {heading} {#1}
{
- \bool_set_true:N \l__acro_tooltip_inside_bool
- \__acro_tooltip_cmd:nn {#1} {#2}
+ \__acro_template_start:nn {heading} {#1}
+ #2
+ \__acro_template_stop:nn {heading} {#1}
}
}
-\cs_generate_variant:Nn \__acro_check_tooltip:nn { nV }
-% use whatever command you like for creating tooltips here:
-% #1: printed text
-% #2: tool tip text
-\cs_new_eq:NN \__acro_tooltip_cmd:nn \use_i:nn
-
-% --------------------------------------------------------------------------
-% indefinite articles:
+% ----------------------------------------------------------------------------
+% list templates:
+\acro_template_type_new:n {list}
-% #1: ID
-% #2: short|long|alt
-\cs_new_protected:Npn \acro_write_indefinite:nn #1#2
+% #1: template name
+% #2: code
+\cs_new_protected:Npn \acro_list_template_new:nn #1#2
{
- \bool_if:NT \l__acro_indefinite_bool
- { \prop_item:cn {l__acro_#2_indefinite_prop} {#1} ~ }
- \bool_if:NT \l__acro_upper_indefinite_bool
- { % \bool_set_true:N \l__acro_first_upper_bool
- \__acro_first_upper_case:x
- { \prop_item:cn {l__acro_#2_indefinite_prop} {#1} } ~
+ \__acro_template_add:nnn {list} {#1}
+ {
+ \__acro_template_start:nn {list} {#1}
+ \tl_clear_new:N \AcronymTable
+ #2
+ \__acro_template_stop:nn {list} {#1}
}
}
-% --------------------------------------------------------------------------
-% experimental sorting feature:
-
-% the following code is an adaption of expl3 code used for \str_if_eq:NN(TF)
-\sys_if_engine_luatex:TF
+% #1: template name
+% #2: code
+\cs_new_protected:Npn \acro_list_template_renew:nn #1#2
{
- \tl_set:Nn \l__acro_tmpa_tl
+ \__acro_template_change:nnn {list} {#1}
{
- acro ~ = ~ acro ~ or ~ { ~ } ~
- function ~ acro.strcmp ~ (A, B) ~
- if ~ A ~ == ~ B ~ then ~
- tex.write ("0") ~
- elseif ~ A ~ < ~ B ~ then ~
- tex.write ("-1") ~
- else ~
- tex.write ("1") ~
- end ~
- end
+ \__acro_template_start:nn {list} {#1}
+ \tl_clear_new:N \AcronymTable
+ #2
+ \__acro_template_stop:nn {list} {#1}
}
- \lua_now:e { \l__acro_tmpa_tl }
- \cs_new_protected:Npn \acro_strcmp:nn #1#2
+ }
+
+% ----------------------------------------------------------------------------
+\AcroModuleEnd
+\AcroModule{list}{the list of acronyms}
+% --------------------------------------------------------------------------
+% list of acronyms:
+\bool_new:N \l__acro_list_display_all_bool
+\bool_new:N \l__acro_list_bool
+\bool_new:N \l__acro_list_local_bool
+
+\seq_new:N \g__acro_list_seq
+
+\tl_new:N \l__acro_list_tl
+
+\clist_new:N \l__acro_tag_include_clist
+\clist_new:N \l__acro_tag_exclude_clist
+
+\cs_new_protected:Npn \acro_list_choose_set:
+ {
+ \bool_if:NTF \l__acro_list_display_all_bool
+ { \seq_gset_eq:NN \g__acro_list_seq \g__acro_acronyms_seq }
{
- \lua_now:e
+ \seq_gclear:N \g__acro_list_seq
+ \seq_map_inline:Nn \g__acro_acronyms_seq
{
- acro.strcmp
- (
- " \__acro_escape_x:n {#1} " ,
- " \__acro_escape_x:n {#2} "
- )
+ \acro_if_single:nF {##1}
+ { \seq_gput_right:Nn \g__acro_list_seq {##1} }
}
}
- \cs_new:Npn \__acro_escape_x:n #1
+ }
+
+% --------------------------------------------------------------------------
+% #1: filtered sequence
+% #2: sequence
+\cs_new_protected:Npn \__acro_list_filter:NN #1#2
+ {
+ \seq_clear:N #2
+ \seq_clear:N \l__acro_tmpc_seq
+ \bool_if:NF \l__acro_list_local_bool
+ { \bool_set_true:N \l__acro_tmpb_bool }
+ \seq_map_inline:Nn #1
{
- \lua_escape:e
- { \__kernel_tl_to_str:w \use:e { {#1} } }
+ \__acro_check_tags:Nn \l__acro_tmpa_bool {##1}
+ \bool_lazy_and:nnT
+ { \l__acro_list_local_bool }
+ {
+ \int_compare_p:nNn
+ { \intarray_count:c {g__acro_##1_barriers_intarray} } > 0
+ }
+ {
+ \bool_set_false:N \l__acro_tmpb_bool
+ \int_compare:nNnT
+ { \acro_barrier_usage:n {##1} } > 0
+ { \bool_set_true:N \l__acro_tmpb_bool }
+ }
+ \bool_lazy_and:nnT { \l__acro_tmpa_bool } { \l__acro_tmpb_bool }
+ { \seq_put_right:Nn #2 {##1} }
}
}
- { \cs_new_eq:NN \acro_strcmp:nn \tex_strcmp:D }
-\AtBeginDocument
- {
- \bool_if:NT \l__acro_sort_bool
- {
- \cs_new_protected:Npn \acro_sort_prop:NN #1#2
+% #1: boolean
+% #2: id
+\cs_new_protected:Npn \__acro_check_tags:Nn #1#2
+ {
+ \bool_set_false:N #1
+ % get tags for acronym:
+ \clist_set:Ne \l__acro_tmpa_clist
+ { \acro_property_get:nn {#2} {tag} }
+ \clist_if_empty:NTF \l__acro_tmpa_clist
+ {% acronym does not have (a) tag(s)
+ \clist_if_empty:NT \l__acro_tag_include_clist
+ { \bool_set_true:N #1 }
+ }
+ {% acronym has (a) tag(s)
+ \clist_if_empty:NTF \l__acro_tag_include_clist
+ { \bool_set_true:N #1 }
{
- \seq_clear:N \l__acro_tmpa_seq
- \prop_clear:N \l__acro_tmpa_prop
- \prop_clear:N \l__acro_tmpb_prop
- \prop_map_inline:Nn #2
- {
- \seq_put_right:Nn \l__acro_tmpa_seq {##2}
- \prop_put:Nnn \l__acro_tmpa_prop {##1} {##2}
- }
- \seq_sort:Nn \l__acro_tmpa_seq
+ \clist_map_inline:Nn \l__acro_tmpa_clist
{
- \int_compare:nTF
- {
- \acro_strcmp:nn
- { \str_fold_case:n {##1} }
- { \str_fold_case:n {##2} }
- = -1
+ \clist_if_in:NnT \l__acro_tag_include_clist {##1}
+ {% acronym is included
+ \bool_set_true:N #1
+ \clist_map_break:
}
- { \sort_return_same: }
- { \sort_return_swapped: }
}
- \seq_map_inline:Nn \l__acro_tmpa_seq
+ }
+ \bool_if:NT #1
+ {% we only need to check if acronym is included:
+ \clist_if_empty:NF \l__acro_tag_exclude_clist
{
- \prop_map_inline:Nn \l__acro_tmpa_prop
+ \clist_map_inline:Nn \l__acro_tmpa_clist
{
- \str_if_eq:nnT {##1} {####2}
- {
- \prop_get:NnN #1 {####1} \l__acro_tmpa_tl
- \prop_put:NnV \l__acro_tmpb_prop {####1}
- \l__acro_tmpa_tl
+ \clist_if_in:NnT \l__acro_tag_exclude_clist {##1}
+ {% acronym is excluded
+ \bool_set_false:N #1
+ \clist_map_break:
}
}
}
- \prop_set_eq:NN #1 \l__acro_tmpb_prop
}
}
}
% --------------------------------------------------------------------------
-% regarding list printing:
-% this command ensures that a rerun warning is given when \printacronyms
-% is set the first time. This mechanism doesn't make very much sense,
-% should be replaced by a different and more efficient one
-%
-\cs_new_protected:Npn \acro@print@list
- { \cs_if_exist:NF \acro@printed@list { \cs_new:Npn \acro@printed@list { printed } } }
+\prg_new_protected_conditional:Npnn \acro_acronyms_map:n #1 {T,F,TF}
+ {
+ \__acro_list_filter:NN \g__acro_list_seq \l__acro_tmpa_seq
+ \seq_if_empty:NTF \l__acro_tmpa_seq
+ { \prg_return_false: }
+ {
+ \seq_map_inline:Nn \l__acro_tmpa_seq {#1}
+ \prg_return_true:
+ }
+ }
+
+\cs_new_protected:Npn \acro_list:
+ {
+ \group_begin:
+ \bool_set_true:N \l__acro_list_bool
+ \acro_list_choose_set:
+ \cs_set_eq:NN \__acro_upper_case:n \__acro_list_upper_case:n
+ \bool_if:NT \l__acro_sort_bool { \acro_list_sort: }
+ \acro_template_use:nnV {0} {list} \l__acro_list_tl
+ \group_end:
+ }
% --------------------------------------------------------------------------
-% trailing tokens and what to do when present
+\tl_new:N \l__acro_heading_tl
+\tl_new:N \l__acro_preamble_tl
-\cs_new_protected:Npn \acro_new_trailing_token:n #1
- { \bool_new:c {l__acro_trailing_#1_bool} }
-\cs_new_protected:Npn \acro_activate_trailing_action:n #1
- { \bool_set_true:c {l__acro_trailing_#1_bool} }
-\cs_new_protected:Npn \acro_deactivate_trailing_action:n #1
- { \bool_set_false:c {l__acro_trailing_#1_bool} }
+\cs_new_protected:Npn \acro_heading:
+ { \acro_template_use:nnV {0} {heading} \l__acro_heading_tl }
-% register a new token but don't activate its action:
-% #1: token
-% #2: name
-\cs_new_protected:Npn \acro_register_trailing_token:Nn #1#2
- {
- \prop_put:Nnn \l__acro_trailing_tokens_prop {#2} {#1}
- \prop_put:Nnn \l__acro_trailing_actions_prop {#1}
- { \acro_activate_trailing_action:n {#2} }
- \acro_new_trailing_token:n {#2}
- }
+\cs_new_protected:Npn \acro_preamble:
+ { \tl_use:N \l__acro_preamble_tl }
-\cs_new_protected:Npn \acro_for_all_trailing_tokens_do:n #1
- { \prop_map_inline:Nn \l__acro_trailing_tokens_prop {#1} }
+\tl_new:N \l__acro_list_name_tl
-% activate a token:
-\cs_new_protected:Npn \acro_activate_trailing_token:n #1
+% --------------------------------------------------------------------------
+\keys_define:nn {acro/list}
{
- \prop_get:NnN \l__acro_trailing_tokens_prop {#1} \l__acro_tmpa_tl
- \tl_put_right:NV \l__acro_trailing_tokens_tl \l__acro_tmpa_tl
+ template .tl_set:N = \l__acro_list_tl ,
+ template .initial:n = description ,
+ sort .bool_set:N = \l__acro_sort_bool ,
+ sort .initial:n = true ,
+ display .choice: ,
+ display/all .code:n = \bool_set_true:N \l__acro_list_display_all_bool ,
+ display/used .code:n = \bool_set_false:N \l__acro_list_display_all_bool ,
+ display .initial:n = used ,
+ include .clist_set:N = \l__acro_tag_include_clist ,
+ exclude .clist_set:N = \l__acro_tag_exclude_clist ,
+ local .bool_set:N = \l__acro_list_local_bool ,
+ heading .tl_set:N = \l__acro_heading_tl ,
+ preamble .tl_set:N = \l__acro_preamble_tl ,
+ preamble .initial:n = ,
+ name .tl_set:N = \l__acro_list_name_tl ,
+ name .initial:n = \acro_translate:n {list-name}
}
-% deactivate a token:
-\cs_new_protected:Npn \acro_deactivate_trailing_token:n #1
+\acro_if_komascript:TF
{
- \prop_get:NnN \l__acro_trailing_tokens_prop {#1} \l__acro_tmpa_tl
- \tl_remove_all:NV \l__acro_trailing_tokens_tl \l__acro_tmpa_tl
+ \cs_if_exist:NTF \chapter
+ { \keys_set:nn {acro/list}{ heading = addchap } }
+ { \keys_set:nn {acro/list}{ heading = addsec } }
}
-
-% #1: name
-\prg_new_conditional:Npnn \acro_if_trailing_token:n #1 {p,T,F,TF}
{
- \bool_if:cTF {l__acro_trailing_#1_bool}
- { \prg_return_true: }
- { \prg_return_false: }
+ \cs_if_exist:NTF \chapter
+ { \keys_set:nn {acro/list}{ heading = chapter* } }
+ { \keys_set:nn {acro/list}{ heading = section* } }
}
-% #1: csv list of names
-\prg_new_protected_conditional:Npnn \acro_if_trailing_tokens:n #1 {T,F,TF}
+% --------------------------------------------------------------------------
+\AcroModuleEnd
+\AcroModule{pages}{recording and printing of pages}
+% ----------------------------------------------------------------------------
+% record page numbers:
+\RequirePackage {zref-abspage}
+
+\msg_new:nnn {acro} {label}
+ { The~ list~ template~ `#1'~ needs~ the~ option~ `labels'~ activated. }
+
+\msg_new:nnn {acro} {threshold}
+ { The~ sequentes~ threshold~ needs~ to~ be~ at~ least~ 3. }
+
+\group_begin:
+\char_set_catcode_other:N \@
+
+% #1: id
+\cs_new_protected:Npn \acro_record_page:n #1
{
- \bool_set_false:N \l__acro_trailing_tokens_bool
- \clist_map_inline:nn {#1}
+ \seq_if_in:ceF {g__acro_#1_pages_seq}
+ { \arabic{abspage} @ \int_use:N \g_acro_barrier_int @ \thepage }
{
- \bool_if:cT {l__acro_trailing_##1_bool}
- {
- \bool_set_true:N \l__acro_trailing_tokens_bool
- \clist_map_break:
- }
+ \seq_gput_right:ce {g__acro_#1_pages_seq}
+ { \arabic{abspage} @ \int_use:N \g_acro_barrier_int @ \thepage }
}
- \bool_if:NTF \l__acro_trailing_tokens_bool
- { \prg_return_true: }
- { \prg_return_false: }
+ \seq_gremove_duplicates:c {g__acro_#1_pages_seq}
+ \acro_at_end_document:n
+ {
+ \acro_property_set:nnx {#1} {pages}
+ { \seq_use:cn {g__acro_#1_pages_seq} {|} }
+ }
+ }
+
+\cs_new:Npn \__acro_page_name:w #1@#2@#3 \q_stop
+ {
+ \acro_package_if_loaded:nTF {hyperref}
+ { \exp_not:N \hyperpage { \exp_not:n {#3} } }
+ { \exp_not:n {#3} }
}
-\cs_new_protected:Npn \aciftrailing { \acro_if_trailing_tokens:nTF }
+\cs_new:Npn \__acro_absolute_page:w #1@#2@#3 \q_stop {#1}
-\cs_new_protected:Npn \__acro_check_trail:N #1
+\cs_new:Npn \__acro_barrier:w #1@#2@#3 \q_stop {#2}
+
+\group_end:
+
+\RequirePackage {zref-totpages}
+
+\acro_at_begin_document:n
+ { \intarray_new:Nn \g__acro_pages_intarray { \ztotpages } }
+
+% #1: id
+% #2: one page
+% #3: more than one page
+\cs_new_protected:Npn \acro_print_pages:nnn #1#2#3
{
- \tl_map_inline:Nn \l__acro_trailing_tokens_tl
+ \acro_if_pages:nT {#1}
{
- \token_if_eq_meaning:NNT #1 ##1
- { \prop_item:Nn \l__acro_trailing_actions_prop {##1} }
+ \bool_if:NTF \l__acro_pages_all_bool
+ {
+ \bool_if:NTF \l__acro_pages_name_display_bool
+ { \acro_print_page_ranges:nnn {#1} {#2} {#3} }
+ { \acro_print_page_ranges:nnn {#1} {} {} }
+ }
+ {
+ \bool_if:NT \l__acro_pages_name_display_bool {#2}
+ \pageref { \l_acro_label_prefix_tl #1 }
+ }
}
}
+\cs_generate_variant:Nn \acro_print_pages:nnn {e}
-% options for activating actions:
-\keys_define:nn {acro}
- {
- activate-trailing-tokens .code:n =
- \clist_map_inline:nn {#1} { \acro_activate_trailing_token:n {##1} } ,
- deactivate-trailing-tokens .code:n =
- \clist_map_inline:nn {#1} { \acro_deactivate_trailing_token:n {##1} }
- }
-
-% ---------------------------------------------------------------------------
-% reset outputs, they'll behave like the first time again (!not like the _only_
-% time!):
-\cs_new_protected:Npn \acro_reset:n #1
- {
- \bool_gset_false:c { g__acro_#1_used_bool }
- \bool_gset_false:c { g__acro_#1_first_use_bool }
+% #1: id
+% #2: one page
+% #3: more than one page
+\cs_set_protected:Npn \acro_print_page_ranges:nnn #1#2#3
+ {
+ \seq_set_split:Nnx \l__acro_tmpa_seq {|}
+ { \acro_property_get:nn {#1} {pages} }
+ \intarray_gzero:N \g__acro_pages_intarray
+ \seq_map_inline:Nn \l__acro_tmpa_seq
+ {
+ \intarray_gset:Nnn \g__acro_pages_intarray
+ { \__acro_absolute_page:w ##1 \q_stop + 1 }
+ {
+ \bool_if:NTF \l__acro_list_local_bool
+ {
+ \int_compare:nNnTF
+ { \__acro_barrier:w ##1 \q_stop }
+ =
+ \g_acro_barrier_int
+ {1}
+ {0}
+ }
+ {1}
+ }
+ }
+ \bool_if:NT \l__acro_list_local_bool
+ {
+ \seq_clear:N \l__acro_tmpb_seq
+ \seq_map_inline:Nn \l__acro_tmpa_seq
+ {
+ \int_compare:nNnT
+ { \__acro_barrier:w ##1 \q_stop }
+ =
+ \g_acro_barrier_int
+ { \seq_put_right:Nn \l__acro_tmpb_seq {##1} }
+ }
+ \seq_set_eq:NN \l__acro_tmpa_seq \l__acro_tmpb_seq
+ }
+ \seq_clear:N \l__acro_tmpb_seq
+ \int_zero:N \l__acro_tmpb_int
+ \seq_map_inline:Nn \l__acro_tmpa_seq
+ {
+ % the current page
+ \int_set:Nn \l__acro_tmpa_int
+ { \__acro_absolute_page:w ##1 \q_stop + 1 }
+ \int_compare:nNnTF \l__acro_tmpa_int = 1
+ { % first page, start range
+ \seq_put_right:Ne \l__acro_tmpb_seq
+ { \__acro_page_name:w ##1 \q_stop }
+ \int_incr:N \l__acro_tmpb_int
+ }
+ { % not first page
+ \int_compare:nNnTF
+ {
+ \intarray_item:Nn \g__acro_pages_intarray
+ { \l__acro_tmpa_int - 1 }
+ }
+ = 0
+ { % start range
+ \int_zero:N \l__acro_tmpb_int
+ \seq_put_right:Ne \l__acro_tmpb_seq
+ { \__acro_page_name:w ##1 \q_stop }
+ \int_incr:N \l__acro_tmpb_int
+ }
+ { % continue range
+ \int_compare:nNnTF
+ \l__acro_tmpa_int = { \intarray_count:N \g__acro_pages_intarray }
+ { % last page, range ended
+ \__acro_finish_range:Nnn \l__acro_tmpb_seq
+ { \l__acro_tmpb_int }
+ {##1}
+ \int_zero:N \l__acro_tmpb_int
+ }
+ { % not last page
+ \int_compare:nNnTF
+ {
+ \intarray_item:Nn \g__acro_pages_intarray
+ { \l__acro_tmpa_int + 1 }
+ }
+ = 0
+ { % range ended
+ \__acro_finish_range:Nnn \l__acro_tmpb_seq
+ { \l__acro_tmpb_int }
+ {##1}
+ \int_zero:N \l__acro_tmpb_int
+ }
+ {% continue range
+ \int_incr:N \l__acro_tmpb_int
+ }
+ }
+ }
+ }
+ }
+ \seq_use:Nn \l__acro_tmpb_seq { \l__acro_pages_sep_tl }
}
-\cs_new_protected:Npn \acro_mark_as_used:n #1
+% #1: sequence
+% #2: range length
+% #3: page property entry
+\cs_new_protected:Npn \__acro_finish_range:Nnn #1#2#3
{
- \bool_gset_true:c { g__acro_#1_used_bool }
- \bool_gset_true:c { g__acro_#1_first_use_bool }
- \bool_gset_true:c { g__acro_#1_in_list_bool }
- \if@filesw
- \__acro_aux_file_now:n { \acro@used@once {#1} {} {} {} }
- \__acro_aux_file_now:n { \acro@used@twice {#1} {} {} {} }
- \fi
+ \seq_pop_right:NN #1 \l__acro_tmpa_tl
+ \int_compare:nNnTF {#2} > 1
+ {
+ \bool_lazy_and:nnTF
+ { \l__acro_seq_use_bool }
+ { \int_compare_p:nNn {#2} < \l__acro_pages_seq_threshold_int }
+ {
+ \seq_put_right:Ne \l__acro_tmpb_seq
+ {
+ \exp_not:V \l__acro_tmpa_tl
+ \exp_not:V \l__acro_pages_seq_pre_tl
+ \acro_translate:n {sequentes}
+ }
+ }
+ {
+ \seq_put_right:Ne \l__acro_tmpb_seq
+ {
+ \exp_not:V \l__acro_tmpa_tl
+ --
+ \__acro_page_name:w #3 \q_stop
+ }
+ }
+ }
+ {
+ \bool_if:NTF \l__acro_seq_use_bool
+ {
+ \seq_put_right:Ne \l__acro_tmpb_seq
+ {
+ \exp_not:V \l__acro_tmpa_tl
+ \exp_not:V \l__acro_pages_seq_pre_tl
+ \acro_translate:n {sequens}
+ }
+ }
+ {
+ \seq_put_right:Ne \l__acro_tmpb_seq
+ { \exp_not:V \l__acro_tmpa_tl }
+ \seq_put_right:Ne \l__acro_tmpb_seq
+ { \__acro_page_name:w #3 \q_stop }
+ }
+ }
}
-\cs_new_protected:Npn \acro_reset_all:
- { \acro_for_all_acronyms_do:n { \acro_reset:n {##1} } }
+\bool_new:N \l__acro_pages_all_bool
+\bool_new:N \l__acro_pages_display_bool
+\bool_new:N \l__acro_seq_use_bool
-% make sure that no acronym is used at the beginning of the document, see
-% issue #81 for reasons why this may be necessary:
-\AfterEndPreamble { \acro_reset_all: }
-
-\cs_new_protected:Npn \acro_mark_all_as_used:
- { \acro_for_all_acronyms_do:n { \acro_mark_as_used:n {##1} } }
-
-\prg_new_conditional:Npnn \acro_if_acronym_used:n #1 { p,T,F,TF }
+% #1: id
+\prg_new_conditional:Npnn \acro_if_pages:n #1 {p,T,F,TF}
{
\bool_lazy_and:nnTF
- { \bool_if_p:c {g__acro_#1_used_bool} }
- { !\acro_if_is_single_p:n {#1} }
+ { \l__acro_pages_display_bool }
+ {
+ \bool_lazy_and_p:nn
+ { \acro_attribute_if_set_p:nn {pages} {#1} }
+ { !\acro_if_single_p:n {#1} }
+ }
{ \prg_return_true: }
{ \prg_return_false: }
}
+\prg_generate_conditional_variant:Nnn \acro_if_pages:n {e} {p,T,F,TF}
-% --------------------------------------------------------------------------
-% acronym barriers: allow local lists of only those acronyms used between two
-% barriers
-
-\keys_define:nn {acro}
+\acro_at_begin_document:n
{
- use-barriers .bool_gset:N = \g__acro_use_barriers_bool ,
- use-barriers .initial:n = false ,
- reset-at-barriers .bool_gset:N = \g__acro_reset_at_barrier_bool ,
- reset-at-barriers .initial:n = false
+ \bool_lazy_and:nnT
+ { \l__acro_pages_display_bool }
+ { !\l__acro_pages_all_bool }
+ { \bool_set_true:N \l__acro_label_bool }
+ }
+
+% #1: style name
+\cs_new_protected:Npn \acro_no_page_ranges:n #1
+ {
+ \bool_if:NF \l__acro_label_bool
+ { \msg_warning:nnn {acro} {label} {#1} }
+ \bool_set_false:N \l__acro_pages_all_bool
+ }
+\cs_generate_variant:Nn \acro_no_page_ranges:n {e}
+
+\tl_new:N \l__acro_pages_fill_tl
+\tl_new:N \l__acro_pages_sep_tl
+\tl_new:N \l__acro_pages_seq_pre_tl
+
+\int_new:N \l__acro_pages_seq_threshold_int
+
+\keys_define:nn {acro/pages}
+ {
+ display .choice: ,
+ display / all .code:n =
+ \bool_set_true:N \l__acro_pages_display_bool
+ \bool_set_true:N \l__acro_pages_all_bool ,
+ display / first .code:n =
+ \bool_set_true:N \l__acro_pages_display_bool
+ \bool_set_false:N \l__acro_pages_all_bool ,
+ display / none .code:n =
+ \bool_set_false:N \l__acro_pages_display_bool ,
+ seq / use .bool_set:N = \l__acro_seq_use_bool ,
+ seq / use .initial:n = true ,
+ seq / pre .tl_set:N = \l__acro_pages_seq_pre_tl ,
+ seq / pre .initial:n = \, ,
+ seq / threshold .code:n =
+ \int_compare:nNnTF {#1} < 3
+ { \msg_error:nn {acro} {threshold} }
+ { \int_set:Nn \l__acro_pages_seq_threshold_int {#1} } ,
+ seq / threshold .initial:n = 3 ,
+ fill .tl_set:N = \l__acro_pages_fill_tl ,
+ fill .initial:n = \dotfill ,
+ sep .tl_set:N = \l__acro_pages_sep_tl ,
+ sep .initial:n = {,~} ,
+ name .bool_set:N = \l__acro_pages_name_display_bool ,
+ name .initial:n = false
}
-\cs_new_protected:Npn \acro_barrier:
+% ----------------------------------------------------------------------------
+\AcroModuleEnd
+\AcroModule{locale}{language support}
+
+\RequirePackage{translations}
+
+% --------------------------------------------------------------------------
+\msg_new:nnn {acro} {language-not-defined}
{
- \int_gincr:N \g__acro_barrier_int
- \bool_if:NT \g__acro_reset_at_barrier_bool
- { \acro_reset_all: }
+ You~ chose~ the~ language~ `#1'~ which~ is~ not~ defined~ by~ acro.~
+ `english'~ is~ used~ instead.~ If~ you~ just~ mistyped~ try~ again!~
+ Otherwise~ contact~ the~ author~ and~ he'll~ probably~ add~ your~ language.
}
-\cs_new_protected:Npn \acro_check_barriers:n #1
+\msg_new:nnn {acro} {translation-value}
+ { You~ need~ to~ give~ a~ value~ to~ `#1'~ \msg_line_context: }
+
+% --------------------------------------------------------------------------
+\bool_new:N \l__acro_show_locale_bool
+\bool_new:N \l__acro_list_show_locale_bool
+\tl_new:N \l__acro_locale_format_tl
+
+% #1: id
+% #2: property
+\prg_new_conditional:Npnn \acro_if_locale:nn #1#2 {p,T,F,TF}
{
- \bool_if:NT \g__acro_use_barriers_bool
+ \str_if_eq:nnTF {#2} {foreign}
{
- \tl_set:Nx \l__acro_tmpa_tl
- { \seq_use:cn {g__acro_#1_barriers_seq} {} }
- \tl_set:Nx \l__acro_tmpb_tl
- { \seq_use:cn {g__acro_#1_recorded_barriers_seq} {} }
- \tl_if_eq:NNF \l__acro_tmpa_tl \l__acro_tmpb_tl
- {
- \@latex@warning@no@line
- {Rerun~to~get~barriers~of~acronym~#1~right}
- }
+ \bool_lazy_or:nnTF
+ { \acro_property_if_set_p:nn {#1} {foreign-babel} }
+ { \acro_property_if_set_p:nn {#1} {foreign-locale} }
+ { \prg_return_true: }
+ { \prg_return_false: }
}
+ { \prg_return_false: }
}
-\cs_new_protected:Npn \acro_record_barrier:n #1
+% #1: id
+% #2: property
+% #3: text
+\cs_new_protected:Npn \acro_locale:nnn #1#2#3
{
- \bool_if:NT \g__acro_use_barriers_bool
+ \acro_if_locale:nnTF {#1} {#2}
{
- \seq_if_in:cxF {g__acro_#1_barriers_seq}
- { \int_use:N \g__acro_barrier_int }
+ \__acro_foreign_language:en
+ { \str_lowercase:e { \acro_property_get:nn {#1} {foreign-babel} } }
{
- \seq_gput_right:cx {g__acro_#1_barriers_seq}
- { \int_use:N \g__acro_barrier_int }
+ \bool_lazy_or:nnT
+ { \l__acro_show_locale_bool }
+ {
+ \bool_lazy_and_p:nn
+ { \l__acro_list_bool }
+ { \l__acro_list_show_locale_bool }
+ }
+ {
+ {
+ \l__acro_locale_format_tl
+ {
+ \acro_property_if_set:nnTF {#1} {foreign-locale}
+ { \acro_property_get:nn {#1} {foreign-locale} }
+ {
+ \baselanguage
+ { \acro_property_get:nn {#1} {foreign-babel} }
+ }
+ }
+ }
+ :~
+ }
+ #3
}
}
+ {#3}
}
-% #1: id
-% #2: barrier number
-\prg_new_protected_conditional:Npnn \acro_if_in_barrier:nn #1#2 {T,F,TF}
+\cs_new_protected:Npn \__acro_foreign_language:nn #1#2
{
- \seq_if_in:cnTF {g__acro_#1_recorded_barriers_seq} {#2}
- { \prg_return_true: }
- { \prg_return_false: }
+ \bool_lazy_or:nnTF
+ { \acro_package_if_loaded_p:n {babel} }
+ { \acro_package_if_loaded_p:n {polyglossia} }
+ { \foreignlanguage {#1} {#2} }
+ {#2}
+ }
+\cs_generate_variant:Nn \__acro_foreign_language:nn {e}
+
+\keys_define:nn {acro/locale}
+ {
+ display .bool_set:N = \l__acro_show_locale_bool ,
+ display .initial:n = false ,
+ format .tl_set:N = \l__acro_locale_format_tl ,
+ format .initial:n = \em \text_titlecase_first:n
}
-\cs_generate_variant:Nn \acro_if_in_barrier:nnTF {nx}
-\cs_new_protected:Npn \acro@barriers #1#2
- { \seq_gset_split:cnn {g__acro_#1_recorded_barriers_seq} {,} {#2} }
+\keys_define:nn {acro/list/locale}
+ {
+ display .bool_set:N = \l__acro_list_show_locale_bool ,
+ display .initial:n = false
+ }
% --------------------------------------------------------------------------
-% the user commands -- preparation:
-\cs_new_protected:Npn \acro_begin:
+
+\bool_new:N \l__acro_language_auto_bool
+\bool_set_true:N \l__acro_language_auto_bool
+% this token list will hold the chosen language for acro; since the
+% language is either chosen automatically or by option it is only available at
+% begin document
+\tl_new:N \l_acro_language_tl
+\tl_set:Nn \l_acro_language_tl {english}
+\tl_new:N \l__acro_current_language_tl
+
+% ----------------------------------------------------------------------------
+\tl_const:Nn \c__acro_keyword_prefix_tl {acro-keyword-}
+\prop_new:N \g_acro_translations_prop
+
+% translate the key #1
+\cs_new:Npn \acro_translate:n #1
{
- \group_begin:
- \__acro_check_after_end:w
+ \bool_if:NTF \l__acro_language_auto_bool
+ { \GetTranslation { \c__acro_keyword_prefix_tl #1 } }
+ {
+ \GetTranslationFor
+ { \l_acro_language_tl }
+ { \c__acro_keyword_prefix_tl #1 }
+ }
}
-\cs_new_protected:Npn \__acro_check_after_end:w #1 \acro_end:
+\acro_at_begin_document:n
{
- \cs_set:Npn \__acro_execute:
+ \bool_if:NTF \l__acro_language_auto_bool
{
- \__acro_check_trail:N \l_peek_token
- #1
- \acro_end: % this will end the group opened by \acro_begin:
+ \tl_set:Nx \l_acro_language_tl
+ { \@trnslt@language{\@trnslt@current@language} }
}
- \peek_after:Nw \__acro_execute:
+ {
+ \tl_set_eq:NN
+ \l_acro_language_tl
+ \l__acro_current_language_tl
+ }
+ }
+
+% ----------------------------------------------------------------------------
+% #1: language
+% #2: keyword
+% #3: translation
+\cs_new_protected:Npn \acro_declare_translation:nnn #1#2#3
+ {
+ \declaretranslation
+ {#1}
+ { \c__acro_keyword_prefix_tl #2 }
+ {#3}
+ \prop_gput:Nnn \g_acro_translations_prop {#2(#1)} {#3}
}
+\cs_generate_variant:Nn \acro_declare_translation:nnn {V,VnV}
-\cs_new_protected:Npn \acro_end: { \group_end: }
+% #1: key
+% #2: csv list: { <lang1> = <translation1> , <lang2> = <translation2> }
+\cs_new_protected:Npn \acro_declare_translations:nn #1#2
+ {
+ \cs_set:Npn \__acro_declare_translation_aux:n ##1
+ { \msg_error:nnn {acro} {translation-value} {##1} }
+ \cs_set:Npn \__acro_declare_translation_aux:nn ##1##2
+ { \acro_declare_translation:nnn {##1} {#1} {##2} }
+ \keyval_parse:NNn
+ \__acro_declare_translation_aux:n
+ \__acro_declare_translation_aux:nn
+ {#2}
+ }
-\cs_new_protected:Npn \acro_reset_specials:
+% #1: language
+% #2: csv list: { <key1> = <translation1> , <key2> = <translation2> }
+\cs_new_protected:Npn \acro_add_translations:nn #1#2
{
- \bool_set_false:N \l__acro_indefinite_bool
- \bool_set_false:N \l__acro_first_upper_bool
- \bool_set_false:N \l__acro_upper_indefinite_bool
- \acro_for_endings_do:n { \bool_set_false:c {l__acro_##1_bool} }
+ \cs_set:Npn \__acro_declare_translation_aux:n ##1
+ { \msg_error:nnn {acro} {translation-value} {##1} }
+ \cs_set:Npn \__acro_declare_translation_aux:nn ##1##2
+ { \acro_declare_translation:nnn {#1} {##1} {##2} }
+ \keyval_parse:NNn
+ \__acro_declare_translation_aux:n
+ \__acro_declare_translation_aux:nn
+ {#2}
}
-% #1: ID
-% #2: true|false
-\cs_new_protected:Npn \acro_check_acronym:nn #1#2
+% within the loop:
+% #1: keyword
+% #2: language
+% #3: translation
+\cs_new_protected:Npn \__acro_for_all_translations_do:n #1
{
- \acro_defined:n {#1}
- \acro_use_acronym:n {#2}
+ \cs_set:Npn \__acro_parse_translate_list_entry:nnn ##1##2##3 {#1}
+ \prop_map_inline:Nn \g_acro_translations_prop
+ { \__acro_parse_translate_list_entry:www ##1 \q_mark ##2 \q_stop }
}
-% #1: boolean
-% #2: ID
-\cs_new_protected:Npn \acro_check_and_mark_if:nn #1#2
+% the purpose of the following is to easy documentation:
+\cs_new:Npn \__acro_parse_translate_list_entry:nnn #1#2#3 {}
+
+\cs_new_protected:Npn \__acro_parse_translate_list_entry:www #1(#2)\q_mark#3\q_stop
+ { \__acro_parse_translate_list_entry:nnn {#1} {#2} {#3} }
+
+% ----------------------------------------------------------------------------
+
+\keys_define:nn {acro}
{
- \bool_lazy_or:nnTF {#1} { !\l__acro_use_acronyms_bool }
- { \acro_check_acronym:nn {#2} {false} }
- { \acro_check_acronym:nn {#2} {true} }
+ language .value_required:n = true ,
+ language .code:n =
+ \str_case:nnF {#1}
+ { {auto} { \bool_set_true:N \l__acro_language_auto_bool } }
+ {
+ \bool_set_false:N \l__acro_language_auto_bool
+ \tl_set:Nn \l__acro_current_language_tl {#1}
+ } ,
+ language .initial:n = auto
}
-\cs_new_protected:Npn \acro_switch_off:
- { \bool_set_false:N \l__acro_use_acronyms_bool }
+% --------------------------------------------------------------------------
+\AcroModuleEnd
+\AcroModule{pdfsupport}{support for bookmarks and accessibility}
-\cs_new_protected:Npn \acro_switch_on:
- { \bool_set_true:N \l__acro_use_acronyms_bool }
+\msg_new:nnn {acro} {pdf-template-exists}
+ { The~ pdfstring~ template~ `#1'~ already~ exists~ \msg_line_context: }
+
+\msg_new:nnn {acro} {pdf-template-undefined}
+ { The~ pdfstring~ template~ `#1'~ is~ not~ defined~ \msg_line_context: }
+
+\msg_new:nnn {acro} {local-links}
+ {
+ You~ are~ using~ the~ option~ `make-links'~ in~ combination~ with~ local~
+ acronym~ lists.~ Please~ make~ sure~ to~ also~ set \\
+ \ \ \ \ barriers/single~ =~ true \\
+ for~ referencing~ only~ existing~ and~ unique~ links.
+ }
+
+% --------------------------------------------------------------------------
+% hyper linking
+\bool_new:N \l__acro_hyperref_use_bool
+
+\cs_new_eq:NN \__acro_hyper_target:nn \use_ii:nn
+\cs_new_eq:NN \__acro_hyper_link:nn \use_ii:nn
+
+\cs_generate_variant:Nn \__acro_hyper_target:nn {e}
+\cs_generate_variant:Nn \__acro_hyper_link:nn {e}
+
+% \acro_property_declare:nnnnn
+% { \c_false_bool } % not unique
+% { \c_true_bool } % boolean
+% { \c_false_bool } % not mandatory
+% { \c_false_bool } % dynamic
+% {target-set}
-% commands for (re)defining \ac-like macros:
-\cs_new_protected:Npn \acro_define_new_acro_command:NN #1#2
+\cs_new_protected:Npn \__acro_activate_hyperref_support:
{
- % #1: csname
- % #2: definition where `#1' refers to the ID
- \cs_new_protected:Npn #1 ##1##2
+ \bool_lazy_and:nnT
+ { \acro_package_if_loaded_p:n {hyperref} }
+ { \l__acro_hyperref_use_bool }
{
- \cs_set:Npn \__acro_tmp:n ####1 {##2}
- \cs_new_protected:cpx
- {acro_ \__acro_remove_backslash:N ##1 :nnn} ####1####2####3
- {
- \acro_begin:
- \acro_reset_specials:
- \exp_not:N \tl_if_blank:nF {####2} { \keys_set:nn {acro} {####2} }
- \acro_check_and_mark_if:nn {####1} {####3}
- \__acro_tmp:n {####3}
- \acro_end:
- }
- #2 ##1 {sO{}m}
+ \sys_if_engine_xetex:TF
{
- \acro_case_insensitive_command:cnnn
- {acro_ \__acro_remove_backslash:N ##1 :nnn}
- {####1}
- {####2}
- {####3}
+ \cs_set:Npn \__acro_hyper_link:nn ##1##2
+ { \hyperlink {##1} { \XeTeXLinkBox {##2} } }
}
+ { \cs_set_eq:NN \__acro_hyper_link:nn \hyperlink }
+ \cs_set:Npn \__acro_hyper_target:nn ##1##2
+ { \raisebox {3ex} [0pt] { \hypertarget {##1} { } } ##2 }
}
}
-\cs_generate_variant:Nn \acro_define_new_acro_command:NN {cc}
-\cs_generate_variant:Nn \acro_check_and_mark_if:nn {nx}
-% commands for (re)defining \acflike-like macros:
-\cs_new_protected:Npn \acro_define_new_acro_pseudo_command:NN #1#2
+% #1: id
+% #2: property
+% #3: text
+\cs_new_protected:Npn \__acro_make_link:nnn #1#2#3
{
- % #1: csname
- % #2: definition where `#1' refers to the ID and `#2' to the pseudo long form
- \cs_new_protected:Npn #1 ##1##2
+ \acro_if_short:nTF {#2}
{
- \cs_set:Npn \__acro_tmp:nn ####1####2 {##2}
- \cs_new_protected:cpx
- {acro_ \__acro_remove_backslash:N ##1 :nnn} ####1####2####3
+ \bool_lazy_all:nTF
{
- \acro_begin:
- \acro_reset_specials:
- \acro_check_and_mark_if:nn {####1} {####3}
- \__acro_tmp:nn {####3} {####2}
- \acro_end:
+ { \acro_package_if_loaded_p:n {hyperref} }
+ { \l__acro_hyperref_use_bool }
+ { !\acro_if_single_p:n {#1} }
}
- #2 ##1 {smm}
{
- \acro_case_insensitive_command:cnnn
- {acro_ \__acro_remove_backslash:N ##1 :nnn}
- {####1}
- {####3}
- {####2}
+ \bool_if:NTF \l__acro_list_bool
+ {
+ \__acro_hyper_target:en
+ {
+ acro : #1
+ \bool_lazy_and:nnT
+ { \l__acro_list_local_bool }
+ { \l__acro_usage_local_bool }
+ { : \int_use:N \g_acro_barrier_int }
+ }
+ {#3}
+ }
+ {
+ \__acro_hyper_link:en
+ {
+ acro : #1
+ \bool_if:NT \l__acro_usage_local_bool
+ { : \int_use:N \g_acro_barrier_int }
+ }
+ { \phantom {#3} }
+ \__acro_color_link:n { \hbox_overlap_left:n {#3} }
+ }
}
+ {#3}
}
+ {#3}
}
-\cs_generate_variant:Nn \acro_define_new_acro_pseudo_command:NN {cc}
-\clist_map_inline:nn {New,Renew,Declare,Provide}
+\acro_at_begin_document:n
{
- \acro_define_new_acro_command:cc
- {#1AcroCommand}
- {#1DocumentCommand}
- \acro_define_new_acro_pseudo_command:cc
- {#1PseudoAcroCommand}
- {#1DocumentCommand}
- }
-
-% --------------------------------------------------------------------------
-% user commands -- facilities
-\cs_new_protected:Npn \acro_first_upper:
- {
- \bool_if:NTF \l__acro_indefinite_bool
+ \bool_if:nT
{
- \bool_set_false:N \l__acro_indefinite_bool
- \bool_set_true:N \l__acro_upper_indefinite_bool
+ \l__acro_hyperref_use_bool &&
+ \l__acro_barriers_bool &&
+ ! \l__acro_usage_local_bool
}
- { \bool_set_true:N \l__acro_first_upper_bool }
+ { \msg_warning:nn {acro} {local-links} }
}
-\cs_new_protected:Npn \acro_indefinite:
+% #1: text
+\cs_new:Npn \__acro_color_link:n #1
{
- \bool_if:NTF \l__acro_first_upper_bool
+ \bool_lazy_and:nnTF
+ { \cs_if_exist_p:N \hypersetup }
{
- \bool_set_true:N \l__acro_upper_indefinite_bool
- \bool_set_false:N \l__acro_first_upper_bool
+ \bool_lazy_or_p:nn
+ { \legacy_if_p:n {Hy@colorlinks} }
+ { \legacy_if_p:n {Hy@ocgcolorlinks} }
}
- { \bool_set_true:N \l__acro_indefinite_bool }
+ { \textcolor { \@linkcolor } {#1} }
+ {#1}
}
-\cs_new_protected:Npn \acro_cite:
+\acro_at_begin_document:n
{
- \bool_set_true:N \l__acro_citation_all_bool
- \bool_set_true:N \l__acro_citation_first_bool
+ \__acro_activate_hyperref_support:
+ \cs_if_exist:NF \textcolor { \cs_new_eq:NN \textcolor \use_ii:nn }
}
-\cs_new_protected:Npn \acro_no_cite:
+\keys_define:nn {acro}
{
- \bool_set_false:N \l__acro_citation_all_bool
- \bool_set_false:N \l__acro_citation_first_bool
+ make-links .bool_set:N = \l__acro_hyperref_use_bool ,
+ make-links .initial:n = false
}
-\cs_new_protected:Npn \acro_index:
- { \bool_set_true:N \l__acro_addto_index_bool }
+% --------------------------------------------------------------------------
+% accessibility support
+\bool_new:N \l__acro_accsupp_bool
+\tl_new:N \l__acro_accsupp_options_tl
+\tl_new:N \l__acro_accsupp_method_tl
-% similar macros \acro_<ending>: are defined by \acro_provide_ending:nnn
+% #1: copied text
+% #2: printed text
+\cs_new_protected:Npn \__acro_accsupp:nn #1#2
+ {
+ \bool_if:NTF \l__acro_accsupp_bool
+ {
+ \__acro_do_accsupp:Vnn
+ \l__acro_acc_supp_options_tl
+ {#1}
+ {#2}
+ }
+ {#2}
+ }
+\cs_generate_variant:Nn \__acro_accsupp:nn {ee}
-% ---------------------------------------------------------------------------
-% process options:
-\ProcessKeysPackageOptions {acro}
+% #1: options
+% #2: copied text
+% #3: printed text
+\cs_new_protected:Npn \__acro_do_accsupp:nnn #1#2#3
+ {
+ \BeginAccSupp { method = \l__acro_accsupp_method_tl , ActualText = {#2} , #1 }
+ #3
+ \EndAccSupp { }
+ }
+\cs_generate_variant:Nn \__acro_do_accsupp:nnn {V}
-% ---------------------------------------------------------------------------
-% PDF bookmark support
-\cs_new:Npn \acpdfstring
- { \acro_pdf_string_short:n }
+\acro_at_begin_document:n
+ {
+ \bool_lazy_all:nT
+ {
+ { \acro_package_if_loaded_p:n {accsupp} }
+ { \acro_package_if_loaded_p:n {hyperref} }
+ { \l__acro_use_accsupp_bool }
+ }
+ { \bool_set_true:N \l__acro_accsupp_bool }
+ }
-\cs_new:Npn \acpdfstringalt
- { \acro_pdf_string_alt:n }
+\keys_define:nn {acro/accsupp}
+ {
+ use .code:n =
+ \str_case:nnTF {#1}
+ { {true} {} {false} {} }
+ { \use:c {bool_set_#1:N} \l__acro_use_accsupp_bool }
+ { \msg_error:nnn {kernel} {boolean-values-only} {group} } ,
+ use .initial:n = true ,
+ options .tl_set:N = \l__acro_acc_supp_options_tl ,
+ options .initial:n = ,
+ method .tl_set:N = \l__acro_accsupp_method_tl ,
+ method .initial:n = pdfstringdef
+ }
-\cs_new:Npn \acpdfstringlong
- { \acro_pdf_string_long:n }
+% --------------------------------------------------------------------------
+% pdf comments a.k.a. tooltips
+\bool_new:N \l__acro_pdfcomment_use_bool
-\cs_new:Npn \acpdfstringfirst #1
- { \acpdfstringlong {#1} ~ ( \acpdfstring {#1} ) }
+% #1: id
+% #2: property
+% #3: text
+\cs_new_protected:Npn \__acro_pdf_comment:nnn #1#2#3
+ {
+ \bool_lazy_all:nTF
+ {
+ { \l__acro_pdfcomment_use_bool }
+ { \acro_property_if_set_p:nn {#1} {pdfcomment} }
+ { \acro_if_short_p:n {#2} }
+ }
+ {
+ \__acro_pdf_comment_cmd:nn
+ {#3}
+ { \acro_property_get:nn {#1} {pdfcomment} }
+ }
+ {#3}
+ }
-% TODO: place this somewhere where endings are defined:
-\cs_new:Npn \acpdfstringlongplural
- { \acro_pdf_string_long_plural:n }
+\keys_define:nn {acro/pdfcomments}
+ {
+ use .bool_set:N = \l__acro_pdfcomment_use_bool ,
+ use .initial:n = false ,
+ cmd .cs_set:Np = \__acro_pdf_comment_cmd:nn #1#2 ,
+ cmd .initial:n = \pdftooltip {#1} {#2}
+ }
+% --------------------------------------------------------------------------
+% expandable templates for use in pdfstrings
\prg_new_conditional:Npnn \acro_if_star_gobble:n #1 {TF}
{
\if_meaning:w *#1
@@ -3500,625 +4251,1201 @@
\fi:
}
-\cs_new:Npn \acro_expandable_short:n #1
- { \use:e { \prop_item:Nn \l__acro_short_prop {#1} } }
-
-\cs_new:Npn \acro_expandable_alt:n #1
- { \use:e { \prop_item:Nn \l__acro_alt_prop {#1} } }
+% #1: name
+% #2: code
+\cs_new_protected:Npn \acro_pdfstring_template_new:nn #1#2
+ {
+ \cs_if_exist:cTF {____acro:pdfstring:template:#1}
+ { \msg_error:nnn {acro} {pdf-template-exists} {#1} }
+ { \cs_new:cpn {____acro:pdfstring:template:#1} ##1 {#2} }
+ }
-\cs_new:Npn \acro_expandable_long:n #1
- { \use:e { \prop_item:Nn \l__acro_long_prop {#1} } }
+% #1: name
+% #2: code
+\cs_new_protected:Npn \acro_pdfstring_template_set:nn #1#2
+ {
+ \cs_if_exist:cTF {____acro:pdfstring:template:#1}
+ { \cs_set:cpn {____acro:pdfstring:template:#1} ##1 {#2} }
+ { \cs_new:cpn {____acro:pdfstring:template:#1} ##1 {#2} }
+ }
-\cs_new:Npn \acro_expandable_long_plural:n #1
+% #1: name
+% #2: name to be let to
+\cs_new_protected:Npn \acro_pdfstring_template_let:nn #1#2
{
- \bool_if:cTF
- { c_ \prop_item:Nn \l__acro_long_plural_form_prop {#1} _bool }
- { \use:e { \prop_item:Nn \l__acro_long_plural_prop {#1} } }
+ \cs_if_exist:cTF {____acro:pdfstring:template:#2}
{
- \use:e {
- \prop_item:Nn \l__acro_long_prop {#1}
- \prop_item:Nn \l__acro_long_plural_prop {#1}
- }
+ \cs_set_eq:cc
+ {____acro:pdfstring:template:#1}
+ {____acro:pdfstring:template:#2}
+ }
+ { \msg_error:nnn {acro} {pdf-template-undefined} {#2} }
+ }
+
+% #1: name
+% #2: id
+\cs_new:Npn \acro_pdfstring_template:nn #1#2
+ {
+ \cs_if_exist:cTF {____acro:pdfstring:template:#1}
+ { \use:c {____acro:pdfstring:template:#1} {#2} }
+ { \msg_expandable_error:nnn {acro} {pdf-template-undefined} {#1} }
+ }
+
+% #1: cs
+% #2: template
+\cs_new_protected:Npn \acro_set_pdf_cs:Nn #1#2
+ {
+ \cs_set:Npn #1 ##1
+ {
+ \acro_if_star_gobble:nTF {##1}
+ { \acro_pdfstring_template:nn {#2} }
+ { \acro_pdfstring_template:nn {#2} {##1} }
+ }
+ }
+
+% #1: id
+% #2: property
+\cs_new:Npn \__acro_pdfstring_plural:nn #1#2
+ {
+ \acro_property_get_if_set:nnF {#1} {#2-plural-form}
+ {
+ \str_if_eq:nnTF {#2} {short}
+ { \acro_property_get:nn {#1} {pdfstring} }
+ { \acro_property_get:nn {#1} {#2} }
+ \acro_property_get:nn {#1} {#2-plural}
}
}
-\cs_new:Npn \acro_pdf_string_short:n #1
+% #1: id
+% #2: property
+\cs_new:Npn \__acro_pdfstring_indefinite:nn #1#2
{
- \acro_if_star_gobble:nTF {#1}
- { \acro_expandable_short:n }
- { \acro_expandable_short:n {#1} }
+ \acro_property_get_if_set:nnT {#1} {#2-indefinite}
+ { \c_space_tl }
}
-\cs_new:Npn \acro_pdf_string_alt:n #1
+% #1: text
+\cs_new:Npn \__acro_pdfstring_upper:n #1
+ { \text_titlecase_first:e {#1} }
+
+\cs_generate_variant:Nn \text_titlecase_first:n {e}
+
+% --------------------------------------------------------------------------
+% long-short
+\acro_pdfstring_template_new:nn {long-short}
{
- \acro_if_star_gobble:nTF {#1}
- { \acro_expandable_alt:n }
- { \acro_expandable_alt:n {#1} }
+ \acro_property_get:nn {#1} {long}
+ \acro_space:
+ ( \acro_property_get:nn {#1} {pdfstring} )
}
-\cs_new:Npn \acro_pdf_string_long:n #1
+% indef-long-short
+\acro_pdfstring_template_new:nn {indef-long-short}
{
- \acro_if_star_gobble:nTF {#1}
- { \acro_expandable_long:n }
- { \acro_expandable_long:n {#1} }
+ \__acro_pdfstring_indefinite:nn {#1} {long}
+ \acro_property_get:nn {#1} {long}
+ \acro_space:
+ ( \acro_property_get:nn {#1} {pdfstring} )
}
-% TODO: place this somewhere where endings are defined:
-\cs_new:Npn \acro_pdf_string_long_plural:n #1
+% Long-short
+\acro_pdfstring_template_new:nn {Long-short}
{
- \acro_if_star_gobble:nTF {#1}
- { \acro_expandable_long_plural:n }
- { \acro_expandable_long_plural:n {#1} }
+ \__acro_pdfstring_upper:n
+ { \acro_property_get:nn {#1} {long} }
+ \acro_space:
+ ( \acro_property_get:nn {#1} {pdfstring} )
}
-\AtBeginDocument
+% Indef-long-short
+\acro_pdfstring_template_new:nn {Indef-long-short}
{
- \@ifpackageloaded {hyperref}
+ \__acro_pdfstring_upper:n
{
- \bool_set_true:N \l__acro_hyperref_loaded_bool
- \pdfstringdefDisableCommands
- {
- \cs_set_eq:NN \ac \acpdfstring
- \cs_set_eq:NN \Ac \acpdfstring
- \cs_set_eq:NN \acs \acpdfstring
- \cs_set_eq:NN \acl \acpdfstringlong
- \cs_set_eq:NN \Acl \acpdfstringlong
- \cs_set_eq:NN \acf \acpdfstringfirst
- \cs_set_eq:NN \Acf \acpdfstringfirst
- \cs_set_eq:NN \aca \acpdfstringalt
- \cs_set_eq:NN \acp \acpdfstringplural
- \cs_set_eq:NN \Acp \acpdfstringplural
- \cs_set_eq:NN \acsp \acpdfstringplural
- \cs_set_eq:NN \aclp \acpdfstringlongplural
- \cs_set_eq:NN \Aclp \acpdfstringlongplural
- \cs_set_eq:NN \acfp \acpdfstringplural
- \cs_set_eq:NN \Acfp \acpdfstringplural
- \cs_set_eq:NN \acap \acpdfstringaltplural
- }
- \cs_set_protected:Npn \acro_hyper_page:n #1 { \hyperpage {#1} }
- } {}
+ \__acro_pdfstring_indefinite:nn {#1} {long}
+ \acro_property_get:nn {#1} {long}
+ }
+ \acro_space:
+ ( \acro_property_get:nn {#1} {pdfstring} )
}
-% --------------------------------------------------------------------------
-% key and order checking
-\msg_new:nnn {acro} {no-id}
+% long-short-plural
+\acro_pdfstring_template_new:nn {long-short-plural}
{
- Something~ has~ gone~ wrong,~ you've~ probably~ forgotten~ to~ set~ the~
- acronym~ ID.
+ \__acro_pdfstring_plural:nn {#1} {long}
+ \acro_space:
+ ( \__acro_pdfstring_plural:nn {#1} {short} )
}
-\msg_new:nnn {acro} {before-short}
+% Long-short-plural
+\acro_pdfstring_template_new:nn {Long-short-plural}
{
- You've~ set~ the~ property~ `#2'~ before~ the~ `short'~ property~ for~
- acronym~ `#1'~ but~ it~ needs~ to~ be~ set~ after~ it.
+ \__acro_pdfstring_upper:n
+ { \__acro_pdfstring_plural:nn {#1} {long} }
+ \acro_space:
+ ( \__acro_pdfstring_plural:nn {#1} {short} )
}
-\msg_new:nnn {acro} {missing}
- { The~ `#2'~ property~ for~ acronym~ `#1'~ is~ missing. }
+% --------------------------------------------------------------------------
+% short-long
+\acro_pdfstring_template_new:nn {short-long}
+ {
+ \acro_property_get:nn {#1} {pdfstring}
+ \acro_space:
+ ( \acro_property_get:nn {#1} {long} )
+ }
-\msg_new:nnn {acro} {doubled-property}
+% indef-short-long
+\acro_pdfstring_template_new:nn {indef-short-long}
{
- It~ seems~ to~ me~ you~ have~ used~ the~ `#2'~ property~ twice~ in~ the~
- declaration~ of~ acronym~ `#1'.~ If~ you~ haven't~ there's~
- something~ different~ wrong~ and~ I'm~ lost.~ You~'re~ on~ your~ own~
- then.
+ \__acro_pdfstring_indefinite:nn {#1} {short}
+ \acro_property_get:nn {#1} {pdfstring}
+ \acro_space:
+ ( \acro_property_get:nn {#1} {long} )
}
-% #1: acronym
-% #2: property
-\cs_new_protected:Npn \__acro_property_check:nn #1#2
+% Short-long
+\acro_pdfstring_template_new:nn {Short-long}
{
- \str_if_empty:NT \l__acro_current_id_str
- { \acro_serious_message:n {no-id} }
- \str_if_eq:nnF {#2} {short}
- {
- \acro_property_if_set:nnF {#1} {short}
- {
- \keys_set:nn {acro/declare-acronym} { short = {#1} }
- \acro_harmless_message:nn {substitute-short} {#1}
- }
- }
- \acro_property_mark_set:nn {#1} {#2}
+ \__acro_pdfstring_upper:n
+ { \acro_property_get:nn {#1} {pdfstring} }
+ \acro_space:
+ ( \acro_property_get:nn {#1} {long} )
}
-\cs_new_protected:Npn \__acro_first_property_check:nn #1#2
+% Indef-short-long
+\acro_pdfstring_template_new:nn {Indef-short-long}
{
- \cs_if_exist:cTF {l__acro_#1_short_set_bool}
+ \__acro_pdfstring_upper:n
{
- \acro_property_if_set:nnT {#1} {short}
- { \acro_serious_message:nnn {doubled-property} {#1} {#2} }
+ \__acro_pdfstring_indefinite:nn {#1} {short}
+ \acro_property_get:nn {#1} {pdfstring}
}
- { \bool_new:c {l__acro_#1_short_set_bool} }
- \acro_property_mark_set:nn {#1} {short}
+ \acro_space:
+ ( \acro_property_get:nn {#1} {long} )
}
-% #1: ID
-% #2: property
-\prg_new_conditional:Npnn \acro_property_if_set:nn #1#2 {T,F,TF}
+% short-long-plural
+\acro_pdfstring_template_new:nn {short-long-plural}
{
- \bool_if:cTF {l__acro_#1_#2_set_bool}
- { \prg_return_true: }
- { \prg_return_false: }
+ \__acro_pdfstring_plural:nn {#1} {short}
+ \acro_space:
+ ( \__acro_pdfstring_plural:nn {#1} {long} )
}
-% #1: ID
-% #2: property
-\cs_new_protected:Npn \acro_property_mark_set:nn #1#2
- { \bool_set_true:c { l__acro_#1_#2_set_bool } }
-\cs_generate_variant:Nn \acro_property_mark_set:nn {V}
+% Short-long-plural
+\acro_pdfstring_template_new:nn {Short-long-plural}
+ {
+ \__acro_pdfstring_upper:n
+ { \__acro_pdfstring_plural:nn {#1} {short} }
+ \acro_space:
+ ( \__acro_pdfstring_plural:nn {#1} {long} )
+ }
% --------------------------------------------------------------------------
-% the internal property selection functions for \DeclareAcronym:
+% short
+\acro_pdfstring_template_new:nn {short}
+ { \acro_property_get:nn {#1} {pdfstring} }
-\cs_new_protected:Npn \acro_for_properties_do:n
- { \prop_map_inline:Nn \g__acro_properties_prop }
+% indef-short
+\acro_pdfstring_template_new:nn {indef-short}
+ {
+ \__acro_pdfstring_indefinite:nn {#1} {short}
+ \acro_property_get:nn {#1} {pdfstring}
+ }
-% #1: name in associated cs
-% #2: property name
-% #3: action
-\cs_new_protected:Npn \acro_declare_property_generic:nnn #1#2#3
+% Short
+\acro_pdfstring_template_new:nn {Short}
{
- \prop_clear_new:c {l__acro_#1_prop}
- \tl_clear_new:c {l__acro_#1_tl}
- \cs_new_protected:cpn {__acro_declare_#1:nn} ##1##2 {#3}
- \cs_generate_variant:cn {__acro_declare_#1:nn} {V}
- \keys_define:nn {acro/declare-acronym}
- {
- #2 .code:n =
- \use:c {__acro_declare_#1:Vn} \l__acro_current_id_str {##1}
- \acro_property_mark_set:Vn \l__acro_current_id_str {#2}
- }
- \prop_gput:Nnn \g__acro_properties_prop {#2} {#1}
+ \__acro_pdfstring_upper:n
+ { \acro_property_get:nn {#1} {pdfstring} }
}
-% #1: name in associated cs
-% #2: property name
-% #3: action
-\cs_new_protected:Npn \acro_declare_property:nnn #1#2#3
+% Indef-short
+\acro_pdfstring_template_new:nn {Indef-short}
{
- \acro_declare_property_generic:nnn {#1} {#2}
+ \__acro_pdfstring_upper:n
{
- \__acro_property_check:nn {##1} {#2}
- \prop_put:cnn {l__acro_#1_prop} {##1} {##2}
- #3
+ \__acro_pdfstring_indefinite:nn {#1} {short}
+ \acro_property_get:nn {#1} {pdfstring}
}
}
-% #1: name in associated cs
-% #2: property name
-\cs_new_protected:Npn \acro_declare_property:nn #1#2
- { \acro_declare_property:nnn {#1} {#2} {} }
-\cs_generate_variant:Nn \acro_declare_property:nn {V}
+% short-plural
+\acro_pdfstring_template_new:nn {short-plural}
+ { \__acro_pdfstring_plural:nn {#1} {short} }
-\cs_new_protected:Npn \acro_declare_property_simple:n #1
+% Short-plural
+\acro_pdfstring_template_new:nn {Short-plural}
{
- \tl_set:Nn \l__acro_tmpa_tl {#1}
- \tl_replace_all:Nnn \l__acro_tmpa_tl {-} {_}
- \acro_declare_property:Vn \l__acro_tmpa_tl {#1}
+ \__acro_pdfstring_upper:n
+ { \__acro_pdfstring_plural:nn {#1} {short} }
}
-% #1: new alias property
-% #2: old property
-\cs_new_protected:Npn \acro_declare_property_alias:nn #1#2
+% --------------------------------------------------------------------------
+% alt
+\acro_pdfstring_template_new:nn {alt}
{
- \keys_define:nn {acro/declare-acronym}
- { #1 .meta:n = { #2 = {##1} } }
+ \acro_property_get_if_set:nnF {#1} {alt}
+ { \acro_pdfstring_template:nn {#1} {short} }
}
-% --------------------------------------------------------------------------
-% declare the properties for \DeclareAcronym:
-% short:
-\acro_declare_property_generic:nnn {short} {short}
- {
- \__acro_first_property_check:nn {#1} {short}
- \prop_put:Nnn \l__acro_short_prop {#1} {#2}
- \prop_put:Nnn \l__acro_sort_prop {#1} {#1}
- \prop_put:Nnn \l__acro_index_sort_prop {#1} {#1}
- \prop_put:Nnn \l__acro_alt_prop {#1} {#2}
- \prop_put:Nnn \l__acro_pdfstring_short_prop {#1} {#2}
- \prop_put:Nnn \l__acro_pdfstring_alt_prop {#1} {#2}
- \acro_for_endings_do:n
- {
- \prop_put:cnv {l__acro_short_##1_prop}
- {#1} {l__acro_default_short_##1_tl}
- \prop_put:cnx {l__acro_pdfstring_short_##1_prop}
- {#1} { \exp_not:n {#2} \exp_not:v {l__acro_default_short_##1_tl} }
- \prop_put:cnn {l__acro_short_##1_form_prop} {#1} {false}
- \prop_put:cnv {l__acro_alt_##1_prop}
- {#1} {l__acro_default_alt_##1_tl}
- \prop_put:cnx {l__acro_pdfstring_alt_##1_prop}
- {#1} { \exp_not:n {#2} \exp_not:v {l__acro_default_short_##1_tl} }
- \prop_put:cnn {l__acro_alt_##1_form_prop} {#1} {false}
- }
- \prop_put:NnV \l__acro_short_indefinite_prop
- {#1} \l__acro_default_indefinite_tl
- \prop_put:NnV \l__acro_alt_indefinite_prop
- {#1} \l__acro_default_indefinite_tl
- }
-
-% long:
-\acro_declare_property:nnn {long} {long}
- {
- \prop_put:NnV \l__acro_long_indefinite_prop
- {#1}
- \l__acro_default_indefinite_tl
- \acro_for_endings_do:n
+% indef-alt
+\acro_pdfstring_template_new:nn {indef-alt}
+ {
+ \acro_property_if_set:nnTF {#1} {alt}
{
- \prop_put:cnn {l__acro_long_##1_form_prop} {#1} {false}
- \acro_property_if_set:nnF {#1} {long-##1}
- { \prop_put:cnv {l__acro_long_##1_prop} {#1} {l__acro_default_long_##1_tl} }
- \prop_put:cnn {l__acro_foreign_##1_form_prop} {#1} {false}
- \acro_property_if_set:nnF {#1} {foreign-##1}
- { \prop_put:cnv {l__acro_foreign_##1_prop} {#1} {l__acro_default_foreign_##1_tl} }
+ \__acro_pdfstring_indefinite:nn {#1} {alt}
+ \acro_property_get:nn {#1} {alt}
}
+ { \acro_pdfstring_template:nn {#1} {indef-short} }
}
-\acro_declare_property_simple:n {first-style}
-
-% list:
-\acro_declare_property_simple:n {list}
-
-% defines `short-plural', `long-plural' and `long-plural-form' as well as the
-% options `plural-ending', `short-plural-ending' and `long-plural-ending':
-% \ProvideAcroEnding {plural} {s} {s}
-
-% short indefinite article:
-\acro_declare_property_simple:n {short-indefinite}
+% Alt
+\acro_pdfstring_template_new:nn {Alt}
+ {
+ \acro_property_if_set:nnTF {#1} {alt}
+ {
+ \__acro_pdfstring_upper:n
+ { \acro_property_get:nn {#1} {alt} }
+ }
+ { \acro_pdfstring_template:nn {#1} {Short} }
+ }
-% long indefinite article:
-\acro_declare_property_simple:n {long-indefinite}
+% Indef-alt
+\acro_pdfstring_template_new:nn {Indef-alt}
+ {
+ \acro_property_if_set:nnTF {#1} {alt}
+ {
+ \__acro_pdfstring_upper:n
+ { \__acro_pdfstring_indefinite:nn {#1} {alt} }
+ \acro_property_get:nn {#1} {alt}
+ }
+ { \acro_pdfstring_template:nn {#1} {Indef-short} }
+ }
-% pre long:
-\acro_declare_property_simple:n {long-pre}
+% alt-plural
+\acro_pdfstring_template_new:nn {alt-plural}
+ {
+ \acro_property_if_set:nnTF {#1} {alt}
+ { \__acro_pdfstring_plural:nn {#1} {alt} }
+ { \acro_pdfstring_template:nn {#1} {short-plural} }
+ }
-% post long:
-\acro_declare_property_simple:n {long-post}
+% Alt-plural
+\acro_pdfstring_template_new:nn {Alt-plural}
+ {
+ \acro_property_if_set:nnTF {#1} {alt}
+ {
+ \__acro_pdfstring_upper:n
+ { \__acro_pdfstring_plural:nn {#1} {alt} }
+ }
+ { \acro_pdfstring_template:nn {#1} {Short-plural} }
+ }
-% post:
-\acro_declare_property_simple:n {post}
+% --------------------------------------------------------------------------
+% long
+\acro_pdfstring_template_new:nn {long}
+ { \acro_property_get:nn {#1} {long} }
-% sort:
-\acro_declare_property:nnn {sort} {sort}
+% indef-long
+\acro_pdfstring_template_new:nn {indef-long}
{
- \acro_property_if_set:nnF {#1} {index-sort}
- { \prop_put:Nnn \l__acro_index_sort_prop {#1} {#2} }
+ \__acro_pdfstring_indefinite:nn {#1} {long}
+ \acro_property_get:nn {#1} {long}
}
-% alternative:
-\acro_declare_property:nnn {alt} {alt}
+% Long
+\acro_pdfstring_template_new:nn {Long}
{
- \prop_put:Nnn \l__acro_pdfstring_alt_prop {#1} {#2}
- \prop_put:NnV \l__acro_alt_indefinite_prop
- {#1} \l__acro_default_indefinite_tl
+ \__acro_pdfstring_upper:n
+ { \acro_property_get:nn {#1} {long} }
}
-\cs_set_protected:Npn \acro_alt_error:n #1
+% Indef-long
+\acro_pdfstring_template_new:nn {Indef-long}
{
- \acro_property_if_set:nnF {#1} {alt}
- { \acro_harmless_message:nn {no-alternative} {#1} }
+ \__acro_pdfstring_upper:n
+ {
+ \__acro_pdfstring_indefinite:nn {#1} {long}
+ \acro_property_get:nn {#1} {long}
+ }
}
-% alt. indefinite article:
-\acro_declare_property_simple:n {alt-indefinite}
+% long-plural
+\acro_pdfstring_template_new:nn {long-plural}
+ { \__acro_pdfstring_plural:nn {#1} {long} }
-% foreign:
-\acro_declare_property_simple:n {foreign}
+% Long-plural
+\acro_pdfstring_template_new:nn {Long-plural}
+ {
+ \__acro_pdfstring_upper:n
+ { \__acro_pdfstring_plural:nn {#1} {long} }
+ }
-% foreign-lang:
-\acro_declare_property_simple:n {foreign-lang}
+% --------------------------------------------------------------------------
+% first
+\acro_pdfstring_template_let:nn {first} {short}
-% format:
-\acro_declare_property_simple:n {format}
+% indef-first
+\acro_pdfstring_template_let:nn {indef-first} {indef-short}
-% short format:
-\acro_declare_property_alias:nn {short-format} {format}
+% First
+\acro_pdfstring_template_let:nn {First} {Short}
-% alt format:
-\acro_declare_property_simple:n {alt-format}
+% indef-first
+\acro_pdfstring_template_let:nn {Indef-first} {Indef-short}
-% long format:
-\acro_declare_property_simple:n {long-format}
+% first-plural
+\acro_pdfstring_template_let:nn {first-plural} {short-plural}
-% first long format:
-\acro_declare_property_simple:n {first-long-format}
+% First-plural
+\acro_pdfstring_template_let:nn {First-plural} {Short-plural}
-% pdfstring -- currently needs to be done `by hand':
-\cs_new_protected:Npn \__acro_declare_pdfstring:nw #1#2/#3/#4 \acro_stop:
+% --------------------------------------------------------------------------
+
+\acro_at_begin_document:n
{
- \__acro_property_check:nn {#1} {pdfstring}
- \prop_put:Nnx \l__acro_pdfstring_short_prop {#1} {#2}
- \acro_for_endings_do:n
+ \acro_package_if_loaded:nT {hyperref}
{
- \tl_if_blank:nTF {#4}
- {
- \prop_put:cnx {l__acro_pdfstring_short_##1_prop}
- {#1} { \exp_not:n {#2} \exp_not:v {l__acro_default_short_##1_tl} }
- }
+ \pdfstringdefDisableCommands
{
- \prop_put:cnn {l__acro_pdfstring_short_##1_prop}
- {#1} {#2#3}
+ \acro_set_pdf_cs:Nn \ac {first}
+ \acro_set_pdf_cs:Nn \iac {indef-first}
+ \acro_set_pdf_cs:Nn \Ac {First}
+ \acro_set_pdf_cs:Nn \Iac {Indef-first}
+ \acro_set_pdf_cs:Nn \acs {short}
+ \acro_set_pdf_cs:Nn \iacs {indef-short}
+ \acro_set_pdf_cs:Nn \Acs {Short}
+ \acro_set_pdf_cs:Nn \Iacs {Indef-short}
+ \acro_set_pdf_cs:Nn \acl {long}
+ \acro_set_pdf_cs:Nn \iacl {indef-long}
+ \acro_set_pdf_cs:Nn \Acl {Long}
+ \acro_set_pdf_cs:Nn \Iacl {Indef-long}
+ \acro_set_pdf_cs:Nn \aca {alt}
+ \acro_set_pdf_cs:Nn \iaca {indef-alt}
+ \acro_set_pdf_cs:Nn \Aca {Alt}
+ \acro_set_pdf_cs:Nn \Iaca {Indef-alt}
+
+ \acro_set_pdf_cs:Nn \acp {first-plural}
+ \acro_set_pdf_cs:Nn \Acp {First-plural}
+ \acro_set_pdf_cs:Nn \acsp {short-plural}
+ \acro_set_pdf_cs:Nn \Acsp {Short-plural}
+ \acro_set_pdf_cs:Nn \aclp {long-plural}
+ \acro_set_pdf_cs:Nn \Aclp {Long-plural}
+ \acro_set_pdf_cs:Nn \acap {alt-plural}
+ \acro_set_pdf_cs:Nn \Acap {Alt-plural}
+ \cs_set_eq:NN \acro_format:nnn \use_iii:nnn
+ \cs_set:Npn \@ {}
}
- }
+ \cs_set_protected:Npn \acro_hyper_page:n #1 { \hyperpage {#1} }
+ } {}
}
-\cs_generate_variant:Nn \__acro_declare_pdfstring:nw {V}
+
+% ----------------------------------------------------------------------------
+\AcroModuleEnd
+\AcroModule{definitions}{definitions of user commands}
+
+% --------------------------------------------------------------------------
+% commands for typesetting acronyms:
+\NewAcroCommand \ac {m}
+ { \UseAcroTemplate {first} {#1} }
+\NewAcroCommand \acp {m}
+ { \acroplural \UseAcroTemplate {first} {#1} }
+\NewAcroCommand \iac {m}
+ { \acroindefinite \UseAcroTemplate {first} {#1} }
+\NewAcroCommand \Ac {m}
+ { \acroupper \UseAcroTemplate {first} {#1} }
+\NewAcroCommand \Acp {m}
+ { \acroplural \acroupper \UseAcroTemplate {first} {#1} }
+\NewAcroCommand \Iac {m}
+ { \acroupper \acroindefinite \UseAcroTemplate {first} {#1} }
+
+\NewAcroCommand \acs {m}
+ { \UseAcroTemplate {short} {#1} }
+\NewAcroCommand \acsp {m}
+ { \acroplural \UseAcroTemplate {short} {#1} }
+\NewAcroCommand \iacs {m}
+ { \acroindefinite \UseAcroTemplate {short} {#1} }
+\NewAcroCommand \Acs {m}
+ { \acroupper \UseAcroTemplate {short} {#1} }
+\NewAcroCommand \Acsp {m}
+ { \acroplural \acroupper \UseAcroTemplate {short} {#1} }
+\NewAcroCommand \Iacs {m}
+ { \acroupper \acroindefinite \UseAcroTemplate {short} {#1} }
-\keys_define:nn {acro/declare-acronym}
+\NewAcroCommand \acl {m}
+ { \UseAcroTemplate {long} {#1} }
+\NewAcroCommand \aclp {m}
+ { \acroplural \UseAcroTemplate {long} {#1} }
+\NewAcroCommand \iacl {m}
+ { \acroindefinite \UseAcroTemplate {long} {#1} }
+\NewAcroCommand \Acl {m}
+ { \acroupper \UseAcroTemplate {long} {#1} }
+\NewAcroCommand \Aclp {m}
+ { \acroplural \acroupper \UseAcroTemplate {long} {#1} }
+\NewAcroCommand \Iacl {m}
+ { \acroupper \acroindefinite \UseAcroTemplate {long} {#1} }
+
+\NewAcroCommand \aca {m}
+ { \UseAcroTemplate {alt} {#1} }
+\NewAcroCommand \acap {m}
+ { \acroplural \UseAcroTemplate {alt} {#1} }
+\NewAcroCommand \iaca {m}
+ { \acroindefinite \UseAcroTemplate {alt} {#1} }
+\NewAcroCommand \Aca {m}
+ { \acroupper \UseAcroTemplate {alt} {#1} }
+\NewAcroCommand \Acap {m}
+ { \acroplural \acroupper \UseAcroTemplate {alt} {#1} }
+\NewAcroCommand \Iaca {m}
+ { \acroupper \acroindefinite \UseAcroTemplate {alt} {#1} }
+
+\NewAcroCommand \acf {m}
+ { \acrofull \UseAcroTemplate {first} {#1} }
+\NewAcroCommand \acfp {m}
+ { \acrofull \acroplural \UseAcroTemplate {first} {#1} }
+\NewAcroCommand \iacf {m}
+ { \acrofull \acroindefinite \UseAcroTemplate {first} {#1} }
+\NewAcroCommand \Acf {m}
+ { \acrofull \acroupper \UseAcroTemplate {first} {#1} }
+\NewAcroCommand \Acfp {m}
+ { \acrofull \acroplural \acroupper \UseAcroTemplate {first} {#1} }
+\NewAcroCommand \Iacf {m}
+ { \acrofull \acroupper \acroindefinite \UseAcroTemplate {first} {#1} }
+
+\NewAcroCommand \acshow {m}
+ { \acrodonotuse \UseAcroTemplate {show} {#1} }
+
+% --------------------------------------------------------------------------
+\DeclareAcroEnding {plural} {s} {s}
+
+\DeclareAcroArticle {indefinite} {a}
+
+\ProvideExpandableDocumentCommand \nospace {} {}
+
+% --------------------------------------------------------------------------
+% acronym templates:
+\NewAcroTemplate {long-short}
{
- pdfstring .code:n =
- \__acro_declare_pdfstring:Vw \l__acro_current_id_str #1 // \acro_stop:
+ \acroiffirstTF
+ {
+ \acrowrite {long}
+ \acspace
+ (
+ \acroifT {foreign} { \acrowrite {foreign} ,~ }
+ \acrowrite {short}
+ \acroifT {alt} { ~ \acrotranslate {or} ~ \acrowrite {alt} }
+ \acrogroupcite
+ )
+ }
+ { \acrowrite {short} }
}
-\cs_new_protected:Npn \__acro_declare_pdfstring_alt:nw #1#2/#3/#4 \acro_stop:
+\NewAcroTemplate {short-long}
{
- \__acro_property_check:nn {#1} {pdfstring-alt}
- \prop_put:Nnn \l__acro_pdfstring_alt_prop {#1} {#2}
- \acro_for_endings_do:n
+ \acrowrite {short}
+ \acroiffirstT
{
- \tl_if_empty:nTF {#3}
- {
- \prop_put:cnx {l__acro_pdfstring_alt_##1_prop}
- {#1} { \exp_not:n {#2} \exp_not:v {l__acro_default_alt_##1_tl} }
- }
- { \prop_put:cnn {l__acro_pdfstring_alt_##1_prop} {#1} {#2#3} }
+ \space
+ (
+ \acroifT {alt} { \acrotranslate {or} ~ \acrowrite {alt} ~ }
+ \acroifT {foreign} { \acrowrite {foreign} :~ }
+ \acrowrite {long}
+ \acrogroupcite
+ )
}
}
-\cs_generate_variant:Nn \__acro_declare_pdfstring_alt:nw {V}
-\keys_define:nn {acro/declare-acronym}
+\NewAcroTemplate {footnote}
{
- pdfstring-alt .code:n =
- \__acro_declare_pdfstring_alt:Vw \l__acro_current_id_str #1 // \acro_stop:
+ \acrowrite {short}
+ \acroiffirstT
+ {
+ \acfootnote
+ {
+ \acroifT {alt} { \acrotranslate {or} ~ \acrowrite {alt} :~ }
+ \acroifT {foreign} { \acrowrite {foreign} ,~ }
+ \acrowrite {long}
+ \acrogroupcite
+ }
+ }
}
-
-% class:
-\acro_declare_property_simple:n {class}
-% extra information:
-\acro_declare_property_simple:n {extra}
+\NewAcroTemplate {long}
+ { \acrowrite {long} }
-% single appearances:
-\acro_declare_property_simple:n {single}
+\NewAcroTemplate {short}
+ { \acrowrite {short} }
-% single format:
-\acro_declare_property_simple:n {single-format}
+\NewAcroTemplate {alt}
+ {
+ \acroifTF {alt}
+ { \acrowrite {alt} }
+ { \acrowrite {short} }
+ }
-% acc supp:
-\acro_declare_property:nn {acc_supp} {accsupp}
+\NewAcroTemplate {show}
+ {
+ \iow_term:n {}
+ \iow_term:x
+ {
+ The~ acronym~ `\AcronymID'~ has~ the~ properties~ (without~ outer~
+ braces):
+ }
+ \iow_term:n {}
+ \AcroPropertiesMap { \acroshow {##1} }
+ \iow_term:n {}
+ }
-% tooltip:
-\acro_declare_property_simple:n {tooltip}
+% --------------------------------------------------------------------------
+% heading templates:
+\NewAcroTemplate[heading] {none} { }
-% before-citation:
-\acro_declare_property_simple:n {before-citation}
+\NewAcroTemplate[heading] {section}
+ { \section { \acrolistname } }
-% after-citation:
-\acro_declare_property_simple:n {after-citation}
+\NewAcroTemplate[heading] {section*}
+ { \section* { \acrolistname } }
-% citation -- this needs a bit more work:
-\cs_new_protected:Npn \__acro_declare_citation:nw #1#2[#3]#4[#5]#6#7 \acro_stop:
+\acro_if_komascript:T
{
- % no options: #1: ID, #2: property, #7 is blank
- % 1 option: #1: ID, #4: property, #3: option, #5: \q_no_value
- % 2 options: #1: ID: #6: property, #3: first option, #5: second option
- \tl_if_blank:nTF {#7}
+ \NewAcroTemplate[heading] {addsec}
+ { \addsec { \acrolistname } }
+ }
+
+\cs_if_exist:NT \chapter
+ {
+ \NewAcroTemplate[heading] {chapter}
+ { \chapter { \acrolistname } }
+ \NewAcroTemplate[heading] {chapter*}
+ { \chapter* { \acrolistname } }
+ \acro_if_komascript:T
{
- \__acro_declare_citation_aux:nnnn {#1}
- { \q_no_value }
- { \q_no_value }
- {#2}
+ \NewAcroTemplate[heading] {addchap}
+ { \addchap { \acrolistname } }
}
+ }
+
+% --------------------------------------------------------------------------
+% list templates:
+\NewAcroTemplate[list] {description}
+ {
+ \acroheading
+ \acropreamble
+ \begin {description}
+ \acronymsmapF
+ {
+ \item [ \acrowrite {short} \acroifT {alt} { / \acrowrite {alt} } ]
+ \acrowrite {list}
+ \acroifanyT {foreign,extra} {~(}
+ \acroifT {foreign}
+ {
+ \acrowrite {foreign}
+ \acroifT {extra} {,~}
+ }
+ \acroifT {extra}
+ { \acrowrite {extra} }
+ \acroifanyT {foreign,extra} {)}
+ \acropagefill
+ \acropages
+ { \acrotranslate {page} \nobreakspace }
+ { \acrotranslate {pages} \nobreakspace }
+ }
+ { \item \AcroRerun }
+ \end {description}
+ }
+
+\NewAcroTemplate[list] {tabular}
+ {
+ \AcroNeedPackage {array}
+ \acronymsmapF
{
- \quark_if_no_value:nTF {#5}
+ \AcroAddRow
{
- \__acro_declare_citation_aux:nnnx {#1}
- { \q_no_value }
- {#3}
- { \tl_head:n {#4} }
+ \acrowrite {short}
+ \acroifT {alt} { / \acrowrite {alt} }
+ &
+ \acrowrite {list}
+ \acroifanyT {foreign,extra} {~(}
+ \acroifT {foreign}
+ {
+ \acrowrite {foreign}
+ \acroifT {extra} {,~}
+ }
+ \acroifT {extra}
+ { \acrowrite {extra} }
+ \acroifanyT {foreign,extra} {)}
+ \acropagefill
+ \acropages
+ { \acrotranslate {page} \nobreakspace }
+ { \acrotranslate {pages} \nobreakspace }
+ \tabularnewline
}
- { \__acro_declare_citation_aux:nnnn {#1} {#3} {#5} {#6} }
}
+ { \AcroRerun }
+ \acroheading
+ \acropreamble
+ \par \noindent
+ \begin {tabular} {>{\bfseries}lp{.7\linewidth}}
+ \AcronymTable
+ \end {tabular}
}
-\cs_generate_variant:Nn \__acro_declare_citation:nw {V}
-\keys_define:nn {acro/declare-acronym}
+\NewAcroTemplate[list] {longtable}
{
- cite .code:n =
- \__acro_declare_citation:Vw
- \l__acro_current_id_str #1 [\q_no_value][\q_no_value] \scan_stop: \acro_stop:
+ \AcroNeedPackage {array}
+ \AcroNeedPackage {longtable}
+ \acronymsmapF
+ {
+ \AcroAddRow
+ {
+ \acrowrite {short}
+ \acroifT {alt} { / \acrowrite {alt} }
+ &
+ \acrowrite {list}
+ \acroifanyT {foreign,extra} {~(}
+ \acroifT {foreign}
+ {
+ \acrowrite {foreign}
+ \acroifT {extra} {,~}
+ }
+ \acroifT {extra}
+ { \acrowrite {extra} }
+ \acroifanyT {foreign,extra} {)}
+ \acropagefill
+ \acropages
+ { \acrotranslate {page} \nobreakspace }
+ { \acrotranslate {pages} \nobreakspace }
+ \tabularnewline
+ }
+ }
+ { \AcroRerun }
+ \acroheading
+ \acropreamble
+ \par \noindent
+ \begin {longtabu} {>{\bfseries}lp{.7\linewidth}}
+ \AcronymTable
+ \end {longtabu}
}
-\prop_gput:Nnn \g__acro_properties_prop {cite} {cite}
-
-% #1: ID
-% #2: pre
-% #3: post
-% #4: citation key
-\cs_new_protected:Npn \__acro_declare_citation_aux:nnnn #1#2#3#4
- {
- \__acro_property_check:nn {#1} {cite}
- \prop_put:Nnn \l__acro_citation_prop {#1} {#4}
- \quark_if_no_value:nF {#2}
- { \prop_put:Nnn \l__acro_citation_pre_prop {#1} {#2} }
- \quark_if_no_value:nF {#3}
- { \prop_put:Nnn \l__acro_citation_post_prop {#1} {#3} }
- }
-\cs_generate_variant:Nn \__acro_declare_citation_aux:nnnn {nnnx}
-% TODO:
-% add index entries, by default \index{<sort>@<short>}
-% index: overwrite default <sort>@<short> entry completely
-% index-sort: overwrite the <sort> part of <sort>@<short> entry
-
-% need to take care of custom index cmd, at least
-% - \index{}
-% - \index[]{}
-% question is, though, if it should be the same one for all acronyms?
-% I go for yes but would also add a `post' property that allows to add arbitrary
-% TeX code after an acronym is typeset
-
-% index:
-\acro_declare_property_simple:n {index}
-
-% index-sort:
-\acro_declare_property_simple:n {index-sort}
-
-% index-cmd:
-\acro_declare_property_simple:n {index-cmd}
+\NewAcroTemplate[list] {longtabu}
+ {
+ \AcroNeedPackage {array}
+ \AcroNeedPackage {longtable}
+ \AcroNeedPackage {tabu}
+ \acronymsmapF
+ {
+ \AcroAddRow
+ {
+ \acrowrite {short}
+ \acroifT {alt} { / \acrowrite {alt} }
+ &
+ \acrowrite {list}
+ \acroifanyT {foreign,extra} {~(}
+ \acroifT {foreign}
+ {
+ \acrowrite {foreign}
+ \acroifT {extra} {,~}
+ }
+ \acroifT {extra}
+ { \acrowrite {extra} }
+ \acroifanyT {foreign,extra} {)}
+ \acropagefill
+ \acropages
+ { \acrotranslate {page} \nobreakspace }
+ { \acrotranslate {pages} \nobreakspace }
+ \tabularnewline
+ }
+ }
+ { \AcroRerun }
+ \acroheading
+ \acropreamble
+ \par \noindent
+ \begin {longtabu} {>{\bfseries}lX[l]}
+ \AcronymTable
+ \end {longtabu}
+ }
+
+\NewAcroTemplate [list] {lof}
+ {
+ \acroheading
+ \acropreamble
+ \acronopagerange
+ \let\l@acro\l@figure
+ \acronymsmapF
+ {
+ \contentsline {acro}
+ {
+ \numberline
+ { \acrowrite {short} \acroifT {alt} { / \acrowrite {alt} } }
+ {
+ \acrowrite {list}
+ \acroifT {foreign}
+ { \acrowrite {foreign} \acroifT {extra} {,~} }
+ \acroifT {extra} { \acrowrite {extra} }
+ \acroifanyT {foreign,extra} {)}
+ }
+ }
+ { \acropages {} {} }
+ {}
+ }
+ { \AcroRerun }
+ }
-% --------------------------------------------------------------------------
-% acronym macros:
-\cs_new_protected:Npn \__acro_define_acronym_macro:n #1
+\NewAcroTemplate [list] {toc}
{
- \bool_if:NT \l__acro_create_macros_bool
+ \acroheading
+ \acropreamble
+ \acronopagerange
+ \acronymsmapF
{
- \cs_if_exist:cTF {#1}
+ \contentsline { \acroifchapterTF {chapter} {section} }
+ { \acrowrite {short} \acroifT {alt} { / \acrowrite {alt} } }
+ {}{}
+ \contentsline { \acroifchapterF {sub} section }
{
- \bool_if:NTF \l__acro_strict_bool
- { \cs_set:cpn {#1} { \ac {#1} \acro_xspace: } }
- { \acro_serious_message:nn {macro} {#1} }
+ \acrowrite {list}
+ \acroifT {foreign}
+ { \acrowrite {foreign} \acroifT {extra} {,~} }
+ \acroifT {extra} { \acrowrite {extra} }
+ \acroifanyT {foreign,extra} {) }
}
- { \cs_new:cpn {#1} { \ac {#1} \acro_xspace: } }
+ { \acropages {} {} }
+ {}
}
+ { \AcroRerun }
}
% --------------------------------------------------------------------------
-% internal acronym declaring function:
-\cs_new_protected:Npn \acro_declare_acronym:nn #1#2
- { \acro_case_insensitive:Nnn \__acro_declare_acronym:nn {#1} {#2} }
+% translations:
+% list name
+\DeclareAcroTranslation {list-name}
+ {
+ Fallback = Acronyms ,
+ English = Acronyms ,
+ French = Acronymes ,
+ German = Abk\"urzungen ,
+ Italian = Acronimi ,
+ Portuguese = Acr\'onimos ,
+ Spanish = Siglas ,
+ Catalan = Sigles
+ }
+
+% page name
+\DeclareAcroTranslation {page}
+ {
+ Fallback = p\abbrdot ,
+ English = p\abbrdot ,
+ French = p\abbrdot ,
+ German = S\abbrdot ,
+ Italian = p\abbrdot ,
+ Portuguese = p\abbrdot ,
+ Spanish = p\'ag\abbrdot ,
+ Catalan = p\`ag\abbrdot
+ }
+
+% pages name
+\DeclareAcroTranslation {pages}
+ {
+ Fallback = pp\abbrdot ,
+ English = pp\abbrdot ,
+ French = pp\abbrdot ,
+ German = S\abbrdot ,
+ Italian = pp\abbrdot ,
+ Portuguese = pp\abbrdot ,
+ Spanish = p\'ags\abbrdot ,
+ Catalan = p\`ag\abbrdot
+ }
+
+% following page
+\DeclareAcroTranslation {sequens}
+ {
+ Fallback = f\abbrdot ,
+ English = f\abbrdot ,
+ French = sq\abbrdot ,
+ German = f\abbrdot ,
+ Italian = s\abbrdot ,
+ Portuguese = s\abbrdot ,
+ Spanish = s\abbrdot ,
+ Catalan = seq\abbrdot
+ }
+
+% following pages
+\DeclareAcroTranslation {sequentes}
+ {
+ Fallback = ff\abbrdot ,
+ English = ff\abbrdot ,
+ French = sqq\abbrdot ,
+ German = ff\abbrdot ,
+ Italian = ss\abbrdot ,
+ Portuguese = ss\abbrdot ,
+ Spanish = ss\abbrdot ,
+ Catalan = et seq\abbrdot
+ }
+
+% also
+\DeclareAcroTranslation {also}
+ {
+ Fallback = also ,
+ English = also ,
+ French = aussi ,
+ German = auch ,
+ Italian = anche ,
+ Portuguese = tamb\'{e}m ,
+ Spanish = tambien ,
+ Catalan = tamb\'{e}
+ }
+
+% or
+\DeclareAcroTranslation {or}
+ {
+ Fallback = or ,
+ English = or ,
+ French = ou ,
+ German = oder ,
+ Italian = o ,
+ Portuguese = ou ,
+ Spanish = o ,
+ Catalan = o
+ }
+
+% and
+\DeclareAcroTranslation {and}
+ {
+ Fallback = and ,
+ English = and ,
+ French = et ,
+ German = und ,
+ Italian = e ,
+ Portuguese = e ,
+ Spanish = y ,
+ Catalan = i
+ }
+
+% --------------------------------------------------------------------------
+\AcroModuleEnd
+\AcroModule{upgrade}{ease upgrading from version 2}
-\cs_new_protected:Npn \__acro_declare_acronym:nn #1#2
+% ----------------------------------------------------------------------------
+\msg_new:nnn {acro} {deprecated}
{
- \seq_gput_right:Nn \g__acro_declared_acronyms_seq {#1}
- \bool_gset_true:N \g__acro_first_acronym_declared_bool
- \str_set:Nn \l__acro_current_id_str {#1}
- \acro_for_properties_do:n
- { \bool_new:c {l__acro_ \l__acro_current_id_str _##1_set_bool} }
- \keys_set:nn {acro/declare-acronym} {#2}
- \bool_new:c {g__acro_#1_first_use_bool}
- \bool_new:c {g__acro_#1_used_bool}
- \bool_new:c {g__acro_#1_label_bool}
- \bool_new:c {g__acro_#1_in_list_bool}
- \seq_new:c {g__acro_#1_barriers_seq}
- \seq_new:c {g__acro_#1_recorded_barriers_seq}
- \bool_if:NF \l__acro_print_only_used_bool
- { \bool_gset_true:c {g__acro_#1_in_list_bool} }
- \__acro_create_page_records:n {#1}
- \__acro_define_acronym_macro:n {#1}
- \str_clear:N \l__acro_current_id_str
- \acro_property_if_set:nnF {#1} {short}
- { \acro_serious_message:nnn {missing} {#1} {short} }
- \acro_property_if_set:nnF {#1} {long}
- { \acro_serious_message:nnn {missing} {#1} {long} }
- \__acro_log_acronym:n {#1}
+ On~ line~ \msg_line_number: : \\
+ The~ #1~ `#2'~ is~ deprecated.~ Use~ #1~ `#3'~ instead .
}
-
-% --------------------------------------------------------------------------
-% print the list:
-% #1: list of classes
-% #2: list of excluded classes
-\keys_define:nn {acro/print-acronyms}
+\msg_new:nnn {acro} {deprecated-function}
+ { The~ command~ #1~ is~ deprecated.~ Use~ #2 instead . }
+
+\msg_new:nnn {acro} {removed-function}
+ { The~ command~ #1~ has~ been~ removed. }
+
+\msg_new:nnn {acro} {removed}
{
- include-classes .tl_set:N = \l__acro_included_classes_tl ,
- exclude-classes .tl_set:N = \l__acro_excluded_classes_tl ,
- name .tl_set:N = \l__acro_list_name_tl ,
- heading .code:n = \__acro_set_list_heading:n {#1} ,
- sort .bool_set:N = \l__acro_sort_bool ,
- local-to-barriers .bool_set:N = \l__acro_use_barrier_bool
+ On~ line~ \msg_line_number: : \\
+ The~ #1~ `#2'~ has~ been~ removed~ from~ acro. \\
+ If~ you~ need~ it~ back~ please~ open~ an~ issue~ on~ \\
+ https://github.com/cgnieder/acro/issues
+ \tl_if_blank:nF {#3} { \\ #3 }
}
-\cs_new_protected:Npn \acro_print_acronyms:n #1
+% ----------------------------------------------------------------------------
+% #1: type
+% #2: old
+% #3: new
+\cs_new_protected:Npn \__acro_deprecation_warning:nnn #1#2#3
+ { \msg_warning:nnnnn {acro} {deprecated} {#1} {#2} {#3} }
+\cs_generate_variant:Nn \__acro_deprecation_warning:nnn {nne,nV}
+
+\acro_attribute_new:n {deprecated}
+\acro_attribute_new:n {removed}
+
+\prg_new_conditional:Npnn \acro_if_deprecated:n #1 {p,T,F,TF}
{
- \group_begin:
- % this is a cheap trick to prevent the \@noitemerr
- % if one forgot to delete either the aux file or
- % remove \printacronyms -- but it's local:
- \cs_set:Npn \@noitemerr {}
- \tl_clear:N \l__acro_included_classes_tl
- \tl_clear:N \l__acro_excluded_classes_tl
- \tl_if_blank:nF {#1}
- { \keys_set:nn {acro/print-acronyms} {#1} }
- \__acro_aux_file_now:n { \acro@print@list }
- \bool_if:NT \l__acro_sort_bool
- { \acro_sort_prop:NN \l__acro_short_prop \l__acro_sort_prop }
- \acro_title_instance:VV
- \l__acro_list_heading_cmd_tl
- \l__acro_list_name_tl
- \cs_if_exist:NTF \acro@printed@list
- {
- \acro_list_instance:VVV
- \l__acro_list_instance_tl
- \l__acro_included_classes_tl
- \l__acro_excluded_classes_tl
- }
- { \@latex@warning@no@line {Rerun~to~get~acronym~list~right} }
- \group_end:
+ \acro_attribute_if_set:nnTF {deprecated} {#1}
+ { \prg_return_true: }
+ { \prg_return_false: }
}
-% --------------------------------------------------------------------------
-% language support
-\RequirePackage {translations}
-
-\cs_new_protected:Npn \__acro_declare_translation:www #1 \q_mark #2=#3 \q_stop
- {
- \tl_set:Nx \l__acro_tmpa_tl { \tl_trim_spaces:n {#1} }
- \tl_set:Nx \l__acro_tmpb_tl { \tl_trim_spaces:n {#2} }
- \tl_if_in:nnT {#3} {=}
- {} % TODO: misplaced equal sign
- \tl_set:Nx \l__acro_tmpc_tl { \tl_trim_spaces:n {#3} }
- \__acro_declare_translation:VVV
- \l__acro_tmpb_tl
- \l__acro_tmpa_tl
- \l__acro_tmpc_tl
+\prg_new_conditional:Npnn \acro_if_removed:n #1 {p,T,F,TF}
+ {
+ \acro_attribute_if_set:nnTF {removed} {#1}
+ { \prg_return_true: }
+ { \prg_return_false: }
}
-% #1: key
-% #2: lang
-% #3: translation
-\cs_new_protected:Npn \__acro_declare_translation:nnn #1#2#3
- { \DeclareTranslation {#1} {#2} {#3} }
-\cs_generate_variant:Nn \__acro_declare_translation:nnn {VVV}
+% #1: old
+% #2: new
+\cs_new_protected:Npn \acro_deprecate:nn #1#2
+ { \acro_attribute_set:nnn {deprecated} {#1} {#2} }
-% #1: key
-% #2: csv list: { <lang1> = <translation1> , <lang2> = <translation2> }
-\cs_new_protected:Npn \acro_declare_translation:nn #1#2
+% #1: old
+\cs_new_protected:Npn \acro_remove:n #1
+ { \acro_attribute_set:nnn {removed} {#1} {} }
+
+% #1: type
+% #2: old
+\cs_new_protected:Npn \acro_deprecation_warning:nn #1#2
{
- \clist_map_inline:nn {#2}
+ \__acro_deprecation_warning:nne
+ {#1}
+ {#2}
+ { \acro_attribute_get:nn {deprecated} {#2} }
+ }
+
+% #1: type
+% #2: old
+% #3: additional text
+\cs_new_protected:Npn \acro_removal_warning:nnn #1#2#3
+ { \msg_warning:nnnnn {acro} {removed} {#1} {#2} {#3} }
+\cs_generate_variant:Nn \acro_removal_warning:nnn {nV}
+
+% #1: type
+% #2: old
+\cs_new_protected:Npn \acro_removal_warning:nn #1#2
+ { \msg_warning:nnnn {acro} {removed} {#1} {#2} }
+\cs_generate_variant:Nn \acro_removal_warning:nn {nV}
+
+% ----------------------------------------------------------------------------
+% #1: id
+% #2: property
+% #3: value
+\cs_set_protected:Npn \__acro_property_set:nnn #1#2#3
+ {
+ \acro_if_deprecated:nT {#2}
{
- \tl_if_blank:nF {##1}
- { \__acro_declare_translation:www #1 \q_mark ##1 \q_stop }
+ \acro_deprecation_warning:nn {property} {#2}
+ \__acro_property_remove_from_auxlist:ne {#1}
+ { \acro_attribute_get:nn {deprecated} {#2} }
+ \__acro_auxlist_add:en
+ { \acro_attribute_get:nn {deprecated} {#2} }
+ {#1=={#3}}
+ \acro_attribute_set:enn
+ { \acro_attribute_get:nn {deprecated} {#2} }
+ {#1} {#3}
+ }
+ \acro_if_removed:nT {#2}
+ { \acro_removal_warning:nn {property} {#2} }
+ \bool_lazy_and:nnT
+ { ! \acro_if_deprecated_p:n {#2} }
+ { ! \acro_if_removed_p:n {#2} }
+ {
+ \__acro_property_remove_from_auxlist:nn {#1} {#2}
+ \__acro_auxlist_add:nn {#2} {#1=={#3}}
+ \acro_attribute_set:nnn {#2} {#1} {#3}
}
}
-% tokenlists using the translations:
-\tl_set:Nn \l__acro_list_name_tl { \GetTranslation {acronym-list-name} }
-\tl_set:Nn \l__acro_page_name_tl { \GetTranslation {acronym-page-name}\@\, }
-\tl_set:Nn \l__acro_pages_name_tl { \GetTranslation {acronym-pages-name}\@\, }
-\tl_set:Nn \l__acro_next_page_tl { \,\GetTranslation {acronym-next-page}\@ }
-\tl_set:Nn \l__acro_next_pages_tl { \,\GetTranslation {acronym-next-pages}\@ }
+\cs_generate_variant:Nn \acro_attribute_set:nnn {e}
+\cs_generate_variant:Nn \__acro_auxlist_add:nn {e}
+\cs_generate_variant:Nn \__acro_property_remove_from_auxlist:nn {ne}
-% --------------------------------------------------------------------------
-% definition file:
-\tl_const:Nn \c_acro_definition_file_name_tl {acro.definitions}
-\tl_const:Nn \c_acro_definition_file_extension_tl {tex}
+% #1: old
+% #2: new
+\cs_new_protected:Npn \acro_deprecated_property:nn #1#2
+ {
+ \acro_deprecate:nn {#1} {#2}
+ \acro_property_declare:nnnnn
+ { \c_false_bool }
+ { \c_false_bool }
+ { \c_false_bool }
+ { \c_false_bool }
+ {#1}
+ }
-\file_if_exist:nTF
- { \c_acro_definition_file_name_tl .\c_acro_definition_file_extension_tl }
+% #1: old
+\cs_new_protected:Npn \acro_removed_property:n #1
{
- \@onefilewithoptions
- {\c_acro_definition_file_name_tl} [] []
- \c_acro_definition_file_extension_tl
+ \acro_remove:n {#1}
+ \acro_property_declare:nnnnn
+ { \c_false_bool }
+ { \c_false_bool }
+ { \c_false_bool }
+ { \c_false_bool }
+ {#1}
}
- { \acro_serious_message:n {definitions-missing} }
-% --------------------------------------------------------------------------
-% allow for a configuration file:
+% ----------------------------------------------------------------------------
+% #1: old
+% #2: new
+\cs_new_protected:Npn \acro_deprecate_function:NN #1#2
+ {
+ \cs_set_protected:Npn #1
+ {
+ \msg_error:nnnn {acro} {deprecated-function} {#1} {#2}
+ #2
+ }
+ }
-\file_if_exist:nT
- { \l_acro_config_file_name_tl . \l_acro_config_file_extension_tl }
+% #1: old
+\cs_new_protected:Npn \acro_remove_function:N #1
{
- \@onefilewithoptions
- {\l_acro_config_file_name_tl} [] []
- \l_acro_config_file_extension_tl
+ \cs_set_protected:Npn #1
+ { \msg_error:nnn {acro} {removed-function} {#1} }
}
+% ----------------------------------------------------------------------------
+% #1: new
+% #2: value
+\cs_new_protected:Npn \acro_deprecate_option:nn #1#2
+ {
+ \__acro_deprecation_warning:nVn {option} \l_keys_key_str {#1}
+ \keys_set:nn {acro} { #1 = #2 }
+ }
+
+% #1: additional text
+\cs_new_protected:Npn \acro_remove_option:n #1
+ { \acro_removal_warning:nVn {option} \l_keys_key_str {#1} }
+
+\cs_new_protected:Npn \acro_remove_option:
+ { \acro_removal_warning:nV {option} \l_keys_key_str }
+
+% ----------------------------------------------------------------------------
+% old properties:
+\acro_deprecated_property:nn {accsupp} {short-acc}
+\acro_deprecated_property:nn {tooltip} {pdfcomment}
+\acro_deprecated_property:nn {class} {tag}
+\acro_deprecated_property:nn {foreign-lang} {foreign-babel}
+
+\acro_removed_property:n {long-pre}
+\acro_removed_property:n {after-citation}
+\acro_removed_property:n {index-cmd}
+
+% ----------------------------------------------------------------------------
+% old functions
+\acro_remove_function:N \acflike
+\acro_remove_function:N \acfplike
+\acro_remove_function:N \acsingle
+\acro_remove_function:N \Acsingle
+\acro_remove_function:N \acpsingle
+\acro_remove_function:N \Acpsingle
+
+\acro_remove_function:N \acpdfstring
+\acro_remove_function:N \acpdfstringplural
+\acro_remove_function:N \AcroRegisterTrailing
+
+\acro_deprecate_function:NN \acifused \acroifusedTF
+\acro_deprecate_function:NN \aciffirst \acroiffirstTF
+\acro_deprecate_function:NN \ProvideAcroEnding \DeclareAcroEnding
+
+\acro_remove_function:N \DeclareAcroListStyle
+\acro_remove_function:N \DeclareAcroListHeading
+\acro_remove_function:N \DeclareAcroFirstStyle
+\acro_remove_function:N \DeclareAcroExtraStyle
+\acro_remove_function:N \DeclareAcroPageStyle
+\acro_remove_function:N \AcroRegisterTrailing
+
+% ----------------------------------------------------------------------------
+% old options:
+\keys_define:nn {acro}
+ {
+ %%% package:
+ log .code:n =
+ \acro_remove_option:n
+ { You~ can~ use~ \acshow ~ to~ inspect~ an~ acronym~ instead . } ,
+ messages .code:n = \acro_remove_option: ,
+ macros .code:n = \acro_remove_option: ,
+ xspace .code:n = \acro_remove_option: ,
+ strict .code:n = \acro_remove_option: ,
+ %%% behaviour:
+ hyperref .code:n =
+ \acro_deprecate_option:nn {make-links} {true} ,
+ label .code:n =
+ \acro_deprecate_option:nn {labels} {true} ,
+ only-used .code:n =
+ \acro_deprecate_option:nn {list/display} {used} ,
+ mark-as-used .code:n =
+ \acro_deprecate_option:nn {use-only-first} {true} ,
+ sort .code:n =
+ \acro_deprecate_option:nn {list/sort} {true} ,
+ display-foreign .code:n = \acro_remove_option: ,
+ cite .code:n =
+ \acro_deprecate_option:nn {cite/display} {#1} ,
+ cite-cmd .code:n =
+ \acro_deprecate_option:nn {cite/cmd} {#1} ,
+ group-citation .code:n =
+ \acro_deprecate_option:nn {cite/group} {true} ,
+ cite-connect .code:n =
+ \acro_deprecate_option:nn {cite/pre} {#1} ,
+ group-cite-connect .code:n =
+ \acro_deprecate_option:nn {cite/group/pre} {#1} ,
+ group-cite-cmd .code:n =
+ \acro_remove_option:n {Maybe~ the~ option~ `cite/cmd'~ helps.} ,
+ index .code:n =
+ \acro_deprecate_option:nn {index/use} {true} ,
+ index-cmd .code:n =
+ \acro_deprecate_option:nn {index/cmd} {#1} ,
+ short-format .code:n =
+ \acro_deprecate_option:nn {format/short} {#1} ,
+ long-format .code:n =
+ \acro_deprecate_option:nn {format/long} {#1} ,
+ foreign-format .code:n =
+ \acro_deprecate_option:nn {format/foreign} {#1} ,
+ extra-format .code:n =
+ \acro_deprecate_option:nn {format/extra} {#1} ,
+ single-format .code:n = \acro_remove_option: ,
+ single-form .code:n =
+ \acro_deprecate_option:nn {single-style} {#1} ,
+ first-long-format .code:n =
+ \acro_deprecate_option:nn {format/first-long} {#1} ,
+ list-short-format .code:n = \acro_remove_option: ,
+ list-long-format .code:n =
+ \acro_deprecate_option:nn {format/list} {#1} ,
+ list-foreign-format .code:n = \acro_remove_option: ,
+ override-list-format .code:n = \acro_remove_option: ,
+ format-include-endings .code:n =
+ \acro_deprecate_option:nn {include-endings} {true} ,
+ extra-style .code:n = \acro_remove_option: ,
+ page-style.code:n = \acro_remove_option: ,
+ pages .code:n =
+ \acro_deprecate_option:nn {pages/display} {#1} ,
+ page-name .code:n = \acro_remove_option: ,
+ pages-name .code:n = \acro_remove_option: ,
+ following-page .code:n =
+ \acro_deprecate_option:nn {pages/seq} {true} ,
+ following-pages .code:n =
+ \acro_deprecate_option:nn {pages/seq} {true} ,
+ next-page .code:n = \acro_remove_option: ,
+ next-pages .code:n = \acro_remove_option: ,
+ uc-cmd .code:n =
+ \acro_deprecate_option:nn {uppercase/cmd} {#1} ,
+ uppercase-short .code:n =
+ \acro_deprecate_option:nn {uppercase/short} {#1} ,
+ tooltip .code:n =
+ \acro_deprecate_option:nn {pdfcomments/use} {#1} ,
+ tooltip-cmd .code:n =
+ \acro_deprecate_option:nn {pdfcomments/cmd} {#1} ,
+ use-barriers .code:n = \acro_remove_option: ,
+ reset-at-barriers .code:n =
+ \acro_deprecate_option:nn {barriers/reset} {#1} ,
+ activate-trailing-tokens .code:n =
+ \acro_deprecate_option:nn {trailing/activate} {#1} ,
+ deactivate-trailing-tokens .code:n =
+ \acro_deprecate_option:nn {trailing/deactivate} {#1} ,
+ %%% list options:
+ list-style .code:n =
+ \acro_deprecate_option:nn {list/template} {#1} ,
+ list-heading .code:n =
+ \acro_deprecate_option:nn {list/heading} {#1} ,
+ list-name .code:n =
+ \acro_deprecate_option:nn {list/name} {#1} ,
+ list-caps .code:n = \acro_remove_option: ,
+ print-acronyms/include-classes .code:n =
+ \acro_deprecate_option:nn {list/include} {#1} ,
+ print-acronyms/exclude-classes .code:n =
+ \acro_deprecate_option:nn {list/exclude} {#1} ,
+ print-acronyms/name .code:n =
+ \acro_deprecate_option:nn {list/name} {#1} ,
+ print-acronyms/heading .code:n =
+ \acro_deprecate_option:nn {list/heading} {#1} ,
+ print-acronyms/sort .code:n =
+ \acro_deprecate_option:nn {list/sort} {true} ,
+ print-acronyms/local-to-barriers .code:n =
+ \acro_deprecate_option:nn {list/local} {true}
+ }
+
+% ----------------------------------------------------------------------------
+\AcroModuleEnd
+% finish package:
+\AtEndDocument { \acro_close_aux: \acro_do_rerun: }
+%----------------------------------------------------------------------------
\file_input_stop:
diff --git a/macros/latex/contrib/acro/acro2.sty b/macros/latex/contrib/acro/acro2.sty
new file mode 100644
index 0000000000..c8eb1d6b99
--- /dev/null
+++ b/macros/latex/contrib/acro/acro2.sty
@@ -0,0 +1,4640 @@
+% --------------------------------------------------------------------------
+% the ACRO package
+%
+% Typeset Acronyms
+%
+% --------------------------------------------------------------------------
+% Clemens Niederberger
+% Web: https://github.com/cgnieder/acro/
+% E-Mail: contact@mychemistry.eu
+% --------------------------------------------------------------------------
+% Copyright 2011--2020 Clemens Niederberger
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Clemens Niederberger.
+% --------------------------------------------------------------------------
+% The acro package consists of the files
+% - acro.sty, acro.definitions.tex, acro.cfg
+% - acro-manual.tex, acro-manual.pdf, acro-manual.cls
+% - acro.history, README
+% --------------------------------------------------------------------------
+% If you have any ideas, questions, suggestions or bugs to report, please
+% feel free to contact me.
+% --------------------------------------------------------------------------
+\RequirePackage{expl3,xparse,xtemplate,l3keys2e}
+\RequirePackage{etoolbox} % for the document hooks
+
+\ProvidesExplPackage
+ {acro2}
+ {2020/03/07}
+ {2.11d}
+ {\csname c_acro_info_tl\endcsname}
+
+% --------------------------------------------------------------------------
+% warning and error messages:
+\msg_new:nnn {acro} {undefined}
+ {
+ You've~ requested~ acronym~ `#1'~ \msg_line_context: \ but~ you~
+ apparently~ haven't~ defined~ it,~ yet! \\
+ Maybe~ you've~ misspelled~ `#1'?
+ }
+
+\msg_new:nnn {acro} {macro}
+ {
+ A~ macro~ with~ the~ csname~ `#1'~ already~ exists! \\
+ Unless~ you~ set~ acro's~ option~ `strict'~ I~ won't~ redefine~ it~
+ \msg_line_context: .
+ }
+
+\msg_new:nnn {acro} {replaced}
+ {
+ The~ #1~ `#2' ~you ~used~ \msg_line_context: \ is~ deprecated~ and~ has~
+ been~ replaced~ by~ `#3'. ~Since~ I~ will~ not~ guarantee~ that~ #1~ `#2'~
+ will~ be~ kept~ forever~ I~ strongly~ encourage~ you~ to~ switch!
+ }
+
+\msg_new:nnn {acro} {deprecated}
+ {
+ The~ #1~ `#2'~ you~ used~ \msg_line_context: \ is~ deprecated~and~ there~
+ is~ no~ replacement.~ Since~ I~ will~ not~ guarantee~ that~ #1~ `#2'~
+ will~ be~ kept~ forever~ I~ strongly~ encourage~ you~ to~ remove~ it~
+ from~ your~ document.
+ }
+
+\msg_new:nnn {acro} {substitute-short}
+ {
+ There~ is~ no~ short~ form~ set~ for~ acronym~ `#1'! \\
+ I~ am~ setting~ the~ short~ form~ equal~ to~ the~ ID~ `#1'. \\
+ If~ that~ is~ not~ what~ you~ want~ make~ sure~ to~ add~ an~ explicit~
+ short~ form.
+ }
+\msg_new:nnn {acro} {ending-exists}
+ {
+ An~ ending~ with~ the~ name~ `#1'~ already~ exists! \\ \\
+ I~ am~ overwriting~ the~ defaults.
+ }
+
+\msg_new:nnn {acro} {ending-before-acronyms}
+ {
+ You~ are~ using~ \token_to_str:N \ProvideAcroEnding \ after~ you've~
+ declared~ at~ least~ one~ acronym.~ This~ will~ lead~ to~ trouble! \\
+ Make~ sure~ to~ define~ endings~ before~ *any*~ acronym~ declarations!
+ }
+
+\msg_new:nnn {acro} {no-alternative}
+ {
+ There~ is~ no~ alternative~ form~ for~ acronym~ `#1'! \\ \\
+ I~ am~ using~ the~ short~ form~ instead.
+ }
+
+\msg_new:nnn {acro} {unknown}
+ {
+ You're~ trying~ to~ use~ the~ #1~ `#2'~ \msg_line_context: . \\
+ However,~ I~ do~ not~ know~ #1~ `#2'! \\
+ If~ this~ is~ no~ typo~ please~ contact~ the~ package~ author. \\ \\
+ I~ am~ going~ to~ use~ the~ #1~ `#3'~ instead.
+ }
+\msg_new:nnn {acro} {definitions-missing}
+ {
+ I~ cannot~ find~ the~ file~ \c_acro_definition_file_name_tl
+ .\c_acro_definition_file_extension_tl !~ This~ file~ contains~ all~
+ essential~ user~ commands~ of~ acro~ and~ is~ a~ crucial~ part~ of~ the~
+ package!~ Please~ check~ your~ installation.
+ }
+
+% --------------------------------------------------------------------------
+% temporary variables
+\tl_new:N \l__acro_tmpa_tl
+\tl_new:N \l__acro_tmpb_tl
+\tl_new:N \l__acro_tmpc_tl
+\prop_new:N \l__acro_tmpa_prop
+\prop_new:N \l__acro_tmpb_prop
+\seq_new:N \l__acro_tmpa_seq
+\seq_new:N \l__acro_tmpb_seq
+\int_new:N \l__acro_tmpa_int
+\int_new:N \l__acro_tmpb_int
+\int_new:N \l__acro_tmpc_int
+\int_new:N \l__acro_tmpd_int
+
+% --------------------------------------------------------------------------
+% variants of kernel commands
+\cs_generate_variant:Nn \quark_if_no_value:nTF {V}
+\cs_generate_variant:Nn \tl_put_right:Nn {NV,Nv}
+\cs_generate_variant:Nn \tl_if_eq:nnT {V}
+\cs_generate_variant:Nn \tl_if_eq:nnF {V}
+\cs_generate_variant:Nn \seq_use:Nnnn {c}
+\cs_generate_variant:Nn \seq_gset_split:Nnn {c}
+\cs_generate_variant:Nn \seq_set_split:Nnn {NnV}
+\cs_generate_variant:Nn \seq_if_in:NnT {NV}
+\cs_generate_variant:Nn \seq_if_in:NnTF {Ne}
+\cs_generate_variant:Nn \prop_put:Nnn {NnV,cnx,cnv}
+\cs_generate_variant:Nn \prop_get:NnNTF {cnc}
+\cs_generate_variant:Nn \prop_get:NnNF {cn,cnc}
+\cs_generate_variant:Nn \prop_get:NnN {cnc}
+\cs_generate_variant:Nn \cs_generate_variant:Nn {c}
+\cs_generate_variant:Nn \str_case:nn {V}
+
+% --------------------------------------------------------------------------
+% variables:
+\bool_new:N \l__acro_acc_supp_bool
+\bool_new:N \l__acro_addto_index_bool
+\bool_new:N \l__acro_capitalize_list_bool
+\bool_new:N \g__acro_case_sensitive_bool
+\bool_new:N \l__acro_citation_all_bool
+\bool_new:N \l__acro_citation_first_bool
+\bool_set_true:N \l__acro_citation_first_bool
+\bool_new:N \l__acro_create_macros_bool
+\bool_new:N \l__acro_custom_alt_format_bool
+\bool_new:N \l__acro_custom_long_format_bool
+\bool_new:N \l__acro_custom_short_format_bool
+\bool_new:N \l__acro_custom_foreign_format_bool
+\bool_new:N \l__acro_extra_punct_bool
+\bool_new:N \l__acro_extra_use_brackets_bool
+\bool_new:N \g__acro_first_acronym_declared_bool
+\bool_new:N \l__acro_first_instance_bool
+\bool_new:N \l__acro_first_only_short_bool
+\bool_new:N \l__acro_first_only_long_bool
+\bool_new:N \l__acro_first_reversed_bool
+\bool_new:N \l__acro_first_switched_bool
+\bool_new:N \l__acro_first_use_brackets_bool
+\bool_new:N \l__acro_first_upper_bool
+\bool_new:N \l__acro_following_page_bool
+\bool_new:N \l__acro_following_pages_bool
+\bool_new:N \l__acro_foreign_bool
+\bool_set_true:N \l__acro_foreign_bool
+\bool_new:N \l__acro_group_citation_bool
+\bool_new:N \l__acro_hyperref_loaded_bool
+\bool_new:N \l__acro_hyperref_use_bool
+\bool_new:N \l__acro_include_endings_format_bool
+\bool_new:N \l__acro_indefinite_bool
+\bool_new:N \l__acro_in_list_bool
+\bool_new:N \l__acro_is_included_bool
+\bool_new:N \l__acro_is_excluded_bool
+\bool_new:N \l__acro_list_all_pages_bool
+\bool_set_true:N \l__acro_list_all_pages_bool
+\bool_new:N \l__acro_list_reverse_long_extra_bool
+\bool_new:N \l__acro_log_acronyms_bool
+\bool_new:N \l__acro_log_acronyms_verbose_bool
+\bool_new:N \l__acro_mark_as_used_bool
+\bool_new:N \g__acro_mark_first_as_used_bool
+\bool_new:N \l__acro_override_list_format_bool
+\bool_new:N \l__acro_page_brackets_bool
+\bool_new:N \l__acro_page_display_bool
+\bool_new:N \l__acro_page_punct_bool
+\bool_new:N \l__acro_place_label_bool
+\bool_new:N \l__acro_print_only_used_bool
+\bool_set_true:N \l__acro_print_only_used_bool
+\bool_new:N \g__acro_reset_at_barrier_bool
+\bool_new:N \l__acro_silence_bool
+\bool_new:N \l__acro_single_use_bool
+\bool_new:N \l__acro_sort_bool
+\bool_set_true:N \l__acro_sort_bool
+\bool_new:N \l__acro_strict_bool
+\bool_new:N \l__acro_trailing_tokens_bool
+\bool_new:N \l__acro_tooltip_bool
+\bool_new:N \l__acro_tooltip_inside_bool
+\bool_new:N \l__acro_upper_indefinite_bool
+\bool_new:N \l__acro_upper_short_bool
+\bool_new:N \l__acro_use_acronyms_bool
+\bool_set_true:N \l__acro_use_acronyms_bool
+\bool_new:N \l__acro_use_barrier_bool
+\bool_new:N \g__acro_use_barriers_bool
+\bool_new:N \l__acro_use_ending_form_bool
+\bool_new:N \l__acro_use_note_bool
+\bool_new:N \l__acro_xspace_bool
+
+\str_new:N \l__acro_current_id_str
+
+\tl_new:N \l__acro_list_entries_tl
+\tl_new:N \l__acro_endings_tl
+\tl_new:N \l__acro_trailing_tokens_tl
+\tl_new:N \l__acro_included_classes_tl
+\tl_new:N \l__acro_excluded_classes_tl
+\tl_new:N \l__acro_ignore_tl
+\tl_new:N \l__acro_default_indefinite_tl
+\tl_set:Nn \l__acro_default_indefinite_tl {a}
+\tl_new:N \l__acro_foreign_sep_tl
+\tl_new:N \l__acro_extra_instance_tl
+\tl_set:Nn \l__acro_extra_instance_tl {default}
+\tl_new:N \l__acro_page_instance_tl
+\tl_set:Nn \l__acro_page_instance_tl {none}
+\tl_new:N \l__acro_page_name_tl
+\tl_new:N \l__acro_pages_name_tl
+\tl_new:N \l__acro_next_page_tl
+\tl_new:N \l__acro_next_pages_tl
+\tl_new:N \l__acro_list_instance_tl
+\tl_set:Nn \l__acro_list_instance_tl {description}
+\tl_new:N \l__acro_list_type_tl
+\tl_new:N \l__acro_list_heading_cmd_tl
+\tl_set:Nn \l__acro_list_heading_cmd_tl {section*}
+\tl_new:N \l__acro_list_name_tl
+\tl_new:N \l__acro_list_before_tl
+\tl_new:N \l__acro_list_after_tl
+\tl_new:N \l__acro_custom_short_format_tl
+\tl_new:N \l__acro_first_between_tl
+\tl_new:N \l__acro_citation_connect_tl
+\tl_new:N \l__acro_between_group_connect_citation_tl
+\tl_new:N \l__acro_extra_brackets_tl
+\tl_new:N \l__acro_extra_punct_tl
+\tl_new:N \l__acro_first_brackets_tl
+\tl_new:N \l__acro_page_punct_tl
+\tl_new:N \l__acro_page_brackets_tl
+\tl_new:N \l__acro_last_page_tl
+\tl_new:N \l__acro_current_page_tl
+\tl_new:N \l__acro_list_table_tl
+\tl_new:N \l__acro_list_table_spec_tl
+\tl_new:N \l__acro_acc_supp_tl
+\tl_new:N \l__acro_acc_supp_options_tl
+\tl_new:N \l__acro_label_prefix_tl
+\tl_set:Nn \l__acro_label_prefix_tl {ac:}
+\tl_new:N \l__acro_index_short_tl
+\tl_new:N \l__acro_first_instance_tl
+\tl_set:Nn \l__acro_first_instance_tl {default}
+\tl_new:N \l__acro_short_tl
+\tl_new:N \l__acro_short_format_tl
+\tl_new:N \l__acro_list_short_format_tl
+\tl_new:N \l__acro_alt_tl
+\tl_new:N \l__acro_alt_format_tl
+\tl_new:N \l__acro_long_tl
+\tl_new:N \l__acro_long_format_tl
+\tl_new:N \l__acro_list_long_format_tl
+\tl_new:N \l__acro_single_form_tl
+\tl_set:Nn \l__acro_single_form_tl {long}
+\tl_new:N \l__acro_extra_format_tl
+\tl_new:N \l__acro_foreign_format_tl
+\tl_new:N \l__acro_foreign_list_format_tl
+\tl_set:Nn \l__acro_foreign_list_format_tl { \acroenparen }
+\tl_new:N \l__acro_index_format_tl
+
+\skip_new:N \l__acro_page_space_skip
+
+\dim_new:N \l__acro_short_width_dim
+\dim_set:Nn \l__acro_short_width_dim {3em}
+
+\int_new:N \g__acro_barrier_int
+
+\seq_new:N \l__acro_endings_seq
+\seq_new:N \l__acro_actions_seq
+\seq_new:N \g__acro_declared_acronyms_seq
+
+\prop_new:N \l__acro_citation_prop
+\prop_new:N \l__acro_citation_pre_prop
+\prop_new:N \l__acro_citation_post_prop
+\prop_new:N \l__acro_pdfstring_alt_prop
+\prop_new:N \l__acro_pdfstring_short_prop
+\prop_new:N \g__acro_properties_prop
+\prop_new:N \l__acro_trailing_tokens_prop
+\prop_new:N \l__acro_trailing_actions_prop
+\prop_new:N \l__acro_list_styles_prop
+\prop_new:N \l__acro_list_headings_prop
+\prop_new:N \l__acro_first_styles_prop
+\prop_new:N \l__acro_extra_styles_prop
+\prop_new:N \l__acro_page_styles_prop
+
+% --------------------------------------------------------------------------
+% logging:
+\prg_new_conditional:Npnn \acro_if_log: {p,T,F,TF}
+ {
+ \bool_if:NTF \l__acro_log_acronyms_bool
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+
+\keys_define:nn {acro}
+ {
+ log .choice: ,
+ log / true .code:n =
+ \bool_set_true:N \l__acro_log_acronyms_bool
+ \bool_set_false:N \l__acro_log_acronyms_verbose_bool ,
+ log / silent .meta:n = { log = true } ,
+ log / verbose .code:n =
+ \bool_set_true:N \l__acro_log_acronyms_bool
+ \bool_set_true:N \l__acro_log_acronyms_verbose_bool ,
+ log / false .code:n =
+ \bool_set_false:N \l__acro_log_acronyms_bool
+ \bool_set_false:N \l__acro_log_acronyms_verbose_bool ,
+ log .default:n = true ,
+ log .initial:n = false
+ }
+
+\cs_new:Npn \__acro_write_log:nn #1#2 { \ \ \ #1 ~ = ~ {#2} }
+\cs_new:Npn \__acro_write_log_property:nnn #1#2#3
+ { \__acro_write_log:nn {#2} { \__acro_property_get:nn {#3} {#1} } }
+
+\cs_new:Npn \__acro_ending_log_entry:nn #1#2
+ {
+ | \\
+ | \__acro_write_log_property:nnn {#1} {short-#2} {short_#2} \\
+ | \__acro_write_log_property:nnn {#1} {short-#2-form} {short_#2_form} \\
+ | \__acro_write_log_property:nnn {#1} {long-#2} {long_#2} \\
+ | \__acro_write_log_property:nnn {#1} {long-#2-form} {long_#2_form} \\
+ | \__acro_write_log_property:nnn {#1} {alt-#2} {alt_#2} \\
+ | \__acro_write_log_property:nnn {#1} {alt-#2-form} {alt_#2_form} \\
+ | \__acro_write_log_property:nnn {#1} {foreign-#2} {foreign_#2} \\
+ | \__acro_write_log_property:nnn {#1} {foreign-#2-form} {foreign_#2_form} \\
+ }
+
+\msg_new:nnn {acro} {log-acronym-verbose}
+ {
+ ================================================= \\
+ | ~ \msg_info_text:n {acro}~ --~ defining~ new~ acronym: \\
+ | \__acro_write_log:nn {ID} {#1} \\
+ | \__acro_write_log_property:nnn {#1} {short} {short} \\
+ | \__acro_write_log_property:nnn {#1} {long} {long} \\
+ | \__acro_write_log_property:nnn {#1} {alt} {alt} \\
+ | \__acro_write_log_property:nnn {#1} {sort} {sort} \\
+ | \__acro_write_log_property:nnn {#1} {class} {class} \\
+ | \__acro_write_log_property:nnn {#1} {list} {list} \\
+ | \__acro_write_log_property:nnn {#1} {extra} {extra} \\
+ | \__acro_write_log_property:nnn {#1} {foreign} {foreign} \\
+ | \__acro_write_log_property:nnn {#1} {single} {single} \\
+ | \__acro_write_log_property:nnn {#1} {pdfstring} {pdfstring} \\
+ | \__acro_write_log_property:nnn {#1} {accsupp} {accsupp} \\
+ | \__acro_write_log_property:nnn {#1} {tooltip} {tooltip} \\
+ | \\
+ | \__acro_write_log_property:nnn {#1} {short-indefinite} {short_indefinite} \\
+ | \__acro_write_log_property:nnn {#1} {long-indefinite} {long_indefinite} \\
+ | \__acro_write_log_property:nnn {#1} {alt-indefinite} {alt_indefinite} \\
+ \seq_map_function:NN \l__acro_endings_seq \__acro_ending_log_entry:n
+ | \\
+ | \__acro_write_log_property:nnn {#1} {short-format} {short_format} \\
+ | \__acro_write_log_property:nnn {#1} {long-format} {long_format} \\
+ | \__acro_write_log_property:nnn {#1} {first-long-format} {first_long_format} \\
+ | \__acro_write_log_property:nnn {#1} {single-format} {single_format} \\
+ | \__acro_write_log_property:nnn {#1} {foreign-lang} {foreign_lang} \\
+ | \\
+ | \__acro_write_log_property:nnn {#1} {cite} {citation} \\
+ | \__acro_write_log_property:nnn {#1} {before-citation} {before_citation} \\
+ | \__acro_write_log_property:nnn {#1} {after-citation} {after_citation} \\
+ | \__acro_write_log_property:nnn {#1} {index} {index} \\
+ | \__acro_write_log_property:nnn {#1} {index-sort} {index_sort} \\
+ | \\
+ | \__acro_write_log_property:nnn {#1} {long-pre} {long_pre} \\
+ | \__acro_write_log_property:nnn {#1} {long-post} {long_post} \\
+ | \__acro_write_log_property:nnn {#1} {post} {post} \\
+ | \__acro_write_log_property:nnn {#1} {index-cmd} {index_cmd} \\
+ | \__acro_write_log_property:nnn {#1} {first-style} {first_style} \\
+ =================================================
+ }
+
+\msg_new:nnn {acro} {log-acronym-silent}
+ {
+ ================================================= \\
+ | ~ \msg_info_text:n {acro}~ --~ defining~ new~ acronym: \\
+ | \__acro_write_log:nn {ID} {#1} \\
+ | \__acro_write_log_property:nnn {#1} {short} {short} \\
+ | \__acro_write_log_property:nnn {#1} {long} {long} \\
+ | \__acro_write_log_property:nnn {#1} {alt} {alt} \\
+ | \__acro_write_log_property:nnn {#1} {sort} {sort} \\
+ | \__acro_write_log_property:nnn {#1} {class} {class} \\
+ | \__acro_write_log_property:nnn {#1} {list} {list} \\
+ | \__acro_write_log_property:nnn {#1} {extra} {extra} \\
+ | \__acro_write_log_property:nnn {#1} {foreign} {foreign} \\
+ | \__acro_write_log_property:nnn {#1} {cite} {citation} \\
+ =================================================
+ }
+
+\cs_new_protected:Npn \__acro_log_acronym:n #1
+ {
+ \bool_if:NT \l__acro_log_acronyms_bool
+ {
+ \cs_set:Npn \__acro_ending_log_entry:n ##1
+ { \__acro_ending_log_entry:nn {#1} {##1} }
+ \bool_if:NTF \l__acro_log_acronyms_verbose_bool
+ { \msg_log:nnn {acro} {log-acronym-verbose} {#1} }
+ { \msg_log:nnn {acro} {log-acronym-silent} {#1} }
+ }
+ }
+
+% --------------------------------------------------------------------------
+% message macros:
+\cs_new:Npn \__acro_remove_backslash:N #1
+ { \exp_after:wN \use_none:n \token_to_str:N #1 }
+
+\cs_new_protected:Npn \acro_new_message_commands:Nnnn #1#2#3#4
+ {
+ \clist_map_inline:nn {#2}
+ {
+ \cs_new_protected:cpn { \__acro_remove_backslash:N #1 ##1 }
+ {
+ \bool_if:NTF \l__acro_silence_bool
+ { \use:c { \__acro_remove_backslash:N #3 n##1 } {acro} }
+ { \use:c { \__acro_remove_backslash:N #4 n##1 } {acro} }
+ }
+ }
+ }
+
+\acro_new_message_commands:Nnnn \acro_serious_message: {n,nn,nnn}
+ { \msg_warning: }
+ { \msg_error: }
+
+\acro_new_message_commands:Nnnn \acro_harmless_message: {n,nn,nnn,nnnn}
+ { \msg_info: }
+ { \msg_warning: }
+
+\cs_new_protected:Npn \acro_option_deprecated:nn #1#2
+ {
+ \tl_if_blank:nTF {#2}
+ { \acro_harmless_message:nnn {deprecated} {option} {#1} }
+ { \acro_harmless_message:nnnn {replaced} {option} {#1} {#2} }
+ }
+\cs_new_protected:Npn \acro_option_deprecated:n #1
+ { \acro_option_deprecated:nn {#1} {} }
+
+\cs_new_protected:Npn \acro_command_deprecated:NN #1#2
+ {
+ \tl_if_blank:nTF {#2}
+ {
+ \acro_harmless_message:nnn {deprecated} {command}
+ { \token_to_str:N #1 }
+ }
+ {
+ \acro_harmless_message:nnnn {replaced} {command}
+ { \token_to_str:N #1 }
+ { \token_to_str:N #2 }
+ }
+ }
+
+% --------------------------------------------------------------------------
+% small commands for use at various places
+\cs_new:Npn \acro_no_break: { \tex_penalty:D 10000 \scan_stop: }
+
+\cs_new_protected:Npn \__acro_first_upper_case:n #1
+ { \text_titlecase_first:n {#1} }
+\cs_generate_variant:Nn \__acro_first_upper_case:n {x}
+
+\cs_new_eq:NN \acro_first_upper_case:n \__acro_first_upper_case:n
+
+% --------------------------------------------------------------------------
+\tl_new:N \l_acro_config_file_name_tl
+\tl_new:N \l_acro_config_file_extension_tl
+
+\tl_set:Nn \l_acro_config_file_name_tl {acro}
+\tl_set:Nn \l_acro_config_file_extension_tl {cfg}
+
+% options:
+\keys_define:nn {acro}
+ {
+ messages .choice: ,
+ messages / silent .code:n =
+ \bool_set_true:N \l__acro_silence_bool ,
+ messages / loud .code:n =
+ \bool_set_false:N \l__acro_silence_bool ,
+ messages .value_required:n = true ,
+ config-file-name .tl_set:N = \l_acro_config_file_name_tl ,
+ config-file-name .initial:n = acro ,
+ config-file-extension .tl_set:N = \l_acro_config_file_extension_tl ,
+ config-file-extension .initial:n = cfg ,
+ accsupp .bool_set:N = \l__acro_acc_supp_bool ,
+ accsupp-options .tl_set:N = \l__acro_acc_supp_options_tl ,
+ tooltip .bool_set:N = \l__acro_tooltip_bool ,
+ tooltip-cmd .code:n = \cs_set:Npn \__acro_tooltip_cmd:nn {#1} ,
+ tooltip-cmd .value_required:n = true ,
+ macros .bool_set:N = \l__acro_create_macros_bool ,
+ xspace .bool_set:N = \l__acro_xspace_bool ,
+ % xspace .code:n = \acro_option_deprecated:nn {xspace} {} ,
+ strict .bool_set:N = \l__acro_strict_bool ,
+ case-sensitive .bool_set:N = \g__acro_case_sensitive_bool ,
+ case-sensitive .initial:n = true ,
+ sort .bool_set:N = \l__acro_sort_bool ,
+ short-format .code:n =
+ \tl_set:Nn \l__acro_short_format_tl {#1}
+ \tl_set_eq:NN \l__acro_alt_format_tl \l__acro_short_format_tl
+ \tl_set:Nn \l__acro_list_short_format_tl {#1} ,
+ short-format .value_required:n = true ,
+ alt-format .tl_set:N = \l__acro_alt_format_tl ,
+ alt-format .value_required:n = true ,
+ long-format .code:n =
+ \tl_set:Nn \l__acro_long_format_tl {#1}
+ \tl_set:Nn \l__acro_first_long_format_tl {#1}
+ \tl_set:Nn \l__acro_list_long_format_tl {#1} ,
+ long-format .value_required:n = true ,
+ first-long-format .code:n =
+ \tl_set:Nn \l__acro_first_long_format_tl {#1} ,
+ first-long-format .value_required:n = true ,
+ single-format .tl_set:N = \l__acro_single_format_tl ,
+ single-format .value_required:n = true ,
+ format-include-endings .bool_set:N = \l__acro_include_endings_format_bool ,
+ display-foreign .bool_set:N = \l__acro_foreign_bool ,
+ foreign-format .tl_set:N = \l__acro_foreign_format_tl ,
+ foreign-format .value_required:n = true ,
+ list-short-format .tl_set:N = \l__acro_list_short_format_tl ,
+ list-short-format .value_required:n = true ,
+ list-short-width .dim_set:N = \l__acro_short_width_dim ,
+ list-short-width .value_required:n = true ,
+ list-long-format .tl_set:N = \l__acro_list_long_format_tl ,
+ list-long-format .value_required:n = true ,
+ list-foreign-format .tl_set:N = \l__acro_foreign_list_format_tl ,
+ list-foreign-format .value_required:n = true ,
+ override-list-format .bool_set:N = \l__acro_override_list_format_bool ,
+ override-list-format .initial:n = true ,
+ extra-format .tl_set:N = \l__acro_extra_format_tl ,
+ extra-format .value_required:n = true ,
+ single .bool_set:N = \l__acro_single_use_bool ,
+ single-form .tl_set:N = \l__acro_single_form_tl ,
+ single-form .value_required:n = true ,
+ first-style .code:n = \acro_set_first_style:n {#1} ,
+ first-style .value_required:n = true ,
+ extra-style .code:n = \acro_set_extra_style:n {#1} ,
+ extra-style .value_required:n = true ,
+ label .bool_set:N = \l__acro_place_label_bool ,
+ label-prefix .tl_set:N = \l__acro_label_prefix_tl ,
+ label-prefix .value_required:n = true ,
+ pages .choice: ,
+ pages / all .code:n =
+ \bool_set_true:N \l__acro_list_all_pages_bool ,
+ pages / first .code:n =
+ \bool_set_true:N \l__acro_place_label_bool
+ \bool_set_false:N \l__acro_list_all_pages_bool ,
+ pages .value_required:n = true ,
+ page-ref .code:n =
+ \acro_option_deprecated:nn {page-ref} {page-style}
+ \acro_set_page_style:n {#1} ,
+ page-style .code:n = \acro_set_page_style:n {#1} ,
+ page-style .value_required:n = true ,
+ page-name .tl_set:N = \l__acro_page_name_tl ,
+ page-name .value_required:n = true ,
+ pages-name .tl_set:N = \l__acro_pages_name_tl ,
+ pages-name .value_required:n = true ,
+ following-page .bool_set:N = \l__acro_following_page_bool ,
+ following-pages .bool_set:N = \l__acro_following_pages_bool ,
+ following-pages* .meta:n =
+ { following-page = #1 , following-pages = #1 } ,
+ following-pages* .default:n = true ,
+ next-page .tl_set:N = \l__acro_next_page_tl ,
+ next-page .value_required:n = true ,
+ next-pages .tl_set:N = \l__acro_next_pages_tl ,
+ next-pages .value_required:n = true ,
+ list-style .code:n = \acro_set_list_style:n {#1} ,
+ list-style .value_required:n = true ,
+ list-heading .code:n = \acro_set_list_heading:n {#1} ,
+ list-heading .value_required:n = true ,
+ list-name .tl_set:N = \l__acro_list_name_tl ,
+ list-name .value_required:n = true ,
+ hyperref .bool_set:N = \l__acro_hyperref_use_bool ,
+ only-used .bool_set:N = \l__acro_print_only_used_bool ,
+ mark-as-used .choice: ,
+ mark-as-used / first .code:n =
+ \bool_gset_true:N \g__acro_mark_first_as_used_bool ,
+ mark-as-used / any .code:n =
+ \bool_gset_false:N \g__acro_mark_first_as_used_bool ,
+ mark-as-used .default:n = any ,
+ list-caps .bool_set:N = \l__acro_capitalize_list_bool ,
+ cite .choice: ,
+ cite / all .code:n =
+ \bool_set_true:N \l__acro_citation_all_bool
+ \bool_set_true:N \l__acro_citation_first_bool ,
+ cite / none .code:n =
+ \bool_set_false:N \l__acro_citation_all_bool
+ \bool_set_false:N \l__acro_citation_first_bool ,
+ cite / first .code:n =
+ \bool_set_false:N \l__acro_citation_all_bool
+ \bool_set_true:N \l__acro_citation_first_bool ,
+ cite .default:n = all ,
+ cite-cmd .code:n =
+ \cs_set:Npn \__acro_citation_cmd:w {#1} ,
+ cite-cmd .value_required:n = true ,
+ group-cite-cmd .code:n =
+ \cs_set:Npn \__acro_group_citation_cmd:w {#1} ,
+ group-cite-cmd .value_required:n = true ,
+ group-citation .bool_set:N = \l__acro_group_citation_bool ,
+ cite-connect .tl_set:N = \l__acro_citation_connect_tl ,
+ cite-connect .initial:n = \nobreakspace ,
+ cite-connect .value_required:n = true ,
+ group-cite-connect .tl_set:N = \l__acro_between_group_connect_citation_tl ,
+ group-cite-connect .initial:n = {,\nobreakspace} ,
+ group-cite-connect .value_required:n = true ,
+ index .bool_set:N = \l__acro_addto_index_bool ,
+ index-cmd .code:n =
+ \cs_set:Npn \__acro_index_cmd:n {#1} ,
+ index-cmd .value_required:n = true ,
+ uc-cmd .code:n =
+ \cs_set_eq:NN \__acro_first_upper_case:n #1 ,
+ uc-cmd .value_required:n = true ,
+ uppercase-short .bool_set:N = \l__acro_upper_short_bool ,
+ uppercase-short .initial:n = true
+ }
+
+\AtBeginDocument
+ {
+ \bool_if:NTF \l__acro_xspace_bool
+ {
+ \@ifpackageloaded {xspace}
+ { }
+ { \RequirePackage {xspace} }
+ \cs_new_eq:NN \acro_xspace: \xspace
+ }
+ { \cs_new:Npn \acro_xspace: {} }
+ }
+
+% --------------------------------------------------------------------------
+% we use xtemplate for different object types and with a different number of
+% arguments; let's declare functions for usage later so we don't have to
+% bother
+
+% objects with one argument:
+\cs_new_protected:Npn \acro_page_number_instance:nn #1#2
+ { \UseInstance {acro-page-number} {#1} {#2} }
+\cs_generate_variant:Nn \acro_page_number_instance:nn {V}
+
+\cs_new_protected:Npn \acro_extra_instance:nn #1#2
+ { \UseInstance {acro-extra} {#1} {#2} }
+\cs_generate_variant:Nn \acro_extra_instance:nn {VV}
+
+\cs_new_protected:Npn \acro_title_instance:nn #1#2
+ { \UseInstance {acro-title} {#1} {#2} }
+\cs_generate_variant:Nn \acro_title_instance:nn {VV}
+
+% objects with two arguments:
+\cs_new_protected:Npn \acro_list_instance:nnn #1#2#3
+ { \UseInstance {acro-list} {#1} {#2} {#3} }
+\cs_generate_variant:Nn \acro_list_instance:nnn {VVV}
+
+\cs_new_protected:Npn \acro_first_instance:nn #1#2
+ {
+ \acro_property_if_set:nnTF {#1} {first-style}
+ {
+ \tl_set_eq:NN
+ \l__acro_tmpa_tl
+ \l__acro_first_style_tl
+ }
+ {
+ \tl_set_eq:NN
+ \l__acro_tmpa_tl
+ \l__acro_first_instance_tl
+ }
+ \acro_if_defined:nT {#1}
+ {
+ \use:x {
+ \UseInstance {acro-first}
+ { \exp_not:V \l__acro_tmpa_tl }
+ { \exp_not:n {#1} }
+ { \exp_not:n {#2} }
+ }
+ }
+ }
+\cs_generate_variant:Nn \acro_first_instance:nn {nV}
+
+% --------------------------------------------------------------------------
+% hyperref support
+\cs_new_eq:NN \acro_hyper_target:nn \use_ii:nn
+\cs_new_eq:NN \acro_hyper_link:nn \use_ii:nn
+
+\cs_new_protected:Npn \acro_activate_hyperref_support:
+ {
+ \bool_lazy_and:nnT
+ { \l__acro_hyperref_loaded_bool }
+ { \l__acro_hyperref_use_bool }
+ {
+ \sys_if_engine_xetex:TF
+ {
+ \cs_set:Npn \acro_hyper_link:nn ##1##2
+ { \hyperlink {##1} { \XeTeXLinkBox {##2} } }
+ }
+ { \cs_set_eq:NN \acro_hyper_link:nn \hyperlink }
+ \cs_set:Npn \acro_hyper_target:nn ##1##2
+ { \raisebox {3ex} [0pt] { \hypertarget {##1} { } } ##2 }
+ }
+ }
+
+% #1: id
+% #2: text
+\cs_new_protected:Npn \__acro_make_link:nn #1#2
+ {
+ \bool_lazy_and:nnTF
+ { \l__acro_hyperref_use_bool }
+ { \l__acro_hyperref_loaded_bool }
+ {
+ \acro_hyper_link:nn {#1} { \phantom {#2} }
+ \acro_if_is_single:nTF {#1}
+ { \hbox_overlap_left:n {#2} }
+ { \acro_color_link:n { \hbox_overlap_left:n {#2} } }
+ }
+ {#2}
+ }
+
+\cs_new:Npn \acro_color_link:n #1
+ {
+ \cs_if_exist:NTF \hypersetup
+ {
+ \ifHy@colorlinks
+ \exp_after:wN \use_i:nn
+ \else
+ \ifHy@ocgcolorlinks
+ \exp_after:wN \use_i:nn
+ \else
+ \exp_after:wN \exp_after:wN \exp_after:wN \use_ii:nn
+ \fi
+ \fi
+ { \textcolor { \@linkcolor } {#1} }
+ {#1}
+ }
+ {#1}
+ }
+
+\AtBeginDocument{
+ \cs_if_exist:NF \textcolor { \cs_new_eq:NN \textcolor \use_ii:nn }
+}
+
+% --------------------------------------------------------------------------
+% output style of the first time an acronym is used
+
+% helper macros for the styles
+% #1: short|long
+% #2: id
+% #3: long
+\cs_new_protected:Npn \__acro_print_form_and_indefinite:nnn #1#2#3
+ {
+ \group_begin:
+ \acro_for_all_trailing_tokens_do:n
+ { \acro_deactivate_trailing_action:n {##1} }
+ \str_case:nn {#1}
+ {
+ {long} {
+ \bool_lazy_or:nnT
+ { \l__acro_first_only_long_bool }
+ { !\l__acro_first_only_short_bool }
+ {
+ \acro_write_indefinite:nn {#2} {long}
+ \acro_write_expanded:nnn {#2} {first-long} {#3}
+ }
+ }
+ {short} {
+ \bool_lazy_or:nnT
+ { !\l__acro_first_only_long_bool }
+ { \l__acro_first_only_short_bool }
+ {
+ \acro_soft_upper:
+ \acro_write_indefinite:nn {#2} {short}
+ \acro_write_compact:nn {#2} {short}
+ }
+ }
+ }
+ \group_end:
+ }
+
+\cs_new_protected:Npn \__acro_open_bracket:
+ {
+ \bool_lazy_and:nnT
+ { !\l__acro_first_only_long_bool }
+ { !\l__acro_first_only_short_bool }
+ {
+ \acro_space:
+ \tl_if_blank:VF \l__acro_first_between_tl
+ {
+ \tl_use:N \l__acro_first_between_tl
+ \acro_space:
+ }
+ \bool_if:NT \l__acro_first_use_brackets_bool
+ { \tl_head:N \l__acro_first_brackets_tl }
+ }
+ }
+
+\cs_new_protected:Npn \__acro_close_bracket:
+ {
+ \bool_lazy_all:nT
+ {
+ { \l__acro_first_use_brackets_bool }
+ { !\l__acro_first_only_short_bool }
+ { !\l__acro_first_only_long_bool }
+ }
+ { \tl_tail:N \l__acro_first_brackets_tl }
+ }
+
+% #1: short|long
+% #2: id
+% #3: long
+\cs_new_protected:Npn \__acro_print_form:nnn #1#2#3
+ {
+ \str_case:nn {#1}
+ {
+ {long} {
+ \bool_lazy_or:nnT
+ { \l__acro_first_only_long_bool }
+ { !\l__acro_first_only_short_bool }
+ {
+ \group_begin:
+ \bool_set_false:N \l__acro_first_upper_bool
+ \acro_write_expanded:nnn {#2} {first-long} {#3}
+ \group_end:
+ }
+ }
+ {short} {
+ \bool_lazy_or:nnT
+ { !\l__acro_first_only_long_bool }
+ { \l__acro_first_only_short_bool }
+ {
+ \group_begin:
+ \acro_soft_upper:
+ \acro_write_compact:nn {#2} {short}
+ \group_end:
+ }
+ }
+ }
+ }
+
+% #1: id
+\cs_new_protected:Npn \__acro_foreign_sep:n #1
+ {
+ \bool_lazy_all:nT
+ {
+ { \l__acro_foreign_bool }
+ { !\l__acro_first_only_short_bool }
+ { !\l__acro_first_only_long_bool }
+ }
+ { \acro_if_foreign:nT {#1} { \tl_use:N \l__acro_foreign_sep_tl } }
+ }
+
+% #1: id
+\cs_new_protected:Npn \__acro_print_foreign:n #1
+ {
+ \acro_if_foreign:nT {#1}
+ {
+ \bool_lazy_all:nT
+ {
+ { \l__acro_foreign_bool }
+ { !\l__acro_first_only_short_bool }
+ { !\l__acro_first_only_long_bool }
+ }
+ {
+ \acro_write_foreign:n {#1}
+ \acro_endings:nn {#1} {foreign}
+ }
+ }
+ }
+
+\cs_new_protected:Npn \__acro_print_citation:n #1
+ {
+ \bool_if:NT \l__acro_group_citation_bool
+ { \acro_group_cite:n {#1} }
+ }
+
+\cs_new_protected:Npn \__acro_finalize_first:n #1
+ {
+ \bool_if:NF \l__acro_group_citation_bool
+ { \acro_cite_if:Nn \l__acro_citation_first_bool {#1} }
+ \acro_index_if:Nn \l__acro_addto_index_bool {#1}
+ \acro_property_get:nnT {#1} {post}
+ { \tl_use:N \l__acro_post_tl }
+ }
+
+% --------------------------------------------------------------------------
+% the `acro-first' object, templates, instances:
+% #1: id
+% #2: long
+\DeclareObjectType {acro-first} {2}
+
+% template for inline appearance:
+\DeclareTemplateInterface {acro-first} {inline} {2}
+ {
+ brackets : boolean = true ,
+ brackets-type : tokenlist = () ,
+ only-short : boolean = false ,
+ only-long : boolean = false ,
+ reversed : boolean = false ,
+ between : tokenlist ,
+ foreign-sep : tokenlist = {,~}
+ }
+\DeclareTemplateCode {acro-first} {inline} {2}
+ {
+ brackets = \l__acro_first_use_brackets_bool ,
+ brackets-type = \l__acro_first_brackets_tl ,
+ only-short = \l__acro_first_only_short_bool ,
+ only-long = \l__acro_first_only_long_bool ,
+ reversed = \l__acro_first_reversed_bool ,
+ between = \l__acro_first_between_tl ,
+ foreign-sep = \l__acro_foreign_sep_tl
+ }
+ {
+ \AssignTemplateKeys
+ \bool_set_true:N \l__acro_first_instance_bool
+ \bool_if:NTF \l__acro_first_reversed_bool
+ { % zuerst kurze Form, dann lange Form:
+ \__acro_print_form_and_indefinite:nnn {short} {#1} {#2}
+ \__acro_open_bracket:
+ \__acro_print_foreign:n {#1}
+ \__acro_foreign_sep:n {#1}
+ \__acro_print_form:nnn {long} {#1} {#2}
+ \__acro_print_citation:n {#1}
+ \__acro_close_bracket:
+ \__acro_finalize_first:n {#1}
+ }
+ { % zuerst lange Form, dann kurze Form:
+ \__acro_print_form_and_indefinite:nnn {long} {#1} {#2}
+ \__acro_open_bracket:
+ \__acro_print_foreign:n {#1}
+ \__acro_foreign_sep:n {#1}
+ \__acro_print_form:nnn {short} {#1} {#2}
+ \__acro_print_citation:n {#1}
+ \__acro_close_bracket:
+ \__acro_finalize_first:n {#1}
+ }
+ }
+
+% template for footnotes, sidenotes, ...
+\cs_new:Npn \__acro_note_command:n #1 {#1}
+\DeclareTemplateInterface {acro-first} {note} {2}
+ {
+ use-note : boolean = true ,
+ note-command : function 1 = \footnote {#1} ,
+ foreign-sep : tokenlist = {,~} ,
+ reversed : boolean = false ,
+ }
+
+\DeclareTemplateCode {acro-first} {note} {2}
+ {
+ use-note = \l__acro_use_note_bool ,
+ note-command = \__acro_note_command:n ,
+ foreign-sep = \l__acro_foreign_sep_tl ,
+ reversed = \l__acro_first_reversed_bool
+ }
+ {
+ \AssignTemplateKeys
+ \bool_if:NTF \l__acro_first_reversed_bool
+ { % long in text and short in note
+ \__acro_print_form_and_indefinite:nnn {long} {#1} {#2}
+ \bool_if:NT \l__acro_use_note_bool
+ {
+ \__acro_note_command:n
+ {
+ \__acro_print_foreign:n {#1}
+ \__acro_foreign_sep:n {#1}
+ \__acro_print_form:nnn {short} {#1} {#2}
+ \__acro_print_citation:n {#1}
+ \__acro_finalize_first:n {#1}
+ }
+ }
+ }
+ { % short in text and long in note
+ \__acro_print_form_and_indefinite:nnn {short} {#1} {#2}
+ \bool_if:NT \l__acro_use_note_bool
+ {
+ \__acro_note_command:n
+ {
+ \__acro_print_foreign:n {#1}
+ \__acro_foreign_sep:n {#1}
+ \__acro_print_form:nnn {long} {#1} {#2}
+ \__acro_print_citation:n {#1}
+ \__acro_finalize_first:n {#1}
+ }
+ }
+ }
+ }
+
+% --------------------------------------------------------------------------
+% declare new first styles:
+\cs_new_protected:Npn \acro_declare_first_style:nnn #1#2#3
+ {
+ \DeclareInstance {acro-first} {#1} {#2} {#3}
+ \prop_put:Nnn \l__acro_first_styles_prop {#1} {#2}
+ }
+
+% set a list style
+\cs_new_protected:Npn \acro_set_first_style:n #1
+ {
+ \prop_if_in:NnTF \l__acro_first_styles_prop {#1}
+ { \__acro_set_first_style:n {#1} }
+ {
+ \msg_warning:nnnnn {acro} {unknown}
+ {first~ style}
+ {#1}
+ {default}
+ \__acro_set_first_style:n {default}
+ }
+ }
+
+\cs_new_protected:Npn \__acro_set_first_style:n #1
+ {
+ \tl_set:Nn \l__acro_first_instance_tl {#1}
+ \prop_get:NnN \l__acro_first_styles_prop {#1} \l__acro_tmpa_tl
+ }
+
+% --------------------------------------------------------------------------
+% formatting the extras information:
+\DeclareObjectType {acro-extra} {1}
+
+\DeclareTemplateInterface {acro-extra} {inline} {1}
+ {
+ punct : boolean = false ,
+ punct-symbol : tokenlist = {,} ,
+ brackets : boolean = true ,
+ brackets-type : tokenlist = ()
+ }
+
+\DeclareTemplateCode {acro-extra} {inline} {1}
+ {
+ punct = \l__acro_extra_punct_bool ,
+ punct-symbol = \l__acro_extra_punct_tl ,
+ brackets = \l__acro_extra_use_brackets_bool ,
+ brackets-type = \l__acro_extra_brackets_tl
+ }
+ {
+ \AssignTemplateKeys
+ \bool_if:NT \l__acro_extra_punct_bool
+ { \tl_use:N \l__acro_extra_punct_tl \tl_use:N \c_space_tl }
+ \bool_if:NT \l__acro_extra_use_brackets_bool
+ { \tl_head:N \l__acro_extra_brackets_tl }
+ \acro_write_long:Vn \l__acro_extra_format_tl {#1}
+ \bool_if:NT \l__acro_extra_use_brackets_bool
+ { \tl_tail:N \l__acro_extra_brackets_tl }
+ }
+
+% declare new extra styles:
+\cs_new_protected:Npn \acro_declare_etxra_style:nnn #1#2#3
+ {
+ \DeclareInstance {acro-etxra} {#1} {#2} {#3}
+ \prop_put:Nnn \l__acro_etxra_styles_prop {#1} {#2}
+ }
+
+% set an extra style
+\cs_new_protected:Npn \acro_set_extra_style:n #1
+ {
+ \prop_if_in:NnTF \l__acro_extra_styles_prop {#1}
+ { \__acro_set_extra_style:n {#1} }
+ {
+ \msg_warning:nnnnn {acro} {unknown}
+ {extra~ style}
+ {#1}
+ {default}
+ \__acro_set_extra_style:n {default}
+ }
+ }
+
+\cs_new_protected:Npn \__acro_set_extra_style:n #1
+ {
+ \tl_set:Nn \l__acro_extra_instance_tl {#1}
+ \prop_get:NnN \l__acro_extra_styles_prop {#1} \l__acro_tmpa_tl
+ }
+
+\cs_new_protected:Npn \acro_declare_extra_style:nnn #1#2#3
+ {
+ \DeclareInstance {acro-extra} {#1} {#2} {#3}
+ \prop_put:Nnn \l__acro_extra_styles_prop {#1} {#2}
+ }
+
+% --------------------------------------------------------------------------
+% outputting the page numbers:
+\RequirePackage {zref-abspage}
+
+\cs_new_protected:Npn \__acro_create_page_records:n #1
+ {
+ \seq_new:c { g__acro_#1_pages_seq }
+ \tl_new:c { g__acro_#1_recorded_pages_tl }
+ }
+
+\cs_new_protected:Npn \acro_hyper_page:n #1 { \use:n {#1} }
+
+\cs_new:Npn \acro_get_thepage:nnn #1#2#3 { \acro_hyper_page:n {#1} }
+\cs_new:Npn \acro_get_thepage_from:N #1
+ { \exp_after:wN \acro_get_thepage:nnn #1 }
+
+\cs_new:Npn \acro_get_page_number:nnn #1#2#3 {#2}
+\cs_new:Npn \acro_get_page_number_from:N #1
+ { \exp_after:wN \acro_get_page_number:nnn #1 }
+
+\cs_new:Npn \acro_get_abspage:nnn #1#2#3 {#3}
+\cs_new:Npn \acro_get_abspage_from:N #1
+ { \exp_after:wN \acro_get_abspage:nnn #1 }
+
+\cs_new:Npn \acro_page_range_comma: {}
+
+\cs_new_protected:Npn \acro_print_page_numbers:n #1
+ {
+ \seq_if_empty:cF {g__acro_#1_pages_seq}
+ {
+ \bool_if:NTF \l__acro_list_all_pages_bool
+ {
+ % have the numbers changed?
+ \tl_set:Nx \l__acro_tmpa_tl
+ { \seq_use:cn {g__acro_#1_pages_seq} {|} }
+ \tl_if_eq:cNF {g__acro_#1_recorded_pages_tl} \l__acro_tmpa_tl
+ {
+ \@latex@warning@no@line
+ {Rerun~to~get~page~numbers~of~acronym~#1~in~acronym~list~right}
+ }
+ \tl_clear:N \l__acro_write_pages_tl
+ \tl_clear:N \l__acro_last_page_tl
+ \tl_clear:N \l__acro_current_page_tl
+ \seq_set_eq:Nc \l__acro_tmpb_seq { g__acro_#1_pages_seq }
+ \seq_remove_duplicates:N \l__acro_tmpb_seq
+ \seq_clear:N \l__acro_tmpa_seq
+ \cs_set_protected:Npn \acro_page_range_comma:
+ { \cs_set:Npn \acro_page_range_comma: { ,~ } }
+ % get the numbers:
+ \int_compare:nNnTF { \seq_count:N \l__acro_tmpb_seq } = { 1 }
+ {
+ \tl_use:N \l__acro_page_name_tl
+ \seq_get_right:cN { g__acro_#1_pages_seq } \l__acro_tmpa_tl
+ \acro_get_thepage_from:N \l__acro_tmpa_tl
+ }
+ {
+ \tl_use:N \l__acro_pages_name_tl
+ \seq_map_inline:cn { g__acro_#1_pages_seq }
+ {
+ \tl_if_blank:VTF \l__acro_last_page_tl
+ {% we're at the beginning
+ \seq_put_right:Nn \l__acro_tmpa_seq {##1}
+ \tl_set:Nn \l__acro_last_page_tl {##1}
+ }
+ {% we'at least at the second page
+ % current page:
+ \tl_set:Nn \l__acro_current_page_tl {##1}
+ % last page:
+ \seq_get_right:NN \l__acro_tmpa_seq \l__acro_last_page_tl
+ \tl_if_eq:NNTF \l__acro_current_page_tl \l__acro_last_page_tl
+ {% there were more than one appearance on the current page
+ \seq_put_right:Nn \l__acro_tmpa_seq {##1}
+ }
+ {% new page
+ \acro_determine_page_ranges:NNn
+ \l__acro_tmpa_seq
+ \l__acro_write_pages_tl
+ {##1}
+ }
+ }
+ }
+ \seq_if_empty:NF \l__acro_tmpa_seq
+ {
+ \acro_determine_page_ranges:NNV
+ \l__acro_tmpa_seq
+ \l__acro_write_pages_tl
+ \l__acro_current_page_tl
+ }
+ \tl_use:N \l__acro_write_pages_tl
+ \tl_clear:N \l__acro_write_pages_tl
+ }
+ }
+ {
+ \tl_use:N \l__acro_page_name_tl
+ \pageref{\l__acro_label_prefix_tl #1}
+ }
+ }
+ \seq_clear:N \l__acro_tmpa_seq
+ \seq_clear:N \l__acro_tmpb_seq
+ }
+
+\cs_new:Npn \acro_determine_page_ranges:NNn #1#2#3
+ {
+ \seq_remove_duplicates:N #1
+ % current page:
+ \int_set:Nn \l__acro_tmpa_int { \acro_get_abspage:nnn #3 }
+ \int_set:Nn \l__acro_tmpb_int { \acro_get_page_number:nnn #3 }
+ % last page:
+ \seq_get_right:NN #1 \l__acro_last_page_tl
+ \int_set:Nn \l__acro_tmpc_int
+ { \acro_get_abspage_from:N \l__acro_last_page_tl }
+ \int_set:Nn \l__acro_tmpd_int
+ { \acro_get_page_number_from:N \l__acro_last_page_tl }
+ \bool_lazy_and:nnTF
+ {
+ \int_compare_p:nNn
+ { \l__acro_tmpa_int - \l__acro_tmpc_int }
+ =
+ { \l__acro_tmpb_int - \l__acro_tmpd_int }
+ }
+ {
+ \int_compare_p:nNn
+ { \l__acro_tmpb_int - \l__acro_tmpd_int } = {1}
+ }
+ {% same kind of page numbering, one page ahead
+ % => possible range
+ \seq_put_right:Nn #1 {#3}
+ }
+ {% any possible range ended
+ \tl_put_right:Nn #2 { \acro_page_range_comma: }
+ \int_compare:nNnTF
+ { \seq_count:N #1 } > {2}
+ {% real range
+ \seq_get_left:NN #1 \l__acro_tmpa_tl
+ \tl_put_right:Nx #2 { \acro_get_thepage_from:N \l__acro_tmpa_tl }
+ \bool_if:NTF \l__acro_following_pages_bool
+ { \tl_put_right:Nn #2 { \l__acro_next_pages_tl } }
+ {
+ \tl_put_right:Nn #2 { -- }
+ \seq_get_right:NN #1 \l__acro_tmpa_tl
+ \tl_put_right:Nx #2 { \acro_get_thepage_from:N \l__acro_tmpa_tl }
+ }
+ }
+ {
+ \int_compare:nNnTF
+ { \seq_count:N #1 } = {2}
+ {% range of two pages
+ \seq_get_left:NN #1 \l__acro_tmpa_tl
+ \tl_put_right:Nx #2 { \acro_get_thepage_from:N \l__acro_tmpa_tl }
+ \bool_if:NTF \l__acro_following_page_bool
+ { \tl_put_right:Nn #2 { \l__acro_next_page_tl } }
+ {
+ \tl_put_right:Nn #2 { ,~ }
+ \seq_get_right:NN #1 \l__acro_tmpa_tl
+ \tl_put_right:Nx #2 { \acro_get_thepage_from:N \l__acro_tmpa_tl }
+ }
+ }
+ {% no range at all
+ \seq_get_right:NN #1 \l__acro_tmpa_tl
+ \tl_put_right:Nx #2 { \acro_get_thepage_from:N \l__acro_tmpa_tl }
+ }
+ }
+ \seq_clear:N #1
+ \seq_put_right:Nn #1 {#3}
+ }
+ }
+\cs_generate_variant:Nn \acro_determine_page_ranges:NNn {NNV}
+
+% --------------------------------------------------------------------------
+\DeclareObjectType {acro-page-number} {1}
+
+\DeclareTemplateInterface {acro-page-number} {inline} {1}
+ {
+ display : boolean = true ,
+ punct : boolean = false ,
+ punct-symbol : tokenlist = {,} ,
+ brackets : boolean = false ,
+ brackets-type : tokenlist = () ,
+ space : skip = .333333em plus .166666em minus .111111em
+ }
+
+\DeclareTemplateCode {acro-page-number} {inline} {1}
+ {
+ display = \l__acro_page_display_bool ,
+ punct = \l__acro_page_punct_bool ,
+ punct-symbol = \l__acro_page_punct_tl ,
+ brackets = \l__acro_page_brackets_bool ,
+ brackets-type = \l__acro_page_brackets_tl ,
+ space = \l__acro_page_space_skip
+ }
+ {
+ \AssignTemplateKeys
+ \bool_if:NT \l__acro_page_display_bool
+ {
+ \bool_if:NT \l__acro_page_punct_bool
+ { \tl_use:N \l__acro_page_punct_tl }
+ % \tl_use:N \c_space_tl
+ \dim_compare:nNnF { \l__acro_page_space_skip } = { 0pt }
+ { \skip_horizontal:N \l__acro_page_space_skip }
+ \bool_if:NT \l__acro_page_brackets_bool
+ { \tl_head:N \l__acro_page_brackets_tl }
+ \acro_print_page_numbers:n {#1}
+ \bool_if:NT \l__acro_page_brackets_bool
+ { \tl_tail:N \l__acro_page_brackets_tl }
+ }
+ }
+
+% declare new page styles:
+\cs_new_protected:Npn \acro_declare_page_style:nnn #1#2#3
+ {
+ \DeclareInstance {acro-page-number} {#1} {#2} {#3}
+ \prop_put:Nnn \l__acro_page_styles_prop {#1} {#2}
+ }
+
+% set a page style
+\cs_new_protected:Npn \acro_set_page_style:n #1
+ {
+ \prop_if_in:NnTF \l__acro_page_styles_prop {#1}
+ { \__acro_set_page_style:n {#1} }
+ {
+ \msg_warning:nnnnn {acro} {unknown}
+ {page~ style}
+ {#1}
+ {none}
+ \__acro_set_page_style:n {none}
+ }
+ }
+
+\cs_new_protected:Npn \__acro_set_page_style:n #1
+ {
+ \tl_set:Nn \l__acro_page_instance_tl {#1}
+ \prop_get:NnN \l__acro_page_styles_prop {#1} \l__acro_tmpa_tl
+ }
+
+% --------------------------------------------------------------------------
+% the title of the list:
+\cs_new:Npn \acro_list_title_format:n #1 {#1}
+
+\DeclareObjectType {acro-title} {1}
+
+\DeclareTemplateInterface {acro-title} {sectioning} {1}
+ { name-format : function 1 = #1 }
+
+\DeclareTemplateCode {acro-title} {sectioning} {1}
+ { name-format = \acro_list_title_format:n }
+ {
+ \AssignTemplateKeys
+ \acro_list_title_format:n {#1}
+ }
+
+% set a list heading:
+\cs_new_protected:Npn \acro_set_list_heading:n #1
+ {
+ \prop_if_in:NnTF \l__acro_list_headings_prop {#1}
+ { \__acro_set_list_heading:n {#1} }
+ {
+ \msg_warning:nnnnn {acro} {unknown}
+ {list~ heading}
+ {#1}
+ {section*}
+ \__acro_set_list_heading:n {section*}
+ }
+ }
+
+\cs_new_protected:Npn \__acro_set_list_heading:n #1
+ { \tl_set:Nn \l__acro_list_heading_cmd_tl {#1} }
+
+\cs_new_protected:Npn \acro_declare_list_heading:nn #1#2
+ {
+ \prop_put:Nnn \l__acro_list_headings_prop {#1} {#2}
+ \DeclareInstance {acro-title} {#1} {sectioning}
+ { name-format = #2 {##1} }
+ }
+
+% --------------------------------------------------------------------------
+% typesetting the acronym list
+\DeclareObjectType {acro-list} {2}
+
+% #1: id
+% #2: excluded classes
+\prg_new_protected_conditional:Npnn \acro_if_is_excluded:nn #1#2 {T,F,TF}
+ {
+ \bool_set_false:N \l__acro_is_excluded_bool
+ \tl_if_blank:nF {#2}
+ {
+ \acro_property_get:nnT {#1} {class}
+ {
+ \seq_set_split:NnV \l__acro_tmpa_seq {,} \l__acro_class_tl
+ \clist_map_inline:nn {#2}
+ {
+ \seq_if_in:NnT \l__acro_tmpa_seq {##1}
+ { \bool_set_true:N \l__acro_is_excluded_bool }
+ }
+ }
+ }
+ \bool_if:NTF \l__acro_is_excluded_bool
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+
+% #1: id
+% #2: included classes
+\prg_new_protected_conditional:Npnn \acro_if_is_included:nn #1#2 {T,F,TF}
+ {
+ \bool_set_false:N \l__acro_is_included_bool
+ \tl_if_blank:nTF {#2}
+ { \bool_set_true:N \l__acro_is_included_bool }
+ {
+ \acro_property_get:nnT {#1} {class}
+ {
+ \seq_set_split:NnV \l__acro_tmpa_seq {,} \l__acro_class_tl
+ \clist_map_inline:nn {#2}
+ {
+ \seq_if_in:NnT \l__acro_tmpa_seq {##1}
+ { \bool_set_true:N \l__acro_is_included_bool }
+ }
+ }
+ }
+ \bool_if:NTF \l__acro_is_included_bool
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+
+% #1: id
+\cs_new_protected:Npn \__acro_list_entry_short:n #1
+ {
+ \group_begin:
+ \acro_get:n {#1}
+ \acro_hyper_target:nn
+ {#1}
+ {
+ \acro_acc_supp:nn
+ {#1}
+ {
+ \bool_lazy_and:nnTF
+ { \l__acro_custom_short_format_bool }
+ { \l__acro_override_list_format_bool }
+ { \l__acro_custom_short_format_tl }
+ { \l__acro_list_short_format_tl }
+ { \__acro_property_get:nn {short} {#1} }
+ }
+ }
+ \group_end:
+ }
+
+% #1: id
+\cs_new_protected:Npn \__acro_list_entry_long:n #1
+ {
+ \group_begin:
+ \bool_if:NT \l__acro_capitalize_list_bool
+ { \bool_set_true:N \l__acro_first_upper_bool }
+ \acro_write_long:Vf \l__acro_list_long_format_tl
+ {
+ \prop_if_in:NnTF \l__acro_list_prop {#1}
+ { \__acro_property_get:nn {list} {#1} }
+ { \__acro_property_get:nn {long} {#1} }
+ }
+ \group_end:
+ \bool_if:NT \l__acro_foreign_bool
+ { \acro_get_foreign:n {#1} }
+ \acro_cite_if:Nn \l__acro_citation_all_bool {#1}
+ }
+
+% #1: id
+\cs_new_protected:Npn \__acro_list_entry_extra:n #1
+ {
+ \acro_property_get:nnT {#1} {extra}
+ {
+ \acro_extra_instance:VV
+ \l__acro_extra_instance_tl
+ \l__acro_extra_tl
+ }
+ }
+
+% #1: id
+\cs_new_protected:Npn \__acro_list_entry_page:n #1
+ {
+ \cs_if_exist:cT {acro@#1@once}
+ {
+ \acro_page_number_instance:Vn
+ \l__acro_page_instance_tl
+ {#1}
+ }
+ }
+
+% macro for retrieval of items in the list:
+% #1: property
+% #2: id
+\cs_new_protected:Npn \acro_list_entry:nn #1#2
+ {
+ \str_case:nnF {#1}
+ {
+ {short} { \__acro_list_entry_short:n {#2} }
+ {long} { \__acro_list_entry_long:n {#2} }
+ {extra} { \__acro_list_entry_extra:n {#2} }
+ {page} { \__acro_list_entry_page:n {#2} }
+ }
+ { \__acro_property_get:nn {#1} {#2} }
+ }
+
+% this macro may/should be redefined in templates:
+% #1: short
+% #2: long
+% #3: extra
+% #4: page number(s)
+\cs_new_protected:Npn \acro_print_list_entry:nnnn #1#2#3#4
+ { #1 #2 #3 #4 }
+
+\cs_new_protected:Npn \acro_for_all_acronyms_do:n #1
+ { \prop_map_inline:Nn \l__acro_short_prop {#1} }
+
+% test, if acronyms should be printed or not; needs testing for in/excluded
+% classes and options `only-used' and `single' -- this macro should be used in
+% the template code for retrieving the list
+
+% #1: id
+% #2: included classes
+% #3: excluded classes
+\prg_new_protected_conditional:Npnn \acro_if_entry:nnn #1#2#3 {T,F,TF}
+ {
+ \bool_lazy_or:nnTF
+ {
+ \bool_lazy_and_p:nn
+ { !\l__acro_single_use_bool }
+ { !\l__acro_print_only_used_bool }
+ }
+ {
+ \bool_lazy_and_p:nn
+ { \bool_if_p:c {g__acro_#1_in_list_bool} }
+ {
+ \bool_lazy_or_p:nn
+ {
+ \bool_lazy_and_p:nn
+ { \l__acro_single_use_bool }
+ { \cs_if_exist_p:c {acro@#1@twice} }
+ }
+ {
+ \bool_lazy_all_p:n
+ {
+ { !\l__acro_single_use_bool }
+ { \cs_if_exist_p:c {acro@#1@once} }
+ { \l__acro_print_only_used_bool }
+ }
+ }
+ }
+ }
+ {
+ \acro_if_is_excluded:nnTF {#1} {#3}
+ { \prg_return_false: }
+ {
+ \acro_if_is_included:nnTF {#1} {#2}
+ {
+ \bool_lazy_and:nnTF
+ { \g__acro_use_barriers_bool }
+ { \l__acro_use_barrier_bool }
+ {
+ \acro_if_in_barrier:nxTF {#1}
+ { \int_use:N \g__acro_barrier_int }
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+ { \prg_return_true: }
+ }
+ { \prg_return_false: }
+ }
+ }
+ { \prg_return_false: }
+ }
+
+% this macro is used in templates for fetching all items to be printed; it
+% collects all entries in a tl which then is used where needed
+%
+% #1: tl containing the entries
+% #2: included classes
+% #3: excluded classes
+\cs_new_protected:Npn \acro_build_list_entries:Nnn #1#2#3
+ {
+ \tl_clear:N #1
+ \acro_for_all_acronyms_do:n
+ {% ##1: id; ##2: short form
+ \group_begin:
+ \acro_get:n {##1}
+ \acro_if_entry:nnnT {##1} {#2} {#3}
+ {
+ \tl_gput_right:Nn #1
+ {
+ \acro_print_list_entry:nnnn
+ { \acro_list_entry:nn {short} {##1} }
+ { \acro_list_entry:nn {long} {##1} }
+ { \acro_list_entry:nn {extra} {##1} }
+ { \acro_list_entry:nn {page} {##1} }
+ }
+ }
+ \group_end:
+ }
+ }
+
+% this macro is used in templates for fetching all items to be printed:
+\cs_new_protected:Npn \acro_list_items:nn #1#2
+ {
+ \acro_build_list_entries:Nnn \l__acro_list_entries_tl {#1} {#2}
+ \tl_use:N \l__acro_list_entries_tl
+ }
+
+% --------------------------------------------------------------------------
+% declare templates for the list:
+% `list' template:
+\DeclareTemplateInterface {acro-list} {list} {2}
+ {
+ foreign-sep : tokenlist = {~} ,
+ list : tokenlist = {description} ,
+ reverse : boolean = false ,
+ before : tokenlist = ,
+ after : tokenlist =
+ }
+
+\DeclareTemplateCode {acro-list} {list} {2}
+ {
+ foreign-sep = \l__acro_foreign_sep_tl ,
+ list = \l__acro_list_tl ,
+ reverse = \l__acro_list_reverse_long_extra_bool ,
+ before = \l__acro_list_before_tl ,
+ after = \l__acro_list_after_tl
+ }
+ {
+ \AssignTemplateKeys
+ \bool_set_true:N \l__acro_in_list_bool
+ \acro_activate_hyperref_support:
+ \bool_if:NTF \l__acro_list_reverse_long_extra_bool
+ {
+ \cs_set_protected:Npn \acro_print_list_entry:nnnn ##1##2##3##4
+ { \item [##1] ##3 ##2 ##4 }
+ }
+ {
+ \cs_set_protected:Npn \acro_print_list_entry:nnnn ##1##2##3##4
+ { \item [##1] ##2 ##3 ##4 }
+ }
+ \use:x
+ {
+ \exp_not:V \l__acro_list_before_tl
+ \exp_not:N \begin { \exp_not:V \l__acro_list_tl }
+ \exp_not:n { \acro_list_items:nn {#1} {#2} }
+ \exp_not:N \end { \exp_not:V \l__acro_list_tl }
+ \exp_not:V \l__acro_list_after_tl
+ }
+ }
+
+% `list-of' template:
+\DeclareTemplateInterface {acro-list} {list-of} {2}
+ {
+ foreign-sep : tokenlist = {~} ,
+ style : tokenlist = {toc} ,
+ reverse : boolean = false ,
+ before : tokenlist = ,
+ after : tokenlist =
+ }
+
+\DeclareTemplateCode {acro-list} {list-of} {2}
+ {
+ foreign-sep = \l__acro_foreign_sep_tl ,
+ style = \l__acro_list_of_style ,
+ reverse = \l__acro_list_reverse_long_extra_bool ,
+ before = \l__acro_list_before_tl ,
+ after = \l__acro_list_after_tl
+ }
+ {
+ \AssignTemplateKeys
+ \bool_set_true:N \l__acro_in_list_bool
+ \tl_if_eq:VnT \l__acro_page_instance_tl {none}
+ { \tl_set:Nn \l__acro_page_instance_tl {plain} }
+ \tl_set:Nn \l__acro_page_name_tl {}
+ \tl_set:Nn \l__acro_pages_name_tl {}
+ \acro_activate_hyperref_support:
+ \str_case:Vn \l__acro_list_of_style
+ {
+ {toc}
+ { % similar to the table of contents
+ \bool_if:NTF \l__acro_list_reverse_long_extra_bool
+ {
+ \cs_if_exist:NTF \chapter
+ {
+ \cs_set_protected:Npn \acro_print_list_entry:nnnn ##1##2##3##4
+ {
+ \contentsline{chapter}{##1}{}{}
+ \contentsline{section}{##3##2}{##4}{}
+ }
+ }
+ {
+ \cs_set_protected:Npn \acro_print_list_entry:nnnn ##1##2##3##4
+ {
+ \contentsline{section}{##1}{}{}
+ \contentsline{subsection}{##3##2}{##4}{}
+ }
+ }
+ }
+ {
+ \cs_if_exist:NTF \chapter
+ {
+ \cs_set_protected:Npn \acro_print_list_entry:nnnn ##1##2##3##4
+ {
+ \contentsline{chapter}{##1}{}{}
+ \contentsline{section}{##2##3}{##4}{}
+ }
+ }
+ {
+ \cs_set_protected:Npn \acro_print_list_entry:nnnn ##1##2##3##4
+ {
+ \contentsline{section}{##1}{}{}
+ \contentsline{subsection}{##2##3}{##4}{}
+ }
+ }
+ }
+ }
+ {lof}
+ { % similar to the list of figures
+ \cs_set_protected:Npn \l@acro
+ { \@dottedtocline {1} {1.5em} {\l__acro_short_width_dim} }
+ \bool_if:NTF \l__acro_list_reverse_long_extra_bool
+ {
+ \cs_set_protected:Npn \acro_print_list_entry:nnnn ##1##2##3##4
+ { \contentsline{acro}{\numberline{##1}{##3##2}}{##4}{} }
+ }
+ {
+ \cs_set_protected:Npn \acro_print_list_entry:nnnn ##1##2##3##4
+ { \contentsline{acro}{\numberline{##1}{##2##3}}{##4}{} }
+ }
+ }
+ }
+ \use:x
+ {
+ \exp_not:V \l__acro_list_before_tl
+ \exp_not:n { \acro_list_items:nn {#1} {#2} }
+ \exp_not:V \l__acro_list_before_tl
+ }
+ }
+
+% `table' template:
+\DeclareTemplateInterface {acro-list} {table} {2}
+ {
+ table : tokenlist = tabular ,
+ table-spec : tokenlist = lp{.7\linewidth} ,
+ foreign-sep : tokenlist = {~} ,
+ reverse : boolean = false ,
+ before : tokenlist = ,
+ after : tokenlist =
+ }
+
+\DeclareTemplateCode {acro-list} {table} {2}
+ {
+ table = \l__acro_list_table_tl ,
+ table-spec = \l__acro_list_table_spec_tl ,
+ foreign-sep = \l__acro_foreign_sep_tl ,
+ reverse = \l__acro_list_reverse_long_extra_bool ,
+ before = \l__acro_list_before_tl ,
+ after = \l__acro_list_after_tl
+ }
+ {
+ \AssignTemplateKeys
+ \acro_activate_hyperref_support:
+ \bool_if:NTF \l__acro_list_reverse_long_extra_bool
+ {
+ \cs_set_protected:Npn \acro_print_list_entry:nnnn ##1##2##3##4
+ { ##1 & ##3 ##2 ##4 \tabularnewline }
+ }
+ {
+ \cs_set_protected:Npn \acro_print_list_entry:nnnn ##1##2##3##4
+ { ##1 & ##2 ##3 ##4 \tabularnewline }
+ }
+ \acro_build_list_entries:Nnn \l__acro_list_entries_tl {#1} {#2}
+ \use:x
+ {
+ \exp_not:V \l__acro_list_before_tl
+ \exp_not:N \begin { \exp_not:V \l__acro_list_table_tl }
+ { \exp_not:V \l__acro_list_table_spec_tl }
+ \exp_not:V \l__acro_list_entries_tl
+ \exp_not:N \end { \exp_not:V \l__acro_list_table_tl }
+ \exp_not:V \l__acro_list_after_tl
+ }
+ }
+
+% `extra-table' template:
+\DeclareTemplateInterface {acro-list} {extra-table} {2}
+ {
+ table : tokenlist = tabular ,
+ table-spec : tokenlist = llll ,
+ foreign-sep : tokenlist = {~} ,
+ reverse : boolean = false ,
+ before : tokenlist = ,
+ after : tokenlist =
+ }
+
+\DeclareTemplateCode {acro-list} {extra-table} {2}
+ {
+ table = \l__acro_list_table_tl ,
+ table-spec = \l__acro_list_table_spec_tl ,
+ foreign-sep = \l__acro_foreign_sep_tl ,
+ reverse = \l__acro_list_reverse_long_extra_bool ,
+ before = \l__acro_list_before_tl ,
+ after = \l__acro_list_after_tl
+ }
+ {
+ \AssignTemplateKeys
+ \acro_activate_hyperref_support:
+ \bool_if:NTF \l__acro_list_reverse_long_extra_bool
+ {
+ \cs_set_protected:Npn \acro_print_list_entry:nnnn ##1##2##3##4
+ { ##1 & ##3 & ##2 & ##4 \tabularnewline }
+ }
+ {
+ \cs_set_protected:Npn \acro_print_list_entry:nnnn ##1##2##3##4
+ { ##1 & ##2 & ##3 & ##4 \tabularnewline }
+ }
+ \acro_build_list_entries:Nnn \l__acro_list_entries_tl {#1} {#2}
+ \use:x
+ {
+ \exp_not:V \l__acro_list_before_tl
+ \exp_not:N \begin { \exp_not:V \l__acro_list_table_tl }
+ { \exp_not:V \l__acro_list_table_spec_tl }
+ \exp_not:V \l__acro_list_entries_tl
+ \exp_not:N \end { \exp_not:V \l__acro_list_table_tl }
+ \exp_not:V \l__acro_list_after_tl
+ }
+ }
+
+% --------------------------------------------------------------------------
+% declare new list styles:
+\cs_new_protected:Npn \acro_declare_list_style:nnn #1#2#3
+ {
+ \DeclareInstance {acro-list} {#1} {#2} {#3}
+ \prop_put:Nnn \l__acro_list_styles_prop {#1} {#2}
+ }
+
+% set a list style
+\cs_new_protected:Npn \acro_set_list_style:n #1
+ {
+ \prop_if_in:NnTF \l__acro_list_styles_prop {#1}
+ { \__acro_set_list_style:n {#1} }
+ {
+ \msg_warning:nnnnn {acro} {unknown}
+ {list~ style}
+ {#1}
+ {description}
+ \__acro_set_list_style:n {description}
+ }
+ }
+
+\cs_new_protected:Npn \__acro_set_list_style:n #1
+ {
+ \tl_set:Nn \l__acro_list_instance_tl {#1}
+ \prop_get:NnN \l__acro_list_styles_prop {#1} \l__acro_list_type_tl
+ }
+
+% --------------------------------------------------------------------------
+% case insensitivity of the ID:
+\cs_new:Npn \acro_case_insensitive:n #1
+ {
+ \bool_if:NTF \g__acro_case_sensitive_bool
+ { \tl_to_str:n {#1} }
+ { \str_lowercase:n {#1} }
+ }
+
+\cs_new_protected:Npn \acro_protected_case_insensitive:n #1
+ { \acro_case_insensitive:n {#1} }
+
+\cs_new:Npn \acro_case_insensitive:Nn #1#2
+ { \exp_args:Ne #1 { \acro_case_insensitive:n {#2} } }
+
+\cs_new:Npn \acro_case_insensitive:Nnn #1#2#3
+ { \exp_args:Ne #1 { \acro_case_insensitive:n {#2} } {#3} }
+
+\cs_new_protected:Npn \acro_case_insensitive_command:Nnnn #1#2#3#4
+ { \exp_args:Nnnx #1 {#2} {#3} { \acro_case_insensitive:n {#4} } }
+\cs_generate_variant:Nn \acro_case_insensitive_command:Nnnn {c}
+
+% --------------------------------------------------------------------------
+% automatic typesetting, the internals of \ac:
+% #1: id
+
+\cs_new_protected:Npn \acro_soft_upper:
+ {
+ \bool_if:NF \l__acro_upper_short_bool
+ { \bool_set_false:N \l__acro_first_upper_bool }
+ }
+
+\cs_new_protected:Npn \acro_use:n #1
+ {
+ % get the acronym and the plural settings:
+ \acro_get:n {#1}
+ \acro_is_used:nTF {#1}
+ {
+ \acro_soft_upper:
+ % this is not the first time
+ \acro_write_indefinite:nn {#1} {short}
+ \acro_write_compact:nn {#1} {short}
+ \acro_after:n {#1}
+ }
+ {
+ % this is the first time
+ \bool_gset_true:c { g__acro_#1_first_use_bool }
+ \acro_if_is_single:nTF {#1}
+ { \acro_single:n {#1} }
+ { \acro_first_instance:nV {#1} \l__acro_long_tl }
+ }
+ }
+
+% single appearances:
+\cs_new_protected:Npn \acro_single:n #1
+ {
+ \acro_cite:
+ \acro_single_form:nV {#1} \l__acro_single_form_tl
+ \acro_after:n {#1}
+ }
+
+% #1: ID
+% #2: long|first|<other>
+\cs_new_protected:Npn \acro_single_form:nn #1#2
+ {
+ \acro_write_indefinite:nn {#1} {#2}
+ \str_case:nnF {#2}
+ {
+ {long} {
+ \tl_if_blank:VT \l__acro_single_format_tl
+ {
+ \bool_if:NTF \l__acro_custom_long_format_bool
+ {
+ \tl_set_eq:NN
+ \l__acro_single_format_tl
+ \l__acro_custom_long_format_tl
+ }
+ {
+ \tl_set_eq:NN
+ \l__acro_single_format_tl
+ \l__acro_long_format_tl
+ }
+ }
+ \tl_if_blank:VT \l__acro_single_tl
+ { \tl_set_eq:NN \l__acro_single_tl \l__acro_long_tl }
+ % BUG: should that be \acro_write_expanded:nn ?
+ % \acro_write_expanded:nnn {#1} {#2} {\l__acro_single_tl}
+ \acro_write_long:VV \l__acro_single_format_tl \l__acro_single_tl
+ \acro_endings:nn {#1} {single}
+ \l__acro_long_post_tl
+ }
+ {first} {
+ \tl_if_blank:VF \l__acro_single_format_tl
+ {
+ \tl_set_eq:NN
+ \l__acro_first_long_format_tl
+ \l__acro_single_format_tl
+ }
+ \tl_if_blank:VT \l__acro_single_tl
+ { \tl_set_eq:NN \l__acro_single_tl \l__acro_long_tl }
+ \acro_first_instance:nV {#1} \l__acro_single_tl
+ }
+ }
+ { % other (e.g. short)
+ \acro_soft_upper:
+ \tl_if_blank:VF \l__acro_single_tl
+ { \tl_set_eq:cN {l__acro_#2_tl} \l__acro_single_tl }
+ \tl_if_blank:VF \l__acro_single_format_tl
+ { \tl_set_eq:cN {l__acro_#2_format_tl} \l__acro_single_format_tl }
+ \acro_write_compact:nn {#1} {#2}
+ }
+ }
+\cs_generate_variant:Nn \acro_single_form:nn {nV}
+
+\prg_new_conditional:Npnn \acro_if_is_single:n #1 { p,T,TF }
+ {
+ \bool_lazy_or:nnTF
+ { !\l__acro_single_use_bool }
+ { \cs_if_exist_p:c {acro@#1@twice} }
+ { \prg_return_false: }
+ { \prg_return_true: }
+ }
+
+\cs_new_protected:Npn \acro_use_acronym:n #1
+ { \use:c {bool_set_#1:N} \l__acro_mark_as_used_bool }
+
+% --------------------------------------------------------------------------
+% some helpers we'll need more often:
+\prg_new_conditional:Npnn \acro_if_defined:n #1 {p,T,F,TF}
+ {
+ \seq_if_in:NeTF \g__acro_declared_acronyms_seq
+ { \acro_case_insensitive:n {#1} }
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+
+\cs_new_protected:Npn \acro_defined:n #1
+ {
+ \acro_if_defined:nF {#1}
+ { \acro_serious_message:nn {undefined} {#1} }
+ }
+
+% expandably gets property but doesn't transform property name -- internal
+% name is needed
+% #1: property
+% #2: id
+\cs_new:Npn \__acro_property_get:nn #1#2
+ { \prop_item:cn {l__acro_#1_prop} {#2} }
+
+% #1: id
+% #2: property
+% #3: set case
+% #4: not set case
+\prg_new_protected_conditional:Npnn \acro_property_get:nn #1#2 {T,F,TF}
+ {
+ \tl_set:Nn \l__acro_tmpa_tl {#2}
+ \tl_replace_all:Nnn \l__acro_tmpa_tl {-} {_}
+ \prop_get:cncTF
+ {l__acro_ \l__acro_tmpa_tl _prop}
+ {#1}
+ {l__acro_ \l__acro_tmpa_tl _tl}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+
+\cs_new_protected:Npn \acro_property_get:nn #1#2
+ { \acro_property_get:nnTF {#1} {#2} {} {} }
+\cs_generate_variant:Nn \acro_property_get:nn {V}
+
+% within this command one can refer to the current id with `#1'
+\cs_new_protected:Npn \acro_add_action:n #1
+ { \seq_put_right:Nn \l__acro_actions_seq {#1} }
+
+\cs_new_protected:Npn \__acro_get_actions:n #1
+ {
+ \seq_map_inline:Nn \l__acro_actions_seq
+ {
+ \cs_set:Npn \__acro_action:n ####1 {##1}
+ \__acro_action:n {#1}
+ }
+ }
+
+\cs_new_protected:Npn \acro_get:n #1
+ {
+ \bool_if:NF \l__acro_in_list_bool { \leavevmode }
+ \acro_activate_hyperref_support:
+ % short:
+ \acro_property_get:nn {#1} {short}
+ % alt:
+ \acro_property_get:nnF {#1} {alt}
+ { \tl_set_eq:NN \l__acro_alt_tl \l__acro_short_tl }
+ % long:
+ \acro_property_get:nn {#1} {long}
+ % foreign:
+ \acro_property_get:nn {#1} {foreign}
+ % foreign-lang:
+ \acro_property_get:nn {#1} {foreign-lang}
+ % extra:
+ \acro_property_get:nn {#1} {extra}
+ % single:
+ \acro_property_get:nn {#1} {single}
+ % first-style:
+ \acro_property_get:nn {#1} {first-style}
+ % formatting
+ \acro_property_get:nnTF {#1} {long-format}
+ {
+ \tl_set_eq:NN \l__acro_custom_long_format_tl \l__acro_long_format_tl
+ \bool_set_true:N \l__acro_custom_long_format_bool
+ }
+ { \bool_set_false:N \l__acro_custom_long_format_bool }
+ \acro_property_get:nn {#1} {first-long-format}
+ \acro_property_get:nnTF {#1} {format}
+ {
+ \tl_set_eq:NN \l__acro_custom_short_format_tl \l__acro_format_tl
+ \bool_set_true:N \l__acro_custom_short_format_bool
+ }
+ { \bool_set_false:N \l__acro_custom_short_format_bool }
+ \acro_property_get:nnTF {#1} {alt-format}
+ {
+ \tl_set_eq:NN \l__acro_custom_alt_format_tl \l__acro_alt_format_tl
+ \bool_set_true:N \l__acro_custom_alt_format_bool
+ }
+ { \bool_set_false:N \l__acro_custom_alt_format_bool }
+ \acro_property_get:nnTF {#1} {foreign-format}
+ {
+ \tl_set_eq:NN \l__acro_custom_foreign_format_tl \l__acro_foreign_format_tl
+ \bool_set_true:N \l__acro_custom_foreign_format_bool
+ }
+ { \bool_set_false:N \l__acro_custom_foreign_format_bool }
+ \acro_property_get:nn {#1} {single-format}
+ \acro_for_endings_do:n
+ {
+ \bool_if:cT {l__acro_##1_bool}
+ { \__acro_set_ending_for:nnn {##1} {#1} {long} }
+ }
+ \acro_property_get:nnF {#1} {long-post}
+ { \tl_clear:N \l__acro_long_post_tl }
+ \acro_property_get:nnT {#1} {long-pre}
+ { \tl_put_left:NV \l__acro_long_tl \l__acro_long_pre_tl }
+ \__acro_get_actions:n {#1}
+ }
+
+% --------------------------------------------------------------------------
+% plural endings and similar concepts:
+
+\cs_new_protected:Npn \acro_for_endings_do:n #1
+ { \seq_map_inline:Nn \l__acro_endings_seq {#1} }
+
+% #1: ending
+% #2: ID
+\cs_new_protected:Npn \__acro_set_ending:nn #1#2
+ {
+ \bool_if:cT {l__acro_#1_bool}
+ {
+ \__acro_set_ending_for:nnn {#1} {#2} {short}
+ \__acro_set_ending_for:nnn {#1} {#2} {alt}
+ \__acro_set_ending_for:nnn {#1} {#2} {long}
+ \__acro_set_ending_for:nnn {#1} {#2} {foreign} % XXX
+ }
+ }
+
+% this does nothing if a non-existent ending (#1) or non-existent form (#3) is
+% input
+% #1: ending
+% #2: id
+% #3: short|alt|long|foreign
+\cs_new_protected:Npn \__acro_set_ending_for:nnn #1#2#3
+ {
+ \acro_if_ending_form_exist:nnT {#1} {#3}
+ {
+ \bool_if:cTF
+ { c_ \prop_item:cn {l__acro_#3_#1_form_prop} {#2} _bool }
+ { \prop_get:cnc {l__acro_#3_#1_prop} {#2} {l__acro_#3_tl} }
+ { \prop_get:cnc {l__acro_#3_#1_prop} {#2} {l__acro_#3_#1_tl} }
+ }
+ }
+
+\cs_new_protected:Npn \__acro_set_endings:n #1
+ {
+ \acro_for_endings_do:n
+ { \__acro_set_ending:nn {##1} {#1} }
+ }
+
+% #1: id
+% #2: short|alt|…
+\cs_new_protected:Npn \acro_get_ending_form:nn #1#2
+ {
+ \acro_for_endings_do:n
+ {
+ \acro_if_ending_form_exist:nnT {##1} {#2}
+ {
+ \bool_lazy_and:nnT
+ { \use:c {l__acro_##1_bool} }
+ { \use:c { c_ \prop_item:cn {l__acro_#2_##1_form_prop} {#1} _bool } }
+ { \prop_get:cncF {l__acro_#2_##1_prop} {#1} {l__acro_#2_tl} {} }
+ }
+ }
+ }
+
+% #1: id
+% #2: short|alt|…
+\cs_new_protected:Npn \acro_endings:nn #1#2
+ {
+ \group_begin:
+ \str_if_eq:nnTF {#2} {single}
+ {
+ \keys_set:nn {acro}
+ { long-format= \l__acro_single_format_tl }
+ \__acro_endings:nn {#1} {long}
+ }
+ { \__acro_endings:nn {#1} {#2} }
+ \group_end:
+ }
+
+\cs_new_protected:Npn \__acro_endings:nn #1#2
+ {
+ \acro_for_endings_do:n
+ {
+ \__acro_set_ending_for:nnn {##1} {#1} {#2}
+ \bool_if:cT {l__acro_##1_bool}
+ { \__acro_ending_format:nn {#2} { \tl_use:c {l__acro_#2_##1_tl} } }
+ }
+ }
+
+% #1: long|short|alt
+% #2: string
+\cs_new_protected:Npn \__acro_ending_format:nn #1#2
+ {
+ \bool_if:NTF \l__acro_include_endings_format_bool
+ {
+ \str_case:nn {#1}
+ {
+ {long}
+ {
+ \bool_if:NTF \l__acro_custom_long_format_bool
+ { \l__acro_custom_long_format_tl }
+ {
+ \bool_if:NTF \l__acro_first_instance_bool
+ { \l__acro_first_long_format_tl }
+ { \l__acro_long_format_tl }
+ }
+ }
+ {short}
+ {
+ \bool_if:NTF \l__acro_custom_short_format_bool
+ { \l__acro_custom_short_format_tl }
+ { \l__acro_short_format_tl }
+ }
+ {alt}
+ {
+ \bool_if:NTF \l__acro_custom_alt_format_bool
+ { \l__acro_custom_alt_format_tl }
+ { \l__acro_alt_format_tl }
+ }
+ {foreign}
+ {
+ \bool_if:NTF \l__acro_custom_foreign_format_bool
+ { \l__acro_custom_foreign_format_tl }
+ { \l__acro_foreign_format_tl }
+ }
+ }
+ }
+ { \use:n }
+ {#2}
+ }
+
+\prg_new_conditional:Npnn \acro_if_ending_exist:n #1 {p,T,F,TF}
+ {
+ \seq_if_in:NnTF \l__acro_endings_seq {#1}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+
+% #1: ending
+% #2: short|alt|…
+\prg_new_conditional:Npnn \acro_if_ending_form_exist:nn #1#2 {p,T,F,TF}
+ {
+ \cs_if_exist:cTF {l__acro_#2_#1_prop}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+
+% #1: name
+% #2: default short
+% #3: default long
+\cs_new_protected:Npn \acro_provide_ending:nnn #1#2#3
+ {
+ \acro_if_ending_exist:nTF {#1}
+ {
+ \acro_harmless_message:nn {ending-exists} {#1}
+ % short variables
+ \acro_set_ending_variables:nnn {short} {#1} {#2}
+ % alt variables
+ \acro_set_ending_variables:nnn {alt} {#1} {#2}
+ % long variables
+ \acro_set_ending_variables:nnn {long} {#1} {#3}
+ % foreign variables % XXX
+ \acro_set_ending_variables:nnn {foreign} {#1} {#3}
+ }
+ {
+ % registering:
+ \bool_if:NT \g__acro_first_acronym_declared_bool
+ { \acro_serious_message:n {ending-before-acronyms} }
+ \seq_put_right:Nn \l__acro_endings_seq {#1}
+ \bool_new:c {l__acro_#1_bool}
+ % short variables
+ \acro_define_and_set_ending_variables:nnn {short} {#1} {#2}
+ % alt variables
+ \acro_define_and_set_ending_variables:nnn {alt} {#1} {#2}
+ % long variables
+ \acro_define_and_set_ending_variables:nnn {long} {#1} {#3}
+ % foreign variables % XXX
+ \acro_define_and_set_ending_variables:nnn {foreign} {#1} {#3}
+ % define setup command:
+ \tl_set:Nn \l__acro_tmpa_tl {#1}
+ \tl_replace_all:Nnn \l__acro_tmpa_tl {-} {_}
+ \cs_new_protected:cpn {acro_ \l__acro_tmpa_tl :}
+ { \bool_set_true:c {l__acro_#1_bool} }
+ % acronym properties:
+ % short-<ending>:
+ \acro_declare_property:nnn {short_#1} {short-#1}
+ {
+ \prop_put:cnn {l__acro_short_#1_form_prop} {##1} {false}
+ \prop_put:cnx {l__acro_pdfstring_short_#1_prop}
+ {##1} { \prop_item:Nn \l__acro_short_prop {##1} \exp_not:n {##2} }
+ }
+ % short-<ending>-form:
+ \acro_declare_property_generic:nnn {short_#1_form} {short-#1-form}
+ {
+ \__acro_property_check:nn {##1} {short-#1-form}
+ \prop_put:cnn {l__acro_short_#1_form_prop} {##1} {true}
+ \prop_put:cnn {l__acro_short_#1_prop} {##1} {##2}
+ \prop_put:cnn {l__acro_pdfstring_short_#1_prop} {##1} {##2}
+ }
+ % alt-<ending>:
+ \acro_declare_property:nnn {alt_#1} {alt-#1}
+ {
+ \prop_put:cnn {l__acro_alt_#1_form_prop} {##1} {false}
+ \prop_put:cnx {l__acro_pdfstring_alt_#1_prop}
+ {##1} { \prop_item:Nn \l__acro_alt_prop {##1} \exp_not:n {##2} }
+ }
+ % alt-<ending>-form:
+ \acro_declare_property_generic:nnn {alt_#1_form} {alt-#1-form}
+ {
+ \__acro_property_check:nn {##1} {alt-#1-form}
+ \prop_put:cnn {l__acro_alt_#1_form_prop} {##1} {true}
+ \prop_put:cnn {l__acro_alt_#1_prop} {##1} {##2}
+ \prop_put:cnn {l__acro_pdfstring_alt_#1_prop} {##1} {##2}
+ }
+ % long-<ending>:
+ \acro_declare_property:nnn {long_#1} {long-#1}
+ { \prop_put:cnn {l__acro_long_#1_form_prop} {##1} {false} }
+ % long-<ending>-form:
+ \acro_declare_property_generic:nnn {long_#1_form} {long-#1-form}
+ {
+ \__acro_property_check:nn {##1} {long-#1-form}
+ \prop_put:cnn {l__acro_long_#1_form_prop} {##1} {true}
+ \prop_put:cnn {l__acro_long_#1_prop} {##1} {##2}
+ }
+ % foreign-<ending>: % XXX
+ \acro_declare_property:nnn {foreign_#1} {foreign-#1}
+ { \prop_put:cnn {l__acro_foreign_#1_form_prop} {##1} {false} }
+ % foreign-<ending>-form: % XXX
+ \acro_declare_property_generic:nnn {foreign_#1_form} {foreign-#1-form}
+ {
+ \__acro_property_check:nn {##1} {foreign-#1-form}
+ \prop_put:cnn {l__acro_foreign_#1_form_prop} {##1} {true}
+ \prop_put:cnn {l__acro_foreign_#1_prop} {##1} {##2}
+ }
+ % options:
+ % short-<ending>-ending
+ % alt-<ending>-ending
+ % long-<ending>-ending
+ % foreign-<ending>-ending % XXX
+ % <ending>-ending
+ \keys_define:nn {acro}
+ {
+ short-#1-ending .code:n =
+ \bool_if:NT \g__acro_first_acronym_declared_bool
+ { \acro_serious_message:n {ending-before-acronyms} }
+ \tl_set:cn {l__acro_default_short_#1_tl} {##1} ,
+ alt-#1-ending .code:n =
+ \bool_if:NT \g__acro_first_acronym_declared_bool
+ { \acro_serious_message:n {ending-before-acronyms} }
+ \tl_set:cn {l__acro_default_alt_#1_tl} {##1} ,
+ long-#1-ending .code:n =
+ \bool_if:NT \g__acro_first_acronym_declared_bool
+ { \acro_serious_message:n {ending-before-acronyms} }
+ \tl_set:cn {l__acro_default_long_#1_tl} {##1} ,
+ foreign-#1-ending .code:n =
+ \bool_if:NT \g__acro_first_acronym_declared_bool
+ { \acro_serious_message:n {ending-before-acronyms} }
+ \tl_set:cn {l__acro_default_foreign_#1_tl} {##1} ,
+ #1-ending .code:n =
+ \bool_if:NT \g__acro_first_acronym_declared_bool
+ { \acro_serious_message:n {ending-before-acronyms} }
+ \__acro_read_ending_settings:nww {#1} ##1// \acro_stop:
+ }
+ % pdfstrings:
+ % TODO: add long forms:
+ \prop_new:c {l__acro_pdfstring_short_#1_prop}
+ \cs_new:cpn {acro_pdf_string_short_#1:n} ##1
+ {
+ \acro_if_star_gobble:nTF {##1}
+ { \use:e { \prop_item:cn {l__acro_pdfstring_short_#1_prop} } }
+ { \use:e {\prop_item:cn {l__acro_pdfstring_short_#1_prop} {##1} } }
+ }
+ \cs_new:cpn {acpdfstring#1} { \use:c {acro_pdf_string_short_#1:n} }
+ \prop_new:c {l__acro_pdfstring_alt_#1_prop}
+ \cs_new:cpn {acro_pdf_string_alt_#1:n} ##1
+ {
+ \acro_if_star_gobble:nTF {##1}
+ { \prop_item:cn {l__acro_pdfstring_alt_#1_prop} }
+ { \prop_item:cn {l__acro_pdfstring_alt_#1_prop} {##1} }
+ }
+ \cs_new:cpn {acpdfstringalt#1} { \use:c {acro_pdf_string_alt_#1:n} }
+ }
+ }
+
+% #1: short|alt|long
+% #2: ending name
+% #3: default ending
+\cs_new_protected:Npn \acro_define_and_set_ending_variables:nnn #1#2#3
+ {
+ \acro_define_ending_variables:nn {#1} {#2}
+ \acro_set_ending_variables:nnn {#1} {#2} {#3}
+ }
+
+% #1: short|alt|long
+% #2: ending name
+\cs_new_protected:Npn \acro_define_ending_variables:nn #1#2
+ {
+ \prop_new:c {l__acro_#1_#2_prop}
+ \prop_new:c {l__acro_#1_#2_form_prop}
+ \tl_new:c {l__acro_#1_#2_tl}
+ \tl_new:c {l__acro_default_#1_#2_tl}
+ }
+
+% #1: short|alt|long
+% #2: ending name
+% #3: default ending
+\cs_new_protected:Npn \acro_set_ending_variables:nnn #1#2#3
+ { \tl_set:cn {l__acro_default_#1_#2_tl} {#3} }
+
+% #1: ending name
+% #2: short (and long if #4 is blank)
+% #3: long
+\cs_new_protected:Npn \__acro_read_ending_settings:nww #1#2/#3/#4 \acro_stop:
+ {
+ \acro_set_ending_variables:nnn {short} {#1} {#2}
+ \acro_set_ending_variables:nnn {alt} {#1} {#2}
+ \tl_if_blank:nTF {#4}
+ {
+ \acro_set_ending_variables:nnn {long} {#1} {#3}
+ \acro_set_ending_variables:nnn {foreign} {#1} {#3}
+ }
+ {
+ \acro_set_ending_variables:nnn {long} {#1} {#2}
+ \acro_set_ending_variables:nnn {foreign} {#1} {#2}
+ }
+ }
+
+% --------------------------------------------------------------------------
+% enable us to know if the acronym is used only once and provide a different
+% style for that:
+\prg_new_protected_conditional:Npnn \acro_is_used:n #1 { T,F,TF }
+ {
+ \acro_record_barrier:n {#1}
+ \bool_lazy_and:nnTF
+ { \bool_if_p:c {g__acro_#1_used_bool} }
+ {
+ \bool_lazy_or_p:nn
+ {
+ \bool_lazy_and_p:nn
+ { \bool_if_p:c {g__acro_#1_first_use_bool} }
+ { \g__acro_mark_first_as_used_bool }
+ }
+ { !\g__acro_mark_first_as_used_bool }
+ }
+ {
+ \bool_if:NTF \l__acro_mark_as_used_bool
+ {
+ \__acro_aux_file:Nxxxx \acro@used@twice
+ {#1}
+ { \thepage }
+ { \arabic {page} }
+ { \arabic {abspage} }
+ }
+ { \__acro_aux_file:Nxxxx \acro@used@twice {#1} {} {} {} }
+ \prg_return_true:
+ }
+ {
+ \bool_if:NTF \l__acro_mark_as_used_bool
+ {
+ \__acro_aux_file:Nxxxx \acro@used@once
+ {#1}
+ { \thepage }
+ { \arabic {page} }
+ { \arabic {abspage} }
+ \bool_lazy_and:nnT
+ { !\bool_if_p:c {g__acro_#1_label_bool} }
+ { \l__acro_place_label_bool }
+ {
+ \bool_gset_true:c { g__acro_#1_label_bool }
+ \label{\l__acro_label_prefix_tl #1}
+ }
+ \bool_gset_true:c { g__acro_#1_used_bool }
+ }
+ {}
+ % I can't remember why I want an empty first use case for starred
+ % acronyms…
+ % { \__acro_aux_file:Nxxxx \acro@used@once {#1} {} {} {} }
+ \prg_return_false:
+ }
+ }
+
+\cs_new:Npn \acro_is_used:n #1
+ { \acro_is_used:nTF {#1} { } { } }
+
+\cs_new_protected:Npn \__acro_aux_file:Nnnnn #1#2#3#4#5
+ { \iow_shipout:Nn \@auxout { #1 {#2} {#3} {#4} {#5} } }
+\cs_generate_variant:Nn \__acro_aux_file:Nnnnn {Nxxxx}
+
+\cs_new_protected:Npn \__acro_aux_file_now:n #1
+ { \iow_now:Nn \@auxout {#1} }
+\cs_generate_variant:Nn \__acro_aux_file_now:n {x}
+
+% --------------------------------------------------------------------------
+% the commands for the auxiliary file:
+\cs_new_protected:Npn \acro@used@once #1#2#3#4
+ {
+ \cs_gset_nopar:cpn {acro@#1@once} {#1}
+ \bool_gset_true:c {g__acro_#1_in_list_bool}
+ \tl_if_empty:nF {#2#3#4}
+ {
+ % \bool_gset_true:c { g__acro_#1_used_bool }
+ \seq_gput_right:cn {g__acro_#1_pages_seq} { {#2}{#3}{#4} }
+ }
+ }
+\cs_new_protected:Npn \acro@used@twice #1#2#3#4
+ {
+ \cs_gset_nopar:cpn {acro@#1@twice} {#1}
+ \tl_if_empty:nF {#2#3#4}
+ { \seq_gput_right:cn {g__acro_#1_pages_seq} { {#2}{#3}{#4} } }
+ }
+
+\cs_new_protected:Npn \acro@pages #1#2
+ { \tl_gset:cn {g__acro_#1_recorded_pages_tl} {#2} }
+
+\cs_new_protected:Npn \acro@rerun@check
+ {
+ \bool_if:NT \g__acro_rerun_bool
+ {
+ \@latex@warning@no@line
+ {Acronyms~ may~ have~ changed.~ Please~ rerun~ LaTeX}
+ }
+ }
+
+\AtEndDocument
+ {
+ \bool_gset_false:N \g__acro_rerun_bool
+ \cs_gset_protected:Npn \acro@used@once #1#2#3#4
+ {
+ \tl_set:Nn \l__acro_tmpa_tl {#1}
+ \tl_if_eq:cNF {acro@#1@once} \l__acro_tmpa_tl
+ { \bool_gset_true:N \g__acro_rerun_bool }
+ }
+ \cs_gset_protected:Npn \acro@used@twice #1#2#3#4
+ {
+ \tl_set:Nn \l__acro_tmpa_tl {#1}
+ \tl_if_eq:cNF {acro@#1@twice} \l__acro_tmpa_tl
+ { \bool_gset_true:N \g__acro_rerun_bool }
+ }
+ \acro_for_all_acronyms_do:n
+ {
+ \seq_if_empty:cF {g__acro_#1_pages_seq}
+ {
+ \__acro_aux_file_now:x
+ {
+ \acro@pages {#1}
+ { \seq_use:cn {g__acro_#1_pages_seq} {|} } ^^J
+ \acro@barriers {#1}
+ { \seq_use:cn {g__acro_#1_barriers_seq} {,} }
+ }
+ }
+ \acro_check_barriers:n {#1}
+ }
+ \__acro_aux_file_now:n { \acro@rerun@check }
+ }
+
+% if `acro' is deactivated prevent unnecessary errors from aux file:
+\if@filesw
+\AtBeginDocument
+ {
+ \__acro_aux_file_now:n
+ {
+ \providecommand \acro@used@once [4] {} ^^J
+ \providecommand \acro@used@twice [4] {} ^^J
+ \providecommand \acro@pages [2] {} ^^J
+ \providecommand \acro@rerun@check {} ^^J
+ \providecommand \acro@print@list {} ^^J
+ \providecommand \acro@barriers [2] {}
+ }
+ }
+\fi
+
+% --------------------------------------------------------------------------
+% #1: short|alt|long
+% #2: string to be typeset
+\cs_new_protected:Npn \__acro_typeset:nn #1#2
+ {
+ \mode_if_horizontal:F { \leavevmode }
+ \group_begin:
+ \use:x
+ {
+ \bool_if:cTF {l__acro_custom_#1_format_bool}
+ { \exp_not:v {l__acro_custom_#1_format_tl} }
+ { \exp_not:v {l__acro_#1_format_tl} }
+ {#2}
+ }
+ \group_end:
+ }
+
+% typeset the short form:
+% #1: ID
+% #2: short form
+\cs_new_protected:Npn \acro_write_short:nn #1#2
+ {
+ \__acro_make_link:nn {#1}
+ {
+ \__acro_typeset:nn {short}
+ {
+ \bool_if:NTF \l__acro_first_upper_bool
+ { \exp_not:N \__acro_first_upper_case:n { \exp_not:n {#2} } }
+ { \exp_not:n {#2} }
+ }
+ }
+ }
+\cs_generate_variant:Nn \acro_write_short:nn {nV,nv}
+
+% typeset the alternative form:
+% #1: ID
+% #2: alt form
+\cs_new_protected:Npn \acro_write_alt:nn #1#2
+ {
+ \__acro_make_link:nn {#1}
+ {
+ \__acro_typeset:nn {alt}
+ {
+ \bool_lazy_and:nnTF
+ { \l__acro_first_upper_bool }
+ { \l__acro_upper_short_bool }
+ { \exp_not:N \__acro_first_upper_case:n { \exp_not:n {#2} } }
+ { \exp_not:n {#2} }
+ }
+ }
+ }
+\cs_generate_variant:Nn \acro_write_alt:nn {nV,nv}
+
+% typeset a long form:
+% TODO: rethink the formatting mechanism
+% right now a custom format gets applied additionally to the global one
+% although before it
+% #1: format
+% #2: long form
+\cs_new_protected:Npn \acro_write_long:nn #1#2
+ {
+ \__acro_typeset:nn {long}
+ {
+ \exp_not:n {#1}
+ {
+ \bool_if:NTF \l__acro_first_upper_bool
+ { \exp_not:N \__acro_first_upper_case:n { \exp_not:n {#2} } }
+ { \exp_not:n {#2} }
+ }
+ }
+ }
+\cs_generate_variant:Nn \acro_write_long:nn {VV,Vo,Vf,V,v,vv}
+
+\prg_new_conditional:Npnn \acro_if_foreign:n #1 {T,F,TF}
+ {
+ \bool_lazy_and:nnTF
+ { \l__acro_foreign_bool }
+ { \prop_if_in_p:Nn \l__acro_foreign_prop {#1} }
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+
+\cs_new_protected:Npn \acro_foreign_language:nn #1#2 {}
+\AtBeginDocument{
+ \cs_if_exist:NTF \foreignlanguage
+ {
+ \cs_set_protected:Npn \acro_foreign_language:nn #1#2
+ {
+ \tl_if_blank:nTF {#1}
+ {#2}
+ { \foreignlanguage {#1} {#2} }
+ }
+ }
+ {
+ \cs_set_protected:Npn \acro_foreign_language:nn #1#2
+ { \use_ii:nn {#1} {#2} }
+ }
+}
+\cs_generate_variant:Nn \acro_foreign_language:nn {VV}
+
+\cs_new_protected:Npn \acro_write_foreign:n #1
+ {
+ \acro_if_foreign:nT {#1}
+ {
+ \acro_property_get:nnT {#1} {foreign}
+ {
+ \group_begin:
+ \__acro_endings:nn {#1} {foreign}
+ \tl_use:N \l__acro_foreign_format_tl
+ {
+ \acro_foreign_language:VV
+ \l__acro_foreign_lang_tl
+ \l__acro_foreign_tl
+ }
+ \group_end:
+ }
+ }
+ }
+
+\cs_new:Npn \acroenparen #1 { (#1) }
+
+\cs_new_protected:Npn \acro_get_foreign:n #1
+ {
+ \acro_property_get:nnT {#1} {foreign}
+ {
+ \tl_use:N \l__acro_foreign_sep_tl
+ \group_begin:
+ \tl_use:N \l__acro_foreign_list_format_tl
+ {
+ \acro_foreign_language:VV
+ \l__acro_foreign_lang_tl
+ \l__acro_foreign_tl
+ }
+ \group_end:
+ }
+ }
+
+% --------------------------------------------------------------------------
+% #1: id
+% #2: short|alt
+\cs_set_protected:Npn \acro_write_compact:nn #1#2
+ {
+ \acro_get_ending_form:nn {#1} {#2}
+ \acro_acc_supp:nn
+ {#1}
+ {
+ \acro_write_tooltip:nnV
+ {#1}
+ {
+ \use:c {acro_write_#2:nv} {#1} {l__acro_#2_tl}
+ \acro_endings:nn {#1} {#2}
+ }
+ \l__acro_long_tl
+ }
+ }
+
+% TODO: get rid of argument #3?
+% #1: ID
+% #2: long|first-long|list-long|extra
+% #3: long form
+\cs_new_protected:Npn \acro_write_expanded:nnn #1#2#3
+ {
+ \tl_set:Nn \l__acro_tmpa_tl {#2}
+ \tl_replace_all:Nnn \l__acro_tmpa_tl {-} {_}
+ \acro_write_long:vn {l__acro_ \l__acro_tmpa_tl _format_tl} {#3}
+ \acro_endings:nn {#1} {long}
+ \tl_if_in:nnT {#2} {long}
+ { \l__acro_long_post_tl }
+ }
+\cs_generate_variant:Nn \acro_write_expanded:nnn {nnV}
+
+% #1: ID
+% #2: long|first-long|list-long|extra
+\cs_new_protected:Npn \acro_write_expanded:nn #1#2
+ {
+ \tl_set:Nn \l__acro_tmpa_tl {#2}
+ \tl_replace_all:Nnn \l__acro_tmpa_tl {-} {_}
+ \acro_write_long:vv
+ {l__acro_ \l__acro_tmpa_tl _format_tl}
+ {l__acro_ \l__acro_tmpa_tl _tl}
+ \acro_endings:nn {#1} {long}
+ \tl_if_in:nnT {#2} {long}
+ { \l__acro_long_post_tl }
+ }
+
+% #1: id
+\cs_new_protected:Npn \acro_after:n #1
+ {
+ \acro_cite_if:Nn \l__acro_citation_all_bool {#1}
+ \acro_index_if:Nn \l__acro_addto_index_bool {#1}
+ \acro_property_get:nnT {#1} {post}
+ { \tl_use:N \l__acro_post_tl }
+ }
+
+\cs_new_protected:Npn \acro_check_single:n #1
+ {
+ \acro_if_is_single:nT {#1}
+ { \cs_set_eq:NN \acro_hyper_link:nn \use_ii:nn }
+ }
+
+% --------------------------------------------------------------------------
+% #1: id
+\cs_new_protected:Npn \acro_before:n #1
+ {
+ \acro_get:n {#1}
+ \acro_is_used:n {#1}
+ \acro_check_single:n {#1}
+ }
+
+% the standard internals:
+% #1: id
+\cs_new_protected:Npn \acro_short:n #1
+ {
+ \acro_before:n {#1}
+ \acro_write_indefinite:nn {#1} {short}
+ \acro_write_compact:nn {#1} {short}
+ \acro_after:n {#1}
+ }
+
+% get alternative entry:
+% #1: id
+\cs_new_protected:Npn \acro_alt:n #1
+ {
+ \acro_before:n {#1}
+ \acro_alt_error:n {#1}
+ \acro_write_indefinite:nn {#1} {alt}
+ \acro_write_compact:nn {#1} {alt}
+ \acro_after:n {#1}
+ }
+
+% get long entry:
+% #1: id
+\cs_new_protected:Npn \acro_long:n #1
+ {
+ \acro_before:n {#1}
+ \acro_write_indefinite:nn {#1} {long}
+ \acro_write_expanded:nn {#1} {long}
+ \acro_after:n {#1}
+ }
+
+% get foreign entry:
+% #1: id
+\cs_new_protected:Npn \acro_foreign:n #1
+ {
+ \acro_get:n {#1}
+ \tl_if_blank:VF \l__acro_foreign_tl
+ {
+ \acro_is_used:n {#1}
+ \acro_check_single:n {#1}
+ \acro_write_long:VV \l__acro_foreign_format_tl \l__acro_foreign_tl
+ \acro_after:n {#1}
+ }
+ }
+
+% get extra entry:
+% #1: id
+\cs_new_protected:Npn \acro_extra:n #1
+ {
+ \acro_get:n {#1}
+ \tl_if_blank:VF \l__acro_extra_tl
+ {
+ \acro_is_used:n {#1}
+ \acro_check_single:n {#1}
+ \acro_write_long:VV \l__acro_extra_format_tl \l__acro_extra_tl
+ \acro_after:n {#1}
+ }
+ }
+
+% output like the first time:
+% #1: id
+\cs_new_protected:Npn \acro_first:n #1
+ {
+ \bool_gset_true:c {g__acro_#1_first_use_bool}
+ \acro_before:n {#1}
+ \acro_first_instance:nV {#1} \l__acro_long_tl
+ }
+
+% output like the first time with own long version:
+% #1: id
+% #2: instead of long entry
+\cs_new_protected:Npn \acro_first_like:nn #1#2
+ {
+ \bool_gset_true:c {g__acro_#1_first_use_bool}
+ \acro_before:n {#1}
+ \acro_first_instance:nn {#1} {#2}
+ }
+
+% ----------------------------------------------------------------------------
+% citations:
+\cs_new:Npn \__acro_citation_cmd:w { \cite }
+\cs_new:Npn \__acro_group_citation_cmd:w { \cite }
+
+% #1 pre
+% #2 post
+% #3 key
+\cs_new:Npn \__acro_cite:nnn #1#2#3
+ {
+ \quark_if_no_value:nTF {#1}
+ { \__acro_citation_cmd:w {#3} }
+ {
+ \quark_if_no_value:nTF {#2}
+ { \__acro_citation_cmd:w [#1] {#3} }
+ { \__acro_citation_cmd:w [#1] [#2] {#3} }
+ }
+ }
+\cs_generate_variant:Nn \__acro_cite:nnn {VVV}
+
+\cs_new_protected:Npn \acro_cite:n #1
+ {
+ \acro_property_get:nnT {#1} {before-citation}
+ { \acro_no_break: \l__acro_before_citation_tl }
+ \prop_get:NnNT \l__acro_citation_prop {#1} \l__acro_tmpa_tl
+ {
+ \prop_get:NnN \l__acro_citation_pre_prop {#1} \l__acro_tmpb_tl
+ \prop_get:NnN \l__acro_citation_post_prop {#1} \l__acro_tmpc_tl
+ \acro_no_break:
+ \tl_use:N \l__acro_citation_connect_tl
+ \__acro_cite:VVV
+ \l__acro_tmpb_tl
+ \l__acro_tmpc_tl
+ \l__acro_tmpa_tl
+ }
+ \acro_property_get:nnT {#1} {after-citation}
+ { \acro_no_break: \l__acro_after_citation_tl }
+ }
+
+\cs_new_protected:Npn \acro_group_cite:n #1
+ {
+ \group_begin:
+ \cs_set_eq:NN \__acro_citation_cmd:w \__acro_group_citation_cmd:w
+ \tl_set_eq:NN
+ \l__acro_citation_connect_tl
+ \l__acro_between_group_connect_citation_tl
+ \acro_cite_if:Nn \l__acro_citation_first_bool {#1}
+ \group_end:
+ }
+
+\cs_new_protected:Npn \acro_cite_if:Nn #1#2
+ { \bool_if:NT #1 { \acro_cite:n {#2} } }
+
+% ----------------------------------------------------------------------------
+% indexing:
+\cs_new_protected:Npn \acro_index_if:Nn #1#2
+ {
+ \bool_lazy_and:nnT {#1} { \l__acro_mark_as_used_bool }
+ {
+ \prop_get:NnN \l__acro_index_cmd_prop {#2} \l__acro_tmpa_tl
+ \prop_get:NnN \l__acro_index_sort_prop {#2} \l__acro_tmpb_tl
+ \prop_get:NnN \l__acro_index_prop {#2} \l__acro_tmpc_tl
+ \__acro_index:VnVV
+ \l__acro_tmpa_tl
+ {#2}
+ \l__acro_tmpb_tl
+ \l__acro_tmpc_tl
+ }
+ }
+
+\cs_new:Npn \__acro_index_cmd:n { \index }
+
+% #1: cmd
+% #2: key
+% #3: sort
+% #4: replace
+\cs_new_protected:Npn \__acro_index:nnnn #1#2#3#4
+ {
+ \prop_get:NnNF \l__acro_short_prop {#2} \l__acro_index_short_tl {}
+ \prop_get:NnNF \l__acro_format_prop {#2} \l__acro_index_format_tl {}
+ \quark_if_no_value:VTF \l__acro_index_format_tl
+ { \tl_set:Nn \l__acro_tmpa_tl { \l__acro_short_format_tl \l__acro_index_short_tl } }
+ { \tl_set:Nn \l__acro_tmpa_tl { \l__acro_index_format_tl \l__acro_index_short_tl } }
+ \quark_if_no_value:nF {#1}
+ { \cs_set:Npn \__acro_index_cmd:n {#1} }
+ \quark_if_no_value:nTF {#4}
+ {
+ \quark_if_no_value:nTF {#3}
+ { \__acro_index_cmd:n { #2 @ { \l__acro_tmpa_tl } } }
+ { \__acro_index_cmd:n { #3 @ { \l__acro_tmpa_tl } } }
+ }
+ { \__acro_index_cmd:n {#4} }
+ }
+\cs_generate_variant:Nn \__acro_index:nnnn {VnVV}
+
+% ----------------------------------------------------------------------------
+% accessability support
+\cs_new_eq:NN \acro_acc_supp:nn \use_ii:nn
+
+\cs_new_protected:Npn \acro_get_acc_supp:nn #1#2
+ {
+ \prop_get:NnNF \l__acro_acc_supp_prop {#1} \l__acro_acc_supp_tl
+ { \prop_get:NnNF \l__acro_short_prop {#1} \l__acro_acc_supp_tl {} }
+ \acro_for_endings_do:n
+ {
+ \bool_if:cT {l__acro_##1_bool}
+ {
+ \tl_put_right:Nv
+ \l__acro_acc_supp_tl
+ {l__acro_short_##1_tl}
+ }
+ }
+ \acro_do_acc_supp:VVn
+ \l__acro_acc_supp_tl
+ \l__acro_acc_supp_options_tl
+ {#2}
+ }
+
+\cs_new:Npn \acro_do_acc_supp:nnn #1#2#3
+ {
+ \BeginAccSupp { ActualText = #1 , #2 }
+ #3
+ \EndAccSupp { }
+ }
+\cs_generate_variant:Nn \acro_do_acc_supp:nnn {VV}
+
+\AtEndPreamble
+ {
+ \bool_if:NT \l__acro_acc_supp_bool
+ {
+ \RequirePackage {accsupp}
+ \cs_set_eq:NN \acro_acc_supp:nn \acro_get_acc_supp:nn
+ }
+ \bool_if:NT \l__acro_tooltip_bool
+ {
+ \RequirePackage {pdfcomment}
+ \cs_if_eq:NNT \__acro_tooltip_cmd:nn \use_i:nn
+ { \cs_set:Npn \__acro_tooltip_cmd:nn { \pdftooltip } }
+ }
+ }
+
+% --------------------------------------------------------------------------
+% tooltips for acronyms
+
+% #1: id
+% #2: printed text
+% #3: tool tip text
+\cs_new_protected:Npn \acro_write_tooltip:nnn #1#2#3
+ {
+ \acro_property_get:nnTF {#1} {tooltip}
+ { \__acro_check_tooltip:nV {#2} \l__acro_tooltip_tl }
+ { \__acro_check_tooltip:nn {#2} {#3} }
+ }
+\cs_generate_variant:Nn \acro_write_tooltip:nnn {nnV}
+
+% #1: printed text
+% #2: tool tip text
+\cs_new_protected:Npn \__acro_check_tooltip:nn #1#2
+ {
+ \bool_if:NTF \l__acro_tooltip_inside_bool
+ {#1}
+ {
+ \bool_set_true:N \l__acro_tooltip_inside_bool
+ \__acro_tooltip_cmd:nn {#1} {#2}
+ }
+ }
+\cs_generate_variant:Nn \__acro_check_tooltip:nn { nV }
+
+% use whatever command you like for creating tooltips here:
+% #1: printed text
+% #2: tool tip text
+\cs_new_eq:NN \__acro_tooltip_cmd:nn \use_i:nn
+
+% --------------------------------------------------------------------------
+% indefinite articles:
+
+% #1: ID
+% #2: short|long|alt
+\cs_new_protected:Npn \acro_write_indefinite:nn #1#2
+ {
+ \bool_if:NT \l__acro_indefinite_bool
+ { \prop_item:cn {l__acro_#2_indefinite_prop} {#1} ~ }
+ \bool_if:NT \l__acro_upper_indefinite_bool
+ {
+ \__acro_first_upper_case:x
+ { \prop_item:cn {l__acro_#2_indefinite_prop} {#1} } ~
+ }
+ }
+
+% --------------------------------------------------------------------------
+% experimental sorting feature:
+
+% the following code is an adaption of expl3 code used for \str_if_eq:NN(TF)
+\sys_if_engine_luatex:TF
+ {
+ \tl_set:Nn \l__acro_tmpa_tl
+ {
+ acro ~ = ~ acro ~ or ~ { ~ } ~
+ function ~ acro.strcmp ~ (A, B) ~
+ if ~ A ~ == ~ B ~ then ~
+ tex.write ("0") ~
+ elseif ~ A ~ < ~ B ~ then ~
+ tex.write ("-1") ~
+ else ~
+ tex.write ("1") ~
+ end ~
+ end
+ }
+ \lua_now:e { \l__acro_tmpa_tl }
+ \cs_new_protected:Npn \acro_strcmp:nn #1#2
+ {
+ \lua_now:e
+ {
+ acro.strcmp
+ (
+ " \__acro_escape_x:n {#1} " ,
+ " \__acro_escape_x:n {#2} "
+ )
+ }
+ }
+ \cs_new:Npn \__acro_escape_x:n #1
+ {
+ \lua_escape:e
+ { \__kernel_tl_to_str:w \use:e { {#1} } }
+ }
+ }
+ { \cs_new_eq:NN \acro_strcmp:nn \tex_strcmp:D }
+
+\AtBeginDocument
+ {
+ \bool_if:NT \l__acro_sort_bool
+ {
+ \cs_new_protected:Npn \acro_sort_prop:NN #1#2
+ {
+ \seq_clear:N \l__acro_tmpa_seq
+ \prop_clear:N \l__acro_tmpa_prop
+ \prop_clear:N \l__acro_tmpb_prop
+ \prop_map_inline:Nn #2
+ {
+ \seq_put_right:Nn \l__acro_tmpa_seq {##2}
+ \prop_put:Nnn \l__acro_tmpa_prop {##1} {##2}
+ }
+ \seq_sort:Nn \l__acro_tmpa_seq
+ {
+ \int_compare:nTF
+ {
+ \acro_strcmp:nn
+ { \str_fold_case:n {##1} }
+ { \str_fold_case:n {##2} }
+ = -1
+ }
+ { \sort_return_same: }
+ { \sort_return_swapped: }
+ }
+ \seq_map_inline:Nn \l__acro_tmpa_seq
+ {
+ \prop_map_inline:Nn \l__acro_tmpa_prop
+ {
+ \str_if_eq:nnT {##1} {####2}
+ {
+ \prop_get:NnN #1 {####1} \l__acro_tmpa_tl
+ \prop_put:NnV \l__acro_tmpb_prop {####1}
+ \l__acro_tmpa_tl
+ }
+ }
+ }
+ \prop_set_eq:NN #1 \l__acro_tmpb_prop
+ }
+ }
+ }
+
+% --------------------------------------------------------------------------
+% regarding list printing:
+% this command ensures that a rerun warning is given when \printacronyms
+% is set the first time. This mechanism doesn't make very much sense,
+% should be replaced by a different and more efficient one
+%
+\cs_new_protected:Npn \acro@print@list
+ { \cs_if_exist:NF \acro@printed@list { \cs_new:Npn \acro@printed@list { printed } } }
+
+% --------------------------------------------------------------------------
+% trailing tokens and what to do when present
+
+\cs_new_protected:Npn \acro_new_trailing_token:n #1
+ { \bool_new:c {l__acro_trailing_#1_bool} }
+\cs_new_protected:Npn \acro_activate_trailing_action:n #1
+ { \bool_set_true:c {l__acro_trailing_#1_bool} }
+\cs_new_protected:Npn \acro_deactivate_trailing_action:n #1
+ { \bool_set_false:c {l__acro_trailing_#1_bool} }
+
+% register a new token but don't activate its action:
+% #1: token
+% #2: name
+\cs_new_protected:Npn \acro_register_trailing_token:Nn #1#2
+ {
+ \prop_put:Nnn \l__acro_trailing_tokens_prop {#2} {#1}
+ \prop_put:Nnn \l__acro_trailing_actions_prop {#1}
+ { \acro_activate_trailing_action:n {#2} }
+ \acro_new_trailing_token:n {#2}
+ }
+
+\cs_new_protected:Npn \acro_for_all_trailing_tokens_do:n #1
+ { \prop_map_inline:Nn \l__acro_trailing_tokens_prop {#1} }
+
+% activate a token:
+\cs_new_protected:Npn \acro_activate_trailing_token:n #1
+ {
+ \prop_get:NnN \l__acro_trailing_tokens_prop {#1} \l__acro_tmpa_tl
+ \tl_put_right:NV \l__acro_trailing_tokens_tl \l__acro_tmpa_tl
+ }
+
+% deactivate a token:
+\cs_new_protected:Npn \acro_deactivate_trailing_token:n #1
+ {
+ \prop_get:NnN \l__acro_trailing_tokens_prop {#1} \l__acro_tmpa_tl
+ \tl_remove_all:NV \l__acro_trailing_tokens_tl \l__acro_tmpa_tl
+ }
+
+% #1: name
+\prg_new_conditional:Npnn \acro_if_trailing_token:n #1 {p,T,F,TF}
+ {
+ \bool_if:cTF {l__acro_trailing_#1_bool}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+
+% #1: csv list of names
+\prg_new_protected_conditional:Npnn \acro_if_trailing_tokens:n #1 {T,F,TF}
+ {
+ \bool_set_false:N \l__acro_trailing_tokens_bool
+ \clist_map_inline:nn {#1}
+ {
+ \bool_if:cT {l__acro_trailing_##1_bool}
+ {
+ \bool_set_true:N \l__acro_trailing_tokens_bool
+ \clist_map_break:
+ }
+ }
+ \bool_if:NTF \l__acro_trailing_tokens_bool
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+
+\cs_new_protected:Npn \aciftrailing { \acro_if_trailing_tokens:nTF }
+
+\cs_new_protected:Npn \__acro_check_trail:N #1
+ {
+ \tl_map_inline:Nn \l__acro_trailing_tokens_tl
+ {
+ \token_if_eq_meaning:NNT #1 ##1
+ { \prop_item:Nn \l__acro_trailing_actions_prop {##1} }
+ }
+ }
+
+% options for activating actions:
+\keys_define:nn {acro}
+ {
+ activate-trailing-tokens .code:n =
+ \clist_map_inline:nn {#1} { \acro_activate_trailing_token:n {##1} } ,
+ deactivate-trailing-tokens .code:n =
+ \clist_map_inline:nn {#1} { \acro_deactivate_trailing_token:n {##1} }
+ }
+
+% ---------------------------------------------------------------------------
+% reset outputs, they'll behave like the first time again (!not like the _only_
+% time!):
+\cs_new_protected:Npn \acro_reset:n #1
+ {
+ \bool_gset_false:c { g__acro_#1_used_bool }
+ \bool_gset_false:c { g__acro_#1_first_use_bool }
+ }
+
+\cs_new_protected:Npn \acro_mark_as_used:n #1
+ {
+ \bool_gset_true:c { g__acro_#1_used_bool }
+ \bool_gset_true:c { g__acro_#1_first_use_bool }
+ \bool_gset_true:c { g__acro_#1_in_list_bool }
+ \if@filesw
+ \__acro_aux_file_now:n { \acro@used@once {#1} {} {} {} }
+ \__acro_aux_file_now:n { \acro@used@twice {#1} {} {} {} }
+ \fi
+ }
+
+\cs_new_protected:Npn \acro_reset_all:
+ { \acro_for_all_acronyms_do:n { \acro_reset:n {##1} } }
+
+% make sure that no acronym is used at the beginning of the document, see
+% issue #81 for reasons why this may be necessary:
+\AfterEndPreamble { \acro_reset_all: }
+
+\cs_new_protected:Npn \acro_mark_all_as_used:
+ { \acro_for_all_acronyms_do:n { \acro_mark_as_used:n {##1} } }
+
+\prg_new_conditional:Npnn \acro_if_acronym_used:n #1 { p,T,F,TF }
+ {
+ \bool_lazy_and:nnTF
+ { \bool_if_p:c {g__acro_#1_used_bool} }
+ { !\acro_if_is_single_p:n {#1} }
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+
+% --------------------------------------------------------------------------
+% acronym barriers: allow local lists of only those acronyms used between two
+% barriers
+
+\keys_define:nn {acro}
+ {
+ use-barriers .bool_gset:N = \g__acro_use_barriers_bool ,
+ use-barriers .initial:n = false ,
+ reset-at-barriers .bool_gset:N = \g__acro_reset_at_barrier_bool ,
+ reset-at-barriers .initial:n = false
+ }
+
+\cs_new_protected:Npn \acro_barrier:
+ {
+ \int_gincr:N \g__acro_barrier_int
+ \bool_if:NT \g__acro_reset_at_barrier_bool
+ { \acro_reset_all: }
+ }
+
+\cs_new_protected:Npn \acro_check_barriers:n #1
+ {
+ \bool_if:NT \g__acro_use_barriers_bool
+ {
+ \tl_set:Nx \l__acro_tmpa_tl
+ { \seq_use:cn {g__acro_#1_barriers_seq} {} }
+ \tl_set:Nx \l__acro_tmpb_tl
+ { \seq_use:cn {g__acro_#1_recorded_barriers_seq} {} }
+ \tl_if_eq:NNF \l__acro_tmpa_tl \l__acro_tmpb_tl
+ {
+ \@latex@warning@no@line
+ {Rerun~to~get~barriers~of~acronym~#1~right}
+ }
+ }
+ }
+
+\cs_new_protected:Npn \acro_record_barrier:n #1
+ {
+ \bool_if:NT \g__acro_use_barriers_bool
+ {
+ \seq_if_in:cxF {g__acro_#1_barriers_seq}
+ { \int_use:N \g__acro_barrier_int }
+ {
+ \seq_gput_right:cx {g__acro_#1_barriers_seq}
+ { \int_use:N \g__acro_barrier_int }
+ }
+ }
+ }
+
+% #1: id
+% #2: barrier number
+\prg_new_protected_conditional:Npnn \acro_if_in_barrier:nn #1#2 {T,F,TF}
+ {
+ \seq_if_in:cnTF {g__acro_#1_recorded_barriers_seq} {#2}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+\cs_generate_variant:Nn \acro_if_in_barrier:nnTF {nx}
+
+\cs_new_protected:Npn \acro@barriers #1#2
+ { \seq_gset_split:cnn {g__acro_#1_recorded_barriers_seq} {,} {#2} }
+
+% --------------------------------------------------------------------------
+% the user commands -- preparation:
+\cs_new_protected:Npn \acro_begin:
+ {
+ \group_begin:
+ \__acro_check_after_end:w
+ }
+
+\cs_new_protected:Npn \__acro_check_after_end:w #1 \acro_end:
+ {
+ \cs_set:Npn \__acro_execute:
+ {
+ \__acro_check_trail:N \l_peek_token
+ #1
+ \acro_end: % this will end the group opened by \acro_begin:
+ }
+ \peek_after:Nw \__acro_execute:
+ }
+
+\cs_new_protected:Npn \acro_end: { \group_end: }
+
+\cs_new_protected:Npn \acro_reset_specials:
+ {
+ \bool_set_false:N \l__acro_indefinite_bool
+ \bool_set_false:N \l__acro_first_upper_bool
+ \bool_set_false:N \l__acro_upper_indefinite_bool
+ \acro_for_endings_do:n { \bool_set_false:c {l__acro_##1_bool} }
+ }
+
+% #1: ID
+% #2: true|false
+\cs_new_protected:Npn \acro_check_acronym:nn #1#2
+ {
+ \acro_defined:n {#1}
+ \acro_use_acronym:n {#2}
+ }
+
+% #1: boolean
+% #2: ID
+\cs_new_protected:Npn \acro_check_and_mark_if:nn #1#2
+ {
+ \bool_lazy_or:nnTF {#1} { !\l__acro_use_acronyms_bool }
+ { \acro_check_acronym:nn {#2} {false} }
+ { \acro_check_acronym:nn {#2} {true} }
+ }
+
+\cs_new_protected:Npn \acro_switch_off:
+ { \bool_set_false:N \l__acro_use_acronyms_bool }
+
+\cs_new_protected:Npn \acro_switch_on:
+ { \bool_set_true:N \l__acro_use_acronyms_bool }
+
+% commands for (re)defining \ac-like macros:
+\cs_new_protected:Npn \acro_define_new_acro_command:NN #1#2
+ {
+ % #1: csname
+ % #2: definition where `#1' refers to the ID
+ \cs_new_protected:Npn #1 ##1##2
+ {
+ \cs_set:Npn \__acro_tmp:n ####1 {##2}
+ \cs_new_protected:cpx
+ {acro_ \__acro_remove_backslash:N ##1 :nnn} ####1####2####3
+ {
+ \acro_begin:
+ \acro_reset_specials:
+ \exp_not:N \tl_if_blank:nF {####2} { \keys_set:nn {acro} {####2} }
+ \acro_check_and_mark_if:nn {####1} {####3}
+ \__acro_tmp:n {####3}
+ \acro_end:
+ }
+ #2 ##1 {sO{}m}
+ {
+ \acro_case_insensitive_command:cnnn
+ {acro_ \__acro_remove_backslash:N ##1 :nnn}
+ {####1}
+ {####2}
+ {####3}
+ }
+ }
+ }
+\cs_generate_variant:Nn \acro_define_new_acro_command:NN {cc}
+\cs_generate_variant:Nn \acro_check_and_mark_if:nn {nx}
+
+% commands for (re)defining \acflike-like macros:
+\cs_new_protected:Npn \acro_define_new_acro_pseudo_command:NN #1#2
+ {
+ % #1: csname
+ % #2: definition where `#1' refers to the ID and `#2' to the pseudo long form
+ \cs_new_protected:Npn #1 ##1##2
+ {
+ \cs_set:Npn \__acro_tmp:nn ####1####2 {##2}
+ \cs_new_protected:cpx
+ {acro_ \__acro_remove_backslash:N ##1 :nnn} ####1####2####3
+ {
+ \acro_begin:
+ \acro_reset_specials:
+ \acro_check_and_mark_if:nn {####1} {####3}
+ \__acro_tmp:nn {####3} {####2}
+ \acro_end:
+ }
+ #2 ##1 {smm}
+ {
+ \acro_case_insensitive_command:cnnn
+ {acro_ \__acro_remove_backslash:N ##1 :nnn}
+ {####1}
+ {####3}
+ {####2}
+ }
+ }
+ }
+\cs_generate_variant:Nn \acro_define_new_acro_pseudo_command:NN {cc}
+
+\clist_map_inline:nn {New,Renew,Declare,Provide}
+ {
+ \acro_define_new_acro_command:cc
+ {#1AcroCommand}
+ {#1DocumentCommand}
+ \acro_define_new_acro_pseudo_command:cc
+ {#1PseudoAcroCommand}
+ {#1DocumentCommand}
+ }
+
+% --------------------------------------------------------------------------
+% user commands -- facilities
+\cs_new_protected:Npn \acro_first_upper:
+ {
+ \bool_if:NTF \l__acro_indefinite_bool
+ {
+ \bool_set_false:N \l__acro_indefinite_bool
+ \bool_set_true:N \l__acro_upper_indefinite_bool
+ }
+ { \bool_set_true:N \l__acro_first_upper_bool }
+ }
+
+\cs_new_protected:Npn \acro_indefinite:
+ {
+ \bool_if:NTF \l__acro_first_upper_bool
+ {
+ \bool_set_true:N \l__acro_upper_indefinite_bool
+ \bool_set_false:N \l__acro_first_upper_bool
+ }
+ { \bool_set_true:N \l__acro_indefinite_bool }
+ }
+
+\cs_new_protected:Npn \acro_cite:
+ {
+ \bool_set_true:N \l__acro_citation_all_bool
+ \bool_set_true:N \l__acro_citation_first_bool
+ }
+
+\cs_new_protected:Npn \acro_no_cite:
+ {
+ \bool_set_false:N \l__acro_citation_all_bool
+ \bool_set_false:N \l__acro_citation_first_bool
+ }
+
+\cs_new_protected:Npn \acro_index:
+ { \bool_set_true:N \l__acro_addto_index_bool }
+
+% similar macros \acro_<ending>: are defined by \acro_provide_ending:nnn
+
+% ---------------------------------------------------------------------------
+% process options:
+\ProcessKeysPackageOptions {acro}
+
+% ---------------------------------------------------------------------------
+% PDF bookmark support
+\cs_new:Npn \acpdfstring
+ { \acro_pdf_string_short:n }
+
+\cs_new:Npn \acpdfstringalt
+ { \acro_pdf_string_alt:n }
+
+\cs_new:Npn \acpdfstringlong
+ { \acro_pdf_string_long:n }
+
+\cs_new:Npn \acpdfstringfirst #1
+ { \acpdfstringlong {#1} ~ ( \acpdfstring {#1} ) }
+
+% TODO: place this somewhere where endings are defined:
+\cs_new:Npn \acpdfstringlongplural
+ { \acro_pdf_string_long_plural:n }
+
+\prg_new_conditional:Npnn \acro_if_star_gobble:n #1 {TF}
+ {
+ \if_meaning:w *#1
+ \prg_return_true:
+ \else:
+ \prg_return_false:
+ \fi:
+ }
+
+\cs_new:Npn \acro_expandable_short:n #1
+ { \use:e { \prop_item:Nn \l__acro_short_prop {#1} } }
+
+\cs_new:Npn \acro_expandable_alt:n #1
+ { \use:e { \prop_item:Nn \l__acro_alt_prop {#1} } }
+
+\cs_new:Npn \acro_expandable_long:n #1
+ { \use:e { \prop_item:Nn \l__acro_long_prop {#1} } }
+
+\cs_new:Npn \acro_expandable_long_plural:n #1
+ {
+ \bool_if:cTF
+ { c_ \prop_item:Nn \l__acro_long_plural_form_prop {#1} _bool }
+ { \use:e { \prop_item:Nn \l__acro_long_plural_prop {#1} } }
+ {
+ \use:e {
+ \prop_item:Nn \l__acro_long_prop {#1}
+ \prop_item:Nn \l__acro_long_plural_prop {#1}
+ }
+ }
+ }
+
+\cs_new:Npn \acro_pdf_string_short:n #1
+ {
+ \acro_if_star_gobble:nTF {#1}
+ { \acro_expandable_short:n }
+ { \acro_expandable_short:n {#1} }
+ }
+
+\cs_new:Npn \acro_pdf_string_alt:n #1
+ {
+ \acro_if_star_gobble:nTF {#1}
+ { \acro_expandable_alt:n }
+ { \acro_expandable_alt:n {#1} }
+ }
+
+\cs_new:Npn \acro_pdf_string_long:n #1
+ {
+ \acro_if_star_gobble:nTF {#1}
+ { \acro_expandable_long:n }
+ { \acro_expandable_long:n {#1} }
+ }
+
+% TODO: place this somewhere where endings are defined:
+\cs_new:Npn \acro_pdf_string_long_plural:n #1
+ {
+ \acro_if_star_gobble:nTF {#1}
+ { \acro_expandable_long_plural:n }
+ { \acro_expandable_long_plural:n {#1} }
+ }
+
+\AtBeginDocument
+ {
+ \@ifpackageloaded {hyperref}
+ {
+ \bool_set_true:N \l__acro_hyperref_loaded_bool
+ \pdfstringdefDisableCommands
+ {
+ \cs_set_eq:NN \ac \acpdfstring
+ \cs_set_eq:NN \Ac \acpdfstring
+ \cs_set_eq:NN \acs \acpdfstring
+ \cs_set_eq:NN \acl \acpdfstringlong
+ \cs_set_eq:NN \Acl \acpdfstringlong
+ \cs_set_eq:NN \acf \acpdfstringfirst
+ \cs_set_eq:NN \Acf \acpdfstringfirst
+ \cs_set_eq:NN \aca \acpdfstringalt
+ \cs_set_eq:NN \acp \acpdfstringplural
+ \cs_set_eq:NN \Acp \acpdfstringplural
+ \cs_set_eq:NN \acsp \acpdfstringplural
+ \cs_set_eq:NN \aclp \acpdfstringlongplural
+ \cs_set_eq:NN \Aclp \acpdfstringlongplural
+ \cs_set_eq:NN \acfp \acpdfstringplural
+ \cs_set_eq:NN \Acfp \acpdfstringplural
+ \cs_set_eq:NN \acap \acpdfstringaltplural
+ }
+ \cs_set_protected:Npn \acro_hyper_page:n #1 { \hyperpage {#1} }
+ } {}
+ }
+
+% --------------------------------------------------------------------------
+% key and order checking
+\msg_new:nnn {acro} {no-id}
+ {
+ Something~ has~ gone~ wrong,~ you've~ probably~ forgotten~ to~ set~ the~
+ acronym~ ID.
+ }
+
+\msg_new:nnn {acro} {before-short}
+ {
+ You've~ set~ the~ property~ `#2'~ before~ the~ `short'~ property~ for~
+ acronym~ `#1'~ but~ it~ needs~ to~ be~ set~ after~ it.
+ }
+
+\msg_new:nnn {acro} {missing}
+ { The~ `#2'~ property~ for~ acronym~ `#1'~ is~ missing. }
+
+\msg_new:nnn {acro} {doubled-property}
+ {
+ It~ seems~ to~ me~ you~ have~ used~ the~ `#2'~ property~ twice~ in~ the~
+ declaration~ of~ acronym~ `#1'.~ If~ you~ haven't~ there's~
+ something~ different~ wrong~ and~ I'm~ lost.~ You~'re~ on~ your~ own~
+ then.
+ }
+
+% #1: acronym
+% #2: property
+\cs_new_protected:Npn \__acro_property_check:nn #1#2
+ {
+ \str_if_empty:NT \l__acro_current_id_str
+ { \acro_serious_message:n {no-id} }
+ \str_if_eq:nnF {#2} {short}
+ {
+ \acro_property_if_set:nnF {#1} {short}
+ {
+ \keys_set:nn {acro/declare-acronym} { short = {#1} }
+ \acro_harmless_message:nn {substitute-short} {#1}
+ }
+ }
+ \acro_property_mark_set:nn {#1} {#2}
+ }
+
+\cs_new_protected:Npn \__acro_first_property_check:nn #1#2
+ {
+ \cs_if_exist:cTF {l__acro_#1_short_set_bool}
+ {
+ \acro_property_if_set:nnT {#1} {short}
+ { \acro_serious_message:nnn {doubled-property} {#1} {#2} }
+ }
+ { \bool_new:c {l__acro_#1_short_set_bool} }
+ \acro_property_mark_set:nn {#1} {short}
+ }
+
+% #1: ID
+% #2: property
+\prg_new_conditional:Npnn \acro_property_if_set:nn #1#2 {T,F,TF}
+ {
+ \bool_if:cTF {l__acro_#1_#2_set_bool}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+
+% #1: ID
+% #2: property
+\cs_new_protected:Npn \acro_property_mark_set:nn #1#2
+ { \bool_set_true:c { l__acro_#1_#2_set_bool } }
+\cs_generate_variant:Nn \acro_property_mark_set:nn {V}
+
+% --------------------------------------------------------------------------
+% the internal property selection functions for \DeclareAcronym:
+
+\cs_new_protected:Npn \acro_for_properties_do:n
+ { \prop_map_inline:Nn \g__acro_properties_prop }
+
+% #1: name in associated cs
+% #2: property name
+% #3: action
+\cs_new_protected:Npn \acro_declare_property_generic:nnn #1#2#3
+ {
+ \prop_clear_new:c {l__acro_#1_prop}
+ \tl_clear_new:c {l__acro_#1_tl}
+ \cs_new_protected:cpn {__acro_declare_#1:nn} ##1##2 {#3}
+ \cs_generate_variant:cn {__acro_declare_#1:nn} {V}
+ \keys_define:nn {acro/declare-acronym}
+ {
+ #2 .code:n =
+ \use:c {__acro_declare_#1:Vn} \l__acro_current_id_str {##1}
+ \acro_property_mark_set:Vn \l__acro_current_id_str {#2}
+ }
+ \prop_gput:Nnn \g__acro_properties_prop {#2} {#1}
+ }
+
+% #1: name in associated cs
+% #2: property name
+% #3: action
+\cs_new_protected:Npn \acro_declare_property:nnn #1#2#3
+ {
+ \acro_declare_property_generic:nnn {#1} {#2}
+ {
+ \__acro_property_check:nn {##1} {#2}
+ \prop_put:cnn {l__acro_#1_prop} {##1} {##2}
+ #3
+ }
+ }
+
+% #1: name in associated cs
+% #2: property name
+\cs_new_protected:Npn \acro_declare_property:nn #1#2
+ { \acro_declare_property:nnn {#1} {#2} {} }
+\cs_generate_variant:Nn \acro_declare_property:nn {V}
+
+\cs_new_protected:Npn \acro_declare_property_simple:n #1
+ {
+ \tl_set:Nn \l__acro_tmpa_tl {#1}
+ \tl_replace_all:Nnn \l__acro_tmpa_tl {-} {_}
+ \acro_declare_property:Vn \l__acro_tmpa_tl {#1}
+ }
+
+% #1: new alias property
+% #2: old property
+\cs_new_protected:Npn \acro_declare_property_alias:nn #1#2
+ {
+ \keys_define:nn {acro/declare-acronym}
+ { #1 .meta:n = { #2 = {##1} } }
+ }
+
+% --------------------------------------------------------------------------
+% declare the properties for \DeclareAcronym:
+% short:
+\acro_declare_property_generic:nnn {short} {short}
+ {
+ \__acro_first_property_check:nn {#1} {short}
+ \prop_put:Nnn \l__acro_short_prop {#1} {#2}
+ \prop_put:Nnn \l__acro_sort_prop {#1} {#1}
+ \prop_put:Nnn \l__acro_index_sort_prop {#1} {#1}
+ \prop_put:Nnn \l__acro_alt_prop {#1} {#2}
+ \prop_put:Nnn \l__acro_pdfstring_short_prop {#1} {#2}
+ \prop_put:Nnn \l__acro_pdfstring_alt_prop {#1} {#2}
+ \acro_for_endings_do:n
+ {
+ \prop_put:cnv {l__acro_short_##1_prop}
+ {#1} {l__acro_default_short_##1_tl}
+ \prop_put:cnx {l__acro_pdfstring_short_##1_prop}
+ {#1} { \exp_not:n {#2} \exp_not:v {l__acro_default_short_##1_tl} }
+ \prop_put:cnn {l__acro_short_##1_form_prop} {#1} {false}
+ \prop_put:cnv {l__acro_alt_##1_prop}
+ {#1} {l__acro_default_alt_##1_tl}
+ \prop_put:cnx {l__acro_pdfstring_alt_##1_prop}
+ {#1} { \exp_not:n {#2} \exp_not:v {l__acro_default_short_##1_tl} }
+ \prop_put:cnn {l__acro_alt_##1_form_prop} {#1} {false}
+ }
+ \prop_put:NnV \l__acro_short_indefinite_prop
+ {#1} \l__acro_default_indefinite_tl
+ \prop_put:NnV \l__acro_alt_indefinite_prop
+ {#1} \l__acro_default_indefinite_tl
+ }
+
+% long:
+\acro_declare_property:nnn {long} {long}
+ {
+ \prop_put:NnV \l__acro_long_indefinite_prop
+ {#1}
+ \l__acro_default_indefinite_tl
+ \acro_for_endings_do:n
+ {
+ \prop_put:cnn {l__acro_long_##1_form_prop} {#1} {false}
+ \acro_property_if_set:nnF {#1} {long-##1}
+ { \prop_put:cnv {l__acro_long_##1_prop} {#1} {l__acro_default_long_##1_tl} }
+ \prop_put:cnn {l__acro_foreign_##1_form_prop} {#1} {false}
+ \acro_property_if_set:nnF {#1} {foreign-##1}
+ { \prop_put:cnv {l__acro_foreign_##1_prop} {#1} {l__acro_default_foreign_##1_tl} }
+ }
+ }
+
+\acro_declare_property_simple:n {first-style}
+
+% list:
+\acro_declare_property_simple:n {list}
+
+% defines `short-plural', `long-plural' and `long-plural-form' as well as the
+% options `plural-ending', `short-plural-ending' and `long-plural-ending':
+% \ProvideAcroEnding {plural} {s} {s}
+
+% short indefinite article:
+\acro_declare_property_simple:n {short-indefinite}
+
+% long indefinite article:
+\acro_declare_property_simple:n {long-indefinite}
+
+% pre long:
+\acro_declare_property_simple:n {long-pre}
+
+% post long:
+\acro_declare_property_simple:n {long-post}
+
+% post:
+\acro_declare_property_simple:n {post}
+
+% sort:
+\acro_declare_property:nnn {sort} {sort}
+ {
+ \acro_property_if_set:nnF {#1} {index-sort}
+ { \prop_put:Nnn \l__acro_index_sort_prop {#1} {#2} }
+ }
+
+% alternative:
+\acro_declare_property:nnn {alt} {alt}
+ {
+ \prop_put:Nnn \l__acro_pdfstring_alt_prop {#1} {#2}
+ \prop_put:NnV \l__acro_alt_indefinite_prop
+ {#1} \l__acro_default_indefinite_tl
+ }
+
+\cs_set_protected:Npn \acro_alt_error:n #1
+ {
+ \acro_property_if_set:nnF {#1} {alt}
+ { \acro_harmless_message:nn {no-alternative} {#1} }
+ }
+
+% alt. indefinite article:
+\acro_declare_property_simple:n {alt-indefinite}
+
+% foreign:
+\acro_declare_property_simple:n {foreign}
+
+% foreign-lang:
+\acro_declare_property_simple:n {foreign-lang}
+
+% format:
+\acro_declare_property_simple:n {format}
+
+% short format:
+\acro_declare_property_alias:nn {short-format} {format}
+
+% alt format:
+\acro_declare_property_simple:n {alt-format}
+
+% long format:
+\acro_declare_property_simple:n {long-format}
+
+% first long format:
+\acro_declare_property_simple:n {first-long-format}
+
+% pdfstring -- currently needs to be done `by hand':
+\cs_new_protected:Npn \__acro_declare_pdfstring:nw #1#2/#3/#4 \acro_stop:
+ {
+ \__acro_property_check:nn {#1} {pdfstring}
+ \prop_put:Nnx \l__acro_pdfstring_short_prop {#1} {#2}
+ \acro_for_endings_do:n
+ {
+ \tl_if_blank:nTF {#4}
+ {
+ \prop_put:cnx {l__acro_pdfstring_short_##1_prop}
+ {#1} { \exp_not:n {#2} \exp_not:v {l__acro_default_short_##1_tl} }
+ }
+ {
+ \prop_put:cnn {l__acro_pdfstring_short_##1_prop}
+ {#1} {#2#3}
+ }
+ }
+ }
+\cs_generate_variant:Nn \__acro_declare_pdfstring:nw {V}
+
+\keys_define:nn {acro/declare-acronym}
+ {
+ pdfstring .code:n =
+ \__acro_declare_pdfstring:Vw \l__acro_current_id_str #1 // \acro_stop:
+ }
+
+\cs_new_protected:Npn \__acro_declare_pdfstring_alt:nw #1#2/#3/#4 \acro_stop:
+ {
+ \__acro_property_check:nn {#1} {pdfstring-alt}
+ \prop_put:Nnn \l__acro_pdfstring_alt_prop {#1} {#2}
+ \acro_for_endings_do:n
+ {
+ \tl_if_empty:nTF {#3}
+ {
+ \prop_put:cnx {l__acro_pdfstring_alt_##1_prop}
+ {#1} { \exp_not:n {#2} \exp_not:v {l__acro_default_alt_##1_tl} }
+ }
+ { \prop_put:cnn {l__acro_pdfstring_alt_##1_prop} {#1} {#2#3} }
+ }
+ }
+\cs_generate_variant:Nn \__acro_declare_pdfstring_alt:nw {V}
+
+\keys_define:nn {acro/declare-acronym}
+ {
+ pdfstring-alt .code:n =
+ \__acro_declare_pdfstring_alt:Vw \l__acro_current_id_str #1 // \acro_stop:
+ }
+
+% class:
+\acro_declare_property_simple:n {class}
+
+% extra information:
+\acro_declare_property_simple:n {extra}
+
+% single appearances:
+\acro_declare_property_simple:n {single}
+
+% single format:
+\acro_declare_property_simple:n {single-format}
+
+% acc supp:
+\acro_declare_property:nn {acc_supp} {accsupp}
+
+% tooltip:
+\acro_declare_property_simple:n {tooltip}
+
+% before-citation:
+\acro_declare_property_simple:n {before-citation}
+
+% after-citation:
+\acro_declare_property_simple:n {after-citation}
+
+% citation -- this needs a bit more work:
+\cs_new_protected:Npn \__acro_declare_citation:nw #1#2[#3]#4[#5]#6#7 \acro_stop:
+ {
+ % no options: #1: ID, #2: property, #7 is blank
+ % 1 option: #1: ID, #4: property, #3: option, #5: \q_no_value
+ % 2 options: #1: ID: #6: property, #3: first option, #5: second option
+ \tl_if_blank:nTF {#7}
+ {
+ \__acro_declare_citation_aux:nnnn {#1}
+ { \q_no_value }
+ { \q_no_value }
+ {#2}
+ }
+ {
+ \quark_if_no_value:nTF {#5}
+ {
+ \__acro_declare_citation_aux:nnnx {#1}
+ { \q_no_value }
+ {#3}
+ { \tl_head:n {#4} }
+ }
+ { \__acro_declare_citation_aux:nnnn {#1} {#3} {#5} {#6} }
+ }
+ }
+\cs_generate_variant:Nn \__acro_declare_citation:nw {V}
+
+\keys_define:nn {acro/declare-acronym}
+ {
+ cite .code:n =
+ \__acro_declare_citation:Vw
+ \l__acro_current_id_str #1 [\q_no_value][\q_no_value] \scan_stop: \acro_stop:
+ }
+\prop_gput:Nnn \g__acro_properties_prop {cite} {cite}
+
+% #1: ID
+% #2: pre
+% #3: post
+% #4: citation key
+\cs_new_protected:Npn \__acro_declare_citation_aux:nnnn #1#2#3#4
+ {
+ \__acro_property_check:nn {#1} {cite}
+ \prop_put:Nnn \l__acro_citation_prop {#1} {#4}
+ \quark_if_no_value:nF {#2}
+ { \prop_put:Nnn \l__acro_citation_pre_prop {#1} {#2} }
+ \quark_if_no_value:nF {#3}
+ { \prop_put:Nnn \l__acro_citation_post_prop {#1} {#3} }
+ }
+\cs_generate_variant:Nn \__acro_declare_citation_aux:nnnn {nnnx}
+
+% TODO:
+% add index entries, by default \index{<sort>@<short>}
+% index: overwrite default <sort>@<short> entry completely
+% index-sort: overwrite the <sort> part of <sort>@<short> entry
+
+% need to take care of custom index cmd, at least
+% - \index{}
+% - \index[]{}
+% question is, though, if it should be the same one for all acronyms?
+% I go for yes but would also add a `post' property that allows to add arbitrary
+% TeX code after an acronym is typeset
+
+% index:
+\acro_declare_property_simple:n {index}
+
+% index-sort:
+\acro_declare_property_simple:n {index-sort}
+
+% index-cmd:
+\acro_declare_property_simple:n {index-cmd}
+
+% --------------------------------------------------------------------------
+% acronym macros:
+\cs_new_protected:Npn \__acro_define_acronym_macro:n #1
+ {
+ \bool_if:NT \l__acro_create_macros_bool
+ {
+ \cs_if_exist:cTF {#1}
+ {
+ \bool_if:NTF \l__acro_strict_bool
+ { \cs_set:cpn {#1} { \ac {#1} \acro_xspace: } }
+ { \acro_serious_message:nn {macro} {#1} }
+ }
+ { \cs_new:cpn {#1} { \ac {#1} \acro_xspace: } }
+ }
+ }
+
+% --------------------------------------------------------------------------
+% internal acronym declaring function:
+\cs_new_protected:Npn \acro_declare_acronym:nn #1#2
+ { \acro_case_insensitive:Nnn \__acro_declare_acronym:nn {#1} {#2} }
+
+\cs_new_protected:Npn \__acro_declare_acronym:nn #1#2
+ {
+ \seq_gput_right:Nn \g__acro_declared_acronyms_seq {#1}
+ \bool_gset_true:N \g__acro_first_acronym_declared_bool
+ \str_set:Nn \l__acro_current_id_str {#1}
+ \acro_for_properties_do:n
+ { \bool_new:c {l__acro_ \l__acro_current_id_str _##1_set_bool} }
+ \keys_set:nn {acro/declare-acronym} {#2}
+ \bool_new:c {g__acro_#1_first_use_bool}
+ \bool_new:c {g__acro_#1_used_bool}
+ \bool_new:c {g__acro_#1_label_bool}
+ \bool_new:c {g__acro_#1_in_list_bool}
+ \seq_new:c {g__acro_#1_barriers_seq}
+ \seq_new:c {g__acro_#1_recorded_barriers_seq}
+ \bool_if:NF \l__acro_print_only_used_bool
+ { \bool_gset_true:c {g__acro_#1_in_list_bool} }
+ \__acro_create_page_records:n {#1}
+ \__acro_define_acronym_macro:n {#1}
+ \str_clear:N \l__acro_current_id_str
+ \acro_property_if_set:nnF {#1} {short}
+ { \acro_serious_message:nnn {missing} {#1} {short} }
+ \acro_property_if_set:nnF {#1} {long}
+ { \acro_serious_message:nnn {missing} {#1} {long} }
+ \__acro_log_acronym:n {#1}
+ }
+
+
+% --------------------------------------------------------------------------
+% print the list:
+% #1: list of classes
+% #2: list of excluded classes
+\keys_define:nn {acro/print-acronyms}
+ {
+ include-classes .tl_set:N = \l__acro_included_classes_tl ,
+ exclude-classes .tl_set:N = \l__acro_excluded_classes_tl ,
+ name .tl_set:N = \l__acro_list_name_tl ,
+ heading .code:n = \__acro_set_list_heading:n {#1} ,
+ sort .bool_set:N = \l__acro_sort_bool ,
+ local-to-barriers .bool_set:N = \l__acro_use_barrier_bool
+ }
+
+\cs_new_protected:Npn \acro_print_acronyms:n #1
+ {
+ \group_begin:
+ % this is a cheap trick to prevent the \@noitemerr
+ % if one forgot to delete either the aux file or
+ % remove \printacronyms -- but it's local:
+ \cs_set:Npn \@noitemerr {}
+ \tl_clear:N \l__acro_included_classes_tl
+ \tl_clear:N \l__acro_excluded_classes_tl
+ \tl_if_blank:nF {#1}
+ { \keys_set:nn {acro/print-acronyms} {#1} }
+ \__acro_aux_file_now:n { \acro@print@list }
+ \bool_if:NT \l__acro_sort_bool
+ { \acro_sort_prop:NN \l__acro_short_prop \l__acro_sort_prop }
+ \acro_title_instance:VV
+ \l__acro_list_heading_cmd_tl
+ \l__acro_list_name_tl
+ \cs_if_exist:NTF \acro@printed@list
+ {
+ \acro_list_instance:VVV
+ \l__acro_list_instance_tl
+ \l__acro_included_classes_tl
+ \l__acro_excluded_classes_tl
+ }
+ { \@latex@warning@no@line {Rerun~to~get~acronym~list~right} }
+ \group_end:
+ }
+
+% --------------------------------------------------------------------------
+% language support
+\RequirePackage {translations}
+
+\cs_new_protected:Npn \__acro_declare_translation:www #1 \q_mark #2=#3 \q_stop
+ {
+ \tl_set:Nx \l__acro_tmpa_tl { \tl_trim_spaces:n {#1} }
+ \tl_set:Nx \l__acro_tmpb_tl { \tl_trim_spaces:n {#2} }
+ \tl_if_in:nnT {#3} {=}
+ {} % TODO: misplaced equal sign
+ \tl_set:Nx \l__acro_tmpc_tl { \tl_trim_spaces:n {#3} }
+ \__acro_declare_translation:VVV
+ \l__acro_tmpb_tl
+ \l__acro_tmpa_tl
+ \l__acro_tmpc_tl
+ }
+
+% #1: key
+% #2: lang
+% #3: translation
+\cs_new_protected:Npn \__acro_declare_translation:nnn #1#2#3
+ { \DeclareTranslation {#1} {#2} {#3} }
+\cs_generate_variant:Nn \__acro_declare_translation:nnn {VVV}
+
+% #1: key
+% #2: csv list: { <lang1> = <translation1> , <lang2> = <translation2> }
+\cs_new_protected:Npn \acro_declare_translation:nn #1#2
+ {
+ \clist_map_inline:nn {#2}
+ {
+ \tl_if_blank:nF {##1}
+ { \__acro_declare_translation:www #1 \q_mark ##1 \q_stop }
+ }
+ }
+
+% tokenlists using the translations:
+\tl_set:Nn \l__acro_list_name_tl { \GetTranslation {acronym-list-name} }
+\tl_set:Nn \l__acro_page_name_tl { \GetTranslation {acronym-page-name}\@\, }
+\tl_set:Nn \l__acro_pages_name_tl { \GetTranslation {acronym-pages-name}\@\, }
+\tl_set:Nn \l__acro_next_page_tl { \,\GetTranslation {acronym-next-page}\@ }
+\tl_set:Nn \l__acro_next_pages_tl { \,\GetTranslation {acronym-next-pages}\@ }
+
+% --------------------------------------------------------------------------
+% allow for a configuration file:
+
+\file_if_exist:nT
+ { \l_acro_config_file_name_tl . \l_acro_config_file_extension_tl }
+ {
+ \@onefilewithoptions
+ {\l_acro_config_file_name_tl} [] []
+ \l_acro_config_file_extension_tl
+ }
+
+% --------------------------------------------------------------------------
+% define user functions:
+% document commands:
+\NewDocumentCommand \DeclareAcronym {mm}
+ { \acro_declare_acronym:nn {#1} {#2} }
+
+\NewDocumentCommand \acsetup { m }
+ {
+ \tl_if_blank:nF {#1}
+ { \keys_set:nn {acro} {#1} }
+ \ignorespaces
+ }
+
+\NewDocumentCommand \ProvideAcroEnding {mmm}
+ { \acro_provide_ending:nnn {#1} {#2} {#3} }
+
+\NewDocumentCommand \AcroRegisterTrailing {mm}
+ { \acro_register_trailing_token:Nn #1 {#2} }
+
+\NewDocumentCommand \DeclareAcroTranslation {mm}
+ { \acro_declare_translation:nn {#1} {#2} }
+
+\DeclareExpandableDocumentCommand \acifused { m }
+ { \acro_if_acronym_used:nTF {#1} }
+
+\NewDocumentCommand \acresetall {}
+ { \acro_reset_all: }
+
+\NewDocumentCommand \acuseall {}
+ { \acro_mark_all_as_used: }
+
+\NewDocumentCommand \acreset { > { \SplitList {,} } m }
+ { \ProcessList {#1} { \acro_reset:n } \ignorespaces }
+
+\NewDocumentCommand \acuse { > { \SplitList {,} } m }
+ { \ProcessList {#1} { \acro_mark_as_used:n } \ignorespaces }
+
+\NewDocumentCommand \acfirstupper {m}
+ { \acro_first_upper_case:n {#1} }
+
+\NewExpandableDocumentCommand \aciffirst {+m+m}
+ { \bool_if:NTF \l__acro_first_instance_bool {#1} {#2} }
+
+\NewDocumentCommand \acdot {} { \acro_dot: }
+\NewDocumentCommand \acspace {} { \acro_space: }
+
+\NewDocumentCommand \acbarrier {}
+ { \acro_barrier: }
+
+\NewDocumentCommand \acswitchoff {}
+ { \acro_switch_off: }
+
+\NewDocumentCommand \acswitchon {}
+ { \acro_switch_on: }
+
+\NewDocumentCommand \printacronyms { O{} }
+ { \acro_print_acronyms:n {#1} }
+
+% --------------------------------------------------------------------------
+% styles
+% #1: name
+% #2: template
+% #3: settings
+\NewDocumentCommand \DeclareAcroFirstStyle {mmm}
+ { \acro_declare_first_style:nnn {#1} {#2} {#3} }
+
+\NewDocumentCommand \DeclareAcroExtraStyle {mmm}
+ { \acro_declare_extra_style:nnn {#1} {#2} {#3} }
+
+\NewDocumentCommand \DeclareAcroPageStyle {mmm}
+ { \acro_declare_page_style:nnn {#1} {#2} {#3} }
+
+\NewDocumentCommand \DeclareAcroListHeading {mm}
+ { \acro_declare_list_heading:nn {#1} {#2} }
+
+\NewDocumentCommand \DeclareAcroListStyle {mmm}
+ { \acro_declare_list_style:nnn {#1} {#2} {#3} }
+
+% --------------------------------------------------------------------------
+% endings:
+\ProvideAcroEnding {plural} {s} {s}
+
+% --------------------------------------------------------------------------
+% use acronyms:
+% automatic:
+\NewAcroCommand \ac
+ { \acro_use:n {#1} }
+
+\NewAcroCommand \Ac
+ {
+ \acro_first_upper:
+ \acro_use:n {#1}
+ }
+
+\NewAcroCommand \iac
+ {
+ \acro_indefinite:
+ \acro_use:n {#1}
+ }
+
+\NewAcroCommand \Iac
+ {
+ \acro_first_upper:
+ \acro_indefinite:
+ \acro_use:n {#1}
+ }
+
+\NewAcroCommand \acp
+ {
+ \acro_plural:
+ \acro_use:n {#1}
+ }
+
+\NewAcroCommand \Acp
+ {
+ \acro_plural:
+ \acro_first_upper:
+ \acro_use:n {#1}
+ }
+
+\NewAcroCommand \acsingle
+ {
+ \acro_get:n {#1}
+ \acro_single:n {#1}
+ }
+
+\NewAcroCommand \acpsingle
+ {
+ \acro_get:n {#1}
+ \acro_plural:
+ \acro_single:n {#1}
+ }
+
+\NewAcroCommand \Acsingle
+ {
+ \acro_get:n {#1}
+ \acro_first_upper:
+ \acro_single:n {#1}
+ }
+
+\NewAcroCommand \Acpsingle
+ {
+ \acro_get:n {#1}
+ \acro_first_upper:
+ \acro_plural:
+ \acro_single:n {#1}
+ }
+
+% short:
+\NewAcroCommand \acs
+ { \acro_short:n {#1} }
+
+\NewAcroCommand \Acs
+ {
+ \acro_first_upper:
+ \acro_short:n {#1}
+ }
+
+\NewAcroCommand \iacs
+ {
+ \acro_indefinite:
+ \acro_short:n {#1}
+ }
+
+\NewAcroCommand \Iacs
+ {
+ \acro_first_upper:
+ \acro_indefinite:
+ \acro_short:n {#1}
+ }
+
+\NewAcroCommand \acsp
+ {
+ \acro_plural:
+ \acro_short:n {#1}
+ }
+
+\NewAcroCommand \Acsp
+ {
+ \acro_first_upper:
+ \acro_plural:
+ \acro_short:n {#1}
+ }
+
+% alt:
+\NewAcroCommand \aca
+ { \acro_alt:n {#1} }
+
+\NewAcroCommand \Aca
+ {
+ \acro_first_upper:
+ \acro_alt:n {#1}
+ }
+
+\NewAcroCommand \iaca
+ {
+ \acro_indefinite:
+ \acro_alt:n {#1}
+ }
+
+\NewAcroCommand \Iaca
+ {
+ \acro_first_upper:
+ \acro_indefinite:
+ \acro_alt:n {#1}
+ }
+
+\NewAcroCommand \acap
+ {
+ \acro_plural:
+ \acro_alt:n {#1}
+ }
+
+\NewAcroCommand \Acap
+ {
+ \acro_first_upper:
+ \acro_plural:
+ \acro_alt:n {#1}
+ }
+
+% long:
+\NewAcroCommand \acl
+ { \acro_long:n {#1} }
+
+\NewAcroCommand \Acl
+ {
+ \acro_first_upper:
+ \acro_long:n {#1}
+ }
+
+\NewAcroCommand \iacl
+ {
+ \acro_indefinite:
+ \acro_long:n {#1}
+ }
+
+\NewAcroCommand \Iacl
+ {
+ \acro_first_upper:
+ \acro_indefinite:
+ \acro_long:n {#1}
+ }
+
+\NewAcroCommand \aclp
+ {
+ \acro_plural:
+ \acro_long:n {#1}
+ }
+
+\NewAcroCommand \Aclp
+ {
+ \acro_plural:
+ \acro_first_upper:
+ \acro_long:n {#1}
+ }
+
+% first:
+\NewAcroCommand \acf
+ { \acro_first:n {#1} }
+
+\NewAcroCommand \Acf
+ {
+ \acro_first_upper:
+ \acro_first:n {#1}
+ }
+
+\NewAcroCommand \iacf
+ {
+ \acro_indefinite:
+ \acro_first:n {#1}
+ }
+
+\NewAcroCommand \Iacf
+ {
+ \acro_first_upper:
+ \acro_indefinite:
+ \acro_first:n {#1}
+ }
+
+\NewAcroCommand \acfp
+ {
+ \acro_plural:
+ \acro_first:n {#1}
+ }
+
+\NewAcroCommand \Acfp
+ {
+ \acro_plural:
+ \acro_first_upper:
+ \acro_first:n {#1}
+ }
+
+% first-like:
+\NewPseudoAcroCommand \acflike
+ { \acro_first_like:nn {#1} {#2} }
+
+\NewPseudoAcroCommand \iacflike
+ {
+ \acro_indefinite:
+ \acro_first_like:nn {#1} {#2}
+ }
+
+\NewPseudoAcroCommand \Iacflike
+ {
+ \acro_first_upper:
+ \acro_indefinite:
+ \acro_first_like:nn {#1} {#2}
+ }
+
+\NewPseudoAcroCommand \acfplike
+ {
+ \acro_plural:
+ \acro_first_like:nn {#1} {#2}
+ }
+
+% --------------------------------------------------------------------------
+% first appearance styles:
+\DeclareAcroFirstStyle {default} {inline}
+ { }
+
+\DeclareAcroFirstStyle {reversed} {inline}
+ { reversed = true }
+
+\DeclareAcroFirstStyle {short} {inline}
+ {
+ only-short = true ,
+ brackets = false
+ }
+
+\DeclareAcroFirstStyle {long} {inline}
+ {
+ only-long = true ,
+ brackets = false
+ }
+
+\DeclareAcroFirstStyle {square} {inline}
+ { brackets-type = [] }
+
+\DeclareAcroFirstStyle {plain} {inline}
+ {
+ brackets = false ,
+ between = --
+ }
+
+\DeclareAcroFirstStyle {plain-reversed} {inline}
+ {
+ brackets = false ,
+ between = -- ,
+ reversed = true
+ }
+
+\DeclareAcroFirstStyle {footnote} {note}
+ { }
+
+\DeclareAcroFirstStyle {footnote-reversed} {note}
+ { reversed = true }
+
+\DeclareAcroFirstStyle {sidenote} {note}
+ { note-command = \sidenote {#1} }
+
+\DeclareAcroFirstStyle {sidenote-reversed} {note}
+ {
+ note-command = \sidenote {#1} ,
+ reversed = true
+ }
+
+\DeclareAcroFirstStyle {empty} {note}
+ { use-note = false }
+
+% --------------------------------------------------------------------------
+% extra info appearance styles:
+\DeclareAcroExtraStyle {default} {inline}
+ {
+ brackets = false ,
+ punct = true ,
+ punct-symbol = .
+ }
+
+\DeclareAcroExtraStyle {plain} {inline}
+ {
+ brackets = false ,
+ punct = true ,
+ punct-symbol =
+ }
+
+\DeclareAcroExtraStyle {paren} {inline}
+ {
+ brackets = true ,
+ punct = true ,
+ punct-symbol =
+ }
+
+\DeclareAcroExtraStyle {bracket} {inline}
+ {
+ brackets = true ,
+ punct = true ,
+ punct-symbol = ,
+ brackets-type = []
+ }
+
+\DeclareAcroExtraStyle {comma} {inline}
+ {
+ punct = true,
+ punct-symbol = {,} ,
+ brackets = false
+ }
+
+% --------------------------------------------------------------------------
+% page number appearance styles:
+\DeclareAcroPageStyle {default} {inline}
+ {
+ punct = true ,
+ punct-symbol = .
+ }
+
+\DeclareAcroPageStyle {plain} {inline}
+ { punct = false }
+
+\DeclareAcroPageStyle {comma} {inline}
+ { punct = true }
+
+\DeclareAcroPageStyle {paren} {inline}
+ {
+ brackets=true ,
+ punct-symbol = ~
+ }
+
+\DeclareAcroPageStyle {none} {inline}
+ { display = false }
+
+% --------------------------------------------------------------------------
+% list heading styles:
+\DeclareAcroListHeading {part} {\part}
+\DeclareAcroListHeading {part*} {\part*}
+\DeclareAcroListHeading {chapter} {\chapter}
+\DeclareAcroListHeading {chapter*} {\chapter*}
+\DeclareAcroListHeading {addchap} {\addchap}
+\DeclareAcroListHeading {section} {\section}
+\DeclareAcroListHeading {section*} {\section*}
+\DeclareAcroListHeading {addsec} {\addsec}
+\DeclareAcroListHeading {subsection} {\subsection}
+\DeclareAcroListHeading {subsection*} {\subsection*}
+\DeclareAcroListHeading {subsubsection} {\subsubsection}
+\DeclareAcroListHeading {subsubsection*} {\subsubsection*}
+\DeclareAcroListHeading {none} {\use_none:n}
+
+% --------------------------------------------------------------------------
+% list styles:
+\DeclareAcroListStyle {description} {list}
+ { }
+
+\DeclareAcroListStyle {toc} {list-of}
+ { }
+
+\DeclareAcroListStyle {lof} {list-of}
+ { style = lof }
+
+\DeclareAcroListStyle {tabular} {table}
+ { table = tabular }
+
+\DeclareAcroListStyle {longtable} {table}
+ { table = longtable }
+
+\DeclareAcroListStyle {extra-tabular} {extra-table}
+ { table = tabular }
+
+\DeclareAcroListStyle {extra-longtable} {extra-table}
+ { table = longtable }
+
+\DeclareAcroListStyle {extra-tabular-rev} {extra-table}
+ {
+ table = tabular ,
+ reverse = true
+ }
+
+\DeclareAcroListStyle {extra-longtable-rev} {extra-table}
+ {
+ table = longtable ,
+ reverse = true
+ }
+
+% --------------------------------------------------------------------------
+% register some tokens to be checked for:
+\AcroRegisterTrailing . {dot}
+\AcroRegisterTrailing - {dash}
+\AcroRegisterTrailing \babelhyphen {babel-hyphen}
+
+\acsetup { activate-trailing-tokens = dot }
+
+% some user macros:
+\cs_new_protected:Npn \acro_dot:
+ { \acro_if_trailing_tokens:nF {dot} {.\@} }
+
+\cs_new_protected:Npn \acro_space:
+ { \acro_if_trailing_tokens:nF {dash,babel-hyphen} { \c_space_tl } }
+
+% --------------------------------------------------------------------------
+% translations:
+% list name
+\DeclareAcroTranslation {acronym-list-name}
+ {
+ Fallback = Acronyms ,
+ English = Acronyms ,
+ French = Acronymes ,
+ German = Abk\"urzungen ,
+ Italian = Acronimi ,
+ Portuguese = Acr\'onimos ,
+ Spanish = Siglas ,
+ Catalan = Sigles ,
+ Turkish = K\i saltmalar
+ }
+
+% page name
+\DeclareAcroTranslation {acronym-page-name}
+ {
+ Fallback = p. ,
+ English = p. ,
+ German = S. ,
+ Portuguese = p.
+ }
+
+% pages name
+\DeclareAcroTranslation {acronym-pages-name}
+ {
+ Fallback = pp. ,
+ English = pp. ,
+ German = S. ,
+ Portuguese = pp.
+ }
+
+% following page
+\DeclareAcroTranslation {acronym-next-page}
+ {
+ Fallback = f. ,
+ English = f. ,
+ German = f. ,
+ Portuguese = s.
+ }
+
+% following pages
+\DeclareAcroTranslation {acronym-next-pages}
+ {
+ Fallback = ff. ,
+ English = ff. ,
+ German = ff. ,
+ Portuguese = ss.
+ }
+
+% --------------------------------------------------------------------------
+\file_input_stop:
diff --git a/macros/latex/contrib/acro/examples/acro.example.acflike.pdf b/macros/latex/contrib/acro/examples/acro.example.acflike.pdf
new file mode 100644
index 0000000000..59494c9916
--- /dev/null
+++ b/macros/latex/contrib/acro/examples/acro.example.acflike.pdf
Binary files differ
diff --git a/macros/latex/contrib/acro/examples/acro.example.acflike.tex b/macros/latex/contrib/acro/examples/acro.example.acflike.tex
new file mode 100644
index 0000000000..40e1037181
--- /dev/null
+++ b/macros/latex/contrib/acro/examples/acro.example.acflike.tex
@@ -0,0 +1,17 @@
+\documentclass{article}
+\usepackage[ngerman]{babel}
+\usepackage{acro}
+\acsetup{format/long=\itshape}
+
+\DeclareAcronym{cd}{short = CD, long = Compact Disc}
+
+\RenewAcroCommand\acflike{mm}{%
+ \acroformat{long}{#2} (\UseAcroTemplate{short}{#1})%
+}
+
+\begin{document}
+
+\ac{cd} \par
+\acflike{cd}{Rohling}
+
+\end{document}
diff --git a/macros/latex/contrib/acro/examples/acro.example.basic.pdf b/macros/latex/contrib/acro/examples/acro.example.basic.pdf
new file mode 100644
index 0000000000..670f91f97c
--- /dev/null
+++ b/macros/latex/contrib/acro/examples/acro.example.basic.pdf
Binary files differ
diff --git a/macros/latex/contrib/acro/example_two.tex b/macros/latex/contrib/acro/examples/acro.example.basic.tex
index 7b188dc324..aa53ce2f52 100644
--- a/macros/latex/contrib/acro/example_two.tex
+++ b/macros/latex/contrib/acro/examples/acro.example.basic.tex
@@ -1,18 +1,15 @@
-% arara: pdflatex
-% arara: pdflatex
% this file is an adapted version of acrotest.tex shipped out
% with the `acronym' package
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[english]{babel}
\usepackage[colorlinks]{hyperref}
-\usepackage{acro}
+\usepackage[version=3]{acro}
\acsetup{
- sort = true ,
- page-style = comma ,
- extra-style = paren ,
- hyperref =true
+ make-links ,
+ pages / display = first ,
+ pages / fill = {, }
}
\DeclareAcronym{CDMA}{
diff --git a/macros/latex/contrib/acro/examples/acro.example.issue-109.pdf b/macros/latex/contrib/acro/examples/acro.example.issue-109.pdf
new file mode 100644
index 0000000000..906d959a8f
--- /dev/null
+++ b/macros/latex/contrib/acro/examples/acro.example.issue-109.pdf
Binary files differ
diff --git a/macros/latex/contrib/acro/examples/acro.example.issue-109.tex b/macros/latex/contrib/acro/examples/acro.example.issue-109.tex
new file mode 100644
index 0000000000..2005b5245a
--- /dev/null
+++ b/macros/latex/contrib/acro/examples/acro.example.issue-109.tex
@@ -0,0 +1,25 @@
+\documentclass{article}
+\usepackage[enable-debug]{expl3}
+\usepackage{hyperref}
+\usepackage[version=3]{acro}
+
+\acsetup{
+ pages/display=all ,
+ pages/seq=false
+}
+
+\DeclareAcronym{ny}{
+ short = NY ,
+ long = New York ,
+}
+
+\NewAcroCommand\aci{m}{}
+
+\begin{document}
+
+no\aci{ny}thing\newpage
+\ac{ny}
+
+\printacronyms
+
+\end{document}
diff --git a/macros/latex/contrib/acro/examples/acro.example.issue-111.pdf b/macros/latex/contrib/acro/examples/acro.example.issue-111.pdf
new file mode 100644
index 0000000000..028c2fa8d8
--- /dev/null
+++ b/macros/latex/contrib/acro/examples/acro.example.issue-111.pdf
Binary files differ
diff --git a/macros/latex/contrib/acro/examples/acro.example.issue-111.tex b/macros/latex/contrib/acro/examples/acro.example.issue-111.tex
new file mode 100644
index 0000000000..fe97f44e62
--- /dev/null
+++ b/macros/latex/contrib/acro/examples/acro.example.issue-111.tex
@@ -0,0 +1,27 @@
+\documentclass{article}
+\usepackage[T1]{fontenc}
+\usepackage[french]{babel}
+\usepackage[version=3]{acro}
+
+\DeclareAcroArticle{definite}{\nospace}
+
+\NewAcroCommand\dacs{m}{\acrodefinite\UseAcroTemplate{short}{#1}}
+\NewAcroCommand\Dacs{m}{\acroupper\acrodefinite\UseAcroTemplate{short}{#1}}
+\NewAcroCommand\dacl{m}{\acrodefinite\UseAcroTemplate{long}{#1}}
+\NewAcroCommand\Dacl{m}{\acroupper\acrodefinite\UseAcroTemplate{long}{#1}}
+
+\DeclareAcronym{hadopi}{
+ short = HADOPI ,
+ long = Haute Autorit\'{e} pour la diffusion des \oe uvres et la protection des
+ droits sur l’Internet ,
+ short-definite = l'\nospace ,
+ long-definite = la ,
+}
+
+\begin{document}
+
+\dacs{hadopi}
+
+\Dacl{hadopi}
+
+\end{document}
diff --git a/macros/latex/contrib/acro/examples/acro.example.issue-119.pdf b/macros/latex/contrib/acro/examples/acro.example.issue-119.pdf
new file mode 100644
index 0000000000..6f5f4f7ee4
--- /dev/null
+++ b/macros/latex/contrib/acro/examples/acro.example.issue-119.pdf
Binary files differ
diff --git a/macros/latex/contrib/acro/examples/acro.example.issue-119.tex b/macros/latex/contrib/acro/examples/acro.example.issue-119.tex
new file mode 100644
index 0000000000..d1b5cadc65
--- /dev/null
+++ b/macros/latex/contrib/acro/examples/acro.example.issue-119.tex
@@ -0,0 +1,49 @@
+\documentclass{article}
+\usepackage[enable-debug]{expl3}
+
+\usepackage[version=3]{acro}
+
+\makeatletter
+\NewAcroTemplate[list]{external}{%
+ \if@filesw
+ \newwrite\acro@list
+ \immediate\openout\acro@list\jobname.ac\relax
+ \immediate\write\acro@list{\string\begin{description}}
+ \let\item\relax
+ \acronymsmapF{%
+ \immediate\write\acro@list{%
+ \space\space
+ \item[\acrofield{##1}{short}]
+ \acrofield{##1}{long}%
+ \acrofieldifTF{##1}{extra}{ (\acrofield{##1}{extra})}{}%
+ }%
+ }{\immediate\write\acro@list{\item}\AcroRerun}%
+ \immediate\write\acro@list{\string\end{description}}
+ \immediate\closeout\acro@list
+ \fi
+}
+\makeatother
+
+\DeclareAcronym{ny}{
+ short = NY ,
+ long = New York ,
+}
+
+\DeclareAcronym{la}{
+ short = LA ,
+ long = Los Angeles ,
+ extra = City of Angels
+}
+
+\DeclareAcronym{dc}{
+ short = D.C. ,
+ long = Washington D.C.
+}
+
+\begin{document}
+
+\acuseall
+\printacronyms[template=external]
+\null
+
+\end{document}
diff --git a/macros/latex/contrib/acro/examples/acro.example.issue-154.pdf b/macros/latex/contrib/acro/examples/acro.example.issue-154.pdf
new file mode 100644
index 0000000000..6ae39ce428
--- /dev/null
+++ b/macros/latex/contrib/acro/examples/acro.example.issue-154.pdf
Binary files differ
diff --git a/macros/latex/contrib/acro/examples/acro.example.issue-154.tex b/macros/latex/contrib/acro/examples/acro.example.issue-154.tex
new file mode 100644
index 0000000000..709ee5a49e
--- /dev/null
+++ b/macros/latex/contrib/acro/examples/acro.example.issue-154.tex
@@ -0,0 +1,17 @@
+\documentclass{article}
+
+\usepackage[version=3]{acro}
+
+\RenewAcroCommand\ac{mo}{\UseAcroTemplate{first}{#1}\IfNoValueF{#2}{#2}}
+
+\DeclareAcronym{uc}{
+ short = UC ,
+ long = Universal Composability ,
+ cite = xxx
+}
+
+\begin{document}
+
+We use the \ac{uc}[ model] for\dots
+
+\end{document}
diff --git a/macros/latex/contrib/acro/examples/acro.example.possessive.pdf b/macros/latex/contrib/acro/examples/acro.example.possessive.pdf
new file mode 100644
index 0000000000..ab1faaf4b0
--- /dev/null
+++ b/macros/latex/contrib/acro/examples/acro.example.possessive.pdf
Binary files differ
diff --git a/macros/latex/contrib/acro/examples/acro.example.possessive.tex b/macros/latex/contrib/acro/examples/acro.example.possessive.tex
new file mode 100644
index 0000000000..11e5bf0d67
--- /dev/null
+++ b/macros/latex/contrib/acro/examples/acro.example.possessive.tex
@@ -0,0 +1,36 @@
+\documentclass{article}
+
+\usepackage[version=3]{acro}
+
+\DeclareAcroEnding{possessive}{'s}{'s}
+
+\NewAcroCommand\acg{m}{\acropossessive\UseAcroTemplate{first}{#1}}
+\NewAcroCommand\acsg{m}{\acropossessive\UseAcroTemplate{short}{#1}}
+\NewAcroCommand\aclg{m}{\acropossessive\UseAcroTemplate{long}{#1}}
+\NewAcroCommand\acfg{m}{%
+ \acrofull
+ \acropossessive
+ \UseAcroTemplate{first}{#1}%
+}
+\NewAcroCommand\iacsg{m}{%
+ \acroindefinite
+ \acropossessive
+ \UseAcroTemplate{short}{#1}%
+}
+
+\DeclareAcronym{MP}{
+ short = MP ,
+ long = Member of Parliament ,
+ long-plural-form = Members of Parliament ,
+ long-possessive-form = Member's of Parliament
+}
+
+\begin{document}
+
+\acg{MP} \par
+\acsg{MP} \par
+\aclg{MP} \par
+\acfg{MP} \par
+\iacsg{MP} \par
+
+\end{document}
diff --git a/macros/latex/contrib/acro/examples/acro.example.texsx-505891.pdf b/macros/latex/contrib/acro/examples/acro.example.texsx-505891.pdf
new file mode 100644
index 0000000000..673ee23f5c
--- /dev/null
+++ b/macros/latex/contrib/acro/examples/acro.example.texsx-505891.pdf
Binary files differ
diff --git a/macros/latex/contrib/acro/examples/acro.example.texsx-505891.tex b/macros/latex/contrib/acro/examples/acro.example.texsx-505891.tex
new file mode 100644
index 0000000000..60e22e7051
--- /dev/null
+++ b/macros/latex/contrib/acro/examples/acro.example.texsx-505891.tex
@@ -0,0 +1,46 @@
+\documentclass{article}
+
+\usepackage[version=3]{acro}
+
+\DeclareAcroProperty{alt2}
+\DeclareAcroProperty{alt2-format}
+
+\RenewAcroTemplate[list]{description}{%
+ \acroheading
+ \acropreamble
+ \begin{description}
+ \acronymsmapF{
+ \item [%
+ \acrowrite{short}%
+ \acroifT{alt}{/\acrowrite{alt}}%
+ \acroifT{alt2}{/\acrowrite{alt2}}%
+ ]
+ \acrowrite{long}%
+ \acroifanyT{foreign,extra}{ (}%
+ \acroifT{foreign}{%
+ \acrowrite{foreign}%
+ \acroifT{foreign-short}{, \acrowrite{foreign-short}}%
+ \acroifT{extra}{, }%
+ }%
+ \acroifT{extra}{\acrowrite{extra}}%
+ \acroifanyT{foreign,extra}{)}%
+ \acroifpagesT{%
+ \acropagefill
+ \acropages
+ {\acrotranslate{page}\nobreakspace}%
+ {\acrotranslate{pages}\nobreakspace}%
+ }%
+ }
+ { \item \AcroRerun }
+ \end {description}
+}
+
+\DeclareAcronym{one}{ short = one , alt = two, alt2 = three, long = common description }
+\DeclareAcronym{four}{ short = four , long = another description }
+
+\begin{document}
+
+\printacronyms[display=all]
+
+\end{document}
+
diff --git a/macros/latex/contrib/acro/examples/acro.example.texsx-507726.pdf b/macros/latex/contrib/acro/examples/acro.example.texsx-507726.pdf
new file mode 100644
index 0000000000..7b2ee1e168
--- /dev/null
+++ b/macros/latex/contrib/acro/examples/acro.example.texsx-507726.pdf
Binary files differ
diff --git a/macros/latex/contrib/acro/examples/acro.example.texsx-507726.tex b/macros/latex/contrib/acro/examples/acro.example.texsx-507726.tex
new file mode 100644
index 0000000000..f9acd723d1
--- /dev/null
+++ b/macros/latex/contrib/acro/examples/acro.example.texsx-507726.tex
@@ -0,0 +1,63 @@
+\documentclass{article}
+\usepackage[english,ngerman]{babel}
+\usepackage{csquotes}
+\usepackage[version=3]{acro}
+
+% issue #136
+\DeclareAcroProperty{foreign-short}
+
+\RenewAcroTemplate {long-short}{%
+ \acroiffirstTF{%
+ \acrowrite{long}\acspace
+ (%
+ \acrowrite{short}%
+ \acroifT{foreign}{, \acrowrite{foreign}}%
+ \acroifT{foreign-short}{, \acrowrite{foreign-short}}%
+ \acrogroupcite
+ )%
+ }
+ {\acrowrite{short}}%
+}
+
+\RenewAcroTemplate[list]{description}{%
+ \acroheading
+ \acropreamble
+ \begin{description}
+ \acronymsmapF{
+ \item [\acrowrite{short}\acroifT{alt}{/\acrowrite{alt}}]
+ \acrowrite{long}%
+ \acroifanyT{foreign,extra}{ (}%
+ \acroifT{foreign}{%
+ \acrowrite{foreign}%
+ \acroifT{foreign-short}{, \acrowrite{foreign-short}}%
+ \acroifT{extra}{, }%
+ }%
+ \acroifT{extra}{\acrowrite{extra}}%
+ \acroifanyT{foreign,extra}{)}%
+ \acroifpagesT{%
+ \acropagefill
+ \acropages
+ {\acrotranslate{page}\nobreakspace}%
+ {\acrotranslate{pages}\nobreakspace}%
+ }%
+ }
+ { \item \AcroRerun }
+ \end {description}
+}
+
+\DeclareAcronym{dsgvo}{
+ short = DSGVO,
+ long = {Datenschutz-Grundverordnung},
+ foreign = General Data Protection Regulation ,
+ foreign-short = GDPR, % new line
+ foreign-babel = english,
+ foreign-format = \enquote
+}
+
+\begin{document}
+
+\ac{dsgvo}
+
+\printacronyms
+
+\end{document}
diff --git a/macros/latex/contrib/acro/examples/acro.example.units.pdf b/macros/latex/contrib/acro/examples/acro.example.units.pdf
new file mode 100644
index 0000000000..79c07fc50a
--- /dev/null
+++ b/macros/latex/contrib/acro/examples/acro.example.units.pdf
Binary files differ
diff --git a/macros/latex/contrib/acro/example_one.tex b/macros/latex/contrib/acro/examples/acro.example.units.tex
index 3af86f5c33..7a3ff0b351 100644
--- a/macros/latex/contrib/acro/example_one.tex
+++ b/macros/latex/contrib/acro/examples/acro.example.units.tex
@@ -1,14 +1,9 @@
-% arara: pdflatex
-% arara: pdflatex
\documentclass{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
-\usepackage{acro}
-\acsetup{
- page-style = paren , % Seitennummer in Klammern
- extra-style = comma , % extra-Informationen mit Komma anhängen
- only-used = false % für das Beispiel auch die nicht verwendeten in die Liste aufnehmen
-}
+\usepackage[version=3]{acro}
+
+\acsetup{ list/display = all , pages/display = all}
\usepackage{longtable,siunitx}
@@ -28,47 +23,63 @@
\DeclareAcronym{ecdm}{
short = ECDM ,
long = Electro Chemical Discharge Machining ,
- extra = Kombination aus \acs{ecm} und \acs{edm}
+ extra = Kombination aus \acs*{ecm} und \acs*{edm}
}
+\DeclareAcroProperty{unit}
+
% "Acronyme" (tatsächlich physikalische Größen) einer speziellen Klasse:
\DeclareAcronym{f}{
short = \ensuremath{f} ,
long = Frequenz ,
- extra = \si{\hertz} ,
+ unit = \si{\hertz} ,
class = physics
}
\DeclareAcronym{A}{
short = \ensuremath{A} ,
long = Fläche ,
- extra = \si{\metre^2} ,
+ unit = \si{\metre^2} ,
class = physics
}
\DeclareAcronym{C}{
short = \ensuremath{C} ,
long = Kapazität ,
- extra = \si{\farad} ,
+ unit = \si{\farad} ,
class = physics
}
\DeclareAcronym{F}{
short = \ensuremath{F} ,
long = Kraft ,
- extra = \si{\newton} ,
+ unit = \si{\newton} ,
class = physics
}
-\DeclareAcroListStyle{physics}{extra-table}{
- table = longtable ,
- table-spec = @{}lll@{\extracolsep{\fill}}l@{} ,
- reverse = true ,
- before =
- \setlength\LTleft{0pt}%
- \setlength\LTright{0pt}%
- \acsetup{
- extra-style = plain ,
- page-style = plain ,
- pages = all
+\NewAcroTemplate[list]{physics}{%
+ \def\TableCode{}%
+ \acronymsmapT{%
+ \AcroPutRight\TableCode{%
+ \def\AcronymID{##1}%
+ \acrowrite{short}%
+ &
+ \def\AcronymID{##1}%
+ \acrowrite{unit}%
+ &
+ \def\AcronymID{##1}%
+ \acrowrite{long}%
+ &
+ \def\AcronymID{##1}%
+ \acroifpagesT{\acropages{S. }{S. }}%
+ \tabularnewline
}%
+ }%
+ \acroheading
+ \acropreamble
+ \par\noindent
+ \setlength\LTleft{0pt}%
+ \setlength\LTright{0pt}%
+ \begin{longtable}{@{}lll@{\extracolsep{\fill}}l@{}}
+ \TableCode
+ \end{longtable}
}
\begin{document}
@@ -80,10 +91,9 @@ zweites Mal: \ac{ecm}
\ac{F}
% % alle außer der Klasse 'physics' auflisten:
-\printacronyms[exclude-classes=physics, name=Abkürzungsverzeichnis]
+\printacronyms[exclude=physics]%, name=Abkürzungsverzeichnis]
% nur die Klasse 'physics' auflisten:
-\acsetup{list-style = physics}
-\printacronyms[include-classes=physics, name=Formelverzeichnis]
+\printacronyms[template=physics, include=physics]%, name=Formelverzeichnis]
\end{document}
diff --git a/macros/latex/contrib/tkz/tkz-tab/README.md b/macros/latex/contrib/tkz/tkz-tab/README.md
index beca0a63af..a45c259453 100644
--- a/macros/latex/contrib/tkz/tkz-tab/README.md
+++ b/macros/latex/contrib/tkz/tkz-tab/README.md
@@ -1,4 +1,4 @@
-Release 2.21c 2020/04/27
+Release 2.12c 2020/04/29
## Description
diff --git a/macros/latex/contrib/tkz/tkz-tab/doc/TKZdoc-tab.pdf b/macros/latex/contrib/tkz/tkz-tab/doc/TKZdoc-tab.pdf
index 32c69ac829..1b47876a6e 100644
--- a/macros/latex/contrib/tkz/tkz-tab/doc/TKZdoc-tab.pdf
+++ b/macros/latex/contrib/tkz/tkz-tab/doc/TKZdoc-tab.pdf
Binary files differ
diff --git a/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-main.tex b/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-main.tex
index 3475fece2d..4ab8376d43 100644
--- a/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-main.tex
+++ b/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-main.tex
@@ -1,22 +1,14 @@
-% !TEX TS-program = lualatex
-% encoding : utf8
-% linknodesdoc.tex
-% Created by Alain Matthes on 2008-01-19.
-% Copyright (C) 2009 Alain Matthes
-%
-% This file may be distributed and/or modified
-%
-% 1. under the LaTeX Project Public License , either version 1.3
-% of this license or (at your option) any later version and/or
-% 2. under the GNU Public License.
-%
-% See the file doc/generic/pgf/licenses/LICENSE for more details.%
-% See http://www.latex-project.org/lppl.txt for details.
-%
-%
+% Copyright 2020 Alain Matthes
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX version 2005/12/01 or later.
+% This work has the LPPL maintenance status “maintainedâ€.
+% The Current Maintainer of this work is Alain Matthes.
% ``TKZdoc-tab-main '' is the french doc of tkz-tab
-%
-%
+
\documentclass[DIV = 14,
fontsize = 10,
headinclude = false,
@@ -28,11 +20,11 @@
\usepackage{etoc}
\gdef\tkznameofpack{Tkz-Tab}
-\gdef\tkzversionofpack{2.11c}
-\gdef\tkzdateofpack{2020/04/27}
+\gdef\tkzversionofpack{2.12c}
+\gdef\tkzdateofpack{2020/04/29}
\gdef\tkznameofdoc{doc-tkz-tab}
-\gdef\tkzdateofdoc{2020/04/27}
-\gdef\tkzversionofdoc{2.11c}
+\gdef\tkzdateofdoc{2020/04/29}
+\gdef\tkzversionofdoc{2.12c}
\gdef\tkzauthorofpack{Alain Matthes}
\gdef\tkzadressofauthor{}
\gdef\tkznamecollection{AlterMundus}
@@ -87,13 +79,9 @@
BoldItalicFont=lmmonolt10-boldoblique.otf,
]
\newfontfamily\ttcondensed{lmmonoltcond10-regular.otf}
-%% (La)TeX font-related declarations:
\linespread{1.05} % Pagella needs more space between lines
\usepackage{unicode-math}
\usepackage{fourier-otf}
-% \makeatletter
-% \if@tkzcadre \usepackage{zorna} \fi
-% \makeatother
\usepackage{calc}
\usepackage[french]{babel}
\usepackage[np,autolanguage]{numprint}
@@ -104,17 +92,6 @@
\usepackage{url}
\def\UrlFont{\small\ttfamily}
-% \usepackage[protrusion = true,
-% expansion,
-% final,
-% verbose = false,
-% babel = true]{microtype}
-
-
-%\DisableLigatures{encoding = T1, family = tt*}
-\makeatletter
-%\renewcommand*\l@subsubsection{\bprot@dottedtocline{3}{3.8em}{4em}}
-\makeatother
\AtBeginDocument{\MakeShortVerb{\|}}
\colorlet{graphicbackground}{white}
diff --git a/macros/latex/contrib/tkz/tkz-tab/latex/tkz-tab.sty b/macros/latex/contrib/tkz/tkz-tab/latex/tkz-tab.sty
index 3af043e6c4..b101f2df5b 100644
--- a/macros/latex/contrib/tkz/tkz-tab/latex/tkz-tab.sty
+++ b/macros/latex/contrib/tkz/tkz-tab/latex/tkz-tab.sty
@@ -10,7 +10,7 @@
% Objet : Création de tableaux (signes et variations)
%<----------------------------------------------------------------------------->
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{tkz-tab}[2020/04/27 v2.11c variations (ctan version)]
+\ProvidesPackage{tkz-tab}[2020/04/29 v2.12c variations (ctan version)]
%<----------------------------------------------------------------------------->
\RequirePackage{ifthen}
\RequirePackage{xkeyval}[2005/11/25]
diff --git a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
index ead3c72ed4..d6b2eca7a8 100644
--- a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+++ b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
@@ -38,7 +38,6 @@ $mirrors = {
},
'Japan' => {
'ftp://ftp.kddilabs.jp/CTAN/' => 1,
- 'ftp://ftp.u-aizu.ac.jp/pub/tex/CTAN/' => 1,
'http://ftp.jaist.ac.jp/pub/CTAN/' => 1,
'http://ftp.yz.yamagata-u.ac.jp/pub/CTAN/' => 1,
},
@@ -174,7 +173,6 @@ $mirrors = {
'http://ctan.math.utah.edu/ctan/tex-archive/' => 1,
'http://ctan.math.washington.edu/tex-archive/' => 1,
'http://ctan.mirrors.hoobly.com/' => 1,
- 'http://mirror.las.iastate.edu/tex-archive/' => 1,
'http://mirror.utexas.edu/ctan/' => 1,
'http://mirrors.concertpass.com/tex-archive/' => 1,
'http://mirrors.ibiblio.org/pub/mirrors/CTAN/' => 1,
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
index 814206d485..a4234dcc93 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/2020
-depend revision/54930
+depend revision/54941
name 00texlive.image
category TLCore
-revision 54909
+revision 54941
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
@@ -4192,7 +4192,7 @@ depend setting_available_architectures:aarch64-linux amd64-freebsd amd64-netbsd
name 00texlive.installer
category TLCore
-revision 54921
+revision 54932
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
@@ -8573,7 +8573,7 @@ catalogue-version 1.3
name acro
category Package
-revision 54512
+revision 54937
shortdesc Typeset acronyms
relocated 1
longdesc The package enables the author to create acronyms in a simple
@@ -8586,27 +8586,43 @@ longdesc which automatically sorts the list created by \printacronyms.
depend etoolbox
depend l3kernel
depend l3packages
-containersize 24612
-containerchecksum 852c0ff491f7e24638d10ea086965a9884b0426117122b52209d8bf00f4382fa5c6d41f21aad585bfbdcdab099ff077f20ab850824943b34c581a6de3335ef77
-doccontainersize 599516
-doccontainerchecksum 8c4c4e157d2d43c7830f073ed9c027fb4633bca7767f18e4b1261a407204ab1c067736c544d5a938421bc5e6f0f4739c265afa2a98548ef3961da1105645453a
-docfiles size=170
+containersize 40832
+containerchecksum 1e758d85b9a42882617a8573cdc4cf7d4f53e0f5ccf6daeb4b875b4646acabccf1e92d4b61096ea4c5311405267eaf0d80c00c5b8be0522a394a23d1eb7a79f0
+doccontainersize 1123288
+doccontainerchecksum cb0c019e2f8f56978761b0d3d391ef68b4f6b3283b44a4783ff0093e432fafc99504b26c7e12f84b0eba5af9ca1199e8e6e73f0630ae3202144a78527f9a004d
+docfiles size=337
RELOC/doc/latex/acro/README details="Readme"
RELOC/doc/latex/acro/acro-manual.pdf details="Package documentation"
RELOC/doc/latex/acro/acro-manual.tex
- RELOC/doc/latex/acro/acro.history
- RELOC/doc/latex/acro/example_one.tex
- RELOC/doc/latex/acro/example_two.tex
-runfiles size=39
- RELOC/tex/latex/acro/acro-manual.cls
- RELOC/tex/latex/acro/acro.definitions.tex
+ RELOC/doc/latex/acro/examples/acro.example.acflike.pdf
+ RELOC/doc/latex/acro/examples/acro.example.acflike.tex
+ RELOC/doc/latex/acro/examples/acro.example.basic.pdf
+ RELOC/doc/latex/acro/examples/acro.example.basic.tex
+ RELOC/doc/latex/acro/examples/acro.example.issue-109.pdf
+ RELOC/doc/latex/acro/examples/acro.example.issue-109.tex
+ RELOC/doc/latex/acro/examples/acro.example.issue-111.pdf
+ RELOC/doc/latex/acro/examples/acro.example.issue-111.tex
+ RELOC/doc/latex/acro/examples/acro.example.issue-119.pdf
+ RELOC/doc/latex/acro/examples/acro.example.issue-119.tex
+ RELOC/doc/latex/acro/examples/acro.example.issue-154.pdf
+ RELOC/doc/latex/acro/examples/acro.example.issue-154.tex
+ RELOC/doc/latex/acro/examples/acro.example.possessive.pdf
+ RELOC/doc/latex/acro/examples/acro.example.possessive.tex
+ RELOC/doc/latex/acro/examples/acro.example.texsx-505891.pdf
+ RELOC/doc/latex/acro/examples/acro.example.texsx-505891.tex
+ RELOC/doc/latex/acro/examples/acro.example.texsx-507726.pdf
+ RELOC/doc/latex/acro/examples/acro.example.texsx-507726.tex
+ RELOC/doc/latex/acro/examples/acro.example.units.pdf
+ RELOC/doc/latex/acro/examples/acro.example.units.tex
+runfiles size=75
RELOC/tex/latex/acro/acro.sty
+ RELOC/tex/latex/acro/acro2.sty
catalogue-contact-bugs https://github.com/cgnieder/acro/issues
catalogue-contact-repository https://github.com/cgnieder/acro/
catalogue-ctan /macros/latex/contrib/acro
catalogue-license lppl1.3
catalogue-topics acronym expl3
-catalogue-version 2.11d
+catalogue-version 3.0
name acronym
category Package
@@ -108989,7 +109005,7 @@ catalogue-version 1.2
name expkv-cs
category Package
-revision 54674
+revision 54939
shortdesc Define expandable key=val macros using expkv
relocated 1
longdesc This package is a frontend to define expandable macros with
@@ -109007,18 +109023,18 @@ longdesc nicely on LaTeX's package loading system, but that package is
longdesc not needed and does not provide more functionality than the
longdesc generic code in expkv-cs.tex. Note: In this context, "cs"
longdesc stands for "control sequence" (i.e.: macro).
-containersize 3504
-containerchecksum de8eb6cd5e9d5894462024639c2a38138245d2141c4fb60bc1aa1f09f28082fd4ec384ca2912350d8f7e71fff4e67b2a939ebe53196942b03a22451738946697
-doccontainersize 306524
-doccontainerchecksum 776eb235ff03b1eed350d32f9f675fb94c223b33b9854d5b8f95ef888caa0a1917b0d1f3e6f1e06c26ad35c8705104479b0f32b9fed4a0637609ba1a24b862ad
+containersize 3584
+containerchecksum 490081d1a9ac75322218eefda917d566f8d0412e2e058f9dfa0b299b833f5af302be6a017360a16b4baab3d40b0508fc8b2e2be2502ee9f70254cc7e9e74c8a8
+doccontainersize 308552
+doccontainerchecksum 96331c4eb399602f6bafe6c0cdd466d146ccf50d3e9668a0cdd593c3fe2d68069204809af40f3ff19c07fd50cdd155ecc8594b33119a4d4a9f4fc74d1ef2fb8f
docfiles size=78
RELOC/doc/latex/expkv-cs/README.md details="Readme"
RELOC/doc/latex/expkv-cs/expkv-cs.pdf details="Package documentation"
-srccontainersize 14072
-srccontainerchecksum 96793ebbc5d8246efca224d5b2df19acf837e6546a3d5902c684444f8423b6c05c3a50010840df32dcc7b3a87143dc5a3aa1d81cd7d0b412ff49140df19a7b3a
+srccontainersize 14292
+srccontainerchecksum c75bc071356d7891476d68bcc6dc9e4426e4f4e2c93cc7361ef606e1627fa41b810fac97ad3cc1392793bf823493ed9f0766819aa58e61c024d6e70daa5602ae
srcfiles size=14
RELOC/source/latex/expkv-cs/expkv-cs.dtx
-runfiles size=5
+runfiles size=6
RELOC/tex/generic/expkv-cs/expkv-cs.tex
RELOC/tex/latex/expkv-cs/expkv-cs.sty
catalogue-also expkv expkv-def
@@ -109026,7 +109042,7 @@ catalogue-contact-repository https://github.com/Skillmon/tex_expkv-cs
catalogue-ctan /macros/generic/expkv-cs
catalogue-license lppl1.3c
catalogue-topics keyval macro-supp
-catalogue-version 0.2
+catalogue-version 0.3
name expkv-def
category Package
@@ -133000,7 +133016,7 @@ catalogue-version 0.23
name hu-berlin-bundle
category Package
-revision 54512
+revision 54938
shortdesc LaTeX classes for the Humboldt-Universitat zu Berlin
relocated 1
longdesc This package provides files according to the corporate design
@@ -133013,28 +133029,24 @@ longdesc bundle contains a letter class based on scrlttr2 and a package
longdesc hu-berlin-base.sty which contains all relevant code for
longdesc documents and documentclasses of the bundle.
containersize 7900
-containerchecksum 4e3479e784c340441abe9a6cd83be9dc99cd0dcb6cfca19bd3488435beb1483550bc11334b78fd03f912ea1a6d93d075b7d9732484b66dd1388bae8f7e556f17
-doccontainersize 419676
-doccontainerchecksum de3eee0a1c6e3525446a292bb7460d90c9f0668f5f4074bd253ec87d3a095b130f5f6c9f2c5a340e318eb65ed22d3a7fd2a5fc84ee6ad7eba1e7b425f9fec12a
-docfiles size=210
+containerchecksum ebf45ed546b7fbe9c35d36b4b025baa6e554074261b73e0bfb754ed3de72b8f39653960717510e13fcef040326bd11ac344eaad894acd625642ab2ee2ade9e66
+doccontainersize 238008
+doccontainerchecksum ce8fc4199cb94937e94e66688f0111150bb20e81f653ead053f0bdcec33945c96ab2f6cf4465420f19bba98d4e05565167055dd1c689585c7a80743f26ee0268
+docfiles size=97
RELOC/doc/latex/hu-berlin-bundle/README.md details="Readme"
- RELOC/doc/latex/hu-berlin-bundle/_markdown_hu-berlin-bundle/5743ba341396e7047e5a76bfb9c28dcd.md.tex
RELOC/doc/latex/hu-berlin-bundle/hu-berlin-bundle-bibliography.bib
- RELOC/doc/latex/hu-berlin-bundle/hu-berlin-bundle.markdown.in
RELOC/doc/latex/hu-berlin-bundle/hu-berlin-bundle.pdf details="Package documentation"
- RELOC/doc/latex/hu-berlin-bundle/hu-berlin-bundle.pkglist
RELOC/doc/latex/hu-berlin-bundle/hu-berlin-letter-example-lualatex.tex
RELOC/doc/latex/hu-berlin-bundle/hu-berlin-letter-example-markdown.md
RELOC/doc/latex/hu-berlin-bundle/hu-berlin-letter-example.lco
RELOC/doc/latex/hu-berlin-bundle/hu-berlin-letter-template.latex
- RELOC/doc/latex/hu-berlin-bundle/img/hu-berlin-logo.jpg
- RELOC/doc/latex/hu-berlin-bundle/img/texografie.png
+ RELOC/doc/latex/hu-berlin-bundle/img/hu-berlin-logo.pdf
+ RELOC/doc/latex/hu-berlin-bundle/img/texografie-logo.pdf
RELOC/doc/latex/hu-berlin-bundle/makefile
-srccontainersize 16884
-srccontainerchecksum 7368efc6c11829d3af063b9e3b89b00a7939b5c137ac6d7923a189f3b04550e288b16b16b0d8c2a289d63b0ffd7eb231a71803237c671804cc57b2bd3e7bae1c
-srcfiles size=17
+srccontainersize 16800
+srccontainerchecksum ca75f32cc9a4eadbd5bd32c4ffb3aa86f882638e67470d2da6ba6be98460df4b38606763cc72efdfa1cb43651efe5068ca4f2e06eaef5b93bd431c837acada94
+srcfiles size=16
RELOC/source/latex/hu-berlin-bundle/hu-berlin-bundle.dtx
- RELOC/source/latex/hu-berlin-bundle/hu-berlin-bundle.ins
runfiles size=7
RELOC/tex/latex/hu-berlin-bundle/hu-berlin-base.sty
RELOC/tex/latex/hu-berlin-bundle/hu-berlin-bundle-style.sty
@@ -133044,7 +133056,7 @@ catalogue-contact-repository https://github.com/LukasCBossert/hu-berlin-bundle
catalogue-ctan /macros/latex/contrib/hu-berlin-bundle
catalogue-license lppl1.3c gpl2 bsd3
catalogue-topics class letter
-catalogue-version 1.0.4
+catalogue-version 1.0.5
name hulipsum
category Package
@@ -231693,107 +231705,107 @@ catalogue-version 2.1a
name pgfornament
category Package
-revision 54670
+revision 54941
shortdesc Drawing of Vectorian ornaments with PGF/TikZ
relocated 1
longdesc This package allows the drawing of Vectorian ornaments (196)
longdesc with PGF/TikZ. The documentation presents the syntax and
longdesc parameters of the macro "pgfornament".
-containersize 538000
-containerchecksum 2815566020f0bb22810789d4784f4a3b50b7d05bcfa4e90a6b2f6530b7f433cb870e869c877ecbfd51d8e205d941fd4f2fcafbffe164a1f99944d8503986eb57
-doccontainersize 2517968
-doccontainerchecksum e61c406ab0f727df26300731685e9495e995b8b43d1fd34b5eaa652858e2e64fb9f8ec1fda5210fe9273d6902786b258ed0f808103e4eefc1c759b54c0855c74
-docfiles size=756
+containersize 616672
+containerchecksum 5470e252c81b965b3f223365d4d79537117086a6432b16bb8cfd8e2b018a8e312f10e622fa985aac864671105fb546d24cc9edf2afe8f1d03f32923386da49b8
+doccontainersize 2438572
+doccontainerchecksum 6eb2f0b8c547f032f23bbcc8e3b549f970b71079b1ace2669a47904843ac578f365b50520f149421fd8fe9fdf5049e99d466dcb6e9d1861c382ecec37242d52d
+docfiles size=636
RELOC/doc/latex/pgfornament/README.md details="Readme"
RELOC/doc/latex/pgfornament/TeX_box.png
RELOC/doc/latex/pgfornament/baseline.png
RELOC/doc/latex/pgfornament/ornaments.pdf details="Package documentation"
RELOC/doc/latex/pgfornament/ornaments.png
RELOC/doc/latex/pgfornament/ornaments.tex
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan1.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan10.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan11.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan12.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan13.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan14.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan15.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan16.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan17.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan18.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan19.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan2.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan20.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan21.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan22.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan23.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan24.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan25.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan26.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan27.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan28.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan29.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan3.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan30.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan31.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan32.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan33.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan34.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan35.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan36.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan37.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan38.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan39.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan4.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan40.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan41.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan42.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan43.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan44.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan45.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan46.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan47.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan48.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan49.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan5.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan50.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan51.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan52.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan53.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan54.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan55.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan56.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan57.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan58.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan59.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan6.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan60.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan61.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan62.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan63.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan64.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan65.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan66.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan67.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan68.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan69.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan7.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan70.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan71.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan72.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan73.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan74.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan75.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan76.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan77.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan78.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan8.pgf
- RELOC/doc/latex/pgfornament/pgfhan/pgfhan9.pgf
RELOC/doc/latex/pgfornament/tikzrput.pdf
RELOC/doc/latex/pgfornament/tikzrput.tex
RELOC/doc/latex/pgfornament/usefulcommands.tex
-runfiles size=521
+runfiles size=641
RELOC/tex/generic/pgfornament/am/am1.pgf
RELOC/tex/generic/pgfornament/am/am2.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan1.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan10.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan11.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan12.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan13.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan14.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan15.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan16.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan17.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan18.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan19.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan2.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan20.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan21.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan22.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan23.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan24.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan25.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan26.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan27.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan28.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan29.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan3.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan30.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan31.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan32.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan33.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan34.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan35.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan36.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan37.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan38.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan39.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan4.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan40.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan41.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan42.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan43.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan44.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan45.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan46.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan47.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan48.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan49.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan5.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan50.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan51.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan52.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan53.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan54.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan55.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan56.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan57.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan58.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan59.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan6.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan60.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan61.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan62.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan63.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan64.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan65.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan66.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan67.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan68.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan69.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan7.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan70.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan71.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan72.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan73.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan74.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan75.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan76.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan77.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan78.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan8.pgf
+ RELOC/tex/generic/pgfornament/pgfhan/pgfhan9.pgf
RELOC/tex/generic/pgfornament/vectorian/vectorian1.pgf
RELOC/tex/generic/pgfornament/vectorian/vectorian10.pgf
RELOC/tex/generic/pgfornament/vectorian/vectorian100.pgf
@@ -288620,14 +288632,14 @@ docfiles size=435
name texlive-msg-translations
category TLCore
-revision 54919
+revision 54933
shortdesc translations of the TeX Live installer and TeX Live Manager
longdesc This package contains the translated messages of the TeX Live
longdesc installer and TeX Live Manager. For information on creating or
longdesc updating translations, see
longdesc http://tug.org/texlive/doc.html#install-tl-xlate.
-containersize 141256
-containerchecksum 19b75dd3cbac062834a0ce27ced5c8012ef23324de0796699cf7bac795c04552c51bf24178e517bc9d00ab7ffa3272d4f9ccc17819e16a8a9f71b60458cdd7a1
+containersize 141264
+containerchecksum 9ff7b896687d76f89bc26e716d3ba02487bc3d55c678a91efec693b8c3610fa69b30ce8368ab5d3030b7813124c72cb384aa46b69ae4c76f66a4a0de8c72ba0d
runfiles size=389
tlpkg/translations/README
tlpkg/translations/cs.po
@@ -288688,7 +288700,7 @@ docfiles size=368
name texlive-scripts
category TLCore
-revision 54921
+revision 54932
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.
@@ -288696,10 +288708,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 132432
-containerchecksum 4d551cdb1a3bf98548de7fa4a5217796bf86ee8480434212107d6ba7b9bfd33aeb05cb91e7c382488c8454d137bae41147e9346b4f367b771481c4b51350ebf4
+containersize 132412
+containerchecksum 85a66965d9b2f9b7e97f66411b473760aa35c5fcf70f3d9975c734e8634338f37c6a1f831bf151fbae8bee863152f59975bf5ab0410607f9446a0c69be815e39
doccontainersize 219376
-doccontainerchecksum 754a926a853e7498228bde6a112a6307327e50847ffc1cac9fd5608584e399bf3696974e1e52a855a860f523e90491a31a18b8ea43f81be8e526a24f3f10db60
+doccontainerchecksum be9974a79f8175a68b25d11b0848cd093e48df91f4b41b20641d84779032d37bed7f2c89f51917f1fde1d5eedb9f620114eb715cef7790338a17f6e65e6eb096
docfiles size=141
texmf-dist/doc/man/man1/fmtutil-sys.1
texmf-dist/doc/man/man1/fmtutil-sys.man1.pdf
@@ -296555,7 +296567,7 @@ catalogue-version 0.1.4
name tkz-tab
category Package
-revision 54662
+revision 54940
shortdesc Tables of signs and variations using PGF/TikZ
relocated 1
longdesc The package provides comprehensive facilities for preparing
@@ -296563,10 +296575,10 @@ longdesc lists of signs and variations, using PGF. The package
longdesc documentation requires the tkz-doc bundle. This package has
longdesc been taken temporarily out of circulation to give the author
longdesc time to investigate some problems.
-containersize 6496
-containerchecksum 3879407bc2a8f80857fbdba958f0fa5b085cf74f6f12a7babc63f4080324ccac25dcccc9d7f0ea0322529790421fc180a16171b6d8dad64bfc0647ad01554429
-doccontainersize 364412
-doccontainerchecksum 4f06dd158fc16e7cb718569ff3154df4766f405dd8af25a9b529c7e61cfce7b8bd5afb0f104ae712e9b168e71dd6a13b66e25ed2d3164c1192f03b354363802c
+containersize 6540
+containerchecksum 1ba023dfe79db404930546277015a9fbdfcb9165d74548cd0d0d590338656913327d949b3d35f9325a5c928fc291f3e6c6485b69b6dc753aa633460e265b389c
+doccontainersize 364176
+doccontainerchecksum eb941cbee957896dc19d4e7269f78a0d07d86b20cd0f0756241376da062386e3a99675b3fcd451aa153eb89668b98b486fa7d5b904a125a4e241d45b40b745ca
docfiles size=125
RELOC/doc/latex/tkz-tab/README.md details="Readme"
RELOC/doc/latex/tkz-tab/TKZdoc-tab-adapt.tex
@@ -296589,9 +296601,9 @@ catalogue-also tableaux tableauvariations tablor tabvar
catalogue-contact-home http://altermundus.fr
catalogue-contact-repository https://github.com/tkz-sty
catalogue-ctan /macros/latex/contrib/tkz/tkz-tab
-catalogue-license lppl1.3 gpl
+catalogue-license lppl1.3
catalogue-topics maths maths-tabvar graphics pgf-tikz
-catalogue-version 2.1c
+catalogue-version 2.12c
name tlc-article
category Package
@@ -323191,7 +323203,7 @@ catalogue-version 2.7a
name xlop
category Package
-revision 42899
+revision 54936
shortdesc Calculates and displays arithmetic operations
relocated 1
longdesc Xlop (eXtra Large OPeration) will typeset arithmetic problems
@@ -323202,29 +323214,25 @@ longdesc \hline 5\end{tabular}. Furthermore, numbers may be very large,
longdesc e.g 200 figures (with a very long compilation time). Many other
longdesc features allow to deal with numbers (tests, display, some high
longdesc level operations, etc.)
-containersize 15712
-containerchecksum 74f6ec3dfe32715ebe0bc0cbd3181dbc4e8384be19f2f7849333c21398fbb3a43d4e3385c8eb1dc81688bdde44072796cb1210402cdfa7522fd5a9052173004b
-doccontainersize 537796
-doccontainerchecksum 792a49ef02b67b0db85c827c52ea644235bb2d8c8d8c8c9c4e5c36d1003ab643906e7bad13ddc505e884abecbba97d495ae8d93d4a958c5ff9ce10888c29ae6a
-docfiles size=216
+containersize 16208
+containerchecksum 616697adfe84cc937830738b58108c511a1f21b95d814ab70d88c43e6022c263b0df2a855600977e6006803677cc3d69d4f0408f89a4b21e7e497b23574c20ab
+doccontainersize 536456
+doccontainerchecksum e242468b910c0a9cfd3521eecb25423cf1f34b7fdddd3e7538201a6537755e00f4189e7fd636e154a04aa18fcff7c3b11169c4f4448f68eafd6d05cbe630840c
+docfiles size=242
RELOC/doc/generic/xlop/LISEZMOI details="Readme" language="fr"
RELOC/doc/generic/xlop/README details="Readme" language="en"
RELOC/doc/generic/xlop/xlop-doc-fr.pdf details="Package documentation (French)" language="fr"
RELOC/doc/generic/xlop/xlop-doc-fr.tex
RELOC/doc/generic/xlop/xlop-doc.pdf details="Package documentation (English)" language="en"
RELOC/doc/generic/xlop/xlop-doc.tex
-srccontainersize 916
-srccontainerchecksum e9ffcbc786fb8a5f697f23d6e229afbc39dbd9e72bf5d6ec81c396d6b8f62208004475c712301b203e4baef70d1b45cf1a5a41d86997cbfd794a68c8b2020d00
-srcfiles size=1
- RELOC/source/generic/xlop/manual.sty
runfiles size=32
RELOC/tex/generic/xlop/xlop.sty
RELOC/tex/generic/xlop/xlop.tex
catalogue-also longdiv
catalogue-ctan /macros/generic/xlop
catalogue-license lppl
-catalogue-topics arithmetic
-catalogue-version 0.26
+catalogue-topics maths arithmetic calculation
+catalogue-version 0.27
name xltabular
category Package
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
index 7c2f6c0a8a..742a1a49cd 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
@@ -1 +1 @@
-e319aefc3b0b1b8a670619016a002ec9 texlive.tlpdb
+226e066f304b49216b5fec5d8a21d408 texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
index 16687b9b8a..d244f961a2 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
@@ -1 +1 @@
-55b1c188698bb5be2276005743ff7006738a4369137efb00073f158927b74611ac674126184db94a6b684a3ab3dbe210e00e97a87d01118aba45a37de235a2a5 texlive.tlpdb
+558f2810b4c5b026f169a12ec3889c42a665eb3868c197d6b724c71755afeb1ab7b27e6070535372c0893be3d67a1435c6f764e890f4029f831de022cc632cb2 texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
index f792f4856a..7931b19bc0 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-----
-iQEcBAEBCgAGBQJeqMNuAAoJEEzhh34ZQ4xwrDkH/3qB8MAUurUAlWi5Q3YzuD0+
-+d2dcxmMuwvrBcFvCjzDDzh/zYo9aRfJtGv2MWjJ+l1ZIN9EU7D2YWMzUuqSKxIz
-luPmIIIef5i9vvieZkbAdxITtJCFVeqSpqRhK9n1ADlDSPTQ9Sq4PDIQ1jBxYyZ6
-GrTDCtZWiV77kCiDFb92f2aUOGFQf2DZKyvNv0LhOEMb4H4eN19BpFt+l3lmrVeG
-VYpqFlizVCgo3JmpMEb0qEA9iU26uh0onz6si7XHr+7pQh3RsRrmG0/i9KQ8pVOJ
-7TRSUcoP4LMBrCEy8RXYZ/qgg8fhn6E+ZJbxduIRbEywsX722HDzCIIk5JYsxPE=
-=WAIS
+iQEcBAEBCgAGBQJeqhRvAAoJEEzhh34ZQ4xwNIoIAKfmrU8CSC/ja9WhV5Prk9dK
+bNpdLnAeKyCLy6baW9M/pTfsdjUIBvIYJQXI+HXV2b2BnbSxPPUacnDlsCHDge20
+Im4FpMMEHth3yHjJFi8U+1GAFYJ5JqnzUMUCblrlC/O3P6qxyt+w+0U7MoarOkNM
+lfRapRcWQ72qTpNtC8YiniKq0jWWt1XPD7XUGeFhBXAYbbpy4baq63uRQ/9UCZMm
++MZERzsI3dFEbJQObkM/KZqtvGzGAyop9kJHl0+SB+HpK3j+koGiaQI4fFjKvvhw
+LIqB1QppjLPZPGthyRbhldR0qBYUM/z5a1GG0OoV4fiSTXB7abLBaa9X+m+XIOQ=
+=iyB/
-----END PGP SIGNATURE-----
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
index 6715610eab..f8b570e7cc 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
Binary files differ
diff --git a/systems/texlive/tlnet/tlpkg/translations/cs.po b/systems/texlive/tlnet/tlpkg/translations/cs.po
index 20cbcfb39e..f287f2b3ef 100644
--- a/systems/texlive/tlnet/tlpkg/translations/cs.po
+++ b/systems/texlive/tlnet/tlpkg/translations/cs.po
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: TeX Live translation\n"
"Report-Msgid-Bugs-To: tex-live@tug.org\n"
-"POT-Creation-Date: 2020-04-28 01:55+0200\n"
+"POT-Creation-Date: 2020-04-29 01:58+0200\n"
"PO-Revision-Date: 2019-03-26 17:30+0200\n"
"Last-Translator: Petr Sojka <sojka@fi.muni.cz>\n"
"Language-Team: Czech <>\n"
@@ -1497,12 +1497,12 @@ msgid "Abort"
msgstr "Zruš"
#: tlpkg/installer/install-tl-gui.tcl:414
-#: tlpkg/installer/install-tl-gui.tcl:1992
+#: tlpkg/installer/install-tl-gui.tcl:1994
msgid "TeX Live Installer"
msgstr "Instalátor TeX Live"
#: tlpkg/installer/install-tl-gui.tcl:417
-#: tlpkg/installer/install-tl-gui.tcl:2091
+#: tlpkg/installer/install-tl-gui.tcl:2093
#, tcl-format
msgid ""
"Trying to load %s.\n"
@@ -1719,22 +1719,22 @@ msgstr "Vytvářet symbolické linky ve standardní adresářích"
msgid "Specify directories"
msgstr "Specifikovat adresáře"
-#: tlpkg/installer/install-tl-gui.tcl:1832
+#: tlpkg/installer/install-tl-gui.tcl:1833
msgid "Custom scheme"
msgstr "Přizpůsobení schématu"
-#: tlpkg/installer/install-tl-gui.tcl:2017
+#: tlpkg/installer/install-tl-gui.tcl:2019
#, tcl-format
msgid "%s not a local or remote repository"
msgstr ""
-#: tlpkg/installer/install-tl-gui.tcl:2018
-#: tlpkg/installer/install-tl-gui.tcl:2024
+#: tlpkg/installer/install-tl-gui.tcl:2020
+#: tlpkg/installer/install-tl-gui.tcl:2026
#: texmf-dist/scripts/tlshell/tlshell.tcl:2090
msgid "Error"
msgstr ""
-#: tlpkg/installer/install-tl-gui.tcl:2023
+#: tlpkg/installer/install-tl-gui.tcl:2025
#, tcl-format
msgid "%s requires an argument"
msgstr ""
@@ -2163,7 +2163,7 @@ msgstr ""
msgid "Single-user"
msgstr ""
-#: texmf-dist/scripts/tlshell/tlshell.tcl:2499
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2500
#, tcl-format
msgid ""
"%s is not writable. You can probably not do much.\n"
diff --git a/systems/texlive/tlnet/tlpkg/translations/de.po b/systems/texlive/tlnet/tlpkg/translations/de.po
index 9bbaacb3c8..a0094ae15d 100644
--- a/systems/texlive/tlnet/tlpkg/translations/de.po
+++ b/systems/texlive/tlnet/tlpkg/translations/de.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: TeX Live translation\n"
"Report-Msgid-Bugs-To: tex-live@tug.org\n"
-"POT-Creation-Date: 2020-04-28 01:55+0200\n"
+"POT-Creation-Date: 2020-04-29 01:58+0200\n"
"PO-Revision-Date: 2020-03-22 06:40+0100\n"
"Last-Translator: Uwe Ziegenhagen <ziegenhagen@gmail.com>\n"
"Language-Team: TL German Translation Team <tex-live@tug.org>\n"
@@ -1499,12 +1499,12 @@ msgid "Abort"
msgstr "Breche ab"
#: tlpkg/installer/install-tl-gui.tcl:414
-#: tlpkg/installer/install-tl-gui.tcl:1992
+#: tlpkg/installer/install-tl-gui.tcl:1994
msgid "TeX Live Installer"
msgstr "TeX Live Installationsprogramm"
#: tlpkg/installer/install-tl-gui.tcl:417
-#: tlpkg/installer/install-tl-gui.tcl:2091
+#: tlpkg/installer/install-tl-gui.tcl:2093
#, tcl-format
msgid ""
"Trying to load %s.\n"
@@ -1724,22 +1724,22 @@ msgstr "Erstelle Symlinks in Standardverzeichnissen"
msgid "Specify directories"
msgstr "Wähle Verzeichnisse"
-#: tlpkg/installer/install-tl-gui.tcl:1832
+#: tlpkg/installer/install-tl-gui.tcl:1833
msgid "Custom scheme"
msgstr "Angepasstes Schema"
-#: tlpkg/installer/install-tl-gui.tcl:2017
+#: tlpkg/installer/install-tl-gui.tcl:2019
#, tcl-format
msgid "%s not a local or remote repository"
msgstr "%s ist kein lokales oder remote Repository."
-#: tlpkg/installer/install-tl-gui.tcl:2018
-#: tlpkg/installer/install-tl-gui.tcl:2024
+#: tlpkg/installer/install-tl-gui.tcl:2020
+#: tlpkg/installer/install-tl-gui.tcl:2026
#: texmf-dist/scripts/tlshell/tlshell.tcl:2090
msgid "Error"
msgstr "Fehler"
-#: tlpkg/installer/install-tl-gui.tcl:2023
+#: tlpkg/installer/install-tl-gui.tcl:2025
#, tcl-format
msgid "%s requires an argument"
msgstr "%s erfordert ein Argument"
@@ -2172,7 +2172,7 @@ msgstr "Multi-User"
msgid "Single-user"
msgstr "Single-User"
-#: texmf-dist/scripts/tlshell/tlshell.tcl:2499
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2500
#, tcl-format
msgid ""
"%s is not writable. You can probably not do much.\n"
diff --git a/systems/texlive/tlnet/tlpkg/translations/es.po b/systems/texlive/tlnet/tlpkg/translations/es.po
index d98b2e678c..2ae7e891a3 100644
--- a/systems/texlive/tlnet/tlpkg/translations/es.po
+++ b/systems/texlive/tlnet/tlpkg/translations/es.po
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: TeX Live translation\n"
"Report-Msgid-Bugs-To: tex-live@tug.org\n"
-"POT-Creation-Date: 2020-04-28 01:55+0200\n"
+"POT-Creation-Date: 2020-04-29 01:58+0200\n"
"PO-Revision-Date: 2019-03-30 17:58-0400\n"
"Last-Translator: linguafalsa <linguafalsa@gmail.com>\n"
"Language-Team: TL Translation Team <tex-live@tug.org>\n"
@@ -1516,12 +1516,12 @@ msgid "Abort"
msgstr "Abortar"
#: tlpkg/installer/install-tl-gui.tcl:414
-#: tlpkg/installer/install-tl-gui.tcl:1992
+#: tlpkg/installer/install-tl-gui.tcl:1994
msgid "TeX Live Installer"
msgstr "Instalador de TeX Live"
#: tlpkg/installer/install-tl-gui.tcl:417
-#: tlpkg/installer/install-tl-gui.tcl:2091
+#: tlpkg/installer/install-tl-gui.tcl:2093
#, tcl-format
msgid ""
"Trying to load %s.\n"
@@ -1740,22 +1740,22 @@ msgstr "Crea enlaces simbólicos en los directorios estándar"
msgid "Specify directories"
msgstr "Especifica directorios"
-#: tlpkg/installer/install-tl-gui.tcl:1832
+#: tlpkg/installer/install-tl-gui.tcl:1833
msgid "Custom scheme"
msgstr "Esquema personalizado"
-#: tlpkg/installer/install-tl-gui.tcl:2017
+#: tlpkg/installer/install-tl-gui.tcl:2019
#, tcl-format
msgid "%s not a local or remote repository"
msgstr ""
-#: tlpkg/installer/install-tl-gui.tcl:2018
-#: tlpkg/installer/install-tl-gui.tcl:2024
+#: tlpkg/installer/install-tl-gui.tcl:2020
+#: tlpkg/installer/install-tl-gui.tcl:2026
#: texmf-dist/scripts/tlshell/tlshell.tcl:2090
msgid "Error"
msgstr ""
-#: tlpkg/installer/install-tl-gui.tcl:2023
+#: tlpkg/installer/install-tl-gui.tcl:2025
#, tcl-format
msgid "%s requires an argument"
msgstr ""
@@ -2181,7 +2181,7 @@ msgstr ""
msgid "Single-user"
msgstr ""
-#: texmf-dist/scripts/tlshell/tlshell.tcl:2499
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2500
#, tcl-format
msgid ""
"%s is not writable. You can probably not do much.\n"
diff --git a/systems/texlive/tlnet/tlpkg/translations/fr.po b/systems/texlive/tlnet/tlpkg/translations/fr.po
index 57d770771b..3852da7798 100644
--- a/systems/texlive/tlnet/tlpkg/translations/fr.po
+++ b/systems/texlive/tlnet/tlpkg/translations/fr.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: TeX Live translation\n"
"Report-Msgid-Bugs-To: tex-live@tug.org\n"
-"POT-Creation-Date: 2020-04-28 01:55+0200\n"
+"POT-Creation-Date: 2020-04-29 01:58+0200\n"
"PO-Revision-Date: 2019-05-12 10:49+0100\n"
"Last-Translator: Denis Bitouzé <denis.bitouze@univ-littoral.fr>\n"
"Language-Team: French <kde-i18n-doc@kde.org>\n"
@@ -1513,12 +1513,12 @@ msgid "Abort"
msgstr "Annuler"
#: tlpkg/installer/install-tl-gui.tcl:414
-#: tlpkg/installer/install-tl-gui.tcl:1992
+#: tlpkg/installer/install-tl-gui.tcl:1994
msgid "TeX Live Installer"
msgstr "Installateur de la TeX Live"
#: tlpkg/installer/install-tl-gui.tcl:417
-#: tlpkg/installer/install-tl-gui.tcl:2091
+#: tlpkg/installer/install-tl-gui.tcl:2093
#, tcl-format
msgid ""
"Trying to load %s.\n"
@@ -1740,22 +1740,22 @@ msgstr "Créer les liens symboliques dans les répertoires standards"
msgid "Specify directories"
msgstr "Spécifier les répertoires"
-#: tlpkg/installer/install-tl-gui.tcl:1832
+#: tlpkg/installer/install-tl-gui.tcl:1833
msgid "Custom scheme"
msgstr "Schéma personnalisé"
-#: tlpkg/installer/install-tl-gui.tcl:2017
+#: tlpkg/installer/install-tl-gui.tcl:2019
#, tcl-format
msgid "%s not a local or remote repository"
msgstr "%s n'est pas un dépôt local ou distant"
-#: tlpkg/installer/install-tl-gui.tcl:2018
-#: tlpkg/installer/install-tl-gui.tcl:2024
+#: tlpkg/installer/install-tl-gui.tcl:2020
+#: tlpkg/installer/install-tl-gui.tcl:2026
#: texmf-dist/scripts/tlshell/tlshell.tcl:2090
msgid "Error"
msgstr "Erreur"
-#: tlpkg/installer/install-tl-gui.tcl:2023
+#: tlpkg/installer/install-tl-gui.tcl:2025
#, tcl-format
msgid "%s requires an argument"
msgstr "%s requiert un argument"
@@ -2187,7 +2187,7 @@ msgstr "Utilisateurs multiples"
msgid "Single-user"
msgstr "Utilisateur unique"
-#: texmf-dist/scripts/tlshell/tlshell.tcl:2499
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2500
#, tcl-format
msgid ""
"%s is not writable. You can probably not do much.\n"
diff --git a/systems/texlive/tlnet/tlpkg/translations/it.po b/systems/texlive/tlnet/tlpkg/translations/it.po
index 7b47a6c9d2..4a55d322db 100644
--- a/systems/texlive/tlnet/tlpkg/translations/it.po
+++ b/systems/texlive/tlnet/tlpkg/translations/it.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Tex Live translation\n"
"Report-Msgid-Bugs-To: tex-live@tug.org\n"
-"POT-Creation-Date: 2020-04-28 01:55+0200\n"
+"POT-Creation-Date: 2020-04-29 01:58+0200\n"
"PO-Revision-Date: 2020-03-24 08:19+0100\n"
"Last-Translator: Marco Pallante\n"
"Language-Team: <>\n"
@@ -1504,12 +1504,12 @@ msgid "Abort"
msgstr "Interrompi"
#: tlpkg/installer/install-tl-gui.tcl:414
-#: tlpkg/installer/install-tl-gui.tcl:1992
+#: tlpkg/installer/install-tl-gui.tcl:1994
msgid "TeX Live Installer"
msgstr "Installazione di TeX Live"
#: tlpkg/installer/install-tl-gui.tcl:417
-#: tlpkg/installer/install-tl-gui.tcl:2091
+#: tlpkg/installer/install-tl-gui.tcl:2093
#, tcl-format
msgid ""
"Trying to load %s.\n"
@@ -1726,22 +1726,22 @@ msgstr "Crea i collegamenti simbolici nelle cartelle di sistema"
msgid "Specify directories"
msgstr "Specifica le cartelle"
-#: tlpkg/installer/install-tl-gui.tcl:1832
+#: tlpkg/installer/install-tl-gui.tcl:1833
msgid "Custom scheme"
msgstr "Schema personalizzato"
-#: tlpkg/installer/install-tl-gui.tcl:2017
+#: tlpkg/installer/install-tl-gui.tcl:2019
#, tcl-format
msgid "%s not a local or remote repository"
msgstr ""
-#: tlpkg/installer/install-tl-gui.tcl:2018
-#: tlpkg/installer/install-tl-gui.tcl:2024
+#: tlpkg/installer/install-tl-gui.tcl:2020
+#: tlpkg/installer/install-tl-gui.tcl:2026
#: texmf-dist/scripts/tlshell/tlshell.tcl:2090
msgid "Error"
msgstr ""
-#: tlpkg/installer/install-tl-gui.tcl:2023
+#: tlpkg/installer/install-tl-gui.tcl:2025
#, tcl-format
msgid "%s requires an argument"
msgstr ""
@@ -2170,7 +2170,7 @@ msgstr ""
msgid "Single-user"
msgstr ""
-#: texmf-dist/scripts/tlshell/tlshell.tcl:2499
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2500
#, tcl-format
msgid ""
"%s is not writable. You can probably not do much.\n"
diff --git a/systems/texlive/tlnet/tlpkg/translations/ja.po b/systems/texlive/tlnet/tlpkg/translations/ja.po
index c8e626ef22..67912e090e 100644
--- a/systems/texlive/tlnet/tlpkg/translations/ja.po
+++ b/systems/texlive/tlnet/tlpkg/translations/ja.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: TeX Live translation\n"
"Report-Msgid-Bugs-To: tex-live@tug.org\n"
-"POT-Creation-Date: 2020-04-28 01:55+0200\n"
+"POT-Creation-Date: 2020-04-29 01:58+0200\n"
"PO-Revision-Date: 2020-03-14 05:48+0900\n"
"Last-Translator: Takuto Asakura <tkt.asakura@gmail.com>\n"
"Language-Team: TL Translation Team <tex-live@tug.org>\n"
@@ -1496,12 +1496,12 @@ msgid "Abort"
msgstr "中止"
#: tlpkg/installer/install-tl-gui.tcl:414
-#: tlpkg/installer/install-tl-gui.tcl:1992
+#: tlpkg/installer/install-tl-gui.tcl:1994
msgid "TeX Live Installer"
msgstr "TeX Live インストーラ"
#: tlpkg/installer/install-tl-gui.tcl:417
-#: tlpkg/installer/install-tl-gui.tcl:2091
+#: tlpkg/installer/install-tl-gui.tcl:2093
#, tcl-format
msgid ""
"Trying to load %s.\n"
@@ -1722,22 +1722,22 @@ msgstr "シンボリックリンクを標準ディレクトリã«ä½œæˆ"
msgid "Specify directories"
msgstr "ディレクトリを指定"
-#: tlpkg/installer/install-tl-gui.tcl:1832
+#: tlpkg/installer/install-tl-gui.tcl:1833
msgid "Custom scheme"
msgstr "カスタムスキーム"
-#: tlpkg/installer/install-tl-gui.tcl:2017
+#: tlpkg/installer/install-tl-gui.tcl:2019
#, tcl-format
msgid "%s not a local or remote repository"
msgstr "%s ã¯ãƒ­ãƒ¼ã‚«ãƒ«ãƒªãƒã‚¸ãƒˆãƒªã§ã‚‚リモートリãƒã‚¸ãƒˆãƒªã§ã‚‚ã‚ã‚Šã¾ã›ã‚“"
-#: tlpkg/installer/install-tl-gui.tcl:2018
-#: tlpkg/installer/install-tl-gui.tcl:2024
+#: tlpkg/installer/install-tl-gui.tcl:2020
+#: tlpkg/installer/install-tl-gui.tcl:2026
#: texmf-dist/scripts/tlshell/tlshell.tcl:2090
msgid "Error"
msgstr "エラー"
-#: tlpkg/installer/install-tl-gui.tcl:2023
+#: tlpkg/installer/install-tl-gui.tcl:2025
#, tcl-format
msgid "%s requires an argument"
msgstr "%s ã«ã¯å¼•æ•°ãŒå¿…è¦ã§ã™"
@@ -2168,7 +2168,7 @@ msgstr "マルãƒãƒ¦ãƒ¼ã‚¶"
msgid "Single-user"
msgstr "シングルユーザ"
-#: texmf-dist/scripts/tlshell/tlshell.tcl:2499
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2500
#, tcl-format
msgid ""
"%s is not writable. You can probably not do much.\n"
diff --git a/systems/texlive/tlnet/tlpkg/translations/messages.pot b/systems/texlive/tlnet/tlpkg/translations/messages.pot
index af24d1aa75..e6137c4b23 100644
--- a/systems/texlive/tlnet/tlpkg/translations/messages.pot
+++ b/systems/texlive/tlnet/tlpkg/translations/messages.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: TeX Live 2020\n"
"Report-Msgid-Bugs-To: tex-live@tug.org\n"
-"POT-Creation-Date: 2020-04-28 01:55+0200\n"
+"POT-Creation-Date: 2020-04-29 01:58+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -1431,12 +1431,12 @@ msgid "Abort"
msgstr ""
#: tlpkg/installer/install-tl-gui.tcl:414
-#: tlpkg/installer/install-tl-gui.tcl:1992
+#: tlpkg/installer/install-tl-gui.tcl:1994
msgid "TeX Live Installer"
msgstr ""
#: tlpkg/installer/install-tl-gui.tcl:417
-#: tlpkg/installer/install-tl-gui.tcl:2091
+#: tlpkg/installer/install-tl-gui.tcl:2093
#, tcl-format
msgid ""
"Trying to load %s.\n"
@@ -1648,22 +1648,22 @@ msgstr ""
msgid "Specify directories"
msgstr ""
-#: tlpkg/installer/install-tl-gui.tcl:1832
+#: tlpkg/installer/install-tl-gui.tcl:1833
msgid "Custom scheme"
msgstr ""
-#: tlpkg/installer/install-tl-gui.tcl:2017
+#: tlpkg/installer/install-tl-gui.tcl:2019
#, tcl-format
msgid "%s not a local or remote repository"
msgstr ""
-#: tlpkg/installer/install-tl-gui.tcl:2018
-#: tlpkg/installer/install-tl-gui.tcl:2024
+#: tlpkg/installer/install-tl-gui.tcl:2020
+#: tlpkg/installer/install-tl-gui.tcl:2026
#: texmf-dist/scripts/tlshell/tlshell.tcl:2090
msgid "Error"
msgstr ""
-#: tlpkg/installer/install-tl-gui.tcl:2023
+#: tlpkg/installer/install-tl-gui.tcl:2025
#, tcl-format
msgid "%s requires an argument"
msgstr ""
@@ -2081,7 +2081,7 @@ msgstr ""
msgid "Single-user"
msgstr ""
-#: texmf-dist/scripts/tlshell/tlshell.tcl:2499
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2500
#, tcl-format
msgid ""
"%s is not writable. You can probably not do much.\n"
diff --git a/systems/texlive/tlnet/tlpkg/translations/nl.po b/systems/texlive/tlnet/tlpkg/translations/nl.po
index 699bc2ae1f..437aff50a0 100644
--- a/systems/texlive/tlnet/tlpkg/translations/nl.po
+++ b/systems/texlive/tlnet/tlpkg/translations/nl.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: TeX Live translation\n"
"Report-Msgid-Bugs-To: tex-live@tug.org\n"
-"POT-Creation-Date: 2020-04-28 01:55+0200\n"
+"POT-Creation-Date: 2020-04-29 01:58+0200\n"
"PO-Revision-Date: 2020-03-18 12:05+0100\n"
"Last-Translator: Siep Kroonenberg <siepo@bitmuis.nl>\n"
"Language-Team: TL Translation Team <tex-live@tug.org>\n"
@@ -1498,12 +1498,12 @@ msgid "Abort"
msgstr "Afbreken"
#: tlpkg/installer/install-tl-gui.tcl:414
-#: tlpkg/installer/install-tl-gui.tcl:1992
+#: tlpkg/installer/install-tl-gui.tcl:1994
msgid "TeX Live Installer"
msgstr "TeX Live Installatie"
#: tlpkg/installer/install-tl-gui.tcl:417
-#: tlpkg/installer/install-tl-gui.tcl:2091
+#: tlpkg/installer/install-tl-gui.tcl:2093
#, tcl-format
msgid ""
"Trying to load %s.\n"
@@ -1724,22 +1724,22 @@ msgstr "Maak symlinks in standaard folders"
msgid "Specify directories"
msgstr "Specificeer folders"
-#: tlpkg/installer/install-tl-gui.tcl:1832
+#: tlpkg/installer/install-tl-gui.tcl:1833
msgid "Custom scheme"
msgstr "Eigen schema"
-#: tlpkg/installer/install-tl-gui.tcl:2017
+#: tlpkg/installer/install-tl-gui.tcl:2019
#, tcl-format
msgid "%s not a local or remote repository"
msgstr "%s is niet een lokale of online installatie-bron"
-#: tlpkg/installer/install-tl-gui.tcl:2018
-#: tlpkg/installer/install-tl-gui.tcl:2024
+#: tlpkg/installer/install-tl-gui.tcl:2020
+#: tlpkg/installer/install-tl-gui.tcl:2026
#: texmf-dist/scripts/tlshell/tlshell.tcl:2090
msgid "Error"
msgstr "Fout"
-#: tlpkg/installer/install-tl-gui.tcl:2023
+#: tlpkg/installer/install-tl-gui.tcl:2025
#, tcl-format
msgid "%s requires an argument"
msgstr "%s vereist een argument"
@@ -2173,7 +2173,7 @@ msgstr "Voor alle gebruikers"
msgid "Single-user"
msgstr "Alleen voor uzelf"
-#: texmf-dist/scripts/tlshell/tlshell.tcl:2499
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2500
#, tcl-format
msgid ""
"%s is not writable. You can probably not do much.\n"
diff --git a/systems/texlive/tlnet/tlpkg/translations/pl.po b/systems/texlive/tlnet/tlpkg/translations/pl.po
index 5273f73123..36bce3e52d 100644
--- a/systems/texlive/tlnet/tlpkg/translations/pl.po
+++ b/systems/texlive/tlnet/tlpkg/translations/pl.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: TeX Live 2020\n"
"Report-Msgid-Bugs-To: tex-live@tug.org\n"
-"POT-Creation-Date: 2020-04-28 01:55+0200\n"
+"POT-Creation-Date: 2020-04-29 01:58+0200\n"
"PO-Revision-Date: 2020-03-15 17:09+0100\n"
"Last-Translator: Zofia Walczak <pelagia48@gmail.com>\n"
"Language-Team: \n"
@@ -1502,12 +1502,12 @@ msgid "Abort"
msgstr "Anuluj"
#: tlpkg/installer/install-tl-gui.tcl:414
-#: tlpkg/installer/install-tl-gui.tcl:1992
+#: tlpkg/installer/install-tl-gui.tcl:1994
msgid "TeX Live Installer"
msgstr "Instalator TeX Live"
#: tlpkg/installer/install-tl-gui.tcl:417
-#: tlpkg/installer/install-tl-gui.tcl:2091
+#: tlpkg/installer/install-tl-gui.tcl:2093
#, tcl-format
msgid ""
"Trying to load %s.\n"
@@ -1729,22 +1729,22 @@ msgstr "Utwórz dowiązania symboliczne do standardowych katalogów"
msgid "Specify directories"
msgstr "Określ katalogi"
-#: tlpkg/installer/install-tl-gui.tcl:1832
+#: tlpkg/installer/install-tl-gui.tcl:1833
msgid "Custom scheme"
msgstr "Schemat indywidualny"
-#: tlpkg/installer/install-tl-gui.tcl:2017
+#: tlpkg/installer/install-tl-gui.tcl:2019
#, tcl-format
msgid "%s not a local or remote repository"
msgstr "%s nie lokalne lub zdalne repozytorium"
-#: tlpkg/installer/install-tl-gui.tcl:2018
-#: tlpkg/installer/install-tl-gui.tcl:2024
+#: tlpkg/installer/install-tl-gui.tcl:2020
+#: tlpkg/installer/install-tl-gui.tcl:2026
#: texmf-dist/scripts/tlshell/tlshell.tcl:2090
msgid "Error"
msgstr "BÅ‚Ä…d"
-#: tlpkg/installer/install-tl-gui.tcl:2023
+#: tlpkg/installer/install-tl-gui.tcl:2025
#, tcl-format
msgid "%s requires an argument"
msgstr "%s wymaga argumentu"
@@ -2175,7 +2175,7 @@ msgstr "Wielu użytkowników"
msgid "Single-user"
msgstr "Jeden użytkownik"
-#: texmf-dist/scripts/tlshell/tlshell.tcl:2499
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2500
#, tcl-format
msgid ""
"%s is not writable. You can probably not do much.\n"
diff --git a/systems/texlive/tlnet/tlpkg/translations/pt_BR.po b/systems/texlive/tlnet/tlpkg/translations/pt_BR.po
index 29bba0c2e5..231dc1491f 100644
--- a/systems/texlive/tlnet/tlpkg/translations/pt_BR.po
+++ b/systems/texlive/tlnet/tlpkg/translations/pt_BR.po
@@ -4,7 +4,7 @@ msgid ""
msgstr ""
"Project-Id-Version: TeX Live translation\n"
"Report-Msgid-Bugs-To: tex-live@tug.org\n"
-"POT-Creation-Date: 2020-04-28 01:55+0200\n"
+"POT-Creation-Date: 2020-04-29 01:58+0200\n"
"PO-Revision-Date: 2020-01-20 10:03-0300\n"
"Last-Translator: Paulo Roberto Massa Cereda <cereda.paulo@gmail.com>\n"
"Language-Team: Paulo Roberto Massa Cereda <cereda.paulo@gmail.com>\n"
@@ -1507,12 +1507,12 @@ msgid "Abort"
msgstr "Abortar"
#: tlpkg/installer/install-tl-gui.tcl:414
-#: tlpkg/installer/install-tl-gui.tcl:1992
+#: tlpkg/installer/install-tl-gui.tcl:1994
msgid "TeX Live Installer"
msgstr "Instalador TeX Live"
#: tlpkg/installer/install-tl-gui.tcl:417
-#: tlpkg/installer/install-tl-gui.tcl:2091
+#: tlpkg/installer/install-tl-gui.tcl:2093
#, tcl-format
msgid ""
"Trying to load %s.\n"
@@ -1734,22 +1734,22 @@ msgstr "Criar links simbólicos nos diretórios convencionais"
msgid "Specify directories"
msgstr "Especificar diretórios"
-#: tlpkg/installer/install-tl-gui.tcl:1832
+#: tlpkg/installer/install-tl-gui.tcl:1833
msgid "Custom scheme"
msgstr "Esquema personalizado"
-#: tlpkg/installer/install-tl-gui.tcl:2017
+#: tlpkg/installer/install-tl-gui.tcl:2019
#, tcl-format
msgid "%s not a local or remote repository"
msgstr "%s não é um repositório local ou remoto"
-#: tlpkg/installer/install-tl-gui.tcl:2018
-#: tlpkg/installer/install-tl-gui.tcl:2024
+#: tlpkg/installer/install-tl-gui.tcl:2020
+#: tlpkg/installer/install-tl-gui.tcl:2026
#: texmf-dist/scripts/tlshell/tlshell.tcl:2090
msgid "Error"
msgstr "Erro"
-#: tlpkg/installer/install-tl-gui.tcl:2023
+#: tlpkg/installer/install-tl-gui.tcl:2025
#, tcl-format
msgid "%s requires an argument"
msgstr "%s requer um argumento"
@@ -2182,7 +2182,7 @@ msgstr "Multiusuário"
msgid "Single-user"
msgstr "Usuário único"
-#: texmf-dist/scripts/tlshell/tlshell.tcl:2499
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2500
#, tcl-format
msgid ""
"%s is not writable. You can probably not do much.\n"
diff --git a/systems/texlive/tlnet/tlpkg/translations/ru.po b/systems/texlive/tlnet/tlpkg/translations/ru.po
index ff1f6d7641..46a5656b6b 100644
--- a/systems/texlive/tlnet/tlpkg/translations/ru.po
+++ b/systems/texlive/tlnet/tlpkg/translations/ru.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: TeX Live translation\n"
"Report-Msgid-Bugs-To: tex-live@tug.org\n"
-"POT-Creation-Date: 2020-04-28 01:55+0200\n"
+"POT-Creation-Date: 2020-04-29 01:58+0200\n"
"PO-Revision-Date: 2020-02-24 12:40+0800\n"
"Last-Translator: Vladimir Lomov <irk.translator@yandex.ru>\n"
"Language-Team: Russian <tldoc@tug.org>\n"
@@ -1502,12 +1502,12 @@ msgid "Abort"
msgstr "Отмена"
#: tlpkg/installer/install-tl-gui.tcl:414
-#: tlpkg/installer/install-tl-gui.tcl:1992
+#: tlpkg/installer/install-tl-gui.tcl:1994
msgid "TeX Live Installer"
msgstr "Программа уÑтановки TeX Live"
#: tlpkg/installer/install-tl-gui.tcl:417
-#: tlpkg/installer/install-tl-gui.tcl:2091
+#: tlpkg/installer/install-tl-gui.tcl:2093
#, tcl-format
msgid ""
"Trying to load %s.\n"
@@ -1728,22 +1728,22 @@ msgstr "Создать Ñимвольные ÑÑылки в Ñтандартны
msgid "Specify directories"
msgstr "Укажите каталоги"
-#: tlpkg/installer/install-tl-gui.tcl:1832
+#: tlpkg/installer/install-tl-gui.tcl:1833
msgid "Custom scheme"
msgstr "СобÑÑ‚Ð²ÐµÐ½Ð½Ð°Ñ Ñхема"
-#: tlpkg/installer/install-tl-gui.tcl:2017
+#: tlpkg/installer/install-tl-gui.tcl:2019
#, tcl-format
msgid "%s not a local or remote repository"
msgstr "%s не ÑвлÑетÑÑ Ð½Ð¸ локальным, ни удалённым репозиторием"
-#: tlpkg/installer/install-tl-gui.tcl:2018
-#: tlpkg/installer/install-tl-gui.tcl:2024
+#: tlpkg/installer/install-tl-gui.tcl:2020
+#: tlpkg/installer/install-tl-gui.tcl:2026
#: texmf-dist/scripts/tlshell/tlshell.tcl:2090
msgid "Error"
msgstr "Ошибка"
-#: tlpkg/installer/install-tl-gui.tcl:2023
+#: tlpkg/installer/install-tl-gui.tcl:2025
#, tcl-format
msgid "%s requires an argument"
msgstr "Ð´Ð»Ñ %s требуетÑÑ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚"
@@ -2176,7 +2176,7 @@ msgstr "Ð”Ð»Ñ Ð²Ñех пользователей"
msgid "Single-user"
msgstr "Ð”Ð»Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ пользователÑ"
-#: texmf-dist/scripts/tlshell/tlshell.tcl:2499
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2500
#, tcl-format
msgid ""
"%s is not writable. You can probably not do much.\n"
diff --git a/systems/texlive/tlnet/tlpkg/translations/sk.po b/systems/texlive/tlnet/tlpkg/translations/sk.po
index 4da9d0461f..1d6e1aa762 100644
--- a/systems/texlive/tlnet/tlpkg/translations/sk.po
+++ b/systems/texlive/tlnet/tlpkg/translations/sk.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: TeX Live translation\n"
"Report-Msgid-Bugs-To: tex-live@tug.org\n"
-"POT-Creation-Date: 2020-04-28 01:55+0200\n"
+"POT-Creation-Date: 2020-04-29 01:58+0200\n"
"PO-Revision-Date: 2019-03-22 00:57+0300\n"
"Last-Translator: Ján Buša <jan.busa@tuke.sk>\n"
"Language-Team: tex-live@tug.org\n"
@@ -1502,12 +1502,12 @@ msgid "Abort"
msgstr "Prerušiť"
#: tlpkg/installer/install-tl-gui.tcl:414
-#: tlpkg/installer/install-tl-gui.tcl:1992
+#: tlpkg/installer/install-tl-gui.tcl:1994
msgid "TeX Live Installer"
msgstr "Inštalátor TeX Live"
#: tlpkg/installer/install-tl-gui.tcl:417
-#: tlpkg/installer/install-tl-gui.tcl:2091
+#: tlpkg/installer/install-tl-gui.tcl:2093
#, tcl-format
msgid ""
"Trying to load %s.\n"
@@ -1724,22 +1724,22 @@ msgstr "Vytvoriť symbolické odkazy v štandardných adresároch"
msgid "Specify directories"
msgstr "Špecifikujte adresáre"
-#: tlpkg/installer/install-tl-gui.tcl:1832
+#: tlpkg/installer/install-tl-gui.tcl:1833
msgid "Custom scheme"
msgstr "Prispôsobenie schémy"
-#: tlpkg/installer/install-tl-gui.tcl:2017
+#: tlpkg/installer/install-tl-gui.tcl:2019
#, tcl-format
msgid "%s not a local or remote repository"
msgstr ""
-#: tlpkg/installer/install-tl-gui.tcl:2018
-#: tlpkg/installer/install-tl-gui.tcl:2024
+#: tlpkg/installer/install-tl-gui.tcl:2020
+#: tlpkg/installer/install-tl-gui.tcl:2026
#: texmf-dist/scripts/tlshell/tlshell.tcl:2090
msgid "Error"
msgstr ""
-#: tlpkg/installer/install-tl-gui.tcl:2023
+#: tlpkg/installer/install-tl-gui.tcl:2025
#, tcl-format
msgid "%s requires an argument"
msgstr ""
@@ -2168,7 +2168,7 @@ msgstr ""
msgid "Single-user"
msgstr ""
-#: texmf-dist/scripts/tlshell/tlshell.tcl:2499
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2500
#, tcl-format
msgid ""
"%s is not writable. You can probably not do much.\n"
diff --git a/systems/texlive/tlnet/tlpkg/translations/sl.po b/systems/texlive/tlnet/tlpkg/translations/sl.po
index 4bc2f1ca4e..f9742a0eb6 100644
--- a/systems/texlive/tlnet/tlpkg/translations/sl.po
+++ b/systems/texlive/tlnet/tlpkg/translations/sl.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: TeX Live translation\n"
"Report-Msgid-Bugs-To: tex-live@tug.org\n"
-"POT-Creation-Date: 2020-04-28 01:55+0200\n"
+"POT-Creation-Date: 2020-04-29 01:58+0200\n"
"PO-Revision-Date: 2019-04-08 23:05+0200\n"
"Last-Translator: Mojca Miklavec <mojca.miklavec.lists@gmail.com>\n"
"Language-Team: TL Translation Team <tex-live@tug.org>\n"
@@ -1566,12 +1566,12 @@ msgid "Abort"
msgstr "Prekini"
#: tlpkg/installer/install-tl-gui.tcl:414
-#: tlpkg/installer/install-tl-gui.tcl:1992
+#: tlpkg/installer/install-tl-gui.tcl:1994
msgid "TeX Live Installer"
msgstr "Namestitev TeX Live-a"
#: tlpkg/installer/install-tl-gui.tcl:417
-#: tlpkg/installer/install-tl-gui.tcl:2091
+#: tlpkg/installer/install-tl-gui.tcl:2093
#, tcl-format
msgid ""
"Trying to load %s.\n"
@@ -1795,22 +1795,22 @@ msgstr "Ustvari simbolne povezave v standardnih mapah"
msgid "Specify directories"
msgstr "DoloÄi mape"
-#: tlpkg/installer/install-tl-gui.tcl:1832
+#: tlpkg/installer/install-tl-gui.tcl:1833
msgid "Custom scheme"
msgstr "Shema po meri"
-#: tlpkg/installer/install-tl-gui.tcl:2017
+#: tlpkg/installer/install-tl-gui.tcl:2019
#, tcl-format
msgid "%s not a local or remote repository"
msgstr ""
-#: tlpkg/installer/install-tl-gui.tcl:2018
-#: tlpkg/installer/install-tl-gui.tcl:2024
+#: tlpkg/installer/install-tl-gui.tcl:2020
+#: tlpkg/installer/install-tl-gui.tcl:2026
#: texmf-dist/scripts/tlshell/tlshell.tcl:2090
msgid "Error"
msgstr ""
-#: tlpkg/installer/install-tl-gui.tcl:2023
+#: tlpkg/installer/install-tl-gui.tcl:2025
#, tcl-format
msgid "%s requires an argument"
msgstr ""
@@ -2253,7 +2253,7 @@ msgstr "Za veÄ uporabnikov"
msgid "Single-user"
msgstr "Za enega uporabnika"
-#: texmf-dist/scripts/tlshell/tlshell.tcl:2499
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2500
#, fuzzy, tcl-format
msgid ""
"%s is not writable. You can probably not do much.\n"
diff --git a/systems/texlive/tlnet/tlpkg/translations/sr.po b/systems/texlive/tlnet/tlpkg/translations/sr.po
index 3d5408c8d9..2e2ada3520 100644
--- a/systems/texlive/tlnet/tlpkg/translations/sr.po
+++ b/systems/texlive/tlnet/tlpkg/translations/sr.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: TeX Live translation\n"
"Report-Msgid-Bugs-To: tex-live@tug.org\n"
-"POT-Creation-Date: 2020-04-28 01:55+0200\n"
+"POT-Creation-Date: 2020-04-29 01:58+0200\n"
"PO-Revision-Date: 2019-10-23 02:13+0300\n"
"Last-Translator: Nikola LeÄić <nikola.lecic@anthesphoria.net>\n"
"Language-Team: TL Translation Team <tex-live@tug.org>\n"
@@ -1509,12 +1509,12 @@ msgid "Abort"
msgstr "Прекинути"
#: tlpkg/installer/install-tl-gui.tcl:414
-#: tlpkg/installer/install-tl-gui.tcl:1992
+#: tlpkg/installer/install-tl-gui.tcl:1994
msgid "TeX Live Installer"
msgstr "TeX Live инÑталер"
#: tlpkg/installer/install-tl-gui.tcl:417
-#: tlpkg/installer/install-tl-gui.tcl:2091
+#: tlpkg/installer/install-tl-gui.tcl:2093
#, tcl-format
msgid ""
"Trying to load %s.\n"
@@ -1735,22 +1735,22 @@ msgstr "Ðаправи Ñимболичке линкове у Ñтандардн
msgid "Specify directories"
msgstr "Подешавање директоријума"
-#: tlpkg/installer/install-tl-gui.tcl:1832
+#: tlpkg/installer/install-tl-gui.tcl:1833
msgid "Custom scheme"
msgstr "СопÑтвена шема"
-#: tlpkg/installer/install-tl-gui.tcl:2017
+#: tlpkg/installer/install-tl-gui.tcl:2019
#, tcl-format
msgid "%s not a local or remote repository"
msgstr "%s није ни локални и удаљени репозиторијум"
-#: tlpkg/installer/install-tl-gui.tcl:2018
-#: tlpkg/installer/install-tl-gui.tcl:2024
+#: tlpkg/installer/install-tl-gui.tcl:2020
+#: tlpkg/installer/install-tl-gui.tcl:2026
#: texmf-dist/scripts/tlshell/tlshell.tcl:2090
msgid "Error"
msgstr "Грешка"
-#: tlpkg/installer/install-tl-gui.tcl:2023
+#: tlpkg/installer/install-tl-gui.tcl:2025
#, tcl-format
msgid "%s requires an argument"
msgstr "Уз %s је потребан аргумент"
@@ -2183,7 +2183,7 @@ msgstr "Више кориÑника"
msgid "Single-user"
msgstr "Један кориÑник"
-#: texmf-dist/scripts/tlshell/tlshell.tcl:2499
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2500
#, tcl-format
msgid ""
"%s is not writable. You can probably not do much.\n"
diff --git a/systems/texlive/tlnet/tlpkg/translations/uk.po b/systems/texlive/tlnet/tlpkg/translations/uk.po
index ebf6ad0edd..792540be9c 100644
--- a/systems/texlive/tlnet/tlpkg/translations/uk.po
+++ b/systems/texlive/tlnet/tlpkg/translations/uk.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: TeX Live 2010\n"
"Report-Msgid-Bugs-To: tex-live@tug.org\n"
-"POT-Creation-Date: 2020-04-28 01:55+0200\n"
+"POT-Creation-Date: 2020-04-29 01:58+0200\n"
"PO-Revision-Date: 2019-03-23 09:02+0200\n"
"Last-Translator: Andriy Bandura <andriykopanytsia@gmail.com>\n"
"Language-Team: Ukrainian <andriykopanytsia@gmail.com>\n"
@@ -1499,12 +1499,12 @@ msgid "Abort"
msgstr "Перервати"
#: tlpkg/installer/install-tl-gui.tcl:414
-#: tlpkg/installer/install-tl-gui.tcl:1992
+#: tlpkg/installer/install-tl-gui.tcl:1994
msgid "TeX Live Installer"
msgstr "Ð’Ñтановлювач Tex Live"
#: tlpkg/installer/install-tl-gui.tcl:417
-#: tlpkg/installer/install-tl-gui.tcl:2091
+#: tlpkg/installer/install-tl-gui.tcl:2093
#, tcl-format
msgid ""
"Trying to load %s.\n"
@@ -1721,22 +1721,22 @@ msgstr "Створити Ñимвольні поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ñƒ типових
msgid "Specify directories"
msgstr "Вказати каталоги"
-#: tlpkg/installer/install-tl-gui.tcl:1832
+#: tlpkg/installer/install-tl-gui.tcl:1833
msgid "Custom scheme"
msgstr "ВлаÑна Ñхема"
-#: tlpkg/installer/install-tl-gui.tcl:2017
+#: tlpkg/installer/install-tl-gui.tcl:2019
#, tcl-format
msgid "%s not a local or remote repository"
msgstr ""
-#: tlpkg/installer/install-tl-gui.tcl:2018
-#: tlpkg/installer/install-tl-gui.tcl:2024
+#: tlpkg/installer/install-tl-gui.tcl:2020
+#: tlpkg/installer/install-tl-gui.tcl:2026
#: texmf-dist/scripts/tlshell/tlshell.tcl:2090
msgid "Error"
msgstr ""
-#: tlpkg/installer/install-tl-gui.tcl:2023
+#: tlpkg/installer/install-tl-gui.tcl:2025
#, tcl-format
msgid "%s requires an argument"
msgstr ""
@@ -2165,7 +2165,7 @@ msgstr ""
msgid "Single-user"
msgstr ""
-#: texmf-dist/scripts/tlshell/tlshell.tcl:2499
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2500
#, tcl-format
msgid ""
"%s is not writable. You can probably not do much.\n"
diff --git a/systems/texlive/tlnet/tlpkg/translations/vi.po b/systems/texlive/tlnet/tlpkg/translations/vi.po
index 51135a9b38..4c0d072b87 100644
--- a/systems/texlive/tlnet/tlpkg/translations/vi.po
+++ b/systems/texlive/tlnet/tlpkg/translations/vi.po
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: TeX Live translation\n"
"Report-Msgid-Bugs-To: tex-live@tug.org\n"
-"POT-Creation-Date: 2020-04-28 01:55+0200\n"
+"POT-Creation-Date: 2020-04-29 01:58+0200\n"
"PO-Revision-Date: 2020-03-24 22:04+0100\n"
"Last-Translator: Anh K. Huỳnh <kyanh@viettug.org>\n"
"Language-Team: TL Translation Team <tex-live@tug.org>\n"
@@ -1500,12 +1500,12 @@ msgid "Abort"
msgstr "Bá» ngang"
#: tlpkg/installer/install-tl-gui.tcl:414
-#: tlpkg/installer/install-tl-gui.tcl:1992
+#: tlpkg/installer/install-tl-gui.tcl:1994
msgid "TeX Live Installer"
msgstr "Chương trình cài đặt TeX Live"
#: tlpkg/installer/install-tl-gui.tcl:417
-#: tlpkg/installer/install-tl-gui.tcl:2091
+#: tlpkg/installer/install-tl-gui.tcl:2093
#, tcl-format
msgid ""
"Trying to load %s.\n"
@@ -1727,22 +1727,22 @@ msgstr "Tạo liên kết má»m trong các thÆ° mục tiêu chuẩn"
msgid "Specify directories"
msgstr "Chá»n thÆ° mục"
-#: tlpkg/installer/install-tl-gui.tcl:1832
+#: tlpkg/installer/install-tl-gui.tcl:1833
msgid "Custom scheme"
msgstr "Chá»n mẫu"
-#: tlpkg/installer/install-tl-gui.tcl:2017
+#: tlpkg/installer/install-tl-gui.tcl:2019
#, tcl-format
msgid "%s not a local or remote repository"
msgstr "%s không phải kho ở dưới máy hay trên mạng"
-#: tlpkg/installer/install-tl-gui.tcl:2018
-#: tlpkg/installer/install-tl-gui.tcl:2024
+#: tlpkg/installer/install-tl-gui.tcl:2020
+#: tlpkg/installer/install-tl-gui.tcl:2026
#: texmf-dist/scripts/tlshell/tlshell.tcl:2090
msgid "Error"
msgstr "Lá»—i"
-#: tlpkg/installer/install-tl-gui.tcl:2023
+#: tlpkg/installer/install-tl-gui.tcl:2025
#, tcl-format
msgid "%s requires an argument"
msgstr "%s thiếu một tham số"
@@ -2171,7 +2171,7 @@ msgstr "Nhiá»u ngÆ°á»i dùng"
msgid "Single-user"
msgstr "Má»™t ngÆ°á»i dùng"
-#: texmf-dist/scripts/tlshell/tlshell.tcl:2499
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2500
#, tcl-format
msgid ""
"%s is not writable. You can probably not do much.\n"
diff --git a/systems/texlive/tlnet/tlpkg/translations/zh_CN.po b/systems/texlive/tlnet/tlpkg/translations/zh_CN.po
index 6a7dc5dba4..1acddeae79 100644
--- a/systems/texlive/tlnet/tlpkg/translations/zh_CN.po
+++ b/systems/texlive/tlnet/tlpkg/translations/zh_CN.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: TeX Live translation\n"
"Report-Msgid-Bugs-To: tex-live@tug.org\n"
-"POT-Creation-Date: 2020-04-28 01:55+0200\n"
+"POT-Creation-Date: 2020-04-29 01:58+0200\n"
"PO-Revision-Date: 2009-09-22 12:54+0800\n"
"Last-Translator: Jiang Jiang <gzjjgod@gmail.com>\n"
"Language-Team: TL Translation Team <tex-live@tug.org>\n"
@@ -1441,12 +1441,12 @@ msgid "Abort"
msgstr ""
#: tlpkg/installer/install-tl-gui.tcl:414
-#: tlpkg/installer/install-tl-gui.tcl:1992
+#: tlpkg/installer/install-tl-gui.tcl:1994
msgid "TeX Live Installer"
msgstr ""
#: tlpkg/installer/install-tl-gui.tcl:417
-#: tlpkg/installer/install-tl-gui.tcl:2091
+#: tlpkg/installer/install-tl-gui.tcl:2093
#, tcl-format
msgid ""
"Trying to load %s.\n"
@@ -1658,22 +1658,22 @@ msgstr ""
msgid "Specify directories"
msgstr ""
-#: tlpkg/installer/install-tl-gui.tcl:1832
+#: tlpkg/installer/install-tl-gui.tcl:1833
msgid "Custom scheme"
msgstr ""
-#: tlpkg/installer/install-tl-gui.tcl:2017
+#: tlpkg/installer/install-tl-gui.tcl:2019
#, tcl-format
msgid "%s not a local or remote repository"
msgstr ""
-#: tlpkg/installer/install-tl-gui.tcl:2018
-#: tlpkg/installer/install-tl-gui.tcl:2024
+#: tlpkg/installer/install-tl-gui.tcl:2020
+#: tlpkg/installer/install-tl-gui.tcl:2026
#: texmf-dist/scripts/tlshell/tlshell.tcl:2090
msgid "Error"
msgstr ""
-#: tlpkg/installer/install-tl-gui.tcl:2023
+#: tlpkg/installer/install-tl-gui.tcl:2025
#, tcl-format
msgid "%s requires an argument"
msgstr ""
@@ -2091,7 +2091,7 @@ msgstr ""
msgid "Single-user"
msgstr ""
-#: texmf-dist/scripts/tlshell/tlshell.tcl:2499
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2500
#, tcl-format
msgid ""
"%s is not writable. You can probably not do much.\n"
diff --git a/systems/texlive/tlnet/tlpkg/translations/zh_TW.po b/systems/texlive/tlnet/tlpkg/translations/zh_TW.po
index 71a80657af..1681c12241 100644
--- a/systems/texlive/tlnet/tlpkg/translations/zh_TW.po
+++ b/systems/texlive/tlnet/tlpkg/translations/zh_TW.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: TeX Live translation\n"
"Report-Msgid-Bugs-To: tex-live@tug.org\n"
-"POT-Creation-Date: 2020-04-28 01:55+0200\n"
+"POT-Creation-Date: 2020-04-29 01:58+0200\n"
"PO-Revision-Date: 2009-09-03 12:34+0200\n"
"Last-Translator: Norbert Preining <preining@logic.at>\n"
"Language-Team: TL Translation Team <tex-live@tug.org>\n"
@@ -1464,12 +1464,12 @@ msgid "Abort"
msgstr ""
#: tlpkg/installer/install-tl-gui.tcl:414
-#: tlpkg/installer/install-tl-gui.tcl:1992
+#: tlpkg/installer/install-tl-gui.tcl:1994
msgid "TeX Live Installer"
msgstr ""
#: tlpkg/installer/install-tl-gui.tcl:417
-#: tlpkg/installer/install-tl-gui.tcl:2091
+#: tlpkg/installer/install-tl-gui.tcl:2093
#, tcl-format
msgid ""
"Trying to load %s.\n"
@@ -1681,22 +1681,22 @@ msgstr ""
msgid "Specify directories"
msgstr ""
-#: tlpkg/installer/install-tl-gui.tcl:1832
+#: tlpkg/installer/install-tl-gui.tcl:1833
msgid "Custom scheme"
msgstr ""
-#: tlpkg/installer/install-tl-gui.tcl:2017
+#: tlpkg/installer/install-tl-gui.tcl:2019
#, tcl-format
msgid "%s not a local or remote repository"
msgstr ""
-#: tlpkg/installer/install-tl-gui.tcl:2018
-#: tlpkg/installer/install-tl-gui.tcl:2024
+#: tlpkg/installer/install-tl-gui.tcl:2020
+#: tlpkg/installer/install-tl-gui.tcl:2026
#: texmf-dist/scripts/tlshell/tlshell.tcl:2090
msgid "Error"
msgstr ""
-#: tlpkg/installer/install-tl-gui.tcl:2023
+#: tlpkg/installer/install-tl-gui.tcl:2025
#, tcl-format
msgid "%s requires an argument"
msgstr ""
@@ -2116,7 +2116,7 @@ msgstr ""
msgid "Single-user"
msgstr ""
-#: texmf-dist/scripts/tlshell/tlshell.tcl:2499
+#: texmf-dist/scripts/tlshell/tlshell.tcl:2500
#, tcl-format
msgid ""
"%s is not writable. You can probably not do much.\n"
diff --git a/systems/win32/miktex/setup/deb/dists/bionic/InRelease b/systems/win32/miktex/setup/deb/dists/bionic/InRelease
index 0f89fd7357..06e1e0a4e7 100644
--- a/systems/win32/miktex/setup/deb/dists/bionic/InRelease
+++ b/systems/win32/miktex/setup/deb/dists/bionic/InRelease
@@ -5,36 +5,36 @@ Origin: . bionic
Label: . bionic
Suite: bionic
Codename: bionic
-Date: Sun, 22 Mar 2020 13:34:49 UTC
+Date: Wed, 29 Apr 2020 10:04:29 UTC
Architectures: amd64
Components: universe
Description: Generated by aptly
MD5Sum:
- bc7c603aec04c380d4e7e2030b9839a9 769 universe/binary-amd64/Packages.bz2
- 26e63bdaba8403f0f154603ac4ff5e56 1361 universe/Contents-amd64.gz
+ 113f08bacfa3613f0239299f71c2a33f 2644 universe/binary-amd64/Packages
+ cdcabd31886e1b9365e37423eaeec125 871 universe/binary-amd64/Packages.gz
+ 9b4acf5e55278f74b70b08aedc9cdd3c 1038 universe/binary-amd64/Packages.bz2
+ a757fd36f2c66b22d2774f37b3605534 1395 universe/Contents-amd64.gz
36dc8434c02eb018d9e4e8e159504a01 89 universe/binary-amd64/Release
- 32831a3bd1ed19f86cdc23fc3fa6441f 1322 universe/binary-amd64/Packages
- 315a78494d2d234f7098250990ba87e8 736 universe/binary-amd64/Packages.gz
SHA1:
- 7a876ccfc3563613d419f6086eb7e3897ee9f3e8 769 universe/binary-amd64/Packages.bz2
- 03ea6767100f069ec24cc1ef10783c3892da4429 1361 universe/Contents-amd64.gz
+ ded918a7810be56ac83b08e9614bcc2b857a6961 2644 universe/binary-amd64/Packages
+ a03f4e7612f52b4ce86a8ed871b578b0880e0424 871 universe/binary-amd64/Packages.gz
+ 35c0e166535722497ba89084701e3fef9ff75a3f 1038 universe/binary-amd64/Packages.bz2
+ ea4285348258704b6fd10c3d0db761f9a69e562b 1395 universe/Contents-amd64.gz
bb2235b2a24a57ac4d7a8c6e4e3b8048f8273323 89 universe/binary-amd64/Release
- 818d5b73038e68bd21aea43c2214277f79cd43ee 1322 universe/binary-amd64/Packages
- 803150573b1b4848b99b0e6b20961267a74a77b1 736 universe/binary-amd64/Packages.gz
SHA256:
- c10a807e03e362e3c85a668a1b63df64b96d1db9b44bec50a684f8d40d2f43bb 769 universe/binary-amd64/Packages.bz2
- 5d6da55ce4b4f5474865814597dd677b1e3ace5b96c877029605fb153f073967 1361 universe/Contents-amd64.gz
+ 64505d18799db28ef1a34cb19d951e411fa8af8f47dc9a3d1389f63965621d2a 2644 universe/binary-amd64/Packages
+ 89dcbe102ae190baf45f5933dde72a21cc607ce4ed4f8bcc8fc090dfc51db935 871 universe/binary-amd64/Packages.gz
+ 71ced9f7e08d0a1e8d3219fbafd9640c8034019de077cea726a498d0c3490d1c 1038 universe/binary-amd64/Packages.bz2
+ 9e2df3f9fee23a26ba18307883457352738d594b5b4ee0fb30f1203ce595207e 1395 universe/Contents-amd64.gz
3585e1e45afb8a3cb3c7a593ec7dd8e34029c4ee18a044c369775fde5bba20dd 89 universe/binary-amd64/Release
- 13ebf28fa60667eeec58e272135a8507fafd5e06e2f1916ae0571e0ab334a6bb 1322 universe/binary-amd64/Packages
- 48d390c4c0caef192e33f7564d7586736decd6c5f2daf28fa758cc2a87343027 736 universe/binary-amd64/Packages.gz
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
-iQEcBAEBCAAGBQJed2l6AAoJECd6cpP1nkiJKZcH/j9p8q2BgSh5C7P1y/JV/cty
-gUdexrcOOVr0yPyVLNoCC2HZAn410FAWpp2e0LxdgC/gii4GWfVcZ+y/0af/lfev
-fsPDR3SmgYaIV0eTH3cFI4NR34Hu31x82gHJaIgJZC7n7RL7tPYWO74TVkaw4UAA
-b5cUlbIpe6anpr/+n+vumtTr3IdhFULLCua5n1QIHBqRdpZcvVC+B/8VQ95dTS8m
-y7vykmoTnyiHIYif8ElUqdEXAZF7HcY17CJleHzXV1yrRi36ul2eudDLFyOhIjEe
-QfYBFPqJ/6FOxVfSDlfqPSI4Z60wBG3AU80ZcXozaIEmS+Dr7zsTZ8DOLElDqLo=
-=qvTv
+iQEcBAEBCAAGBQJeqVEtAAoJECd6cpP1nkiJ5vEIAKAkULWjnBFvqNsQdfFw0lCz
+t4Xaad4fKe09NoTb95W06tD5UPaZKAdqlh72boLyQwz2U+0qU7GpdbRLn9bVvkXI
+rj2eJ8+RdbgenRuja8sOXoaUERFtx3UlWXUdVJbiI+Deoo1yVS+PPYks9s0ZFqEd
+9vce+ON6Z/coVQzxubwzu4qJDO0t6yJwW3go+xRS9WmlA8hFUpPz8B+7G3jfyLTj
+kw+ppo1RxjF/6ocabr0RtUveYoKYoHuZnq1QVNVm3LQz3n10YY4ra8To0AU2wmfh
+DOd2Vy12LYljN3npAVBVkcn35RvNoOJXjKIH2GItbO0q53gJxRNpjq3kQwGbUpY=
+=55x4
-----END PGP SIGNATURE-----
diff --git a/systems/win32/miktex/setup/deb/dists/bionic/Release b/systems/win32/miktex/setup/deb/dists/bionic/Release
index 0238da3b0e..1b2d2eadb7 100644
--- a/systems/win32/miktex/setup/deb/dists/bionic/Release
+++ b/systems/win32/miktex/setup/deb/dists/bionic/Release
@@ -2,25 +2,25 @@ Origin: . bionic
Label: . bionic
Suite: bionic
Codename: bionic
-Date: Sun, 22 Mar 2020 13:34:49 UTC
+Date: Wed, 29 Apr 2020 10:04:29 UTC
Architectures: amd64
Components: universe
Description: Generated by aptly
MD5Sum:
- bc7c603aec04c380d4e7e2030b9839a9 769 universe/binary-amd64/Packages.bz2
- 26e63bdaba8403f0f154603ac4ff5e56 1361 universe/Contents-amd64.gz
+ 113f08bacfa3613f0239299f71c2a33f 2644 universe/binary-amd64/Packages
+ cdcabd31886e1b9365e37423eaeec125 871 universe/binary-amd64/Packages.gz
+ 9b4acf5e55278f74b70b08aedc9cdd3c 1038 universe/binary-amd64/Packages.bz2
+ a757fd36f2c66b22d2774f37b3605534 1395 universe/Contents-amd64.gz
36dc8434c02eb018d9e4e8e159504a01 89 universe/binary-amd64/Release
- 32831a3bd1ed19f86cdc23fc3fa6441f 1322 universe/binary-amd64/Packages
- 315a78494d2d234f7098250990ba87e8 736 universe/binary-amd64/Packages.gz
SHA1:
- 7a876ccfc3563613d419f6086eb7e3897ee9f3e8 769 universe/binary-amd64/Packages.bz2
- 03ea6767100f069ec24cc1ef10783c3892da4429 1361 universe/Contents-amd64.gz
+ ded918a7810be56ac83b08e9614bcc2b857a6961 2644 universe/binary-amd64/Packages
+ a03f4e7612f52b4ce86a8ed871b578b0880e0424 871 universe/binary-amd64/Packages.gz
+ 35c0e166535722497ba89084701e3fef9ff75a3f 1038 universe/binary-amd64/Packages.bz2
+ ea4285348258704b6fd10c3d0db761f9a69e562b 1395 universe/Contents-amd64.gz
bb2235b2a24a57ac4d7a8c6e4e3b8048f8273323 89 universe/binary-amd64/Release
- 818d5b73038e68bd21aea43c2214277f79cd43ee 1322 universe/binary-amd64/Packages
- 803150573b1b4848b99b0e6b20961267a74a77b1 736 universe/binary-amd64/Packages.gz
SHA256:
- c10a807e03e362e3c85a668a1b63df64b96d1db9b44bec50a684f8d40d2f43bb 769 universe/binary-amd64/Packages.bz2
- 5d6da55ce4b4f5474865814597dd677b1e3ace5b96c877029605fb153f073967 1361 universe/Contents-amd64.gz
+ 64505d18799db28ef1a34cb19d951e411fa8af8f47dc9a3d1389f63965621d2a 2644 universe/binary-amd64/Packages
+ 89dcbe102ae190baf45f5933dde72a21cc607ce4ed4f8bcc8fc090dfc51db935 871 universe/binary-amd64/Packages.gz
+ 71ced9f7e08d0a1e8d3219fbafd9640c8034019de077cea726a498d0c3490d1c 1038 universe/binary-amd64/Packages.bz2
+ 9e2df3f9fee23a26ba18307883457352738d594b5b4ee0fb30f1203ce595207e 1395 universe/Contents-amd64.gz
3585e1e45afb8a3cb3c7a593ec7dd8e34029c4ee18a044c369775fde5bba20dd 89 universe/binary-amd64/Release
- 13ebf28fa60667eeec58e272135a8507fafd5e06e2f1916ae0571e0ab334a6bb 1322 universe/binary-amd64/Packages
- 48d390c4c0caef192e33f7564d7586736decd6c5f2daf28fa758cc2a87343027 736 universe/binary-amd64/Packages.gz
diff --git a/systems/win32/miktex/setup/deb/dists/bionic/Release.gpg b/systems/win32/miktex/setup/deb/dists/bionic/Release.gpg
index 7504e01463..33a8d277ff 100644
--- a/systems/win32/miktex/setup/deb/dists/bionic/Release.gpg
+++ b/systems/win32/miktex/setup/deb/dists/bionic/Release.gpg
@@ -1,11 +1,11 @@
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
-iQEcBAABCAAGBQJed2l5AAoJECd6cpP1nkiJxGcH/0131tVErDM3PYcyOdp7g/rP
-E7qfkvYZ8xGyCr4qM5JVs1F4kecgRRPMCmpmM6R9mYpTnPZ8JLRgJQ+GZ+Jz5ibV
-uW9t8Prga3sC0E2BSYTV8fFToW+7ulD1LXDVn4Q1z/XQUhoP3/g7h3o1lR55mhKz
-9SJy1zL/qo2tpc9J1j6SG+B0ZBM+uOLWwZnk1zxEjsFiFvWVWDbKGKKQLbT/pymc
-DljNj4Xcd1s9kS5NejT+BEtlpav8pYeuoe9DY8NweIof0ZkZl2xcrmYESdEy/848
-Jga6eQvSqO2/LZT2elJvT0AxhGR08rt5McaT/I8twKYI9CnpmYGbMhi9x0qh48w=
-=NRgS
+iQEcBAABCAAGBQJeqVEtAAoJECd6cpP1nkiJeysIAK37Xjr5TPoIHGsQE4hTG+fM
+7mALopJigbg6TmVU3f/lFXba1hCFbTcnMsst/PgWKYADptxvWYBYkJOZ3UKoAPek
+HUlxhuvhECt5eoTwYIvIbS5QBm/NTU7V5mq8IIugmrfJwCAmxd5mvRmVWCKxm5ho
+S4tx1RWZwobhyua2LjSjYXSXe2y3WeQ5x7OWNfeeaeHKsu2QuAfaIydYD/vimfHi
+D52GZnsY/pCKbvLBc6bUznfoE4Y28cUk3W5L8ehCHaK2n7xDvwoMBZ2aYi4fEPIe
+jxdnQV82JGOVZ1eL88Up89mPgUXPL2ho69ibC46fxJONUwq/Em8OHuu2440Q08Y=
+=osvT
-----END PGP SIGNATURE-----
diff --git a/systems/win32/miktex/setup/deb/dists/bionic/universe/Contents-amd64.gz b/systems/win32/miktex/setup/deb/dists/bionic/universe/Contents-amd64.gz
index c7e9584196..d5274b5adb 100644
--- a/systems/win32/miktex/setup/deb/dists/bionic/universe/Contents-amd64.gz
+++ b/systems/win32/miktex/setup/deb/dists/bionic/universe/Contents-amd64.gz
Binary files differ
diff --git a/systems/win32/miktex/setup/deb/dists/bionic/universe/binary-amd64/Packages b/systems/win32/miktex/setup/deb/dists/bionic/universe/binary-amd64/Packages
index b512db7471..85086c2d11 100644
--- a/systems/win32/miktex/setup/deb/dists/bionic/universe/binary-amd64/Packages
+++ b/systems/win32/miktex/setup/deb/dists/bionic/universe/binary-amd64/Packages
@@ -1,6 +1,22 @@
Package: miktex
Priority: optional
Section: tex
+Installed-Size: 94510
+Maintainer: Christian Schenk <cs@miktex.org>
+Architecture: amd64
+Version: 2.9.7400-bionic1
+Depends: debconf (>= 0.2.17), fontconfig, libbz2-1.0, libc6 (>= 2.15), libcairo2 (>= 1.12.0), libcurl4 (>= 7.16.2), libexpat1 (>= 2.0.1), libfontconfig1 (>= 2.12), libfreetype6 (>= 2.3.9), libfribidi0 (>= 0.19.2), libgcc1 (>= 1:4.0), libgd3 (>= 2.1.0~alpha~), libgraphite2-3 (>= 1.2.2), libhunspell-1.6-0, libicu60 (>= 60.1-1~), libjpeg8 (>= 8c), liblog4cxx10v5 (>= 0.10.0), liblzma5 (>= 5.1.1alpha+20120614), libmpfr6 (>= 3.1.3), libmspack0 (>= 0.4), libpng16-16 (>= 1.6.2-1), libpopt0 (>= 1.14), libqt5concurrent5 (>= 5.6.0~rc), libqt5core5a (>= 5.9.0~beta), libqt5dbus5 (>= 5.0.2), libqt5gui5 (>= 5.8.0), libqt5script5 (>= 5.6.0~beta), libqt5scripttools5 (>= 5.6.0~beta), libqt5widgets5 (>= 5.3.0), libqt5xml5 (>= 5.0.2), libssl1.1 (>= 1.1.0), libstdc++6 (>= 7), liburiparser1 (>= 0.6.0), libzzip-0-13 (>= 0.13.56), zlib1g (>= 1:1.2.0)
+Filename: pool/universe/m/miktex/miktex_2.9.7400-bionic1_amd64.deb
+Size: 29935332
+MD5sum: a60e4c5e0ac88788093ab6519fe3300a
+SHA1: 80dd40ee007e1ae764a499d918d4f8239bb35936
+SHA256: 8778960d78598d952a890f43b10c40f59578b6454bddee98c780c5a6f536fd27
+Description: MiKTeX: a scalable TeX distribution
+Homepage: https://miktex.org
+
+Package: miktex
+Priority: optional
+Section: tex
Installed-Size: 93884
Maintainer: Christian Schenk <cs@miktex.org>
Architecture: amd64
diff --git a/systems/win32/miktex/setup/deb/dists/bionic/universe/binary-amd64/Packages.bz2 b/systems/win32/miktex/setup/deb/dists/bionic/universe/binary-amd64/Packages.bz2
index 9fd06e953a..458646be41 100644
--- a/systems/win32/miktex/setup/deb/dists/bionic/universe/binary-amd64/Packages.bz2
+++ b/systems/win32/miktex/setup/deb/dists/bionic/universe/binary-amd64/Packages.bz2
Binary files differ
diff --git a/systems/win32/miktex/setup/deb/dists/bionic/universe/binary-amd64/Packages.gz b/systems/win32/miktex/setup/deb/dists/bionic/universe/binary-amd64/Packages.gz
index c53ddf7aae..465f020c06 100644
--- a/systems/win32/miktex/setup/deb/dists/bionic/universe/binary-amd64/Packages.gz
+++ b/systems/win32/miktex/setup/deb/dists/bionic/universe/binary-amd64/Packages.gz
Binary files differ
diff --git a/systems/win32/miktex/setup/deb/dists/buster/InRelease b/systems/win32/miktex/setup/deb/dists/buster/InRelease
index 74b0bd91a8..2508af435b 100644
--- a/systems/win32/miktex/setup/deb/dists/buster/InRelease
+++ b/systems/win32/miktex/setup/deb/dists/buster/InRelease
@@ -5,36 +5,36 @@ Origin: . buster
Label: . buster
Suite: buster
Codename: buster
-Date: Sun, 22 Mar 2020 13:34:59 UTC
+Date: Wed, 29 Apr 2020 10:04:41 UTC
Architectures: amd64
Components: universe
Description: Generated by aptly
MD5Sum:
- cc66f763e1322529102533c0c8cb9239 1384 universe/binary-amd64/Packages
- 7ddaeeafbae1326e78a5e8b415dd830c 764 universe/binary-amd64/Packages.gz
- 2fd78d4e69f58c47da0d064ba178ce5f 794 universe/binary-amd64/Packages.bz2
- 26e63bdaba8403f0f154603ac4ff5e56 1361 universe/Contents-amd64.gz
+ a757fd36f2c66b22d2774f37b3605534 1395 universe/Contents-amd64.gz
c4377b12f319790307affd5ca801a56b 89 universe/binary-amd64/Release
+ 2bc2b12a419adca4ed19d99fb2d3e461 2768 universe/binary-amd64/Packages
+ f7bb3dc0e50441f53aec3c1603edcbd7 898 universe/binary-amd64/Packages.gz
+ 4c8b46cbb051c9a33f2a361aa3004d8c 1084 universe/binary-amd64/Packages.bz2
SHA1:
- ad78ac0f87d2a05c398f01e9c0ebb28b6197f5e4 1384 universe/binary-amd64/Packages
- 220b39e5191d99b97391a8cc43c3292a51bafb1e 764 universe/binary-amd64/Packages.gz
- fcf73f5d3c792203ef21d71557895cb0c4e076d9 794 universe/binary-amd64/Packages.bz2
- 03ea6767100f069ec24cc1ef10783c3892da4429 1361 universe/Contents-amd64.gz
+ ea4285348258704b6fd10c3d0db761f9a69e562b 1395 universe/Contents-amd64.gz
1c381f8d6c958888bf1796f5914f8ca22630bdd7 89 universe/binary-amd64/Release
+ 28736487de9202fd636b47908c0ff7184fd1ec5d 2768 universe/binary-amd64/Packages
+ e4dae45635a00470e45306d3e961c4b504706fb8 898 universe/binary-amd64/Packages.gz
+ 1c5df24353c338d399a452b777999ece8b651664 1084 universe/binary-amd64/Packages.bz2
SHA256:
- 8dcdcf45a84300f576993795958b030308021b448594fbdbdc94eec814bc6aad 1384 universe/binary-amd64/Packages
- f1e5e14c00f27f059ab429b470801618adcd09d6ebeca46feb7284f9322b6b6d 764 universe/binary-amd64/Packages.gz
- ede09de8a0517f4a2b869681fe9c35dc14e8bd830259b62ee90629bfc9d2209a 794 universe/binary-amd64/Packages.bz2
- 5d6da55ce4b4f5474865814597dd677b1e3ace5b96c877029605fb153f073967 1361 universe/Contents-amd64.gz
+ 9e2df3f9fee23a26ba18307883457352738d594b5b4ee0fb30f1203ce595207e 1395 universe/Contents-amd64.gz
56ac9d32078ebaa439db98b340d4761cb718c796f92090530c01b377a3c9d40b 89 universe/binary-amd64/Release
+ dd93a4e7945a841ecdd9c7fce8a6ab6c79302328ff1989a31da623b00c4544a2 2768 universe/binary-amd64/Packages
+ 79f57018195d153eaef05f2d5a9721ec6fee9d0db792d758a123c45c48d6aad3 898 universe/binary-amd64/Packages.gz
+ 51e8835538abcbe4575d333c56233803cb2a34f5fbdc7e78b1cc184762ff5848 1084 universe/binary-amd64/Packages.bz2
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
-iQEcBAEBCAAGBQJed2mDAAoJECd6cpP1nkiJBgAH/2qf1g80E8k/ISHTKw/N8lzK
-u/3ZwzNNKynFOtr49RMUnGo3kbtvfGJqv6XzWR7yf3hTokZjBlFyLnG+HKZKc7Na
-Bz2VDTL0zBVXx0rK5HconBQci1Ar/TQZfyAcmJburZKcn8g5GuNbRvHUOeiBKTOr
-4SjwGckQuEs6zb/5VVOI/pxGCkd4TtOIrJ+YQJCYuqh94+JSNYbTCPOZJBwcvZt/
-49Gr3eYDM8h2ciVrw9nSKv37xPNlG0S9yzXYrKag5BWC3wRE5mGZOcJxcSfVNKL9
-g1vK9ePZyJ6+Mvdg2AKGbN3gBsE5AguAUoSI2cxsmvZzsmv8VguEJ5ALEwYUz+A=
-=03LF
+iQEcBAEBCAAGBQJeqVE5AAoJECd6cpP1nkiJDWwH/24CcS6tl5vPd8b98NTW0gXF
+eIL6LldOE1EcmFCEtNSoeR6zQyogtljq/DAOTXX4VcGTB7imZGtHdxTSIu6y0Y3y
+yh90ynbikgVPo3zyieBChqa6mbNtNy7Bq5h5Vj+qM3r1jgw64ppZdEl6wdNajZcR
+VcI/wo2X/q0I6uiMhYA+hgoGbc7dXxXyeJGVeZsrfcttXbLdl7CM/S9tUDQRWaLT
+F2ybJ+tqeHY80l93lwvbh1dZ7+pANIxepIOvUiAp2oiQWZWwUPVo9LJ7kflxUga0
+GYRbnXtaKKRoKvm60sf0gumIAvDuQ3zf9KuCysoSHwldwGlHwvetGYcySoEx2Hg=
+=xs1D
-----END PGP SIGNATURE-----
diff --git a/systems/win32/miktex/setup/deb/dists/buster/Release b/systems/win32/miktex/setup/deb/dists/buster/Release
index 1833ccd96e..fde6d33313 100644
--- a/systems/win32/miktex/setup/deb/dists/buster/Release
+++ b/systems/win32/miktex/setup/deb/dists/buster/Release
@@ -2,25 +2,25 @@ Origin: . buster
Label: . buster
Suite: buster
Codename: buster
-Date: Sun, 22 Mar 2020 13:34:59 UTC
+Date: Wed, 29 Apr 2020 10:04:41 UTC
Architectures: amd64
Components: universe
Description: Generated by aptly
MD5Sum:
- cc66f763e1322529102533c0c8cb9239 1384 universe/binary-amd64/Packages
- 7ddaeeafbae1326e78a5e8b415dd830c 764 universe/binary-amd64/Packages.gz
- 2fd78d4e69f58c47da0d064ba178ce5f 794 universe/binary-amd64/Packages.bz2
- 26e63bdaba8403f0f154603ac4ff5e56 1361 universe/Contents-amd64.gz
+ a757fd36f2c66b22d2774f37b3605534 1395 universe/Contents-amd64.gz
c4377b12f319790307affd5ca801a56b 89 universe/binary-amd64/Release
+ 2bc2b12a419adca4ed19d99fb2d3e461 2768 universe/binary-amd64/Packages
+ f7bb3dc0e50441f53aec3c1603edcbd7 898 universe/binary-amd64/Packages.gz
+ 4c8b46cbb051c9a33f2a361aa3004d8c 1084 universe/binary-amd64/Packages.bz2
SHA1:
- ad78ac0f87d2a05c398f01e9c0ebb28b6197f5e4 1384 universe/binary-amd64/Packages
- 220b39e5191d99b97391a8cc43c3292a51bafb1e 764 universe/binary-amd64/Packages.gz
- fcf73f5d3c792203ef21d71557895cb0c4e076d9 794 universe/binary-amd64/Packages.bz2
- 03ea6767100f069ec24cc1ef10783c3892da4429 1361 universe/Contents-amd64.gz
+ ea4285348258704b6fd10c3d0db761f9a69e562b 1395 universe/Contents-amd64.gz
1c381f8d6c958888bf1796f5914f8ca22630bdd7 89 universe/binary-amd64/Release
+ 28736487de9202fd636b47908c0ff7184fd1ec5d 2768 universe/binary-amd64/Packages
+ e4dae45635a00470e45306d3e961c4b504706fb8 898 universe/binary-amd64/Packages.gz
+ 1c5df24353c338d399a452b777999ece8b651664 1084 universe/binary-amd64/Packages.bz2
SHA256:
- 8dcdcf45a84300f576993795958b030308021b448594fbdbdc94eec814bc6aad 1384 universe/binary-amd64/Packages
- f1e5e14c00f27f059ab429b470801618adcd09d6ebeca46feb7284f9322b6b6d 764 universe/binary-amd64/Packages.gz
- ede09de8a0517f4a2b869681fe9c35dc14e8bd830259b62ee90629bfc9d2209a 794 universe/binary-amd64/Packages.bz2
- 5d6da55ce4b4f5474865814597dd677b1e3ace5b96c877029605fb153f073967 1361 universe/Contents-amd64.gz
+ 9e2df3f9fee23a26ba18307883457352738d594b5b4ee0fb30f1203ce595207e 1395 universe/Contents-amd64.gz
56ac9d32078ebaa439db98b340d4761cb718c796f92090530c01b377a3c9d40b 89 universe/binary-amd64/Release
+ dd93a4e7945a841ecdd9c7fce8a6ab6c79302328ff1989a31da623b00c4544a2 2768 universe/binary-amd64/Packages
+ 79f57018195d153eaef05f2d5a9721ec6fee9d0db792d758a123c45c48d6aad3 898 universe/binary-amd64/Packages.gz
+ 51e8835538abcbe4575d333c56233803cb2a34f5fbdc7e78b1cc184762ff5848 1084 universe/binary-amd64/Packages.bz2
diff --git a/systems/win32/miktex/setup/deb/dists/buster/Release.gpg b/systems/win32/miktex/setup/deb/dists/buster/Release.gpg
index b2b532d3b8..ea1e75573c 100644
--- a/systems/win32/miktex/setup/deb/dists/buster/Release.gpg
+++ b/systems/win32/miktex/setup/deb/dists/buster/Release.gpg
@@ -1,11 +1,11 @@
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
-iQEcBAABCAAGBQJed2mDAAoJECd6cpP1nkiJe8kH/A6uerdbr0lzzmxLt8Twzstr
-hDhLga5Vy/ptZWbe1HAl8MnE+4LaqxfbRYlb45qEpf9uGSEZ9+MsEdw0r5TXQZ9c
-VLvOt1pkzU1Rsw5BjIvXhXftBlnb7MsNkPz4gWUHq/9B7+3eCE+q78WZvWopt9HC
-6Ta04MMio3HRZMrpabp+dVy7Zg0+okfWzKa2UbaSZjAYSYYxvGL7GSiLVRvJun46
-o8fDrdFwrG5ZGuiTo85rgNL2PVvJfRpat3fSikNLfyfiGmiCdDsg6c1JRzlD99ZQ
-IH2rwmqJjRAXws7xQdP+HOr9toVDj+U0pgiwADvOT1dbmu08N7to5qWzFmYqwKs=
-=sfWx
+iQEcBAABCAAGBQJeqVE5AAoJECd6cpP1nkiJ5/AIAJhWmHGCrLk/pthZ36hMZCXk
+j74NzjzV0jWiHm5Km/MXYn6D8adEJSfyRl4A4JCzHVsXV8Uh/YDoa+xrCOD4IRex
+kVp2TvcqSR47RmLvetY6S9fi+W2i/12n0H+aGWOBQaVVSkQDxjnIlUbQ0+DUEDqS
+1jDUeCGHfSJ/PmHxxyKemAjd/xRab+n/4Sylgm0Ut+k5pMaG4OxqL9I5lggt6Z+e
+AX5S1cPTDokYYB6tuLUbNtGfGwWZvBxDKe4KaEoiZSjhFRz/l9jyosCLOjbkoqKm
+hEyWK+n7LGzsfTkmAxbGmQjopnzPqw4uyaYXHx6S4Fk9ulJ4+o4E4NQfEbOOsSs=
+=E0mn
-----END PGP SIGNATURE-----
diff --git a/systems/win32/miktex/setup/deb/dists/buster/universe/Contents-amd64.gz b/systems/win32/miktex/setup/deb/dists/buster/universe/Contents-amd64.gz
index c7e9584196..d5274b5adb 100644
--- a/systems/win32/miktex/setup/deb/dists/buster/universe/Contents-amd64.gz
+++ b/systems/win32/miktex/setup/deb/dists/buster/universe/Contents-amd64.gz
Binary files differ
diff --git a/systems/win32/miktex/setup/deb/dists/buster/universe/binary-amd64/Packages b/systems/win32/miktex/setup/deb/dists/buster/universe/binary-amd64/Packages
index 26b13b84f8..28b6433f17 100644
--- a/systems/win32/miktex/setup/deb/dists/buster/universe/binary-amd64/Packages
+++ b/systems/win32/miktex/setup/deb/dists/buster/universe/binary-amd64/Packages
@@ -1,6 +1,22 @@
Package: miktex
Priority: optional
Section: tex
+Installed-Size: 94772
+Maintainer: Christian Schenk <cs@miktex.org>
+Architecture: amd64
+Version: 2.9.7400-buster1
+Depends: debconf (>= 0.2.17), fontconfig, libbz2-1.0, libc6 (>= 2.28), libcairo2 (>= 1.12.0), libcurl4 (>= 7.16.2), libexpat1 (>= 2.0.1), libfontconfig1 (>= 2.12.6), libfreetype6 (>= 2.3.9), libfribidi0 (>= 0.19.2), libgcc1 (>= 1:4.0), libgd3 (>= 2.1.0~alpha~), libgmp10, libgraphite2-3 (>= 1.2.2), libhunspell-1.7-0, libicu63 (>= 63.1-1~), libjpeg62-turbo (>= 1.3.1), liblog4cxx10v5, liblzma5 (>= 5.1.1alpha+20120614), libmpfr6 (>= 3.1.3), libmspack0 (>= 0.4), libpixman-1-0, libpng16-16 (>= 1.6.2-1), libpopt0 (>= 1.14), libqt5concurrent5 (>= 5.6.0~rc), libqt5core5a (>= 5.11.0~rc1), libqt5dbus5 (>= 5.0.2), libqt5gui5 (>= 5.8.0), libqt5printsupport5 (>= 5.0.2), libqt5script5 (>= 5.6.0~beta), libqt5scripttools5 (>= 5.6.0~beta), libqt5widgets5 (>= 5.11.0~rc1), libqt5xml5 (>= 5.0.2), libssl1.1 (>= 1.1.0), libstdc++6 (>= 7), liburiparser1 (>= 0.6.0), libzzip-0-13 (>= 0.13.56), zlib1g (>= 1:1.2.0)
+Filename: pool/universe/m/miktex/miktex_2.9.7400-buster1_amd64.deb
+Size: 29369466
+MD5sum: 5767ca0137f6ab13f3227ce464d09b4b
+SHA1: b06b6f61fb37afde8c3b4c724b7bc12faed5d184
+SHA256: fcb56509f924ce88ada1efe7e82cfea9612f2b9930211f418189ac7ba3d02e2f
+Description: MiKTeX: a scalable TeX distribution
+Homepage: https://miktex.org
+
+Package: miktex
+Priority: optional
+Section: tex
Installed-Size: 94041
Maintainer: Christian Schenk <cs@miktex.org>
Architecture: amd64
diff --git a/systems/win32/miktex/setup/deb/dists/buster/universe/binary-amd64/Packages.bz2 b/systems/win32/miktex/setup/deb/dists/buster/universe/binary-amd64/Packages.bz2
index 28ffde6e70..136a6baa5c 100644
--- a/systems/win32/miktex/setup/deb/dists/buster/universe/binary-amd64/Packages.bz2
+++ b/systems/win32/miktex/setup/deb/dists/buster/universe/binary-amd64/Packages.bz2
Binary files differ
diff --git a/systems/win32/miktex/setup/deb/dists/buster/universe/binary-amd64/Packages.gz b/systems/win32/miktex/setup/deb/dists/buster/universe/binary-amd64/Packages.gz
index 5c813e6456..2882001e08 100644
--- a/systems/win32/miktex/setup/deb/dists/buster/universe/binary-amd64/Packages.gz
+++ b/systems/win32/miktex/setup/deb/dists/buster/universe/binary-amd64/Packages.gz
Binary files differ
diff --git a/systems/win32/miktex/setup/deb/dists/stretch/InRelease b/systems/win32/miktex/setup/deb/dists/stretch/InRelease
index 6eb8e7955b..b2d4060819 100644
--- a/systems/win32/miktex/setup/deb/dists/stretch/InRelease
+++ b/systems/win32/miktex/setup/deb/dists/stretch/InRelease
@@ -5,36 +5,36 @@ Origin: . stretch
Label: . stretch
Suite: stretch
Codename: stretch
-Date: Sun, 22 Mar 2020 13:34:54 UTC
+Date: Wed, 29 Apr 2020 10:04:35 UTC
Architectures: amd64
Components: universe
Description: Generated by aptly
MD5Sum:
+ a757fd36f2c66b22d2774f37b3605534 1395 universe/Contents-amd64.gz
7e51c033bd0c15d4b99563b11dfc3269 92 universe/binary-amd64/Release
- 10e43dd2d10771fa4cdc3d09fcadc7a6 1374 universe/binary-amd64/Packages
- 1af892535db55c1f8abb268b30b6b5e4 756 universe/binary-amd64/Packages.gz
- c14fc981d9532ea5e32444dfb669526b 796 universe/binary-amd64/Packages.bz2
- 26e63bdaba8403f0f154603ac4ff5e56 1361 universe/Contents-amd64.gz
+ 2250c9aee32ad35291f3d21538c6f769 2748 universe/binary-amd64/Packages
+ a107e1159484634e2fe3df4e69f96cfe 890 universe/binary-amd64/Packages.gz
+ 7b38e001b0fd5031696bb67bfda38626 1069 universe/binary-amd64/Packages.bz2
SHA1:
+ ea4285348258704b6fd10c3d0db761f9a69e562b 1395 universe/Contents-amd64.gz
a8cdfffd31ad7c80bc0211b261d920f4f54a4c9a 92 universe/binary-amd64/Release
- 2af8257c2d333895316bb0a73b2ea0c7252025ef 1374 universe/binary-amd64/Packages
- 246bddbf799749f09589ea3d43478f41b08cae66 756 universe/binary-amd64/Packages.gz
- cd16ba6f98cb13fc3adb93544e01af26d0e0993e 796 universe/binary-amd64/Packages.bz2
- 03ea6767100f069ec24cc1ef10783c3892da4429 1361 universe/Contents-amd64.gz
+ 1122bda696ba41565daebd5ca1ca5f8f3b139b95 2748 universe/binary-amd64/Packages
+ 7633a0cce2737b5e97f7388913b1b96844d73563 890 universe/binary-amd64/Packages.gz
+ 2304d13b58090fafb19484d707366f4b301b91ed 1069 universe/binary-amd64/Packages.bz2
SHA256:
+ 9e2df3f9fee23a26ba18307883457352738d594b5b4ee0fb30f1203ce595207e 1395 universe/Contents-amd64.gz
dd6afd4ed6f17bf2169743f34465b0594ee95b13ad8cfec78f5753c0d4f59da1 92 universe/binary-amd64/Release
- 99201151d93914d25fdc6a7a468cfd03c1b3373cd9909ce09cb9637772e651dd 1374 universe/binary-amd64/Packages
- f0372a0ef6a2219027ac102c2d1e7d0ea4449d7a81840229f8844536588ec5f8 756 universe/binary-amd64/Packages.gz
- 2141decfc76adeaa595c354bec350069cb7c2b3d34ff58105afc576e9d631e1b 796 universe/binary-amd64/Packages.bz2
- 5d6da55ce4b4f5474865814597dd677b1e3ace5b96c877029605fb153f073967 1361 universe/Contents-amd64.gz
+ 146fac669c094ebb46cb2e158a20fcdd1544ea370dbc4e5ec37e0ce37bdc9b8f 2748 universe/binary-amd64/Packages
+ 0bf5a5574ff5de832b5754876d5469fc5a20b33e195086c3c46a0148ca261093 890 universe/binary-amd64/Packages.gz
+ 1023b865bcb2f296cc88b2c740b4feefe966d742f037c33fa82a7387f56d5a91 1069 universe/binary-amd64/Packages.bz2
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
-iQEcBAEBCAAGBQJed2l+AAoJECd6cpP1nkiJOTsIAJ1avOipL0iZeptPGqTkPz6d
-mElpCwy1iV2CmRut6XqJDIfkX0Q2o24xv82ek6WMeTI3VOQrU2AlpX5hC6FbEiK0
-nYl7oyv/do4m1VKfFeo9LKn2e5CG/4cOGQP0o+Rk5GRePSH7G36lDBh/7MDrcOdv
-3iQVBAN5vpNZdGi5SZQmw39TMPQdQAaoS8XG5Z+UO+YMMuFHX6hZzTiPjDnZkuri
-jydvONgov7hz/6ktL0JurumbwuIMBJ7wQuCnP/4kq5ekoQnQQ8iQObuGUWt3oUJb
-B9FcSX0ZAJ7Ilx/yuz2VjivSWXwZummrH3iCkVDsFTF0ByiXTdIE+rLWe13imko=
-=K10p
+iQEcBAEBCAAGBQJeqVEzAAoJECd6cpP1nkiJgdYH/jzeTzgsiAE6KBEbP32BGx3P
+ZxxO09bi/SMt/X3U3vnE4F50yih525BlXO4dqYtdLc/zqRdrP+p3zz+U64X/+iOY
+iszdMhla+R7gY545YSgW61ILyaRoUQ2RrglgcIMvlwGtHf5v7kVwQftKO7ChQvLb
+aR3irRxC4mV1bHcbnWbESZoCvpvFgBq3YGK8dQo4dbCM1Kunx04hcozHatGBIxd3
+4WmWYrM0wnEtmR0gINJRZ0ZjEu6H/f7lBMQ5ajhN3/iyf2LMtcb/z8epuOdopGQE
+lu94yu5WRGX7uY2uP/OxTCh6jUyENZtyLgslHhmBs8Y5zZEqpwH9Z2x6+Tn8PkM=
+=/+6e
-----END PGP SIGNATURE-----
diff --git a/systems/win32/miktex/setup/deb/dists/stretch/Release b/systems/win32/miktex/setup/deb/dists/stretch/Release
index 5619e65405..785653980a 100644
--- a/systems/win32/miktex/setup/deb/dists/stretch/Release
+++ b/systems/win32/miktex/setup/deb/dists/stretch/Release
@@ -2,25 +2,25 @@ Origin: . stretch
Label: . stretch
Suite: stretch
Codename: stretch
-Date: Sun, 22 Mar 2020 13:34:54 UTC
+Date: Wed, 29 Apr 2020 10:04:35 UTC
Architectures: amd64
Components: universe
Description: Generated by aptly
MD5Sum:
+ a757fd36f2c66b22d2774f37b3605534 1395 universe/Contents-amd64.gz
7e51c033bd0c15d4b99563b11dfc3269 92 universe/binary-amd64/Release
- 10e43dd2d10771fa4cdc3d09fcadc7a6 1374 universe/binary-amd64/Packages
- 1af892535db55c1f8abb268b30b6b5e4 756 universe/binary-amd64/Packages.gz
- c14fc981d9532ea5e32444dfb669526b 796 universe/binary-amd64/Packages.bz2
- 26e63bdaba8403f0f154603ac4ff5e56 1361 universe/Contents-amd64.gz
+ 2250c9aee32ad35291f3d21538c6f769 2748 universe/binary-amd64/Packages
+ a107e1159484634e2fe3df4e69f96cfe 890 universe/binary-amd64/Packages.gz
+ 7b38e001b0fd5031696bb67bfda38626 1069 universe/binary-amd64/Packages.bz2
SHA1:
+ ea4285348258704b6fd10c3d0db761f9a69e562b 1395 universe/Contents-amd64.gz
a8cdfffd31ad7c80bc0211b261d920f4f54a4c9a 92 universe/binary-amd64/Release
- 2af8257c2d333895316bb0a73b2ea0c7252025ef 1374 universe/binary-amd64/Packages
- 246bddbf799749f09589ea3d43478f41b08cae66 756 universe/binary-amd64/Packages.gz
- cd16ba6f98cb13fc3adb93544e01af26d0e0993e 796 universe/binary-amd64/Packages.bz2
- 03ea6767100f069ec24cc1ef10783c3892da4429 1361 universe/Contents-amd64.gz
+ 1122bda696ba41565daebd5ca1ca5f8f3b139b95 2748 universe/binary-amd64/Packages
+ 7633a0cce2737b5e97f7388913b1b96844d73563 890 universe/binary-amd64/Packages.gz
+ 2304d13b58090fafb19484d707366f4b301b91ed 1069 universe/binary-amd64/Packages.bz2
SHA256:
+ 9e2df3f9fee23a26ba18307883457352738d594b5b4ee0fb30f1203ce595207e 1395 universe/Contents-amd64.gz
dd6afd4ed6f17bf2169743f34465b0594ee95b13ad8cfec78f5753c0d4f59da1 92 universe/binary-amd64/Release
- 99201151d93914d25fdc6a7a468cfd03c1b3373cd9909ce09cb9637772e651dd 1374 universe/binary-amd64/Packages
- f0372a0ef6a2219027ac102c2d1e7d0ea4449d7a81840229f8844536588ec5f8 756 universe/binary-amd64/Packages.gz
- 2141decfc76adeaa595c354bec350069cb7c2b3d34ff58105afc576e9d631e1b 796 universe/binary-amd64/Packages.bz2
- 5d6da55ce4b4f5474865814597dd677b1e3ace5b96c877029605fb153f073967 1361 universe/Contents-amd64.gz
+ 146fac669c094ebb46cb2e158a20fcdd1544ea370dbc4e5ec37e0ce37bdc9b8f 2748 universe/binary-amd64/Packages
+ 0bf5a5574ff5de832b5754876d5469fc5a20b33e195086c3c46a0148ca261093 890 universe/binary-amd64/Packages.gz
+ 1023b865bcb2f296cc88b2c740b4feefe966d742f037c33fa82a7387f56d5a91 1069 universe/binary-amd64/Packages.bz2
diff --git a/systems/win32/miktex/setup/deb/dists/stretch/Release.gpg b/systems/win32/miktex/setup/deb/dists/stretch/Release.gpg
index 5d80d0ea74..27becb10c2 100644
--- a/systems/win32/miktex/setup/deb/dists/stretch/Release.gpg
+++ b/systems/win32/miktex/setup/deb/dists/stretch/Release.gpg
@@ -1,11 +1,11 @@
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
-iQEcBAABCAAGBQJed2l+AAoJECd6cpP1nkiJC3UH/RHDlcbnwTzpFpccDFC54SAg
-dX0nFv6/5n+M2JXYpXWs4skzj2DfUW3NTmtQd3iVGAC60gkvzgwHAPPI/tYKeDrC
-CxefYVbTlSoR7PbH2/y/EcVXl5JR8GWnwwaCjUxXQhCb4Rmc9EoJi3ERS6aJHI+R
-enkDSy+KwPIjqvd7h70uBQlkZECfw5mOqnsYHh5ywZ9F+9dPViUYYOo2FIILRt4G
-B1XHRxMU0RtvdMLlxGRnA51d+K2CUgVvXTRPcNX5uJlRsL90KAZ7J4ARR6mZK7nH
-Lt50tnKWjAmP2T5KyNHdWVYp9pUL2yzKyzs8q6lFr3BBUhMaBS0VZ7rpEYr8akE=
-=AyUB
+iQEcBAABCAAGBQJeqVEzAAoJECd6cpP1nkiJ8boH/1JTVy5Pf5iLi75Uw7CwWLmV
+AybfCVsVMaY4d0jPUxbNI7lfB7dzvbw3b13G+ezpHWooKbkWRatAtNM9hKrAscdZ
+xsK7sFrN5kwmWBpcN1PzLVfH0sw4QyPN4ZxdsDkfIqS7LIKNs4138E9lhx6eV3iP
+IRtODt5g1bShMyFeTNbJE5Gf93NGKHeYnZ3a/9mSqRgp8V4KeFFT33gjrrfR1BRn
+u4seYoB/eHaNy0iTHzFKDcnCXDnD5mGNe3THNW42UA33DsS02K4w3ED6bG9LgAmq
+a+L7vRo4Uk7EdXcETHn5SOhH7BhPbUOVOnzJuVDDvmi/HLidkn7/uP2/X1DsfTM=
+=vZD8
-----END PGP SIGNATURE-----
diff --git a/systems/win32/miktex/setup/deb/dists/stretch/universe/Contents-amd64.gz b/systems/win32/miktex/setup/deb/dists/stretch/universe/Contents-amd64.gz
index c7e9584196..d5274b5adb 100644
--- a/systems/win32/miktex/setup/deb/dists/stretch/universe/Contents-amd64.gz
+++ b/systems/win32/miktex/setup/deb/dists/stretch/universe/Contents-amd64.gz
Binary files differ
diff --git a/systems/win32/miktex/setup/deb/dists/stretch/universe/binary-amd64/Packages b/systems/win32/miktex/setup/deb/dists/stretch/universe/binary-amd64/Packages
index 50e87416ab..287eb9089d 100644
--- a/systems/win32/miktex/setup/deb/dists/stretch/universe/binary-amd64/Packages
+++ b/systems/win32/miktex/setup/deb/dists/stretch/universe/binary-amd64/Packages
@@ -1,6 +1,22 @@
Package: miktex
Priority: optional
Section: tex
+Installed-Size: 93529
+Maintainer: Christian Schenk <cs@miktex.org>
+Architecture: amd64
+Version: 2.9.7400-stretch1
+Depends: debconf (>= 0.2.17), fontconfig, libbz2-1.0, libc6 (>= 2.14), libcairo2 (>= 1.12.0), libcurl3 (>= 7.16.2), libexpat1 (>= 2.0.1), libfontconfig1 (>= 2.11), libfreetype6 (>= 2.3.9), libfribidi0 (>= 0.19.2), libgcc1 (>= 1:4.0), libgd3 (>= 2.1.0~alpha~), libgmp10, libgraphite2-3 (>= 1.2.2), libhunspell-1.4-0, libicu57 (>= 57.1-1~), libjpeg62-turbo (>= 1.3.1), liblog4cxx10v5, liblzma5 (>= 5.1.1alpha+20120614), libmpfr4 (>= 3.1.3), libmspack0 (>= 0.4), libpixman-1-0, libpng16-16 (>= 1.6.2-1), libpopt0 (>= 1.14), libqt5concurrent5 (>= 5.6.0~rc), libqt5core5a (>= 5.7.0), libqt5dbus5 (>= 5.0.2), libqt5gui5 (>= 5.7.0), libqt5printsupport5 (>= 5.0.2), libqt5script5 (>= 5.6.0~beta), libqt5scripttools5 (>= 5.6.0~beta), libqt5widgets5 (>= 5.3.0), libqt5xml5 (>= 5.0.2), libssl1.1 (>= 1.1.0), libstdc++6 (>= 6), liburiparser1 (>= 0.6.0), libzzip-0-13 (>= 0.13.56), zlib1g (>= 1:1.2.0)
+Filename: pool/universe/m/miktex/miktex_2.9.7400-stretch1_amd64.deb
+Size: 29464796
+MD5sum: 6c7e4f961b9b85a694df9ab2efe4139b
+SHA1: 3777c56d67c5bd28fb30439d52c2c2f2e1577730
+SHA256: e52659fd202c2f11f1d47faef5e57ff7db8aca30f8dd091df3eb973f063f0e72
+Description: MiKTeX: a scalable TeX distribution
+Homepage: https://miktex.org
+
+Package: miktex
+Priority: optional
+Section: tex
Installed-Size: 92844
Maintainer: Christian Schenk <cs@miktex.org>
Architecture: amd64
diff --git a/systems/win32/miktex/setup/deb/dists/stretch/universe/binary-amd64/Packages.bz2 b/systems/win32/miktex/setup/deb/dists/stretch/universe/binary-amd64/Packages.bz2
index dd1c98dabc..2955cc199a 100644
--- a/systems/win32/miktex/setup/deb/dists/stretch/universe/binary-amd64/Packages.bz2
+++ b/systems/win32/miktex/setup/deb/dists/stretch/universe/binary-amd64/Packages.bz2
Binary files differ
diff --git a/systems/win32/miktex/setup/deb/dists/stretch/universe/binary-amd64/Packages.gz b/systems/win32/miktex/setup/deb/dists/stretch/universe/binary-amd64/Packages.gz
index 59db5b8ff5..fe0f6e4344 100644
--- a/systems/win32/miktex/setup/deb/dists/stretch/universe/binary-amd64/Packages.gz
+++ b/systems/win32/miktex/setup/deb/dists/stretch/universe/binary-amd64/Packages.gz
Binary files differ
diff --git a/systems/win32/miktex/setup/deb/dists/xenial/InRelease b/systems/win32/miktex/setup/deb/dists/xenial/InRelease
index 3a5264fb42..6bdace35e2 100644
--- a/systems/win32/miktex/setup/deb/dists/xenial/InRelease
+++ b/systems/win32/miktex/setup/deb/dists/xenial/InRelease
@@ -5,36 +5,36 @@ Origin: . xenial
Label: . xenial
Suite: xenial
Codename: xenial
-Date: Sun, 22 Mar 2020 13:34:45 UTC
+Date: Wed, 29 Apr 2020 10:04:23 UTC
Architectures: amd64
Components: universe
Description: Generated by aptly
MD5Sum:
+ a757fd36f2c66b22d2774f37b3605534 1395 universe/Contents-amd64.gz
c5cc3b01a49348b8c39a68453ca43705 89 universe/binary-amd64/Release
- 5692fabd4f7a7798eb987a6baa842791 1351 universe/binary-amd64/Packages
- be4e3b2866972955685f128c01f930fe 735 universe/binary-amd64/Packages.gz
- c3333852069917e36dd92874511a8d44 771 universe/binary-amd64/Packages.bz2
- 26e63bdaba8403f0f154603ac4ff5e56 1361 universe/Contents-amd64.gz
+ 766aaf19805ea14649504e3c3159b711 2702 universe/binary-amd64/Packages
+ 5ca47d26bbe43a315911873c873d5683 871 universe/binary-amd64/Packages.gz
+ bb283b57725b641032a36add25cb257c 1043 universe/binary-amd64/Packages.bz2
SHA1:
+ ea4285348258704b6fd10c3d0db761f9a69e562b 1395 universe/Contents-amd64.gz
c9cecc9c57c7765960c0bc498c3b8b8e40622551 89 universe/binary-amd64/Release
- bc2648112c8a3d5165b865306dc8bee33b58fb56 1351 universe/binary-amd64/Packages
- 2df31cf733ba82e1b378a8583b27f8ec27f047e8 735 universe/binary-amd64/Packages.gz
- 950b6f7129de2a8729c314f7557c21076ee2f7da 771 universe/binary-amd64/Packages.bz2
- 03ea6767100f069ec24cc1ef10783c3892da4429 1361 universe/Contents-amd64.gz
+ 2494a437e98d72363a51a1bb9b25b0a342f5988d 2702 universe/binary-amd64/Packages
+ 5f1177cf1a415058ff7a6fe916c694c9173dd24e 871 universe/binary-amd64/Packages.gz
+ 66e118c69a4d0e5867c06f35f6467d2a986654bb 1043 universe/binary-amd64/Packages.bz2
SHA256:
+ 9e2df3f9fee23a26ba18307883457352738d594b5b4ee0fb30f1203ce595207e 1395 universe/Contents-amd64.gz
e6d5690da31248d80075b81f7d7f340280ae0550c70619be1d7151e83d4f1dd9 89 universe/binary-amd64/Release
- 956f383d996b70ea6395b295af1bb591d7b2913bf1ec6b6ab19c7515a08050bc 1351 universe/binary-amd64/Packages
- e6d60f512a45800a741f1ead2d8e17aa9c62263e6e70d4851a9165bd6e0f0927 735 universe/binary-amd64/Packages.gz
- 86f7d09b3c08843d7066d7f59922eba812da80a16de7643377beec5201e91df6 771 universe/binary-amd64/Packages.bz2
- 5d6da55ce4b4f5474865814597dd677b1e3ace5b96c877029605fb153f073967 1361 universe/Contents-amd64.gz
+ c11e113943eb20cbb83d92a8833e28527a99ef6b8fa5fbde042854869779839b 2702 universe/binary-amd64/Packages
+ 758c465d6aa9a6cf2388d57fff093aae25173246aee0dd5d1a0e29fe89e9baa6 871 universe/binary-amd64/Packages.gz
+ 3b5ab85ceceb2f2be86eb7d896089e41a51a7f61422a75eb7c5efa33e99c7f11 1043 universe/binary-amd64/Packages.bz2
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
-iQEcBAEBCAAGBQJed2l1AAoJECd6cpP1nkiJd0IH/R1fgu8yIs0ErgmcbUzrODbO
-gGALHW4+a+jq9Y6tsEkA9/rkA7GuSOEjG1fR44FRk8U8uJGBZByqHUNoHnloVRQ+
-8lAFcAvA2rvZvb+pjVGvzEQAMUG+XwGtg3r3wIeeMlhJgLyPae7gmCi/mi2Gtb3e
-q2PDYJ3ZP/sQlBP7bsSifk9msEI2EtdC5jqrUfAyzOhardtdjxLp2lHeylfaTBh9
-4RdOSDt8K+DQg8gUDd8RJgPh6TD2oF8omxeybN7JRzmWNmld5jyBm9TL47D8WXuQ
-M5iyMjB5mZgxhC1OrdW5jtyB5/IjVTPNIjF6qr1uqFGMoICPB1lSH/McE+IeC/c=
-=7yRT
+iQEcBAEBCAAGBQJeqVEnAAoJECd6cpP1nkiJ9KgH/14nbTGEnK40azaZruWLVO27
+Zkv4xVDILjjXCL3zXJTyP+AxxyBoWEVLaKA+Di5calXzsawYgdVAjNR0WNQ/mBaW
+9sBUq7YDEnaRP/R0X0qYT8ZwL7Hlbdzf9rM11gz+2X4G6s4FwbOkGDrAzj81NK3W
+pq5ZawvwCsjAofwWPUknwjd0ZvGJofVYsIm7z0jIsA10tDvZlE6wyX57mvrr6zbl
+fCEteRIF0eFveidZFYshL6Ly7ACiTtKJhpd6yBY5gTCxoqRV+kjXjQ6nW0ECK72y
+nsT75azUoFxn/wf+F8UI7MZp52xRf+eIFc1aGuahVEziiOw8sSvBpRonUjdUFhQ=
+=zk2A
-----END PGP SIGNATURE-----
diff --git a/systems/win32/miktex/setup/deb/dists/xenial/Release b/systems/win32/miktex/setup/deb/dists/xenial/Release
index 91577d058b..e6cabee6e7 100644
--- a/systems/win32/miktex/setup/deb/dists/xenial/Release
+++ b/systems/win32/miktex/setup/deb/dists/xenial/Release
@@ -2,25 +2,25 @@ Origin: . xenial
Label: . xenial
Suite: xenial
Codename: xenial
-Date: Sun, 22 Mar 2020 13:34:45 UTC
+Date: Wed, 29 Apr 2020 10:04:23 UTC
Architectures: amd64
Components: universe
Description: Generated by aptly
MD5Sum:
+ a757fd36f2c66b22d2774f37b3605534 1395 universe/Contents-amd64.gz
c5cc3b01a49348b8c39a68453ca43705 89 universe/binary-amd64/Release
- 5692fabd4f7a7798eb987a6baa842791 1351 universe/binary-amd64/Packages
- be4e3b2866972955685f128c01f930fe 735 universe/binary-amd64/Packages.gz
- c3333852069917e36dd92874511a8d44 771 universe/binary-amd64/Packages.bz2
- 26e63bdaba8403f0f154603ac4ff5e56 1361 universe/Contents-amd64.gz
+ 766aaf19805ea14649504e3c3159b711 2702 universe/binary-amd64/Packages
+ 5ca47d26bbe43a315911873c873d5683 871 universe/binary-amd64/Packages.gz
+ bb283b57725b641032a36add25cb257c 1043 universe/binary-amd64/Packages.bz2
SHA1:
+ ea4285348258704b6fd10c3d0db761f9a69e562b 1395 universe/Contents-amd64.gz
c9cecc9c57c7765960c0bc498c3b8b8e40622551 89 universe/binary-amd64/Release
- bc2648112c8a3d5165b865306dc8bee33b58fb56 1351 universe/binary-amd64/Packages
- 2df31cf733ba82e1b378a8583b27f8ec27f047e8 735 universe/binary-amd64/Packages.gz
- 950b6f7129de2a8729c314f7557c21076ee2f7da 771 universe/binary-amd64/Packages.bz2
- 03ea6767100f069ec24cc1ef10783c3892da4429 1361 universe/Contents-amd64.gz
+ 2494a437e98d72363a51a1bb9b25b0a342f5988d 2702 universe/binary-amd64/Packages
+ 5f1177cf1a415058ff7a6fe916c694c9173dd24e 871 universe/binary-amd64/Packages.gz
+ 66e118c69a4d0e5867c06f35f6467d2a986654bb 1043 universe/binary-amd64/Packages.bz2
SHA256:
+ 9e2df3f9fee23a26ba18307883457352738d594b5b4ee0fb30f1203ce595207e 1395 universe/Contents-amd64.gz
e6d5690da31248d80075b81f7d7f340280ae0550c70619be1d7151e83d4f1dd9 89 universe/binary-amd64/Release
- 956f383d996b70ea6395b295af1bb591d7b2913bf1ec6b6ab19c7515a08050bc 1351 universe/binary-amd64/Packages
- e6d60f512a45800a741f1ead2d8e17aa9c62263e6e70d4851a9165bd6e0f0927 735 universe/binary-amd64/Packages.gz
- 86f7d09b3c08843d7066d7f59922eba812da80a16de7643377beec5201e91df6 771 universe/binary-amd64/Packages.bz2
- 5d6da55ce4b4f5474865814597dd677b1e3ace5b96c877029605fb153f073967 1361 universe/Contents-amd64.gz
+ c11e113943eb20cbb83d92a8833e28527a99ef6b8fa5fbde042854869779839b 2702 universe/binary-amd64/Packages
+ 758c465d6aa9a6cf2388d57fff093aae25173246aee0dd5d1a0e29fe89e9baa6 871 universe/binary-amd64/Packages.gz
+ 3b5ab85ceceb2f2be86eb7d896089e41a51a7f61422a75eb7c5efa33e99c7f11 1043 universe/binary-amd64/Packages.bz2
diff --git a/systems/win32/miktex/setup/deb/dists/xenial/Release.gpg b/systems/win32/miktex/setup/deb/dists/xenial/Release.gpg
index e4bb0b950b..d42617043b 100644
--- a/systems/win32/miktex/setup/deb/dists/xenial/Release.gpg
+++ b/systems/win32/miktex/setup/deb/dists/xenial/Release.gpg
@@ -1,11 +1,11 @@
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
-iQEcBAABCAAGBQJed2l1AAoJECd6cpP1nkiJqz0IAIjpdx/uWpo5m8p9mPcaIh3z
-DSI+6ehHZcyGBeGWu+33rqichxHlkkWbSQIUbeDDXjI4BQVz8Qwy0gP7Y7wemSou
-yzTDpMXQttOblpWDLN1rq338MRoRQk+XyYdEXD2sXiqYphIeX83zT4HKSe+PzUao
-1OTQ/2sZ8+5itAs2le030QCj7R5oDxIV3cniZtelJR2vsCAxRgs1mZebYDj6eAX5
-vL9yK3qfIvNMAZ02L23skUykychOTzUSHJvvBgDHtw/2ooCJYfhxjWGBF0dkEEEc
-0jT8wuhE6Yc/GqKnsijlJRdpuaYApMEBdGQa3KsCqL4Q5k+gCmIFQl2Nh12+q1o=
-=qnDm
+iQEcBAABCAAGBQJeqVEnAAoJECd6cpP1nkiJ170H/0pPDVs18q8P8Dbxnw/pr7vd
+bQBcHz6J7ias59MLvMylkvq1PHuFG1IcInKSiQh5jOVBhrXQS86CqjMhuhiYX7lY
+vDUIoW4Kc04JDY1ABfcv7fJ2TlWUSgmZkefNaiUy8NSYQzwuptdXfxOpMC0aMEn6
+Rsu7VC4jY2bYEd2B8y3WFBq3ZviKBjrbQi7X0pcnmIMKRUd36mh2vEkmsPWKviSD
+LEpxbQQpfZP9Edj2eZsx4GGiykQ/yhgcc//VFup2BpIq4ypGwIhBqoHZd6cptX25
+MSrnF99hdt5uGC0+iJSeM39Vg7jzecEovuKcXQomwzAOeJgxc4zmBiFukIosTSg=
+=87HI
-----END PGP SIGNATURE-----
diff --git a/systems/win32/miktex/setup/deb/dists/xenial/universe/Contents-amd64.gz b/systems/win32/miktex/setup/deb/dists/xenial/universe/Contents-amd64.gz
index c7e9584196..d5274b5adb 100644
--- a/systems/win32/miktex/setup/deb/dists/xenial/universe/Contents-amd64.gz
+++ b/systems/win32/miktex/setup/deb/dists/xenial/universe/Contents-amd64.gz
Binary files differ
diff --git a/systems/win32/miktex/setup/deb/dists/xenial/universe/binary-amd64/Packages b/systems/win32/miktex/setup/deb/dists/xenial/universe/binary-amd64/Packages
index 06a3fd059e..5843a9e23e 100644
--- a/systems/win32/miktex/setup/deb/dists/xenial/universe/binary-amd64/Packages
+++ b/systems/win32/miktex/setup/deb/dists/xenial/universe/binary-amd64/Packages
@@ -1,6 +1,22 @@
Package: miktex
Priority: optional
Section: tex
+Installed-Size: 91550
+Maintainer: Christian Schenk <cs@miktex.org>
+Architecture: amd64
+Version: 2.9.7400-xenial1
+Depends: debconf (>= 0.2.17), fontconfig, libbz2-1.0, libc6 (>= 2.15), libcairo2 (>= 1.12.0), libcurl3 (>= 7.16.2), libexpat1 (>= 2.0.1), libfontconfig1 (>= 2.11.94), libfreetype6 (>= 2.3.9), libfribidi0 (>= 0.19.2), libgcc1 (>= 1:4.0), libgd3 (>= 2.1.0~alpha~), libgraphite2-3 (>= 1.2.2), libhunspell-1.3-0 (>= 1.3.3), libicu55 (>= 55.1-1~), libjpeg8 (>= 8c), liblog4cxx10v5 (>= 0.10.0), liblzma5 (>= 5.1.1alpha+20120614), libmpfr4 (>= 3.1.3), libmspack0 (>= 0.4), libpng12-0 (>= 1.2.13-4), libpopt0 (>= 1.14), libqt5concurrent5 (>= 5.0.2), libqt5core5a (>= 5.5.1), libqt5dbus5 (>= 5.0.2), libqt5gui5 (>= 5.3.0) | libqt5gui5-gles (>= 5.3.0), libqt5script5 (>= 5.0.2), libqt5scripttools5 (>= 5.0.2), libqt5widgets5 (>= 5.3.0), libqt5xml5 (>= 5.0.2), libssl1.0.0 (>= 1.0.0), libstdc++6 (>= 5.2), liburiparser1 (>= 0.6.0), libzzip-0-13 (>= 0.13.56), zlib1g (>= 1:1.2.0)
+Filename: pool/universe/m/miktex/miktex_2.9.7400-xenial1_amd64.deb
+Size: 28898388
+MD5sum: 23315a48cb25b2225136a92f6600073b
+SHA1: b924506508d7e50cfc1ce6935fcf46b1a14d7830
+SHA256: a60b2e9f969878dd38f373f2f672ece73765c67fb54aad0fb0f20bf80ddbeffd
+Description: MiKTeX: a scalable TeX distribution
+Homepage: https://miktex.org
+
+Package: miktex
+Priority: optional
+Section: tex
Installed-Size: 90867
Maintainer: Christian Schenk <cs@miktex.org>
Architecture: amd64
diff --git a/systems/win32/miktex/setup/deb/dists/xenial/universe/binary-amd64/Packages.bz2 b/systems/win32/miktex/setup/deb/dists/xenial/universe/binary-amd64/Packages.bz2
index fd6e5be4a3..a21f480935 100644
--- a/systems/win32/miktex/setup/deb/dists/xenial/universe/binary-amd64/Packages.bz2
+++ b/systems/win32/miktex/setup/deb/dists/xenial/universe/binary-amd64/Packages.bz2
Binary files differ
diff --git a/systems/win32/miktex/setup/deb/dists/xenial/universe/binary-amd64/Packages.gz b/systems/win32/miktex/setup/deb/dists/xenial/universe/binary-amd64/Packages.gz
index e4299bcd88..b678241f5e 100644
--- a/systems/win32/miktex/setup/deb/dists/xenial/universe/binary-amd64/Packages.gz
+++ b/systems/win32/miktex/setup/deb/dists/xenial/universe/binary-amd64/Packages.gz
Binary files differ
diff --git a/systems/win32/miktex/setup/rpm/fedora/28/repodata/377274b5e41ff2b41b1dc7dd33d404947c6370b24a585e8ba64d72886c6d7e78-filelists.sqlite.bz2 b/systems/win32/miktex/setup/rpm/fedora/28/repodata/377274b5e41ff2b41b1dc7dd33d404947c6370b24a585e8ba64d72886c6d7e78-filelists.sqlite.bz2
deleted file mode 100644
index d315f2f64e..0000000000
--- a/systems/win32/miktex/setup/rpm/fedora/28/repodata/377274b5e41ff2b41b1dc7dd33d404947c6370b24a585e8ba64d72886c6d7e78-filelists.sqlite.bz2
+++ /dev/null
Binary files differ
diff --git a/systems/win32/miktex/setup/rpm/fedora/28/repodata/6da87e174699f0405723275cd0850f21062d5e8715b3f3204f9c9d938a148860-filelists.xml.gz b/systems/win32/miktex/setup/rpm/fedora/28/repodata/6da87e174699f0405723275cd0850f21062d5e8715b3f3204f9c9d938a148860-filelists.xml.gz
new file mode 100644
index 0000000000..c6d55330ff
--- /dev/null
+++ b/systems/win32/miktex/setup/rpm/fedora/28/repodata/6da87e174699f0405723275cd0850f21062d5e8715b3f3204f9c9d938a148860-filelists.xml.gz
Binary files differ
diff --git a/systems/win32/miktex/setup/rpm/fedora/28/repodata/7ffad73d25c8e04c4768a599c84553eb5acdb1c6b35dd5cf4ec7ff262b4859ab-other.xml.gz b/systems/win32/miktex/setup/rpm/fedora/28/repodata/7ffad73d25c8e04c4768a599c84553eb5acdb1c6b35dd5cf4ec7ff262b4859ab-other.xml.gz
deleted file mode 100644
index 09f7ec9dd9..0000000000
--- a/systems/win32/miktex/setup/rpm/fedora/28/repodata/7ffad73d25c8e04c4768a599c84553eb5acdb1c6b35dd5cf4ec7ff262b4859ab-other.xml.gz
+++ /dev/null
Binary files differ
diff --git a/systems/win32/miktex/setup/rpm/fedora/28/repodata/8d2495520d907b62581db4ee1d81efc9e55ff387c66e433376bde385724d0eea-other.xml.gz b/systems/win32/miktex/setup/rpm/fedora/28/repodata/8d2495520d907b62581db4ee1d81efc9e55ff387c66e433376bde385724d0eea-other.xml.gz
new file mode 100644
index 0000000000..16ab192e2f
--- /dev/null
+++ b/systems/win32/miktex/setup/rpm/fedora/28/repodata/8d2495520d907b62581db4ee1d81efc9e55ff387c66e433376bde385724d0eea-other.xml.gz
Binary files differ
diff --git a/systems/win32/miktex/setup/rpm/fedora/28/repodata/9f5f776f90002b63ac58865d84fb17e66a5a484de9fbf5696dfdbae9700382cc-primary.sqlite.bz2 b/systems/win32/miktex/setup/rpm/fedora/28/repodata/9f5f776f90002b63ac58865d84fb17e66a5a484de9fbf5696dfdbae9700382cc-primary.sqlite.bz2
deleted file mode 100644
index 8119d8dfee..0000000000
--- a/systems/win32/miktex/setup/rpm/fedora/28/repodata/9f5f776f90002b63ac58865d84fb17e66a5a484de9fbf5696dfdbae9700382cc-primary.sqlite.bz2
+++ /dev/null
Binary files differ
diff --git a/systems/win32/miktex/setup/rpm/fedora/28/repodata/b2adeb7f59747951b8caa932abaabf8d76891c3354865869e0e48bce305bbc61-primary.sqlite.bz2 b/systems/win32/miktex/setup/rpm/fedora/28/repodata/b2adeb7f59747951b8caa932abaabf8d76891c3354865869e0e48bce305bbc61-primary.sqlite.bz2
new file mode 100644
index 0000000000..e030418527
--- /dev/null
+++ b/systems/win32/miktex/setup/rpm/fedora/28/repodata/b2adeb7f59747951b8caa932abaabf8d76891c3354865869e0e48bce305bbc61-primary.sqlite.bz2
Binary files differ
diff --git a/systems/win32/miktex/setup/rpm/fedora/28/repodata/dbfc947d0bec68ebf53085813d746202dc60498e4b8151346062ccdabc030f7c-primary.xml.gz b/systems/win32/miktex/setup/rpm/fedora/28/repodata/dbfc947d0bec68ebf53085813d746202dc60498e4b8151346062ccdabc030f7c-primary.xml.gz
new file mode 100644
index 0000000000..a075d0a427
--- /dev/null
+++ b/systems/win32/miktex/setup/rpm/fedora/28/repodata/dbfc947d0bec68ebf53085813d746202dc60498e4b8151346062ccdabc030f7c-primary.xml.gz
Binary files differ
diff --git a/systems/win32/miktex/setup/rpm/fedora/28/repodata/e27417bed8dcf25abc18ca9ad20510691ea9398e9a6a4601cfdccc2bec31f312-other.sqlite.bz2 b/systems/win32/miktex/setup/rpm/fedora/28/repodata/e27417bed8dcf25abc18ca9ad20510691ea9398e9a6a4601cfdccc2bec31f312-other.sqlite.bz2
deleted file mode 100644
index a6e93bf6f6..0000000000
--- a/systems/win32/miktex/setup/rpm/fedora/28/repodata/e27417bed8dcf25abc18ca9ad20510691ea9398e9a6a4601cfdccc2bec31f312-other.sqlite.bz2
+++ /dev/null
Binary files differ
diff --git a/systems/win32/miktex/setup/rpm/fedora/28/repodata/e92de39e364e57e7e44a0e3bd72033db3add06101534bdabbb9cfb4d714e955b-primary.xml.gz b/systems/win32/miktex/setup/rpm/fedora/28/repodata/e92de39e364e57e7e44a0e3bd72033db3add06101534bdabbb9cfb4d714e955b-primary.xml.gz
deleted file mode 100644
index f754a65897..0000000000
--- a/systems/win32/miktex/setup/rpm/fedora/28/repodata/e92de39e364e57e7e44a0e3bd72033db3add06101534bdabbb9cfb4d714e955b-primary.xml.gz
+++ /dev/null
Binary files differ
diff --git a/systems/win32/miktex/setup/rpm/fedora/28/repodata/ea186766bcba0ddc6a28b5f9a81c6724f219e952e92e13653d4e527f689fbda7-other.sqlite.bz2 b/systems/win32/miktex/setup/rpm/fedora/28/repodata/ea186766bcba0ddc6a28b5f9a81c6724f219e952e92e13653d4e527f689fbda7-other.sqlite.bz2
new file mode 100644
index 0000000000..be81e1269b
--- /dev/null
+++ b/systems/win32/miktex/setup/rpm/fedora/28/repodata/ea186766bcba0ddc6a28b5f9a81c6724f219e952e92e13653d4e527f689fbda7-other.sqlite.bz2
Binary files differ
diff --git a/systems/win32/miktex/setup/rpm/fedora/28/repodata/f06bf7319515ee35ca32c5459616f419a8d22b9766ea5f1105a8e644242fc0c7-filelists.sqlite.bz2 b/systems/win32/miktex/setup/rpm/fedora/28/repodata/f06bf7319515ee35ca32c5459616f419a8d22b9766ea5f1105a8e644242fc0c7-filelists.sqlite.bz2
new file mode 100644
index 0000000000..cc90180191
--- /dev/null
+++ b/systems/win32/miktex/setup/rpm/fedora/28/repodata/f06bf7319515ee35ca32c5459616f419a8d22b9766ea5f1105a8e644242fc0c7-filelists.sqlite.bz2
Binary files differ
diff --git a/systems/win32/miktex/setup/rpm/fedora/28/repodata/f174c00e2b6866ebfd0bcfa845e504317d10a9cdf774e5abe43d8a34e810868d-filelists.xml.gz b/systems/win32/miktex/setup/rpm/fedora/28/repodata/f174c00e2b6866ebfd0bcfa845e504317d10a9cdf774e5abe43d8a34e810868d-filelists.xml.gz
deleted file mode 100644
index 1891ad62f8..0000000000
--- a/systems/win32/miktex/setup/rpm/fedora/28/repodata/f174c00e2b6866ebfd0bcfa845e504317d10a9cdf774e5abe43d8a34e810868d-filelists.xml.gz
+++ /dev/null
Binary files differ
diff --git a/systems/win32/miktex/setup/rpm/fedora/28/repodata/repomd.xml b/systems/win32/miktex/setup/rpm/fedora/28/repodata/repomd.xml
index 73733d6c73..fae72a7c5a 100644
--- a/systems/win32/miktex/setup/rpm/fedora/28/repodata/repomd.xml
+++ b/systems/win32/miktex/setup/rpm/fedora/28/repodata/repomd.xml
@@ -1,55 +1,55 @@
<?xml version="1.0" encoding="UTF-8"?>
<repomd xmlns="http://linux.duke.edu/metadata/repo" xmlns:rpm="http://linux.duke.edu/metadata/rpm">
- <revision>1584884102</revision>
+ <revision>1588154687</revision>
<data type="filelists">
- <checksum type="sha256">f174c00e2b6866ebfd0bcfa845e504317d10a9cdf774e5abe43d8a34e810868d</checksum>
- <open-checksum type="sha256">2831defb010429a4792b0b71fe04b8c0c47bceaf2a7b2800cfb35d9753053b29</open-checksum>
- <location href="repodata/f174c00e2b6866ebfd0bcfa845e504317d10a9cdf774e5abe43d8a34e810868d-filelists.xml.gz"/>
- <timestamp>1584884102</timestamp>
- <size>6164</size>
- <open-size>28428</open-size>
+ <checksum type="sha256">6da87e174699f0405723275cd0850f21062d5e8715b3f3204f9c9d938a148860</checksum>
+ <open-checksum type="sha256">37be916f19b0ca5984cadb822d571a8d1328ba18c771a92a69e714b389a14505</open-checksum>
+ <location href="repodata/6da87e174699f0405723275cd0850f21062d5e8715b3f3204f9c9d938a148860-filelists.xml.gz"/>
+ <timestamp>1588154688</timestamp>
+ <size>10074</size>
+ <open-size>56155</open-size>
</data>
<data type="primary">
- <checksum type="sha256">e92de39e364e57e7e44a0e3bd72033db3add06101534bdabbb9cfb4d714e955b</checksum>
- <open-checksum type="sha256">f5df73934153bd0e0c8114cfcc53773776115a0056013e8972ba9554da1d2254</open-checksum>
- <location href="repodata/e92de39e364e57e7e44a0e3bd72033db3add06101534bdabbb9cfb4d714e955b-primary.xml.gz"/>
- <timestamp>1584884102</timestamp>
- <size>2088</size>
- <open-size>12055</open-size>
+ <checksum type="sha256">dbfc947d0bec68ebf53085813d746202dc60498e4b8151346062ccdabc030f7c</checksum>
+ <open-checksum type="sha256">1d14f48de9a055c402f3db355d43cf9cc829c810edd2b99d7a81c6535056c902</open-checksum>
+ <location href="repodata/dbfc947d0bec68ebf53085813d746202dc60498e4b8151346062ccdabc030f7c-primary.xml.gz"/>
+ <timestamp>1588154688</timestamp>
+ <size>2365</size>
+ <open-size>23943</open-size>
</data>
<data type="primary_db">
- <checksum type="sha256">9f5f776f90002b63ac58865d84fb17e66a5a484de9fbf5696dfdbae9700382cc</checksum>
- <open-checksum type="sha256">bb0033b411df97aaf67d33c5d20ecba8f2467defd25c715fd01e9d167874b739</open-checksum>
- <location href="repodata/9f5f776f90002b63ac58865d84fb17e66a5a484de9fbf5696dfdbae9700382cc-primary.sqlite.bz2"/>
- <timestamp>1584884102</timestamp>
+ <checksum type="sha256">b2adeb7f59747951b8caa932abaabf8d76891c3354865869e0e48bce305bbc61</checksum>
+ <open-checksum type="sha256">d09485c4b2fdc2a8179113bb06242c1740d274e113a2f800da7b8bda12c9c080</open-checksum>
+ <location href="repodata/b2adeb7f59747951b8caa932abaabf8d76891c3354865869e0e48bce305bbc61-primary.sqlite.bz2"/>
+ <timestamp>1588154688</timestamp>
<database_version>10</database_version>
- <size>7082</size>
- <open-size>114688</open-size>
+ <size>11606</size>
+ <open-size>143360</open-size>
</data>
<data type="other_db">
- <checksum type="sha256">e27417bed8dcf25abc18ca9ad20510691ea9398e9a6a4601cfdccc2bec31f312</checksum>
- <open-checksum type="sha256">4a6ef6a3c4ca04188baafddfb8366646023d4e27cdd65b5e40010881874c44b9</open-checksum>
- <location href="repodata/e27417bed8dcf25abc18ca9ad20510691ea9398e9a6a4601cfdccc2bec31f312-other.sqlite.bz2"/>
- <timestamp>1584884102</timestamp>
+ <checksum type="sha256">ea186766bcba0ddc6a28b5f9a81c6724f219e952e92e13653d4e527f689fbda7</checksum>
+ <open-checksum type="sha256">a9f043d8c0726fc4f48368dc365e044467b668ecc32161194a1e77bd3592d50b</open-checksum>
+ <location href="repodata/ea186766bcba0ddc6a28b5f9a81c6724f219e952e92e13653d4e527f689fbda7-other.sqlite.bz2"/>
+ <timestamp>1588154688</timestamp>
<database_version>10</database_version>
- <size>780</size>
+ <size>911</size>
<open-size>24576</open-size>
</data>
<data type="other">
- <checksum type="sha256">7ffad73d25c8e04c4768a599c84553eb5acdb1c6b35dd5cf4ec7ff262b4859ab</checksum>
- <open-checksum type="sha256">984a9f96cfa8fc6cf3ff1af853062ff2759fbde8b5b6cbf70a24ba1bb9614663</open-checksum>
- <location href="repodata/7ffad73d25c8e04c4768a599c84553eb5acdb1c6b35dd5cf4ec7ff262b4859ab-other.xml.gz"/>
- <timestamp>1584884102</timestamp>
- <size>345</size>
- <open-size>465</open-size>
+ <checksum type="sha256">8d2495520d907b62581db4ee1d81efc9e55ff387c66e433376bde385724d0eea</checksum>
+ <open-checksum type="sha256">40c1992c674b2ffb07505f6aec85ae32aeeb0f53f3ccb6359892e85598f21fa3</open-checksum>
+ <location href="repodata/8d2495520d907b62581db4ee1d81efc9e55ff387c66e433376bde385724d0eea-other.xml.gz"/>
+ <timestamp>1588154688</timestamp>
+ <size>406</size>
+ <open-size>809</open-size>
</data>
<data type="filelists_db">
- <checksum type="sha256">377274b5e41ff2b41b1dc7dd33d404947c6370b24a585e8ba64d72886c6d7e78</checksum>
- <open-checksum type="sha256">c5ff89f7ae88937cc163e2db69ebb27fa1ca81ce9510b29c3b74fb9a66968d9a</open-checksum>
- <location href="repodata/377274b5e41ff2b41b1dc7dd33d404947c6370b24a585e8ba64d72886c6d7e78-filelists.sqlite.bz2"/>
- <timestamp>1584884102</timestamp>
+ <checksum type="sha256">f06bf7319515ee35ca32c5459616f419a8d22b9766ea5f1105a8e644242fc0c7</checksum>
+ <open-checksum type="sha256">ab5e000fb424addc4e3f0a08abb6e7f859ee497854f0971b2a8cdd04aa54fc53</open-checksum>
+ <location href="repodata/f06bf7319515ee35ca32c5459616f419a8d22b9766ea5f1105a8e644242fc0c7-filelists.sqlite.bz2"/>
+ <timestamp>1588154688</timestamp>
<database_version>10</database_version>
- <size>8512</size>
- <open-size>49152</open-size>
+ <size>14494</size>
+ <open-size>69632</open-size>
</data>
</repomd>
diff --git a/systems/win32/miktex/setup/rpm/fedora/28/repodata/repomd.xml.asc b/systems/win32/miktex/setup/rpm/fedora/28/repodata/repomd.xml.asc
index f9f0d75c33..1e50c4fdbd 100644
--- a/systems/win32/miktex/setup/rpm/fedora/28/repodata/repomd.xml.asc
+++ b/systems/win32/miktex/setup/rpm/fedora/28/repodata/repomd.xml.asc
@@ -1,11 +1,11 @@
-----BEGIN PGP SIGNATURE-----
-iQEzBAABCAAdFiEE1rwkNWWyCHvD+JfJJ3pyk/WeSIkFAl53aYYACgkQJ3pyk/We
-SIm8vggAp7fBma+SZr/9KUBXxgHmTScy5TlwhAQdKkVwz8smZwu57dCeZsMbV6az
-RCbf+iSWOD6f9OFfSlempMGLrxsIm1TyMQRD6k5bGdtgiYgxy4EZjPWOov4GOLeq
-fAfFVi0ANbRPIGR67qEYc1Kqrp/J80fI7N6UsFhF8AFXaa6xJhZpAupoHX9Azym7
-y2hvQ9vRDfq75/sBjU2TEQOo1ExmvP+uTOnDkLyrkE8RRZoVttcxW5OmwJSV2jzK
-nDOJcVsKQzRMpqewASdKWNEb8I+seOXa/evWADpxI0kAPmKPO15bZtVYZhVO3qM0
-V2ZuepOs0bNtJ/LoI/fhpjby1JbCig==
-=j18Q
+iQEzBAABCAAdFiEE1rwkNWWyCHvD+JfJJ3pyk/WeSIkFAl6pUUAACgkQJ3pyk/We
+SIl9qQf/T1PglDgY/orOUzZNFeF1MX+AU22IdBbeggZEZYpIBZIjxl+3TaFCJLtD
+5IWc8NCyUOa7+LwCe3GNm200wEbBaZqll8kMmQefrW5hhFTsu7B812O3TzRaTnQj
+0W4TcWI1AEDqnIOgivDfQjYiyedbjFVd7O7+hc78XU+dVJhw39mKn8I1jRNGqHau
+myx284X4+RL3rQdtz3YeLRZ5zkDPX6iE1LLY/XN6mDOthi+cPieXEJemQHTp5Q38
+vrQM4sbbAPmcR1U5Lr6JMOxaf+75w0yDN19dxjqpYradFko2ldfDe6C8JoLoL3QH
+ZcgBsSabEOMw2wRjc1Q04n5FzDc4cQ==
+=KKVX
-----END PGP SIGNATURE-----
diff --git a/systems/win32/miktex/setup/rpm/fedora/30/repodata/06258324fb706bd9ece7eca5e904bbbe4a74cc579ef5fb94b1e139d415c7f09d-primary.sqlite.bz2 b/systems/win32/miktex/setup/rpm/fedora/30/repodata/06258324fb706bd9ece7eca5e904bbbe4a74cc579ef5fb94b1e139d415c7f09d-primary.sqlite.bz2
new file mode 100644
index 0000000000..7991edfe6e
--- /dev/null
+++ b/systems/win32/miktex/setup/rpm/fedora/30/repodata/06258324fb706bd9ece7eca5e904bbbe4a74cc579ef5fb94b1e139d415c7f09d-primary.sqlite.bz2
Binary files differ
diff --git a/systems/win32/miktex/setup/rpm/fedora/30/repodata/09b4e487e5b27bc18cdafe05dd6738fbe0be38ab0403216be6ed23e8707ac5de-other.sqlite.bz2 b/systems/win32/miktex/setup/rpm/fedora/30/repodata/09b4e487e5b27bc18cdafe05dd6738fbe0be38ab0403216be6ed23e8707ac5de-other.sqlite.bz2
deleted file mode 100644
index 59759732da..0000000000
--- a/systems/win32/miktex/setup/rpm/fedora/30/repodata/09b4e487e5b27bc18cdafe05dd6738fbe0be38ab0403216be6ed23e8707ac5de-other.sqlite.bz2
+++ /dev/null
Binary files differ
diff --git a/systems/win32/miktex/setup/rpm/fedora/30/repodata/0b709d64429c0867232b5ab7317c8aa7ca4084ded02c7f7ecb7cb1d8a94e8fcd-primary.sqlite.bz2 b/systems/win32/miktex/setup/rpm/fedora/30/repodata/0b709d64429c0867232b5ab7317c8aa7ca4084ded02c7f7ecb7cb1d8a94e8fcd-primary.sqlite.bz2
deleted file mode 100644
index 6ee7c87ecb..0000000000
--- a/systems/win32/miktex/setup/rpm/fedora/30/repodata/0b709d64429c0867232b5ab7317c8aa7ca4084ded02c7f7ecb7cb1d8a94e8fcd-primary.sqlite.bz2
+++ /dev/null
Binary files differ
diff --git a/systems/win32/miktex/setup/rpm/fedora/30/repodata/769f8c2809ab8c8f9ef0abce50980bcf60346b7f374c39129f8e5056237bbbfd-other.xml.gz b/systems/win32/miktex/setup/rpm/fedora/30/repodata/769f8c2809ab8c8f9ef0abce50980bcf60346b7f374c39129f8e5056237bbbfd-other.xml.gz
new file mode 100644
index 0000000000..1a72e6c333
--- /dev/null
+++ b/systems/win32/miktex/setup/rpm/fedora/30/repodata/769f8c2809ab8c8f9ef0abce50980bcf60346b7f374c39129f8e5056237bbbfd-other.xml.gz
Binary files differ
diff --git a/systems/win32/miktex/setup/rpm/fedora/30/repodata/79b50dca9abd8d87f67b24c029fa043508b72fc64ebe9bdedc42124f41a43d21-filelists.sqlite.bz2 b/systems/win32/miktex/setup/rpm/fedora/30/repodata/79b50dca9abd8d87f67b24c029fa043508b72fc64ebe9bdedc42124f41a43d21-filelists.sqlite.bz2
new file mode 100644
index 0000000000..dfe69d7dbf
--- /dev/null
+++ b/systems/win32/miktex/setup/rpm/fedora/30/repodata/79b50dca9abd8d87f67b24c029fa043508b72fc64ebe9bdedc42124f41a43d21-filelists.sqlite.bz2
Binary files differ
diff --git a/systems/win32/miktex/setup/rpm/fedora/30/repodata/943501c6a4e4abe4313efe772fa1d6ab80d932d5c96d37be9711399ae247168a-filelists.sqlite.bz2 b/systems/win32/miktex/setup/rpm/fedora/30/repodata/943501c6a4e4abe4313efe772fa1d6ab80d932d5c96d37be9711399ae247168a-filelists.sqlite.bz2
deleted file mode 100644
index f3cceb9691..0000000000
--- a/systems/win32/miktex/setup/rpm/fedora/30/repodata/943501c6a4e4abe4313efe772fa1d6ab80d932d5c96d37be9711399ae247168a-filelists.sqlite.bz2
+++ /dev/null
Binary files differ
diff --git a/systems/win32/miktex/setup/rpm/fedora/30/repodata/9830106c8d5bfa0b45a08f387fd6bddc4b7938e1131b44cec5c03f056fc8a39b-filelists.xml.gz b/systems/win32/miktex/setup/rpm/fedora/30/repodata/9830106c8d5bfa0b45a08f387fd6bddc4b7938e1131b44cec5c03f056fc8a39b-filelists.xml.gz
deleted file mode 100644
index 794c38d192..0000000000
--- a/systems/win32/miktex/setup/rpm/fedora/30/repodata/9830106c8d5bfa0b45a08f387fd6bddc4b7938e1131b44cec5c03f056fc8a39b-filelists.xml.gz
+++ /dev/null
Binary files differ
diff --git a/systems/win32/miktex/setup/rpm/fedora/30/repodata/9bac34f4b39721b5479d733999471aea9804b7c53eae52b91287cb911bb6f49b-primary.xml.gz b/systems/win32/miktex/setup/rpm/fedora/30/repodata/9bac34f4b39721b5479d733999471aea9804b7c53eae52b91287cb911bb6f49b-primary.xml.gz
new file mode 100644
index 0000000000..0f227756db
--- /dev/null
+++ b/systems/win32/miktex/setup/rpm/fedora/30/repodata/9bac34f4b39721b5479d733999471aea9804b7c53eae52b91287cb911bb6f49b-primary.xml.gz
Binary files differ
diff --git a/systems/win32/miktex/setup/rpm/fedora/30/repodata/b2f7cf50c39d36ea88b98bc01986fad2600d07f0a53aa7a4f2817a694b23cd91-other.xml.gz b/systems/win32/miktex/setup/rpm/fedora/30/repodata/b2f7cf50c39d36ea88b98bc01986fad2600d07f0a53aa7a4f2817a694b23cd91-other.xml.gz
deleted file mode 100644
index 3d31ad2ec0..0000000000
--- a/systems/win32/miktex/setup/rpm/fedora/30/repodata/b2f7cf50c39d36ea88b98bc01986fad2600d07f0a53aa7a4f2817a694b23cd91-other.xml.gz
+++ /dev/null
Binary files differ
diff --git a/systems/win32/miktex/setup/rpm/fedora/30/repodata/c29d0d6ccf64b5d56b27e28df6242cf643552a526e8d10658e5f8f632f8b3097-other.sqlite.bz2 b/systems/win32/miktex/setup/rpm/fedora/30/repodata/c29d0d6ccf64b5d56b27e28df6242cf643552a526e8d10658e5f8f632f8b3097-other.sqlite.bz2
new file mode 100644
index 0000000000..f8aef877e6
--- /dev/null
+++ b/systems/win32/miktex/setup/rpm/fedora/30/repodata/c29d0d6ccf64b5d56b27e28df6242cf643552a526e8d10658e5f8f632f8b3097-other.sqlite.bz2
Binary files differ
diff --git a/systems/win32/miktex/setup/rpm/fedora/30/repodata/d38c95c8f6b286641bce3939f5d29dbd6a79e16eda87b1b5f75cbfbb97f3231c-filelists.xml.gz b/systems/win32/miktex/setup/rpm/fedora/30/repodata/d38c95c8f6b286641bce3939f5d29dbd6a79e16eda87b1b5f75cbfbb97f3231c-filelists.xml.gz
new file mode 100644
index 0000000000..a6e4706e03
--- /dev/null
+++ b/systems/win32/miktex/setup/rpm/fedora/30/repodata/d38c95c8f6b286641bce3939f5d29dbd6a79e16eda87b1b5f75cbfbb97f3231c-filelists.xml.gz
Binary files differ
diff --git a/systems/win32/miktex/setup/rpm/fedora/30/repodata/d39b3d1c72d8844081495e91dcdda11743305260b2b3ec2446b7cb5d44484be5-primary.xml.gz b/systems/win32/miktex/setup/rpm/fedora/30/repodata/d39b3d1c72d8844081495e91dcdda11743305260b2b3ec2446b7cb5d44484be5-primary.xml.gz
deleted file mode 100644
index 04471e27d7..0000000000
--- a/systems/win32/miktex/setup/rpm/fedora/30/repodata/d39b3d1c72d8844081495e91dcdda11743305260b2b3ec2446b7cb5d44484be5-primary.xml.gz
+++ /dev/null
Binary files differ
diff --git a/systems/win32/miktex/setup/rpm/fedora/30/repodata/repomd.xml b/systems/win32/miktex/setup/rpm/fedora/30/repodata/repomd.xml
index e15c62d70d..6b8e4148a2 100644
--- a/systems/win32/miktex/setup/rpm/fedora/30/repodata/repomd.xml
+++ b/systems/win32/miktex/setup/rpm/fedora/30/repodata/repomd.xml
@@ -1,55 +1,55 @@
<?xml version="1.0" encoding="UTF-8"?>
<repomd xmlns="http://linux.duke.edu/metadata/repo" xmlns:rpm="http://linux.duke.edu/metadata/rpm">
- <revision>1584884105</revision>
+ <revision>1588154691</revision>
<data type="filelists">
- <checksum type="sha256">9830106c8d5bfa0b45a08f387fd6bddc4b7938e1131b44cec5c03f056fc8a39b</checksum>
- <open-checksum type="sha256">dbba5e07c14b30fdc6cdf36dd31f1d8c1a787a0a0614ee620597106f2c3e5968</open-checksum>
- <location href="repodata/9830106c8d5bfa0b45a08f387fd6bddc4b7938e1131b44cec5c03f056fc8a39b-filelists.xml.gz"/>
- <timestamp>1584884106</timestamp>
- <size>6108</size>
- <open-size>28054</open-size>
+ <checksum type="sha256">d38c95c8f6b286641bce3939f5d29dbd6a79e16eda87b1b5f75cbfbb97f3231c</checksum>
+ <open-checksum type="sha256">45b0911d948191ea96e100f82f499ca00b3bcf8dde8f0a820176e42e2dc726c4</open-checksum>
+ <location href="repodata/d38c95c8f6b286641bce3939f5d29dbd6a79e16eda87b1b5f75cbfbb97f3231c-filelists.xml.gz"/>
+ <timestamp>1588154692</timestamp>
+ <size>10046</size>
+ <open-size>55983</open-size>
</data>
<data type="primary">
- <checksum type="sha256">d39b3d1c72d8844081495e91dcdda11743305260b2b3ec2446b7cb5d44484be5</checksum>
- <open-checksum type="sha256">8ed2d7cd0021a7f757c0cc70c250a6dd1fd3088a998bf0abcf252c33c36cc5b1</open-checksum>
- <location href="repodata/d39b3d1c72d8844081495e91dcdda11743305260b2b3ec2446b7cb5d44484be5-primary.xml.gz"/>
- <timestamp>1584884106</timestamp>
- <size>2086</size>
- <open-size>12053</open-size>
+ <checksum type="sha256">9bac34f4b39721b5479d733999471aea9804b7c53eae52b91287cb911bb6f49b</checksum>
+ <open-checksum type="sha256">a4a71546953ae8cd992fcfb9aa6683195cc2b31bb69a41117e6827ab303e31c8</open-checksum>
+ <location href="repodata/9bac34f4b39721b5479d733999471aea9804b7c53eae52b91287cb911bb6f49b-primary.xml.gz"/>
+ <timestamp>1588154692</timestamp>
+ <size>2361</size>
+ <open-size>23939</open-size>
</data>
<data type="primary_db">
- <checksum type="sha256">0b709d64429c0867232b5ab7317c8aa7ca4084ded02c7f7ecb7cb1d8a94e8fcd</checksum>
- <open-checksum type="sha256">ef97b6c78d03b609ced7ef7f7b5870177ba36cd5721ee000fb3c08d6e0efb60d</open-checksum>
- <location href="repodata/0b709d64429c0867232b5ab7317c8aa7ca4084ded02c7f7ecb7cb1d8a94e8fcd-primary.sqlite.bz2"/>
- <timestamp>1584884106</timestamp>
+ <checksum type="sha256">06258324fb706bd9ece7eca5e904bbbe4a74cc579ef5fb94b1e139d415c7f09d</checksum>
+ <open-checksum type="sha256">2822b4551437bc3fd1b022b2121a06dcf1f581878c65d0925645f4fb6608fab2</open-checksum>
+ <location href="repodata/06258324fb706bd9ece7eca5e904bbbe4a74cc579ef5fb94b1e139d415c7f09d-primary.sqlite.bz2"/>
+ <timestamp>1588154692</timestamp>
<database_version>10</database_version>
- <size>7107</size>
- <open-size>114688</open-size>
+ <size>11638</size>
+ <open-size>143360</open-size>
</data>
<data type="other_db">
- <checksum type="sha256">09b4e487e5b27bc18cdafe05dd6738fbe0be38ab0403216be6ed23e8707ac5de</checksum>
- <open-checksum type="sha256">812ae799b7ee78801441a1cdd38506fc35867704b1e24d22a9a408424150ff44</open-checksum>
- <location href="repodata/09b4e487e5b27bc18cdafe05dd6738fbe0be38ab0403216be6ed23e8707ac5de-other.sqlite.bz2"/>
- <timestamp>1584884106</timestamp>
+ <checksum type="sha256">c29d0d6ccf64b5d56b27e28df6242cf643552a526e8d10658e5f8f632f8b3097</checksum>
+ <open-checksum type="sha256">a116dbc572ccdf8f89acbf4b6b423da78cd6594d158a44fb435798e9246c9cd5</open-checksum>
+ <location href="repodata/c29d0d6ccf64b5d56b27e28df6242cf643552a526e8d10658e5f8f632f8b3097-other.sqlite.bz2"/>
+ <timestamp>1588154692</timestamp>
<database_version>10</database_version>
- <size>672</size>
+ <size>743</size>
<open-size>24576</open-size>
</data>
<data type="other">
- <checksum type="sha256">b2f7cf50c39d36ea88b98bc01986fad2600d07f0a53aa7a4f2817a694b23cd91</checksum>
- <open-checksum type="sha256">b3419d742f1d40344b53a4a064cfa6bab60882ee0316b5dbb3e1179708357767</open-checksum>
- <location href="repodata/b2f7cf50c39d36ea88b98bc01986fad2600d07f0a53aa7a4f2817a694b23cd91-other.xml.gz"/>
- <timestamp>1584884106</timestamp>
- <size>234</size>
- <open-size>294</open-size>
+ <checksum type="sha256">769f8c2809ab8c8f9ef0abce50980bcf60346b7f374c39129f8e5056237bbbfd</checksum>
+ <open-checksum type="sha256">18f8ad3c92770d573c8bb8d7770203055544a411bac016f18d77b11301dd5251</open-checksum>
+ <location href="repodata/769f8c2809ab8c8f9ef0abce50980bcf60346b7f374c39129f8e5056237bbbfd-other.xml.gz"/>
+ <timestamp>1588154692</timestamp>
+ <size>286</size>
+ <open-size>467</open-size>
</data>
<data type="filelists_db">
- <checksum type="sha256">943501c6a4e4abe4313efe772fa1d6ab80d932d5c96d37be9711399ae247168a</checksum>
- <open-checksum type="sha256">e46e4d486addb83201333adc2084ed753a266b0cb0c30460a5b493177b8af97a</open-checksum>
- <location href="repodata/943501c6a4e4abe4313efe772fa1d6ab80d932d5c96d37be9711399ae247168a-filelists.sqlite.bz2"/>
- <timestamp>1584884106</timestamp>
+ <checksum type="sha256">79b50dca9abd8d87f67b24c029fa043508b72fc64ebe9bdedc42124f41a43d21</checksum>
+ <open-checksum type="sha256">29abcdcf2542f28cc7bbd598d60b4a747e34e396d440076b43f5d3456b1a097c</open-checksum>
+ <location href="repodata/79b50dca9abd8d87f67b24c029fa043508b72fc64ebe9bdedc42124f41a43d21-filelists.sqlite.bz2"/>
+ <timestamp>1588154692</timestamp>
<database_version>10</database_version>
- <size>8439</size>
- <open-size>45056</open-size>
+ <size>14618</size>
+ <open-size>69632</open-size>
</data>
</repomd>
diff --git a/systems/win32/miktex/setup/rpm/fedora/30/repodata/repomd.xml.asc b/systems/win32/miktex/setup/rpm/fedora/30/repodata/repomd.xml.asc
index f8f7ea0dd0..f8650b0ab6 100644
--- a/systems/win32/miktex/setup/rpm/fedora/30/repodata/repomd.xml.asc
+++ b/systems/win32/miktex/setup/rpm/fedora/30/repodata/repomd.xml.asc
@@ -1,11 +1,11 @@
-----BEGIN PGP SIGNATURE-----
-iQEzBAABCAAdFiEE1rwkNWWyCHvD+JfJJ3pyk/WeSIkFAl53aYoACgkQJ3pyk/We
-SInDVwf9Ful/hiZzI6rOO97KrPXbeX6l5OJKq3gNN3z5FmON/h1qxSdowh6SKdA1
-Vce1N0/XzP4JKP0z3MJrwt/m/CPEMxe3Uv6flpGUE8Ov+p64E7q05RAlcoNn1Fvd
-g2st3yrguYUzA6umfD48Jf+LEH8KQFy8Z1Sxw95rHEejWPwO3ZhOFAqnZHw73/TB
-A+YwXxdqDgvoF0ji0cQghj4lE45+HOHMsA7Hq8gi1g0LMcaYeGRFU5B1pAnbnLqc
-RPISxcyq5xCL4xX2mVeTWBzaXFj+/RMS/UOsRUHPvE4wKjVNrU6yUHHhMujsJWPA
-J0j0Ndr0vBcrC0IvkOoQNWtpAyPHbw==
-=Tt4C
+iQEzBAABCAAdFiEE1rwkNWWyCHvD+JfJJ3pyk/WeSIkFAl6pUUQACgkQJ3pyk/We
+SInSyAf/SY9AYlUUjJHUGe5ZyFv/5ScjbixDrY4pTg5m26+OFDUy/qgVvLSqYQ7I
+OTzoEcENJT6mW0hZHiAbsiX1H6el7GGXd6zjAw8OfbHqN5svmhOknlrD6d4hjLun
+lNfuhd8bDiSKEZRoblW1yzPx+l/H734LWqFyDK6jOuaUj5G+9PkyYlJJqtCH6MWE
+fbI+Tp/2xfP67Ma/uuYDNiHLWrC026dpA9LifZaikM+qdvcxLRE6asWZADcPgLyM
+U3/JvWE465W+34Cf/p26kWHqELe68umREqC0Oycq6+BINz5IgbtJp5s0QHtPaT4N
+7SGjhU4pyKDPpEAcsdLD39Oy9FvfdA==
+=RyW7
-----END PGP SIGNATURE-----
diff --git a/systems/win32/miktex/setup/rpm/opensuse/15/repodata/04fdc2a5893d5d7a7a9786b2835611f03450a293aa51590c27add5ac4be3e89c-primary.sqlite.bz2 b/systems/win32/miktex/setup/rpm/opensuse/15/repodata/04fdc2a5893d5d7a7a9786b2835611f03450a293aa51590c27add5ac4be3e89c-primary.sqlite.bz2
deleted file mode 100644
index 679e13a9bb..0000000000
--- a/systems/win32/miktex/setup/rpm/opensuse/15/repodata/04fdc2a5893d5d7a7a9786b2835611f03450a293aa51590c27add5ac4be3e89c-primary.sqlite.bz2
+++ /dev/null
Binary files differ
diff --git a/systems/win32/miktex/setup/rpm/opensuse/15/repodata/16331f160f05f229eb85d1d446f95ef241f6288d499bb440f96433319fa645b1-primary.sqlite.bz2 b/systems/win32/miktex/setup/rpm/opensuse/15/repodata/16331f160f05f229eb85d1d446f95ef241f6288d499bb440f96433319fa645b1-primary.sqlite.bz2
new file mode 100644
index 0000000000..bf245abd6f
--- /dev/null
+++ b/systems/win32/miktex/setup/rpm/opensuse/15/repodata/16331f160f05f229eb85d1d446f95ef241f6288d499bb440f96433319fa645b1-primary.sqlite.bz2
Binary files differ
diff --git a/systems/win32/miktex/setup/rpm/opensuse/15/repodata/195a6dbab59fe6724013e2f10d0104f52fc468bd120412a502ef71e57e2218fa-primary.xml.gz b/systems/win32/miktex/setup/rpm/opensuse/15/repodata/195a6dbab59fe6724013e2f10d0104f52fc468bd120412a502ef71e57e2218fa-primary.xml.gz
new file mode 100644
index 0000000000..fe33498bf5
--- /dev/null
+++ b/systems/win32/miktex/setup/rpm/opensuse/15/repodata/195a6dbab59fe6724013e2f10d0104f52fc468bd120412a502ef71e57e2218fa-primary.xml.gz
Binary files differ
diff --git a/systems/win32/miktex/setup/rpm/opensuse/15/repodata/280a3e5276d80e6481dc48b2fc02ab4a5309b1b9137ff1c16fe0416dffb9b5b5-filelists.sqlite.bz2 b/systems/win32/miktex/setup/rpm/opensuse/15/repodata/280a3e5276d80e6481dc48b2fc02ab4a5309b1b9137ff1c16fe0416dffb9b5b5-filelists.sqlite.bz2
new file mode 100644
index 0000000000..b24d7f3d59
--- /dev/null
+++ b/systems/win32/miktex/setup/rpm/opensuse/15/repodata/280a3e5276d80e6481dc48b2fc02ab4a5309b1b9137ff1c16fe0416dffb9b5b5-filelists.sqlite.bz2
Binary files differ
diff --git a/systems/win32/miktex/setup/rpm/opensuse/15/repodata/451eef3fe3bf0b83899d547ba053ab9582c5bdcf0f964ef580a801a9c1df1256-other.sqlite.bz2 b/systems/win32/miktex/setup/rpm/opensuse/15/repodata/451eef3fe3bf0b83899d547ba053ab9582c5bdcf0f964ef580a801a9c1df1256-other.sqlite.bz2
deleted file mode 100644
index 131ff08298..0000000000
--- a/systems/win32/miktex/setup/rpm/opensuse/15/repodata/451eef3fe3bf0b83899d547ba053ab9582c5bdcf0f964ef580a801a9c1df1256-other.sqlite.bz2
+++ /dev/null
Binary files differ
diff --git a/systems/win32/miktex/setup/rpm/opensuse/15/repodata/52be9f00f78d1c643206be8889ca16300463e8bcb6d681aef2754400934a98d3-primary.xml.gz b/systems/win32/miktex/setup/rpm/opensuse/15/repodata/52be9f00f78d1c643206be8889ca16300463e8bcb6d681aef2754400934a98d3-primary.xml.gz
deleted file mode 100644
index d0307ca6c9..0000000000
--- a/systems/win32/miktex/setup/rpm/opensuse/15/repodata/52be9f00f78d1c643206be8889ca16300463e8bcb6d681aef2754400934a98d3-primary.xml.gz
+++ /dev/null
Binary files differ
diff --git a/systems/win32/miktex/setup/rpm/opensuse/15/repodata/6946ddbc519f9a3c9ddf1423af1ada9f5a12d5582f4a101d5e6e87facdfb8a21-filelists.xml.gz b/systems/win32/miktex/setup/rpm/opensuse/15/repodata/6946ddbc519f9a3c9ddf1423af1ada9f5a12d5582f4a101d5e6e87facdfb8a21-filelists.xml.gz
deleted file mode 100644
index 5ffac011df..0000000000
--- a/systems/win32/miktex/setup/rpm/opensuse/15/repodata/6946ddbc519f9a3c9ddf1423af1ada9f5a12d5582f4a101d5e6e87facdfb8a21-filelists.xml.gz
+++ /dev/null
Binary files differ
diff --git a/systems/win32/miktex/setup/rpm/opensuse/15/repodata/804205ce3e52cf50d9551a6b86dcb35f3d0ad5aedeb6783d6731393a8e6b2344-filelists.sqlite.bz2 b/systems/win32/miktex/setup/rpm/opensuse/15/repodata/804205ce3e52cf50d9551a6b86dcb35f3d0ad5aedeb6783d6731393a8e6b2344-filelists.sqlite.bz2
deleted file mode 100644
index 26cf19ae84..0000000000
--- a/systems/win32/miktex/setup/rpm/opensuse/15/repodata/804205ce3e52cf50d9551a6b86dcb35f3d0ad5aedeb6783d6731393a8e6b2344-filelists.sqlite.bz2
+++ /dev/null
Binary files differ
diff --git a/systems/win32/miktex/setup/rpm/opensuse/15/repodata/903db07028bbf6ef6c56d7a0d3822e422e560deab9dcac1ce773bf95a5c8b9ac-other.xml.gz b/systems/win32/miktex/setup/rpm/opensuse/15/repodata/903db07028bbf6ef6c56d7a0d3822e422e560deab9dcac1ce773bf95a5c8b9ac-other.xml.gz
deleted file mode 100644
index 9a0380d2c3..0000000000
--- a/systems/win32/miktex/setup/rpm/opensuse/15/repodata/903db07028bbf6ef6c56d7a0d3822e422e560deab9dcac1ce773bf95a5c8b9ac-other.xml.gz
+++ /dev/null
Binary files differ
diff --git a/systems/win32/miktex/setup/rpm/opensuse/15/repodata/c303e5ca93bd0e6be7c07b97be6d29a57de04beb39a11713f8fc72da5e888070-filelists.xml.gz b/systems/win32/miktex/setup/rpm/opensuse/15/repodata/c303e5ca93bd0e6be7c07b97be6d29a57de04beb39a11713f8fc72da5e888070-filelists.xml.gz
new file mode 100644
index 0000000000..0ec2e667eb
--- /dev/null
+++ b/systems/win32/miktex/setup/rpm/opensuse/15/repodata/c303e5ca93bd0e6be7c07b97be6d29a57de04beb39a11713f8fc72da5e888070-filelists.xml.gz
Binary files differ
diff --git a/systems/win32/miktex/setup/rpm/opensuse/15/repodata/fb94789dd7da1d23dffa0931b4bc95c25f31995c9a5149bd09ccc6ad5b25fcf5-other.sqlite.bz2 b/systems/win32/miktex/setup/rpm/opensuse/15/repodata/fb94789dd7da1d23dffa0931b4bc95c25f31995c9a5149bd09ccc6ad5b25fcf5-other.sqlite.bz2
new file mode 100644
index 0000000000..702447a08e
--- /dev/null
+++ b/systems/win32/miktex/setup/rpm/opensuse/15/repodata/fb94789dd7da1d23dffa0931b4bc95c25f31995c9a5149bd09ccc6ad5b25fcf5-other.sqlite.bz2
Binary files differ
diff --git a/systems/win32/miktex/setup/rpm/opensuse/15/repodata/fcde7e11d2dfc8233ba28ce3a7301f53cc6bdee7cf1eeceb3759384652d60b2e-other.xml.gz b/systems/win32/miktex/setup/rpm/opensuse/15/repodata/fcde7e11d2dfc8233ba28ce3a7301f53cc6bdee7cf1eeceb3759384652d60b2e-other.xml.gz
new file mode 100644
index 0000000000..cbe87e7b56
--- /dev/null
+++ b/systems/win32/miktex/setup/rpm/opensuse/15/repodata/fcde7e11d2dfc8233ba28ce3a7301f53cc6bdee7cf1eeceb3759384652d60b2e-other.xml.gz
Binary files differ
diff --git a/systems/win32/miktex/setup/rpm/opensuse/15/repodata/repomd.xml b/systems/win32/miktex/setup/rpm/opensuse/15/repodata/repomd.xml
index 0ea4475a67..1705e5730e 100644
--- a/systems/win32/miktex/setup/rpm/opensuse/15/repodata/repomd.xml
+++ b/systems/win32/miktex/setup/rpm/opensuse/15/repodata/repomd.xml
@@ -1,55 +1,55 @@
<?xml version="1.0" encoding="UTF-8"?>
<repomd xmlns="http://linux.duke.edu/metadata/repo" xmlns:rpm="http://linux.duke.edu/metadata/rpm">
- <revision>1584884109</revision>
+ <revision>1588154695</revision>
<data type="filelists">
- <checksum type="sha256">6946ddbc519f9a3c9ddf1423af1ada9f5a12d5582f4a101d5e6e87facdfb8a21</checksum>
- <open-checksum type="sha256">11e6ef6d6d92db8d5cd44c13f496c250e34d7280de45b3a0d6922aa03ee4b812</open-checksum>
- <location href="repodata/6946ddbc519f9a3c9ddf1423af1ada9f5a12d5582f4a101d5e6e87facdfb8a21-filelists.xml.gz"/>
- <timestamp>1584884109</timestamp>
- <size>1588</size>
- <open-size>11144</open-size>
+ <checksum type="sha256">c303e5ca93bd0e6be7c07b97be6d29a57de04beb39a11713f8fc72da5e888070</checksum>
+ <open-checksum type="sha256">b41eabea5a037f8198bcc91aac4d1f7a74357aa89658f1514799f80f420e9355</open-checksum>
+ <location href="repodata/c303e5ca93bd0e6be7c07b97be6d29a57de04beb39a11713f8fc72da5e888070-filelists.xml.gz"/>
+ <timestamp>1588154695</timestamp>
+ <size>1795</size>
+ <open-size>22163</open-size>
</data>
<data type="primary">
- <checksum type="sha256">52be9f00f78d1c643206be8889ca16300463e8bcb6d681aef2754400934a98d3</checksum>
- <open-checksum type="sha256">3559f9e9a237c40d4812b9d5e19b8cc14faa9b4db22b2b0bb0583c50745f9330</open-checksum>
- <location href="repodata/52be9f00f78d1c643206be8889ca16300463e8bcb6d681aef2754400934a98d3-primary.xml.gz"/>
- <timestamp>1584884109</timestamp>
- <size>2069</size>
- <open-size>11981</open-size>
+ <checksum type="sha256">195a6dbab59fe6724013e2f10d0104f52fc468bd120412a502ef71e57e2218fa</checksum>
+ <open-checksum type="sha256">9f73d6dbfba177de9b64e0add122a0514b1ed6151aa31f7daae55453ec28e9ea</open-checksum>
+ <location href="repodata/195a6dbab59fe6724013e2f10d0104f52fc468bd120412a502ef71e57e2218fa-primary.xml.gz"/>
+ <timestamp>1588154695</timestamp>
+ <size>2343</size>
+ <open-size>23795</open-size>
</data>
<data type="primary_db">
- <checksum type="sha256">04fdc2a5893d5d7a7a9786b2835611f03450a293aa51590c27add5ac4be3e89c</checksum>
- <open-checksum type="sha256">0b33d571b1467bf0ccc9e0a0b5e60140e8104e3d7df70dbea12b762dcfe5d0af</open-checksum>
- <location href="repodata/04fdc2a5893d5d7a7a9786b2835611f03450a293aa51590c27add5ac4be3e89c-primary.sqlite.bz2"/>
- <timestamp>1584884109</timestamp>
+ <checksum type="sha256">16331f160f05f229eb85d1d446f95ef241f6288d499bb440f96433319fa645b1</checksum>
+ <open-checksum type="sha256">27c5b35002bfd6a39b72919939ede4f52591c3efb7aee7f5dac6fa0711f679bf</open-checksum>
+ <location href="repodata/16331f160f05f229eb85d1d446f95ef241f6288d499bb440f96433319fa645b1-primary.sqlite.bz2"/>
+ <timestamp>1588154695</timestamp>
<database_version>10</database_version>
- <size>7031</size>
- <open-size>114688</open-size>
+ <size>11533</size>
+ <open-size>143360</open-size>
</data>
<data type="other_db">
- <checksum type="sha256">451eef3fe3bf0b83899d547ba053ab9582c5bdcf0f964ef580a801a9c1df1256</checksum>
- <open-checksum type="sha256">6d5993e254be0165c24cce0bc07951b9fdeae5e396ef336f23d4b535748f4b36</open-checksum>
- <location href="repodata/451eef3fe3bf0b83899d547ba053ab9582c5bdcf0f964ef580a801a9c1df1256-other.sqlite.bz2"/>
- <timestamp>1584884109</timestamp>
+ <checksum type="sha256">fb94789dd7da1d23dffa0931b4bc95c25f31995c9a5149bd09ccc6ad5b25fcf5</checksum>
+ <open-checksum type="sha256">9a3278cb5ccfad89be3b2ccb81f5b218eca695d25b8eb94309ebed103ba1f524</open-checksum>
+ <location href="repodata/fb94789dd7da1d23dffa0931b4bc95c25f31995c9a5149bd09ccc6ad5b25fcf5-other.sqlite.bz2"/>
+ <timestamp>1588154695</timestamp>
<database_version>10</database_version>
- <size>783</size>
+ <size>892</size>
<open-size>24576</open-size>
</data>
<data type="other">
- <checksum type="sha256">903db07028bbf6ef6c56d7a0d3822e422e560deab9dcac1ce773bf95a5c8b9ac</checksum>
- <open-checksum type="sha256">5c7735588906df9b01a8449226537aa3dff4ca830c445f3120974a5359f7ed45</open-checksum>
- <location href="repodata/903db07028bbf6ef6c56d7a0d3822e422e560deab9dcac1ce773bf95a5c8b9ac-other.xml.gz"/>
- <timestamp>1584884109</timestamp>
- <size>343</size>
- <open-size>455</open-size>
+ <checksum type="sha256">fcde7e11d2dfc8233ba28ce3a7301f53cc6bdee7cf1eeceb3759384652d60b2e</checksum>
+ <open-checksum type="sha256">75607d465f81ec18d75c2379aa662c2195f47da6ad855348f6189ab6e5a1ef0a</open-checksum>
+ <location href="repodata/fcde7e11d2dfc8233ba28ce3a7301f53cc6bdee7cf1eeceb3759384652d60b2e-other.xml.gz"/>
+ <timestamp>1588154695</timestamp>
+ <size>404</size>
+ <open-size>789</open-size>
</data>
<data type="filelists_db">
- <checksum type="sha256">804205ce3e52cf50d9551a6b86dcb35f3d0ad5aedeb6783d6731393a8e6b2344</checksum>
- <open-checksum type="sha256">c5df46ee45e153997027e20aa25ecc38e18a232a1ef54f9f88b28208978ba688</open-checksum>
- <location href="repodata/804205ce3e52cf50d9551a6b86dcb35f3d0ad5aedeb6783d6731393a8e6b2344-filelists.sqlite.bz2"/>
- <timestamp>1584884109</timestamp>
+ <checksum type="sha256">280a3e5276d80e6481dc48b2fc02ab4a5309b1b9137ff1c16fe0416dffb9b5b5</checksum>
+ <open-checksum type="sha256">d42350ac1d5a51e280b099048a33a43f691026feac9aab0734c070a5f5f05d69</open-checksum>
+ <location href="repodata/280a3e5276d80e6481dc48b2fc02ab4a5309b1b9137ff1c16fe0416dffb9b5b5-filelists.sqlite.bz2"/>
+ <timestamp>1588154695</timestamp>
<database_version>10</database_version>
- <size>2634</size>
- <open-size>36864</open-size>
+ <size>3502</size>
+ <open-size>45056</open-size>
</data>
</repomd>
diff --git a/systems/win32/miktex/setup/rpm/opensuse/15/repodata/repomd.xml.asc b/systems/win32/miktex/setup/rpm/opensuse/15/repodata/repomd.xml.asc
index 6af714a176..077e533a38 100644
--- a/systems/win32/miktex/setup/rpm/opensuse/15/repodata/repomd.xml.asc
+++ b/systems/win32/miktex/setup/rpm/opensuse/15/repodata/repomd.xml.asc
@@ -1,11 +1,11 @@
-----BEGIN PGP SIGNATURE-----
-iQEzBAABCAAdFiEE1rwkNWWyCHvD+JfJJ3pyk/WeSIkFAl53aY0ACgkQJ3pyk/We
-SIlFPwf+NMerecuvstcPMKUbli8lFINB3kt+imINyIbRC8E0Dmx3pAjwrvnY0Q4E
-PZjqSu5k9y0LcsP/NZWTxxRZPTgRzb2a0V2JDQaipx9ZdEV86ISRbK8Um+SE7yaS
-e4eiRjTbO3roQoEtdGeDIDHkQaKobVX4gl5e2IUgSdd8V6gFH2b1IKU18HSY/0yu
-ka/i7ZBsGvzoa0rVVND25L/hAWdWC0PmCFzKcqks6mP0iX55mdQ0usYUt+U7Uc8y
-67XzrO1OPEAhRUb8hiGSaJqscdJFHIBcnUUv8DrE6foRc6SHnFRLhXc0yniFH3V4
-ttLlZJX1ZdTNjpSWh5iS00au0LkKfg==
-=oZkx
+iQEzBAABCAAdFiEE1rwkNWWyCHvD+JfJJ3pyk/WeSIkFAl6pUUgACgkQJ3pyk/We
+SImiTgf/Vq4SI4/4gHf+N1bbM8UV1O7uS1t1D9AUTfqIVk3yOOvrDwSMHh6j71BM
+KX9RuiNPei14kQjlARU9bBGIsQjNq1oaljkxqkqUcxsRJ01uFHO4t0aGwry4ZWWS
+nDfH85sjbIF9W4ubFCq/1Or+a1pbw5tlBUFzZDGB7HASrUevqx/mwUvUgIWiiv2R
+bjwkL7x/4RsCC0iRbBfaW5yR1vZHy6ZsNQ4jcEDeclxpl1Q5Cl1iyKyfeFpszJdS
+oxuZafMGVUOuOV6nPV53se3mPD588wTPUvyRzmpc7BCeJSGuQYLy9l1ksjN+8S/g
+4rUCt8y6LGRC+cqr/4A1lwE3oYRA3w==
+=sy4x
-----END PGP SIGNATURE-----
diff --git a/systems/win32/miktex/tm/packages/next/pr.ini b/systems/win32/miktex/tm/packages/next/pr.ini
index 9a9e0fff34..570c801469 100644
--- a/systems/win32/miktex/tm/packages/next/pr.ini
+++ b/systems/win32/miktex/tm/packages/next/pr.ini
@@ -2,9 +2,9 @@
[repository]
-date=1588104876
+date=1588191299
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=a9f062482bc43da2437dc1b85692a222
+lstdigest=09eaae19dcdd38a78ad9d4f713e64406
numpkg=3898
relstate=next
-version=7423
+version=7424
diff --git a/systems/win32/miktex/tm/packages/pr.ini b/systems/win32/miktex/tm/packages/pr.ini
index 7ff77d9153..6b06c4485f 100644
--- a/systems/win32/miktex/tm/packages/pr.ini
+++ b/systems/win32/miktex/tm/packages/pr.ini
@@ -2,9 +2,9 @@
[repository]
-date=1588104699
+date=1588191093
lastupd=changelog circuitikz embedfile garamond-libre pxjahyper willowtreebook arara emojicite epigraph-keys picture tpic2pdftex lacheck parsa tikzducks bearwear boxedminipage koma-script miktex-luatex-bin-2.9 miktex-luatex-bin-x64-2.9 miktex-runtime-bin-2.9
-lstdigest=7d44bc44239bafbd0a21ba0fb45274cf
+lstdigest=23aa08f018850c6312739179069c6530
numpkg=3898
relstate=stable
-version=7423
+version=7424
diff --git a/systems/win32/w32tex/ChangeLog b/systems/win32/w32tex/ChangeLog
index 1fb6cb371b..47f0000d27 100644
--- a/systems/win32/w32tex/ChangeLog
+++ b/systems/win32/w32tex/ChangeLog
@@ -1,5 +1,72 @@
W32TeX (x86 & x64) ChangeLog
+[2020/04/29]
+(01) aleph-w32.tar.xz
+(02) context.tar.xz
+(03) cweb-w32.tar.xz
+(04) dvi2ps-w32.tar.xz
+(05) dvi2tty-w32.tar.xz
+(06) dvipdfm-w32.tar.xz
+(07) dvipsk-w32.tar.xz
+(08) dvitools-w32.tar.xz
+(09) gregorio-w32.tar.xz
+(10) jtex-w32.tar.xz
+(11) lcdf-typetools-w32.tar.xz
+(12) luajittex-dev-w32.tar.xz
+(13) luajittex-exp-w32.tar.xz
+(14) luajittex-w32.tar.xz
+(15) luatex-dev-w32.tar.xz
+(16) luatex-exp-w32.tar.xz
+(17) luatex-w32.tar.xz
+(18) makeindex-w32.tar.xz
+(19) mftools.tar.xz
+(20) mftrace-w32.tar.xz
+(21) omegaj-w32.tar.xz
+(22) pdftex-w32.tar.xz
+(23) pstoedit-w32.tar.xz
+(24) psutils-w32.tar.xz
+(25) ptex-ng-w32.tar.xz
+(26) ptex-w32.tar.xz
+(27) tex4htk-w32.tar.xz
+(28) ttf2pk-w32.tar.xz
+(29) ttf2pt1-w32.tar.xz
+(30) uptex-w32.tar.xz
+(31) web2c-w32.tar.xz
+(32) xetex-w32.tar.xz
+(33) win64/aleph-w64.tar.xz
+(34) win64/context-w64.tar.xz
+(35) win64/cweb-w64.tar.xz
+(36) win64/dvi2ps-w64.tar.xz
+(37) win64/dvi2tty-w64.tar.xz
+(38) win64/dvipdfm-w64.tar.xz
+(39) win64/dvipsk-w64.tar.xz
+(40) win64/dvitools-w64.tar.xz
+(41) win64/gregorio-w64.tar.xz
+(42) win64/jtex-w64.tar.xz
+(43) win64/lcdf-typetools-w64.tar.xz
+(44) win64/luajittex-dev-w64.tar.xz
+(45) win64/luajittex-exp-w64.tar.xz
+(46) win64/luajittex-w64.tar.xz
+(47) win64/luatex-dev-w64.tar.xz
+(48) win64/luatex-exp-w64.tar.xz
+(49) win64/luatex-w64.tar.xz
+(50) win64/makeindex-w64.tar.xz
+(51) win64/mftools-w64.tar.xz
+(52) win64/mftrace-w64.tar.xz
+(53) win64/omegaj-w64.tar.xz
+(54) win64/pdftex-w64.tar.xz
+(55) win64/pstoedit-w64.tar.xz
+(56) win64/psutils-w64.tar.xz
+(57) win64/ptex-ng-w64.tar.xz
+(58) win64/ptex-w64.tar.xz
+(59) win64/tex4htk-w64.tar.xz
+(60) win64/ttf2pk-w64.tar.xz
+(61) win64/ttf2pt1-w64.tar.xz
+(62) win64/uptex-w64.tar.xz
+(63) win64/web2c-w64.tar.xz
+(64) win64/xetex-w64.tar.xz
+ Update kpathsea.
+
[2020/04/28]
(01) context.tar.xz
ConTeXt version: 2020.04.27 22:21.
diff --git a/timestamp b/timestamp
index 960a39fe95..7060c4dd53 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:
-2020-04-29-02-02
+2020-04-30-02-02