summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2021-11-25 03:00:55 +0000
committerNorbert Preining <norbert@preining.info>2021-11-25 03:00:55 +0000
commit943ea506edb031810b6b44d4095741f8c3500186 (patch)
tree940fa233d7add47bd298a18aa367252babfbd520
parentc7fc5283ac51bef06ce935c59e2c247fd5a4c1ba (diff)
CTAN sync 202111250300
-rw-r--r--FILES.byname587
-rw-r--r--FILES.byname.gzbin2398008 -> 2398393 bytes
-rw-r--r--FILES.last07days680
-rw-r--r--fonts/cochineal/README5
-rw-r--r--fonts/cochineal/tex/cochineal.sty8
-rw-r--r--macros/latex/contrib/easybook/easybook.dtx50
-rw-r--r--macros/latex/contrib/easybook/easybook.pdfbin582542 -> 582438 bytes
-rw-r--r--macros/latex/contrib/easybook/easybook.tex6
-rw-r--r--macros/latex/contrib/fancyvrb/Changes2
-rw-r--r--macros/latex/contrib/fancyvrb/doc/fancyvrb-doc.pdfbin140917 -> 141135 bytes
-rw-r--r--macros/latex/contrib/fancyvrb/latex/fancyvrb.sty22
-rw-r--r--macros/latex/contrib/l3build/CHANGELOG.md7
-rw-r--r--macros/latex/contrib/l3build/README.md2
-rw-r--r--macros/latex/contrib/l3build/l3build-typesetting.lua49
-rw-r--r--macros/latex/contrib/l3build/l3build.12
-rw-r--r--macros/latex/contrib/l3build/l3build.dtx2
-rwxr-xr-xmacros/latex/contrib/l3build/l3build.lua2
-rw-r--r--macros/latex/contrib/l3build/l3build.pdfbin739966 -> 740125 bytes
-rw-r--r--macros/latex/contrib/snaptodo/README22
-rw-r--r--macros/latex/contrib/snaptodo/snaptodo.pdfbin0 -> 207510 bytes
-rw-r--r--macros/latex/contrib/snaptodo/snaptodo.sty168
-rw-r--r--macros/latex/contrib/snaptodo/snaptodo.tex229
-rw-r--r--macros/latex/contrib/snaptodo/test/before_after.tex39
-rw-r--r--macros/latex/contrib/snaptodo/test/circle_testing.tex41
-rw-r--r--macros/latex/contrib/snaptodo/test/minimal_testing.tex7
-rw-r--r--macros/latex/contrib/snaptodo/test/stress_testing.tex491
-rw-r--r--macros/latex/contrib/zref-clever/CHANGELOG.md8
-rw-r--r--macros/latex/contrib/zref-clever/DEPENDS.txt5
-rw-r--r--macros/latex/contrib/zref-clever/MANIFEST.md350
-rw-r--r--macros/latex/contrib/zref-clever/README.md22
-rw-r--r--macros/latex/contrib/zref-clever/zref-clever-code.pdfbin0 -> 1035367 bytes
-rw-r--r--macros/latex/contrib/zref-clever/zref-clever-code.tex53
-rw-r--r--macros/latex/contrib/zref-clever/zref-clever.dtx7161
-rw-r--r--macros/latex/contrib/zref-clever/zref-clever.ins99
-rw-r--r--macros/latex/contrib/zref-clever/zref-clever.pdfbin0 -> 304271 bytes
-rw-r--r--macros/latex/contrib/zref-clever/zref-clever.tex2163
-rw-r--r--support/TeX4ht/source/ChangeLog9
-rw-r--r--support/TeX4ht/source/tex4ht-4ht.tex19
-rw-r--r--support/latexmk/CHANGES8
-rw-r--r--support/latexmk/INSTALL2
-rw-r--r--support/latexmk/README4
-rw-r--r--support/latexmk/example_rcfiles/texinfo-latexmkrc2
-rw-r--r--support/latexmk/latexmk.151
-rw-r--r--support/latexmk/latexmk.pdfbin196484 -> 196760 bytes
-rwxr-xr-xsupport/latexmk/latexmk.pl148
-rw-r--r--support/latexmk/latexmk.txt2138
-rw-r--r--systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl5
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb181
-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.xzbin2324304 -> 2322596 bytes
-rw-r--r--systems/win32/miktex/tm/packages/next/pr.ini8
-rw-r--r--systems/win32/miktex/tm/packages/pr.ini8
-rw-r--r--timestamp2
55 files changed, 12872 insertions, 2013 deletions
diff --git a/FILES.byname b/FILES.byname
index 71928e9ae2..b5dcd067db 100644
--- a/FILES.byname
+++ b/FILES.byname
@@ -5105,7 +5105,7 @@
1990/10/02 | 5440 | dviware/vutex/vaxvms.hlp
1990/10/02 | 812 | dviware/vutex/vaxvms.ins
1990/10/02 | 127576 | dviware/vutex/vutex.web
-2021/11/23 | 81067 | FILES.last07days
+2021/11/24 | 93249 | FILES.last07days
2021/07/24 | 1139410 | fonts/aboensis/Aboensis.glyphs
2021/07/24 | 18907382 | fonts/aboensis/aboensis.pdf
2021/07/24 | 137860 | fonts/aboensis/Aboensis-Regular.otf
@@ -24219,9 +24219,9 @@
2021/11/12 | 233324 | fonts/cochineal/opentype/Cochineal-Bold.otf
2021/11/12 | 233628 | fonts/cochineal/opentype/Cochineal-Italic.otf
2021/11/12 | 234408 | fonts/cochineal/opentype/Cochineal-Roman.otf
-2021/11/13 | 8217 | fonts/cochineal/README
+2021/11/24 | 8350 | fonts/cochineal/README
2016/01/31 | 196 | fonts/cochineal/tex/cochineal.fontspec
-2021/11/13 | 16552 | fonts/cochineal/tex/cochineal.sty
+2021/11/24 | 16601 | fonts/cochineal/tex/cochineal.sty
2016/02/17 | 1195 | fonts/cochineal/tex/LGRCochineal-LF.fd
2016/02/17 | 1216 | fonts/cochineal/tex/LGRCochineal-OsF.fd
2016/02/17 | 1216 | fonts/cochineal/tex/LGRCochineal-TLF.fd
@@ -24778,7 +24778,7 @@
2021/11/08 | 2584 | fonts/cochineal/vf/zcochbmi.vf
2021/11/08 | 2180 | fonts/cochineal/vf/zcochmia.vf
2021/11/08 | 2496 | fonts/cochineal/vf/zcochmi.vf
-2021/11/13 | 6151301 | fonts/cochineal.zip
+2021/11/24 | 6151357 | fonts/cochineal.zip
2020/04/13 | 63456 | fonts/coelacanth/doc/coelacanth-samples.pdf
2019/10/10 | 712 | fonts/coelacanth/doc/coelacanth-samples.tex
2019/10/10 | 4433 | fonts/coelacanth/doc/LICENSE.md
@@ -183227,7 +183227,7 @@
2020/10/09 | 503116 | install/macros/latex/contrib/kvoptions.tds.zip
2019/12/15 | 385518 | install/macros/latex/contrib/kvsetkeys.tds.zip
2021/10/18 | 935803 | install/macros/latex/contrib/l3backend.tds.zip
-2021/11/12 | 812818 | install/macros/latex/contrib/l3build.tds.zip
+2021/11/24 | 813037 | install/macros/latex/contrib/l3build.tds.zip
2021/11/12 | 4458345 | install/macros/latex/contrib/l3experimental.tds.zip
2021/11/22 | 13064147 | install/macros/latex/contrib/l3kernel.tds.zip
2021/11/12 | 2201200 | install/macros/latex/contrib/l3packages.tds.zip
@@ -183386,6 +183386,7 @@
2012/05/03 | 352839 | install/macros/latex/contrib/ydoc.tds.zip
2020/04/09 | 806385 | install/macros/latex/contrib/zhlipsum.tds.zip
2020/05/01 | 293478 | install/macros/latex/contrib/zhnumber.tds.zip
+2021/11/24 | 1391994 | install/macros/latex/contrib/zref-clever.tds.zip
2020/10/09 | 728226 | install/macros/latex/contrib/zref.tds.zip
2021/11/12 | 35338888 | install/macros/latex-dev/latex-base-dev.tds.zip
2021/11/12 | 2767286 | install/macros/latex-dev/required/latex-amsmath-dev.tds.zip
@@ -196413,7 +196414,7 @@
2013/04/01 | 14776 | macros/context/contrib/context-visualcounter/tex/context/third/visualcounter/t-visualcounter.mkvi
2018/03/05 | 11 | macros/context/contrib/context-visualcounter/VERSION
2018/03/22 | 276789 | macros/context/contrib/context-visualcounter.zip
-2021/11/18 | 118788261 | macros/context/latest/cont-tmf.zip
+2021/11/22 | 118800005 | macros/context/latest/cont-tmf.zip
2016/04/21 | 32846 | macros/cstex/base/cmexb.tar.gz
2016/06/26 | 1728262 | macros/cstex/base/csfonts-t1.tar.gz
2007/03/01 | 187106 | macros/cstex/base/csfonts.tar.gz
@@ -207672,12 +207673,12 @@
2008/02/10 | 19110 | macros/latex/contrib/ean13isbn/License.txt
2021/01/24 | 422 | macros/latex/contrib/ean13isbn/README
2021/01/24 | 322624 | macros/latex/contrib/ean13isbn.zip
-2021/11/23 | 80878 | macros/latex/contrib/easybook/easybook.dtx
+2021/11/24 | 81136 | macros/latex/contrib/easybook/easybook.dtx
2021/11/17 | 2075 | macros/latex/contrib/easybook/easybook.ins
-2021/11/23 | 582542 | macros/latex/contrib/easybook/easybook.pdf
-2021/11/23 | 81439 | macros/latex/contrib/easybook/easybook.tex
+2021/11/24 | 582438 | macros/latex/contrib/easybook/easybook.pdf
+2021/11/24 | 81457 | macros/latex/contrib/easybook/easybook.tex
2021/11/17 | 795 | macros/latex/contrib/easybook/README.md
-2021/11/23 | 623958 | macros/latex/contrib/easybook.zip
+2021/11/24 | 623936 | macros/latex/contrib/easybook.zip
2009/06/17 | 82589 | macros/latex/contrib/easy/doc/docbib.pdf
2009/06/17 | 78378 | macros/latex/contrib/easy/doc/docbmat.pdf
2009/06/17 | 99132 | macros/latex/contrib/easy/doc/doceqn.pdf
@@ -209354,15 +209355,15 @@
2010/12/16 | 32810 | macros/latex/contrib/fancytooltips/tip.pdf
2010/12/16 | 586 | macros/latex/contrib/fancytooltips/tip.tex
2012/09/26 | 1590569 | macros/latex/contrib/fancytooltips.zip
-2021/11/19 | 1729 | macros/latex/contrib/fancyvrb/Changes
-2021/11/19 | 140917 | macros/latex/contrib/fancyvrb/doc/fancyvrb-doc.pdf
+2021/11/24 | 1836 | macros/latex/contrib/fancyvrb/Changes
+2021/11/24 | 141135 | macros/latex/contrib/fancyvrb/doc/fancyvrb-doc.pdf
2021/11/19 | 41100 | macros/latex/contrib/fancyvrb/doc/fancyvrb-doc.tex
2020/06/07 | 4642 | macros/latex/contrib/fancyvrb/latex/fancyvrb-ex.sty
-2021/11/20 | 43854 | macros/latex/contrib/fancyvrb/latex/fancyvrb.sty
+2021/11/24 | 44013 | macros/latex/contrib/fancyvrb/latex/fancyvrb.sty
2020/06/07 | 5109 | macros/latex/contrib/fancyvrb/latex/hbaw.sty
2020/08/03 | 5281 | macros/latex/contrib/fancyvrb/latex/hcolor.sty
2021/01/20 | 1798 | macros/latex/contrib/fancyvrb/README
-2021/11/20 | 164112 | macros/latex/contrib/fancyvrb.zip
+2021/11/24 | 164415 | macros/latex/contrib/fancyvrb.zip
2018/12/18 | 29200 | macros/latex/contrib/fascicules/fascicules.dtx
2018/12/18 | 1592 | macros/latex/contrib/fascicules/fascicules.ins
2018/12/19 | 181208 | macros/latex/contrib/fascicules/fascicules.pdf
@@ -214142,32 +214143,32 @@
2021/10/18 | 49097 | macros/latex/contrib/l3backend/l3backend-pdf.dtx
2021/10/18 | 549 | macros/latex/contrib/l3backend/README.md
2021/10/18 | 899045 | macros/latex/contrib/l3backend.zip
-2021/11/12 | 14831 | macros/latex/contrib/l3build/CHANGELOG.md
-2021/11/12 | 2338 | macros/latex/contrib/l3build/CONTRIBUTING.md
-2021/11/12 | 1816 | macros/latex/contrib/l3build/l3build.1
-2021/11/12 | 7782 | macros/latex/contrib/l3build/l3build-arguments.lua
-2021/11/12 | 5011 | macros/latex/contrib/l3build/l3build-aux.lua
-2021/11/12 | 36461 | macros/latex/contrib/l3build/l3build-check.lua
-2021/11/12 | 2149 | macros/latex/contrib/l3build/l3build-clean.lua
-2021/11/12 | 4729 | macros/latex/contrib/l3build/l3build-ctan.lua
-2021/11/12 | 109135 | macros/latex/contrib/l3build/l3build.dtx
-2021/11/12 | 12282 | macros/latex/contrib/l3build/l3build-file-functions.lua
-2021/11/12 | 2476 | macros/latex/contrib/l3build/l3build-help.lua
-2021/11/12 | 1540 | macros/latex/contrib/l3build/l3build.ins
-2021/11/12 | 9429 | macros/latex/contrib/l3build/l3build-install.lua
-2021/11/12 | 6289 | macros/latex/contrib/l3build/l3build.lua
-2021/11/12 | 7194 | macros/latex/contrib/l3build/l3build-manifest.lua
-2021/11/12 | 10795 | macros/latex/contrib/l3build/l3build-manifest-setup.lua
-2021/11/12 | 739966 | macros/latex/contrib/l3build/l3build.pdf
-2021/11/12 | 4338 | macros/latex/contrib/l3build/l3build-stdmain.lua
-2021/11/12 | 2285 | macros/latex/contrib/l3build/l3build-tagging.lua
-2021/11/12 | 6739 | macros/latex/contrib/l3build/l3build-typesetting.lua
-2021/11/12 | 2745 | macros/latex/contrib/l3build/l3build-unpack.lua
-2021/11/12 | 13092 | macros/latex/contrib/l3build/l3build-upload.lua
-2021/11/12 | 7559 | macros/latex/contrib/l3build/l3build-variables.lua
-2021/11/12 | 3382 | macros/latex/contrib/l3build/l3build-zip.lua
-2021/11/12 | 1019 | macros/latex/contrib/l3build/README.md
-2021/11/12 | 809555 | macros/latex/contrib/l3build.zip
+2021/11/24 | 15022 | macros/latex/contrib/l3build/CHANGELOG.md
+2021/11/24 | 2338 | macros/latex/contrib/l3build/CONTRIBUTING.md
+2021/11/24 | 1816 | macros/latex/contrib/l3build/l3build.1
+2021/11/24 | 7782 | macros/latex/contrib/l3build/l3build-arguments.lua
+2021/11/24 | 5011 | macros/latex/contrib/l3build/l3build-aux.lua
+2021/11/24 | 36461 | macros/latex/contrib/l3build/l3build-check.lua
+2021/11/24 | 2149 | macros/latex/contrib/l3build/l3build-clean.lua
+2021/11/24 | 4729 | macros/latex/contrib/l3build/l3build-ctan.lua
+2021/11/24 | 109135 | macros/latex/contrib/l3build/l3build.dtx
+2021/11/24 | 12282 | macros/latex/contrib/l3build/l3build-file-functions.lua
+2021/11/24 | 2476 | macros/latex/contrib/l3build/l3build-help.lua
+2021/11/24 | 1540 | macros/latex/contrib/l3build/l3build.ins
+2021/11/24 | 9429 | macros/latex/contrib/l3build/l3build-install.lua
+2021/11/24 | 6289 | macros/latex/contrib/l3build/l3build.lua
+2021/11/24 | 7194 | macros/latex/contrib/l3build/l3build-manifest.lua
+2021/11/24 | 10795 | macros/latex/contrib/l3build/l3build-manifest-setup.lua
+2021/11/24 | 740125 | macros/latex/contrib/l3build/l3build.pdf
+2021/11/24 | 4338 | macros/latex/contrib/l3build/l3build-stdmain.lua
+2021/11/24 | 2285 | macros/latex/contrib/l3build/l3build-tagging.lua
+2021/11/24 | 6712 | macros/latex/contrib/l3build/l3build-typesetting.lua
+2021/11/24 | 2745 | macros/latex/contrib/l3build/l3build-unpack.lua
+2021/11/24 | 13092 | macros/latex/contrib/l3build/l3build-upload.lua
+2021/11/24 | 7559 | macros/latex/contrib/l3build/l3build-variables.lua
+2021/11/24 | 3382 | macros/latex/contrib/l3build/l3build-zip.lua
+2021/11/24 | 1019 | macros/latex/contrib/l3build/README.md
+2021/11/24 | 809766 | macros/latex/contrib/l3build.zip
2021/11/12 | 6886 | macros/latex/contrib/l3experimental/CHANGELOG.md
2021/11/12 | 16509 | macros/latex/contrib/l3experimental/l3benchmark.dtx
2021/11/12 | 1558 | macros/latex/contrib/l3experimental/l3benchmark.ins
@@ -222766,6 +222767,15 @@
2020/10/22 | 2017 | macros/latex/contrib/snapshot/snapshot.ins
2020/10/22 | 236859 | macros/latex/contrib/snapshot/snapshot.pdf
2020/10/22 | 252207 | macros/latex/contrib/snapshot.zip
+2021/11/23 | 499 | macros/latex/contrib/snaptodo/README
+2021/11/23 | 207510 | macros/latex/contrib/snaptodo/snaptodo.pdf
+2021/11/23 | 4014 | macros/latex/contrib/snaptodo/snaptodo.sty
+2021/11/23 | 6758 | macros/latex/contrib/snaptodo/snaptodo.tex
+2021/11/23 | 1044 | macros/latex/contrib/snaptodo/test/before_after.tex
+2021/11/22 | 613 | macros/latex/contrib/snaptodo/test/circle_testing.tex
+2021/11/22 | 114 | macros/latex/contrib/snaptodo/test/minimal_testing.tex
+2021/11/22 | 25858 | macros/latex/contrib/snaptodo/test/stress_testing.tex
+2021/11/24 | 214799 | macros/latex/contrib/snaptodo.zip
2020/12/14 | 1315 | macros/latex/contrib/snotez/README
2020/12/14 | 446647 | macros/latex/contrib/snotez/snotez_en.pdf
2020/12/14 | 14207 | macros/latex/contrib/snotez/snotez_en.tex
@@ -232527,6 +232537,17 @@
2021/09/16 | 2791 | macros/latex/contrib/zref-check/zref-check.ins
2021/09/16 | 457730 | macros/latex/contrib/zref-check/zref-check.pdf
2021/09/16 | 2607 | macros/latex/contrib/zref-check/zref-check.tex
+2021/11/24 | 145 | macros/latex/contrib/zref-clever/CHANGELOG.md
+2021/11/24 | 70 | macros/latex/contrib/zref-clever/DEPENDS.txt
+2021/11/24 | 9457 | macros/latex/contrib/zref-clever/MANIFEST.md
+2021/11/24 | 824 | macros/latex/contrib/zref-clever/README.md
+2021/11/24 | 1364552 | macros/latex/contrib/zref-clever.zip
+2021/11/24 | 1035367 | macros/latex/contrib/zref-clever/zref-clever-code.pdf
+2021/11/24 | 1481 | macros/latex/contrib/zref-clever/zref-clever-code.tex
+2021/11/24 | 237453 | macros/latex/contrib/zref-clever/zref-clever.dtx
+2021/11/24 | 2995 | macros/latex/contrib/zref-clever/zref-clever.ins
+2021/11/24 | 304271 | macros/latex/contrib/zref-clever/zref-clever.pdf
+2021/11/24 | 107860 | macros/latex/contrib/zref-clever/zref-clever.tex
2020/10/09 | 581 | macros/latex/contrib/zref/README.md
2020/10/09 | 690321 | macros/latex/contrib/zref.zip
2020/10/09 | 195694 | macros/latex/contrib/zref/zref.dtx
@@ -270404,7 +270425,7 @@
2021/10/26 | 246523 | support/latex-make/texdepends.pdf
2021/10/26 | 1069049 | support/latex-make.zip
2006/03/12 | 5889 | support/latexmake.zip
-2021/09/23 | 37059 | support/latexmk/CHANGES
+2021/11/24 | 37327 | support/latexmk/CHANGES
2013/12/03 | 17993 | support/latexmk/COPYING
2016/10/13 | 2898 | support/latexmk/example_rcfiles/asymptote_latexmkrc
2017/11/20 | 853 | support/latexmk/example_rcfiles/bib2gls_latexmkrc
@@ -270428,7 +270449,7 @@
2019/03/26 | 1378 | support/latexmk/example_rcfiles/splitindex.latexmkrc
2020/02/13 | 2535 | support/latexmk/example_rcfiles/sweave_latexmkrc
2012/10/02 | 1161 | support/latexmk/example_rcfiles/tex4ht-latexmkrc
-2015/10/05 | 2175 | support/latexmk/example_rcfiles/texinfo-latexmkrc
+2021/11/20 | 2176 | support/latexmk/example_rcfiles/texinfo-latexmkrc
2018/08/06 | 2798 | support/latexmk/example_rcfiles/tikz-externalized-latexmkrc
2017/01/14 | 382 | support/latexmk/example_rcfiles/xelatex_latexmkrc
2007/01/20 | 328 | support/latexmk/extra-scripts/dvipdfm_call
@@ -270444,13 +270465,13 @@
2007/09/29 | 1492 | support/latexmk/extra-scripts/pst2pdf_for_latexmk_README.txt
2016/10/13 | 4828 | support/latexmk/extra-scripts/README-latexmk-scripts
2006/01/14 | 5588 | support/latexmk/extra-scripts/startacroread
-2021/09/23 | 16753 | support/latexmk/INSTALL
-2021/09/23 | 173516 | support/latexmk/latexmk.1
-2021/09/23 | 196484 | support/latexmk/latexmk.pdf
-2021/09/23 | 417231 | support/latexmk/latexmk.pl
-2021/09/23 | 215462 | support/latexmk/latexmk.txt
-2021/09/24 | 11808 | support/latexmk/README
-2021/09/26 | 464765 | support/latexmk.zip
+2021/11/20 | 16753 | support/latexmk/INSTALL
+2021/11/23 | 173478 | support/latexmk/latexmk.1
+2021/11/24 | 196760 | support/latexmk/latexmk.pdf
+2021/11/20 | 417811 | support/latexmk/latexmk.pl
+2021/11/24 | 215437 | support/latexmk/latexmk.txt
+2021/11/20 | 11808 | support/latexmk/README
+2021/11/24 | 465405 | support/latexmk.zip
1997/11/24 | 7551 | support/latexn/latexn
2019/12/12 | 20370 | support/latexpand/latexpand
2019/07/09 | 1529 | support/latexpand/LICENCE
@@ -273268,7 +273289,7 @@
2021/05/03 | 629 | support/TeX4ht/doc/README
2020/08/24 | 358454 | support/TeX4ht/doc/TeX4ht-doc.tex
2021/05/11 | 262 | support/TeX4ht/README
-2021/11/20 | 167304 | support/TeX4ht/source/ChangeLog
+2021/11/24 | 167692 | support/TeX4ht/source/ChangeLog
2021/05/03 | 1375 | support/TeX4ht/source/checklog.lua
2021/05/03 | 1189 | support/TeX4ht/source/common-code.tex
2021/05/03 | 2727 | support/TeX4ht/source/common-info.tex
@@ -273280,7 +273301,7 @@
2021/05/03 | 1121 | support/TeX4ht/source/README
2021/05/03 | 1744 | support/TeX4ht/source/t1fontmake.lua
2021/05/03 | 297 | support/TeX4ht/source/t1fontsample.tex
-2021/11/05 | 1097375 | support/TeX4ht/source/tex4ht-4ht.tex
+2021/11/24 | 1097540 | support/TeX4ht/source/tex4ht-4ht.tex
2021/05/03 | 7127 | support/TeX4ht/source/tex4ht-auto-script.tex
2021/05/16 | 1539 | support/TeX4ht/source/tex4ht-bibtex2.tex
2021/05/03 | 21247 | support/TeX4ht/source/tex4ht-cond4ht.tex
@@ -278105,14 +278126,14 @@
2019/02/28 | 376 | systems/texlive/tlnet/archive/bib2gls.amd64-freebsd.r45266.tar.xz
2019/02/28 | 372 | systems/texlive/tlnet/archive/bib2gls.amd64-netbsd.r45266.tar.xz
2019/02/28 | 372 | systems/texlive/tlnet/archive/bib2gls.armhf-linux.r45266.tar.xz
-2021/11/07 | 5354516 | systems/texlive/tlnet/archive/bib2gls.doc.r60978.tar.xz
+2021/11/24 | 5409716 | systems/texlive/tlnet/archive/bib2gls.doc.r61134.tar.xz
2019/02/28 | 372 | systems/texlive/tlnet/archive/bib2gls.i386-cygwin.r45266.tar.xz
2019/02/28 | 372 | systems/texlive/tlnet/archive/bib2gls.i386-freebsd.r45266.tar.xz
2019/02/28 | 372 | systems/texlive/tlnet/archive/bib2gls.i386-linux.r45266.tar.xz
2019/02/28 | 372 | systems/texlive/tlnet/archive/bib2gls.i386-netbsd.r45266.tar.xz
2019/02/28 | 372 | systems/texlive/tlnet/archive/bib2gls.i386-solaris.r45266.tar.xz
-2021/11/07 | 1167924 | systems/texlive/tlnet/archive/bib2gls.r60978.tar.xz
-2021/11/07 | 1216772 | systems/texlive/tlnet/archive/bib2gls.source.r60978.tar.xz
+2021/11/24 | 1184680 | systems/texlive/tlnet/archive/bib2gls.r61134.tar.xz
+2021/11/24 | 1233540 | systems/texlive/tlnet/archive/bib2gls.source.r61134.tar.xz
2021/02/25 | 376 | systems/texlive/tlnet/archive/bib2gls.universal-darwin.r57908.tar.xz
2019/02/28 | 712 | systems/texlive/tlnet/archive/bib2gls.win32.r45266.tar.xz
2019/02/28 | 376 | systems/texlive/tlnet/archive/bib2gls.x86_64-cygwin.r45266.tar.xz
@@ -279445,8 +279466,8 @@
2019/02/28 | 29208 | systems/texlive/tlnet/archive/context-simpleslides.r47085.tar.xz
2019/02/28 | 23088 | systems/texlive/tlnet/archive/context-title.doc.r47085.tar.xz
2019/02/28 | 2208 | systems/texlive/tlnet/archive/context-title.r47085.tar.xz
-2019/02/28 | 186784 | systems/texlive/tlnet/archive/context-transliterator.doc.r47085.tar.xz
-2019/02/28 | 70668 | systems/texlive/tlnet/archive/context-transliterator.r47085.tar.xz
+2021/11/24 | 192808 | systems/texlive/tlnet/archive/context-transliterator.doc.r61127.tar.xz
+2021/11/24 | 19012 | systems/texlive/tlnet/archive/context-transliterator.r61127.tar.xz
2019/02/28 | 77364 | systems/texlive/tlnet/archive/context-typearea.doc.r47085.tar.xz
2019/02/28 | 1796 | systems/texlive/tlnet/archive/context-typearea.r47085.tar.xz
2021/09/05 | 644 | systems/texlive/tlnet/archive/context-typescripts.doc.r60422.tar.xz
@@ -280602,9 +280623,9 @@
2021/07/19 | 313228 | systems/texlive/tlnet/archive/easing.doc.r59975.tar.xz
2021/07/19 | 2220 | systems/texlive/tlnet/archive/easing.r59975.tar.xz
2021/07/19 | 7876 | systems/texlive/tlnet/archive/easing.source.r59975.tar.xz
-2021/11/23 | 600644 | systems/texlive/tlnet/archive/easybook.doc.r61120.tar.xz
-2021/11/23 | 17660 | systems/texlive/tlnet/archive/easybook.r61120.tar.xz
-2021/11/23 | 17700 | systems/texlive/tlnet/archive/easybook.source.r61120.tar.xz
+2021/11/24 | 603256 | systems/texlive/tlnet/archive/easybook.doc.r61129.tar.xz
+2021/11/24 | 17656 | systems/texlive/tlnet/archive/easybook.r61129.tar.xz
+2021/11/24 | 17704 | systems/texlive/tlnet/archive/easybook.source.r61129.tar.xz
2019/02/28 | 4540 | systems/texlive/tlnet/archive/easy.doc.r19440.tar.xz
2020/09/08 | 175976 | systems/texlive/tlnet/archive/easyfig.doc.r56291.tar.xz
2020/09/08 | 1936 | systems/texlive/tlnet/archive/easyfig.r56291.tar.xz
@@ -281256,9 +281277,9 @@
2019/02/28 | 635448 | systems/texlive/tlnet/archive/fcltxdoc.doc.r24500.tar.xz
2019/02/28 | 10404 | systems/texlive/tlnet/archive/fcltxdoc.r24500.tar.xz
2019/02/28 | 21560 | systems/texlive/tlnet/archive/fcltxdoc.source.r24500.tar.xz
-2021/01/16 | 319588 | systems/texlive/tlnet/archive/fcolumn.doc.r57428.tar.xz
-2021/01/16 | 4376 | systems/texlive/tlnet/archive/fcolumn.r57428.tar.xz
-2021/01/16 | 21252 | systems/texlive/tlnet/archive/fcolumn.source.r57428.tar.xz
+2021/11/24 | 318992 | systems/texlive/tlnet/archive/fcolumn.doc.r61130.tar.xz
+2021/11/24 | 4396 | systems/texlive/tlnet/archive/fcolumn.r61130.tar.xz
+2021/11/24 | 21360 | systems/texlive/tlnet/archive/fcolumn.source.r61130.tar.xz
2019/02/28 | 128300 | systems/texlive/tlnet/archive/fc.r32796.tar.xz
2019/02/28 | 461572 | systems/texlive/tlnet/archive/fdsymbol.doc.r26722.tar.xz
2019/02/28 | 920220 | systems/texlive/tlnet/archive/fdsymbol.r26722.tar.xz
@@ -281928,9 +281949,9 @@
2019/02/28 | 22288 | systems/texlive/tlnet/archive/glossaries-estonian.doc.r49928.tar.xz
2019/02/28 | 1960 | systems/texlive/tlnet/archive/glossaries-estonian.r49928.tar.xz
2019/02/28 | 2440 | systems/texlive/tlnet/archive/glossaries-estonian.source.r49928.tar.xz
-2021/11/06 | 5352592 | systems/texlive/tlnet/archive/glossaries-extra.doc.r60962.tar.xz
-2021/11/06 | 64540 | systems/texlive/tlnet/archive/glossaries-extra.r60962.tar.xz
-2021/11/06 | 118628 | systems/texlive/tlnet/archive/glossaries-extra.source.r60962.tar.xz
+2021/11/24 | 5645716 | systems/texlive/tlnet/archive/glossaries-extra.doc.r61131.tar.xz
+2021/11/24 | 71640 | systems/texlive/tlnet/archive/glossaries-extra.r61131.tar.xz
+2021/11/24 | 131080 | systems/texlive/tlnet/archive/glossaries-extra.source.r61131.tar.xz
2020/03/04 | 139712 | systems/texlive/tlnet/archive/glossaries-finnish.doc.r54080.tar.xz
2020/03/04 | 1836 | systems/texlive/tlnet/archive/glossaries-finnish.r54080.tar.xz
2020/03/04 | 2376 | systems/texlive/tlnet/archive/glossaries-finnish.source.r54080.tar.xz
@@ -283946,9 +283967,9 @@
2021/05/22 | 8560 | systems/texlive/tlnet/archive/lualibs.source.r59298.tar.xz
2020/06/08 | 226344 | systems/texlive/tlnet/archive/luamesh.doc.r55475.tar.xz
2020/06/08 | 12096 | systems/texlive/tlnet/archive/luamesh.r55475.tar.xz
-2021/09/17 | 153712 | systems/texlive/tlnet/archive/luamplib.doc.r60521.tar.xz
-2021/09/17 | 11892 | systems/texlive/tlnet/archive/luamplib.r60521.tar.xz
-2021/09/17 | 26832 | systems/texlive/tlnet/archive/luamplib.source.r60521.tar.xz
+2021/11/24 | 153880 | systems/texlive/tlnet/archive/luamplib.doc.r61133.tar.xz
+2021/11/24 | 11932 | systems/texlive/tlnet/archive/luamplib.r61133.tar.xz
+2021/11/24 | 26888 | systems/texlive/tlnet/archive/luamplib.source.r61133.tar.xz
2019/02/28 | 348 | systems/texlive/tlnet/archive/luaotfload.aarch64-linux.r46208.tar.xz
2019/02/28 | 352 | systems/texlive/tlnet/archive/luaotfload.amd64-freebsd.r34647.tar.xz
2019/02/28 | 348 | systems/texlive/tlnet/archive/luaotfload.amd64-netbsd.r34647.tar.xz
@@ -284323,8 +284344,8 @@
2019/02/28 | 1092 | systems/texlive/tlnet/archive/mceinleger.r15878.tar.xz
2021/09/13 | 232948 | systems/texlive/tlnet/archive/mcexam.doc.r60481.tar.xz
2021/09/13 | 11396 | systems/texlive/tlnet/archive/mcexam.r60481.tar.xz
-2021/10/12 | 915672 | systems/texlive/tlnet/archive/mcf2graph.doc.r60729.tar.xz
-2021/10/12 | 25420 | systems/texlive/tlnet/archive/mcf2graph.r60729.tar.xz
+2021/11/24 | 921864 | systems/texlive/tlnet/archive/mcf2graph.doc.r61128.tar.xz
+2021/11/24 | 25604 | systems/texlive/tlnet/archive/mcf2graph.r61128.tar.xz
2019/02/28 | 138716 | systems/texlive/tlnet/archive/mcite.doc.r18173.tar.xz
2019/02/28 | 391980 | systems/texlive/tlnet/archive/mciteplus.doc.r31648.tar.xz
2019/02/28 | 34344 | systems/texlive/tlnet/archive/mciteplus.r31648.tar.xz
@@ -285266,8 +285287,8 @@
2019/02/28 | 1178624 | systems/texlive/tlnet/archive/numprint.doc.r27498.tar.xz
2019/02/28 | 10552 | systems/texlive/tlnet/archive/numprint.r27498.tar.xz
2019/02/28 | 42884 | systems/texlive/tlnet/archive/numprint.source.r27498.tar.xz
-2020/11/12 | 226176 | systems/texlive/tlnet/archive/numspell.doc.r56912.tar.xz
-2020/11/12 | 8856 | systems/texlive/tlnet/archive/numspell.r56912.tar.xz
+2021/11/24 | 269676 | systems/texlive/tlnet/archive/numspell.doc.r61132.tar.xz
+2021/11/24 | 13784 | systems/texlive/tlnet/archive/numspell.r61132.tar.xz
2021/01/16 | 182360 | systems/texlive/tlnet/archive/nunito.doc.r57429.tar.xz
2021/01/16 | 4627580 | systems/texlive/tlnet/archive/nunito.r57429.tar.xz
2021/08/08 | 2117360 | systems/texlive/tlnet/archive/nwafuthesis.doc.r60187.tar.xz
@@ -288096,14 +288117,14 @@
2021/02/27 | 109184 | systems/texlive/tlnet/archive/tex4ht.amd64-freebsd.r57941.tar.xz
2021/02/24 | 87364 | systems/texlive/tlnet/archive/tex4ht.amd64-netbsd.r57877.tar.xz
2021/02/27 | 69944 | systems/texlive/tlnet/archive/tex4ht.armhf-linux.r57957.tar.xz
-2021/11/21 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r61097.tar.xz
+2021/11/24 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r61135.tar.xz
2021/03/16 | 51080 | systems/texlive/tlnet/archive/tex4ht.i386-cygwin.r58387.tar.xz
2021/02/27 | 93092 | systems/texlive/tlnet/archive/tex4ht.i386-freebsd.r57961.tar.xz
2021/02/24 | 89116 | systems/texlive/tlnet/archive/tex4ht.i386-linux.r57878.tar.xz
2021/02/24 | 76196 | systems/texlive/tlnet/archive/tex4ht.i386-netbsd.r57877.tar.xz
2021/02/27 | 83896 | systems/texlive/tlnet/archive/tex4ht.i386-solaris.r57938.tar.xz
-2021/11/21 | 920796 | systems/texlive/tlnet/archive/tex4ht.r61097.tar.xz
-2021/11/21 | 1225152 | systems/texlive/tlnet/archive/tex4ht.source.r61097.tar.xz
+2021/11/24 | 920856 | systems/texlive/tlnet/archive/tex4ht.r61135.tar.xz
+2021/11/24 | 1223560 | systems/texlive/tlnet/archive/tex4ht.source.r61135.tar.xz
2021/02/25 | 185088 | systems/texlive/tlnet/archive/tex4ht.universal-darwin.r57908.tar.xz
2021/04/08 | 57760 | systems/texlive/tlnet/archive/tex4ht.win32.r58783.tar.xz
2021/03/16 | 58360 | systems/texlive/tlnet/archive/tex4ht.x86_64-cygwin.r58387.tar.xz
@@ -288338,7 +288359,7 @@
2020/05/17 | 592 | systems/texlive/tlnet/archive/texlive-scripts.amd64-freebsd.r55172.tar.xz
2020/05/17 | 588 | systems/texlive/tlnet/archive/texlive-scripts.amd64-netbsd.r55172.tar.xz
2020/05/17 | 592 | systems/texlive/tlnet/archive/texlive-scripts.armhf-linux.r55172.tar.xz
-2021/11/23 | 401120 | systems/texlive/tlnet/archive/texlive-scripts.doc.r61116.tar.xz
+2021/11/24 | 401116 | systems/texlive/tlnet/archive/texlive-scripts.doc.r61124.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
@@ -288362,7 +288383,7 @@
2020/05/17 | 588 | systems/texlive/tlnet/archive/texlive-scripts.i386-linux.r55172.tar.xz
2020/05/17 | 592 | systems/texlive/tlnet/archive/texlive-scripts.i386-netbsd.r55172.tar.xz
2020/05/17 | 588 | systems/texlive/tlnet/archive/texlive-scripts.i386-solaris.r55172.tar.xz
-2021/11/23 | 108296 | systems/texlive/tlnet/archive/texlive-scripts.r61116.tar.xz
+2021/11/24 | 108284 | systems/texlive/tlnet/archive/texlive-scripts.r61124.tar.xz
2021/02/25 | 572 | systems/texlive/tlnet/archive/texlive-scripts.universal-darwin.r57908.tar.xz
2021/04/12 | 36308 | systems/texlive/tlnet/archive/texlive-scripts.win32.r58829.tar.xz
2020/05/17 | 588 | systems/texlive/tlnet/archive/texlive-scripts.x86_64-cygwin.r55172.tar.xz
@@ -290110,16 +290131,16 @@
2020/07/18 | 47816 | systems/texlive/tlnet/archive/zztex.doc.r55862.tar.xz
2020/07/18 | 101724 | systems/texlive/tlnet/archive/zztex.r55862.tar.xz
2021/05/02 | 105152 | systems/texlive/tlnet/install-tl
-2021/11/23 | 6810759 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2021/11/23 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2021/11/23 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2021/11/24 | 6810757 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2021/11/24 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2021/11/24 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2021/04/11 | 4945 | systems/texlive/tlnet/install-tl-windows.bat
-2021/11/23 | 20873835 | systems/texlive/tlnet/install-tl-windows.exe
-2021/11/23 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2021/11/23 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2021/11/23 | 25631172 | systems/texlive/tlnet/install-tl.zip
-2021/11/23 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2021/11/23 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2021/11/24 | 20871507 | systems/texlive/tlnet/install-tl-windows.exe
+2021/11/24 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2021/11/24 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2021/11/24 | 25631157 | systems/texlive/tlnet/install-tl.zip
+2021/11/24 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2021/11/24 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
2021/04/01 | 1229 | systems/texlive/tlnet/README.md
2021/04/01 | 0 | systems/texlive/tlnet/TEXLIVE_2021
2021/07/03 | 7181 | systems/texlive/tlnet/tlpkg/gpg/pubring.gpg
@@ -290129,7 +290150,7 @@
2021/07/03 | 1280 | systems/texlive/tlnet/tlpkg/gpg/trustdb.gpg
2021/07/02 | 49348 | systems/texlive/tlnet/tlpkg/installer/config.guess
2010/11/11 | 11651 | systems/texlive/tlnet/tlpkg/installer/COPYING.MinGW-runtime.txt
-2021/11/22 | 6914 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+2021/11/23 | 6854 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2020/04/15 | 223687 | systems/texlive/tlnet/tlpkg/installer/curl/curl-ca-bundle.crt
2020/04/15 | 2606592 | systems/texlive/tlnet/tlpkg/installer/curl/curl.exe
2017/04/16 | 2629 | systems/texlive/tlnet/tlpkg/installer/installer-options.txt
@@ -290171,12 +290192,12 @@
2021/05/16 | 20371 | systems/texlive/tlnet/tlpkg/TeXLive/TLCrypto.pm
2021/05/16 | 5402 | systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm
2021/05/16 | 27555 | systems/texlive/tlnet/tlpkg/TeXLive/TLPaper.pm
-2021/11/23 | 16983388 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
-2021/11/23 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2021/11/24 | 16982968 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2021/11/24 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
2021/05/16 | 86511 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm
-2021/11/23 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
-2021/11/23 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2021/11/23 | 2324304 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2021/11/24 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2021/11/24 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2021/11/24 | 2322596 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
2021/05/16 | 58801 | systems/texlive/tlnet/tlpkg/TeXLive/TLPOBJ.pm
2021/05/16 | 42084 | systems/texlive/tlnet/tlpkg/TeXLive/TLPSRC.pm
2021/05/16 | 16103 | systems/texlive/tlnet/tlpkg/TeXLive/TLTREE.pm
@@ -295170,7 +295191,7 @@
2020/10/03 | 318630 | systems/win32/miktex/tm/packages/filehook.tar.lzma
2012/12/04 | 924573 | systems/win32/miktex/tm/packages/fileinfo.tar.lzma
2011/09/21 | 281409 | systems/win32/miktex/tm/packages/filemod.tar.lzma
-2021/11/23 | 629162 | systems/win32/miktex/tm/packages/files.csv.lzma
+2021/11/24 | 629162 | 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
@@ -296613,9 +296634,9 @@
2018/01/12 | 157226 | systems/win32/miktex/tm/packages/miktex-zip-bin-x64.tar.lzma
2021/10/05 | 39429 | systems/win32/miktex/tm/packages/miktex-zlib-bin-2.9.tar.lzma
2021/10/05 | 43382 | systems/win32/miktex/tm/packages/miktex-zlib-bin-x64-2.9.tar.lzma
-2021/11/23 | 252730 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
-2021/11/23 | 1388154 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
-2021/11/23 | 1286466 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2021/11/24 | 252688 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2021/11/24 | 1388245 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2021/11/24 | 1286999 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
2021/10/05 | 13448 | systems/win32/miktex/tm/packages/miktex-zzip-bin-2.9.tar.lzma
2021/10/05 | 14320 | systems/win32/miktex/tm/packages/miktex-zzip-bin-x64-2.9.tar.lzma
2016/07/15 | 35914 | systems/win32/miktex/tm/packages/mil3.tar.lzma
@@ -296835,192 +296856,192 @@
2018/04/09 | 400132 | systems/win32/miktex/tm/packages/newunicodechar.tar.lzma
2011/09/19 | 101312 | systems/win32/miktex/tm/packages/newvbtm.tar.lzma
2021/03/17 | 232249 | systems/win32/miktex/tm/packages/newverbs.tar.lzma
-2021/11/23 | 628985 | systems/win32/miktex/tm/packages/next/files.csv.lzma
-2021/11/23 | 51096 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
-2021/11/23 | 56462 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
-2021/11/23 | 973110 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
-2021/11/23 | 1076110 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
-2021/11/23 | 29077 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
-2021/11/23 | 31316 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
-2021/11/23 | 29822 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
-2021/11/23 | 34673 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
-2021/11/23 | 50120 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
-2021/11/23 | 57589 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
-2021/11/23 | 83334 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
-2021/11/23 | 95262 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
-2021/11/23 | 68559 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
-2021/11/23 | 76110 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
-2021/11/23 | 27198 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
-2021/11/23 | 30805 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
-2021/11/23 | 330842 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
-2021/11/23 | 392678 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
-2021/11/23 | 32558 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
-2021/11/23 | 36626 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
-2021/11/23 | 51323 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
-2021/11/23 | 56789 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
-2021/11/23 | 5001 | systems/win32/miktex/tm/packages/next/miktex-config-2.9.tar.lzma
-2021/11/23 | 255202 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
-2021/11/23 | 278967 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
-2021/11/23 | 179745 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
-2021/11/23 | 195703 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
-2021/11/23 | 54597 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
-2021/11/23 | 61824 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
-2021/11/23 | 21170 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
-2021/11/23 | 23354 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
-2021/11/23 | 461748 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
-2021/11/23 | 46527 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
-2021/11/23 | 51175 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
-2021/11/23 | 284742 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
-2021/11/23 | 325227 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
-2021/11/23 | 41261 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
-2021/11/23 | 45334 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
-2021/11/23 | 119744 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
-2021/11/23 | 133957 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
-2021/11/23 | 1290586 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
-2021/11/23 | 1422198 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
-2021/11/23 | 100486 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
-2021/11/23 | 112898 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
-2021/11/23 | 43035 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
-2021/11/23 | 48270 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
-2021/11/23 | 25012 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
-2021/11/23 | 28166 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
-2021/11/23 | 56321 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
-2021/11/23 | 62744 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
-2021/11/23 | 136278 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
-2021/11/23 | 153911 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
-2021/11/23 | 73350 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
-2021/11/23 | 78159 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
-2021/11/23 | 71917 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
-2021/11/23 | 80766 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
-2021/11/23 | 258757 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
-2021/11/23 | 295371 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
-2021/11/23 | 22036 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
-2021/11/23 | 25001 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
-2021/11/23 | 97370 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
-2021/11/23 | 112597 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
-2021/11/23 | 64426 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
-2021/11/23 | 73115 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
-2021/11/23 | 96305 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
-2021/11/23 | 115233 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
-2021/11/23 | 38145 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
-2021/11/23 | 43000 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
-2021/11/23 | 483384 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
-2021/11/23 | 566032 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
-2021/11/23 | 147417 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
-2021/11/23 | 159825 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
-2021/11/23 | 94775 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
-2021/11/23 | 109073 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
-2021/11/23 | 16361 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
-2021/11/23 | 17974 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
-2021/11/23 | 28344 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
-2021/11/23 | 30043 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
-2021/11/23 | 629637 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
-2021/11/23 | 680813 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
-2021/11/23 | 531953 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
-2021/11/23 | 597523 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
-2021/11/23 | 476832 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
-2021/11/23 | 510456 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
-2021/11/23 | 94418 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
-2021/11/23 | 103389 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
-2021/11/23 | 1710500 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
-2021/11/23 | 2003283 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
-2021/11/23 | 67623 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
-2021/11/23 | 74242 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
-2021/11/23 | 27423 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
-2021/11/23 | 31656 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
-2021/11/23 | 7715 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
-2021/11/23 | 8763 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
-2021/11/23 | 198068 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
-2021/11/23 | 217428 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
-2021/11/23 | 250654 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
-2021/11/23 | 283969 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
-2021/11/23 | 98774 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
-2021/11/23 | 103994 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
-2021/11/23 | 64703 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
-2021/11/23 | 73885 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
-2021/11/23 | 124756 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
-2021/11/23 | 136713 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
-2021/11/23 | 179112 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
-2021/11/23 | 197412 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
-2021/11/23 | 199533 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
-2021/11/23 | 180126 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
-2021/11/23 | 67459 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
-2021/11/23 | 76895 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
-2021/11/23 | 31199 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
-2021/11/23 | 35073 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
-2021/11/23 | 37816 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
-2021/11/23 | 42679 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
-2021/11/23 | 42839 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
-2021/11/23 | 46896 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
-2021/11/23 | 45930 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
-2021/11/23 | 52389 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
-2021/11/23 | 194727 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
-2021/11/23 | 207163 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
-2021/11/23 | 36292 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
-2021/11/23 | 40990 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
-2021/11/23 | 748896 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
-2021/11/23 | 819185 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
-2021/11/23 | 198318 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
-2021/11/23 | 202822 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
-2021/11/23 | 208026 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
-2021/11/23 | 243511 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
-2021/11/23 | 78762 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
-2021/11/23 | 87677 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
-2021/11/23 | 1169826 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
-2021/11/23 | 1300868 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
-2021/11/23 | 20113 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
-2021/11/23 | 23900 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
-2021/11/23 | 31545 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
-2021/11/23 | 37249 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
-2021/11/23 | 64174 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
-2021/11/23 | 72231 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
-2021/11/23 | 50390 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
-2021/11/23 | 57961 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
-2021/11/23 | 685904 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-2.9.tar.lzma
-2021/11/23 | 749267 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-x64-2.9.tar.lzma
-2021/11/23 | 1346945 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
-2021/11/23 | 1470955 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
-2021/11/23 | 42419 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
-2021/11/23 | 51836 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
-2021/11/23 | 56530 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
-2021/11/23 | 59973 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
-2021/11/23 | 25244 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
-2021/11/23 | 27335 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
-2021/11/23 | 16447 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
-2021/11/23 | 18158 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
-2021/11/23 | 63730 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
-2021/11/23 | 69940 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
-2021/11/23 | 155920 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
-2021/11/23 | 171174 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
-2021/11/23 | 57461 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
-2021/11/23 | 66115 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
-2021/11/23 | 100072 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
-2021/11/23 | 107431 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
-2021/11/23 | 2673326 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
-2021/11/23 | 2796565 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
-2021/11/23 | 56459 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
-2021/11/23 | 62552 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
-2021/11/23 | 36697 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
-2021/11/23 | 40690 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
-2021/11/23 | 27702 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
-2021/11/23 | 33650 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
-2021/11/23 | 66234 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
-2021/11/23 | 71091 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
-2021/11/23 | 313228 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
-2021/11/23 | 347915 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
-2021/11/23 | 55498 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma
-2021/11/23 | 57142 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
-2021/11/23 | 589723 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
-2021/11/23 | 624342 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
-2021/11/23 | 39022 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
-2021/11/23 | 43353 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
-2021/11/23 | 252909 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
-2021/11/23 | 1387859 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
-2021/11/23 | 1286390 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
-2021/11/23 | 13460 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
-2021/11/23 | 14337 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
+2021/11/24 | 628985 | systems/win32/miktex/tm/packages/next/files.csv.lzma
+2021/11/24 | 51098 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
+2021/11/24 | 56463 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
+2021/11/24 | 973113 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
+2021/11/24 | 1076111 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2021/11/24 | 29078 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
+2021/11/24 | 31318 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
+2021/11/24 | 29823 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
+2021/11/24 | 34673 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2021/11/24 | 50120 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
+2021/11/24 | 57590 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
+2021/11/24 | 83333 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
+2021/11/24 | 95261 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
+2021/11/24 | 68560 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
+2021/11/24 | 76111 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
+2021/11/24 | 27198 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
+2021/11/24 | 30805 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2021/11/24 | 330843 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
+2021/11/24 | 392679 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
+2021/11/24 | 32558 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
+2021/11/24 | 36628 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
+2021/11/24 | 51325 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
+2021/11/24 | 56787 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
+2021/11/24 | 5004 | systems/win32/miktex/tm/packages/next/miktex-config-2.9.tar.lzma
+2021/11/24 | 255201 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
+2021/11/24 | 278970 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
+2021/11/24 | 179745 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
+2021/11/24 | 195702 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2021/11/24 | 54599 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
+2021/11/24 | 61827 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2021/11/24 | 21169 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
+2021/11/24 | 23354 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
+2021/11/24 | 461748 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
+2021/11/24 | 46528 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
+2021/11/24 | 51175 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
+2021/11/24 | 284742 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
+2021/11/24 | 325227 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
+2021/11/24 | 41261 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
+2021/11/24 | 45334 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
+2021/11/24 | 119744 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
+2021/11/24 | 133958 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
+2021/11/24 | 1290584 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
+2021/11/24 | 1422199 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2021/11/24 | 100487 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
+2021/11/24 | 112898 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2021/11/24 | 43035 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
+2021/11/24 | 48271 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
+2021/11/24 | 25014 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
+2021/11/24 | 28167 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
+2021/11/24 | 56323 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
+2021/11/24 | 62744 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2021/11/24 | 136280 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
+2021/11/24 | 153912 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
+2021/11/24 | 73350 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
+2021/11/24 | 78160 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
+2021/11/24 | 71917 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
+2021/11/24 | 80765 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2021/11/24 | 258763 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
+2021/11/24 | 295371 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
+2021/11/24 | 22038 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
+2021/11/24 | 25001 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
+2021/11/24 | 97372 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
+2021/11/24 | 112598 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
+2021/11/24 | 64427 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
+2021/11/24 | 73115 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
+2021/11/24 | 96306 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
+2021/11/24 | 115234 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2021/11/24 | 38146 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
+2021/11/24 | 43000 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
+2021/11/24 | 483385 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
+2021/11/24 | 566034 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
+2021/11/24 | 147418 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
+2021/11/24 | 159825 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
+2021/11/24 | 94776 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
+2021/11/24 | 109074 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2021/11/24 | 16361 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
+2021/11/24 | 17974 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2021/11/24 | 28345 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
+2021/11/24 | 30044 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2021/11/24 | 629638 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
+2021/11/24 | 680814 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
+2021/11/24 | 531952 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
+2021/11/24 | 597523 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2021/11/24 | 476834 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
+2021/11/24 | 510457 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
+2021/11/24 | 94420 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
+2021/11/24 | 103389 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
+2021/11/24 | 1710499 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
+2021/11/24 | 2003279 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
+2021/11/24 | 67623 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
+2021/11/24 | 74243 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2021/11/24 | 27421 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
+2021/11/24 | 31656 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
+2021/11/24 | 7716 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
+2021/11/24 | 8763 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
+2021/11/24 | 198068 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
+2021/11/24 | 217426 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2021/11/24 | 250654 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
+2021/11/24 | 283970 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
+2021/11/24 | 98775 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
+2021/11/24 | 103995 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
+2021/11/24 | 64704 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
+2021/11/24 | 73886 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
+2021/11/24 | 124756 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
+2021/11/24 | 136714 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
+2021/11/24 | 179115 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
+2021/11/24 | 197410 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
+2021/11/24 | 199531 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
+2021/11/24 | 180126 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
+2021/11/24 | 67461 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
+2021/11/24 | 76897 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
+2021/11/24 | 31199 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
+2021/11/24 | 35074 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
+2021/11/24 | 37816 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
+2021/11/24 | 42680 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
+2021/11/24 | 42839 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
+2021/11/24 | 46897 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
+2021/11/24 | 45931 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
+2021/11/24 | 52389 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
+2021/11/24 | 194726 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
+2021/11/24 | 207162 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
+2021/11/24 | 36291 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
+2021/11/24 | 40990 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
+2021/11/24 | 748896 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
+2021/11/24 | 819186 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2021/11/24 | 198317 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
+2021/11/24 | 202822 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
+2021/11/24 | 208026 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
+2021/11/24 | 243516 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
+2021/11/24 | 78762 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
+2021/11/24 | 87678 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2021/11/24 | 1169823 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
+2021/11/24 | 1300868 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2021/11/24 | 20113 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
+2021/11/24 | 23901 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2021/11/24 | 31547 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
+2021/11/24 | 37250 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
+2021/11/24 | 64174 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
+2021/11/24 | 72232 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2021/11/24 | 50391 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
+2021/11/24 | 57961 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
+2021/11/24 | 685901 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-2.9.tar.lzma
+2021/11/24 | 749268 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-x64-2.9.tar.lzma
+2021/11/24 | 1346947 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
+2021/11/24 | 1470954 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
+2021/11/24 | 42419 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
+2021/11/24 | 51836 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
+2021/11/24 | 56530 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
+2021/11/24 | 59974 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
+2021/11/24 | 25246 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
+2021/11/24 | 27336 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
+2021/11/24 | 16447 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
+2021/11/24 | 18158 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
+2021/11/24 | 63730 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
+2021/11/24 | 69940 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
+2021/11/24 | 155921 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
+2021/11/24 | 171176 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2021/11/24 | 57463 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
+2021/11/24 | 66115 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2021/11/24 | 100072 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
+2021/11/24 | 107433 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
+2021/11/24 | 2673326 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
+2021/11/24 | 2796565 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
+2021/11/24 | 56460 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
+2021/11/24 | 62554 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2021/11/24 | 36700 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
+2021/11/24 | 40691 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
+2021/11/24 | 27702 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
+2021/11/24 | 33651 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2021/11/24 | 66235 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
+2021/11/24 | 71092 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
+2021/11/24 | 313230 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
+2021/11/24 | 347916 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
+2021/11/24 | 55499 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma
+2021/11/24 | 57144 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
+2021/11/24 | 589725 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
+2021/11/24 | 624342 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
+2021/11/24 | 39022 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
+2021/11/24 | 43353 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2021/11/24 | 252826 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
+2021/11/24 | 1388380 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
+2021/11/24 | 1286992 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
+2021/11/24 | 13459 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
+2021/11/24 | 14337 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
2019/03/12 | 1412 | systems/win32/miktex/tm/packages/nextpage.tar.lzma
-2021/11/23 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
+2021/11/24 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
2018/07/06 | 145915 | systems/win32/miktex/tm/packages/nexus-otf.tar.lzma
2017/03/30 | 191149 | systems/win32/miktex/tm/packages/nfssext-cfr.tar.lzma
2012/12/20 | 612251 | systems/win32/miktex/tm/packages/nicefilelist.tar.lzma
@@ -297443,7 +297464,7 @@
2020/10/20 | 342254 | systems/win32/miktex/tm/packages/preview.tar.lzma
2019/06/20 | 375963 | systems/win32/miktex/tm/packages/prftree.tar.lzma
2021/04/23 | 274028 | systems/win32/miktex/tm/packages/principia.tar.lzma
-2021/11/23 | 923 | systems/win32/miktex/tm/packages/pr.ini
+2021/11/24 | 923 | 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
@@ -299131,7 +299152,7 @@
2004/06/04 | 404 | tds/tds.sed
2004/06/23 | 65418 | tds/tds.tex
2019/05/29 | 304264 | tds.zip
-2021/11/24 | 186 | timestamp
+2021/11/25 | 186 | timestamp
2002/08/26 | 61898 | usergrps/dante/antrag.pdf
2002/08/26 | 118217 | usergrps/dante/antrag.ps
2021/11/11 | 917 | usergrps/dante/dtk/doc/beispiel.bib
diff --git a/FILES.byname.gz b/FILES.byname.gz
index ec25d4d000..0189ac8bb5 100644
--- a/FILES.byname.gz
+++ b/FILES.byname.gz
Binary files differ
diff --git a/FILES.last07days b/FILES.last07days
index c189892dd7..47af5248c1 100644
--- a/FILES.last07days
+++ b/FILES.last07days
@@ -1,287 +1,368 @@
-2021/11/23 | 98774 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
+2021/11/24 | 98775 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
+2021/11/24 | 97372 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
+2021/11/24 | 973113 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
+2021/11/24 | 96306 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
+2021/11/24 | 95261 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
+2021/11/24 | 94776 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
+2021/11/24 | 9457 | macros/latex/contrib/zref-clever/MANIFEST.md
+2021/11/24 | 94420 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
+2021/11/24 | 9429 | macros/latex/contrib/l3build/l3build-install.lua
+2021/11/24 | 923 | systems/win32/miktex/tm/packages/pr.ini
+2021/11/24 | 921864 | systems/texlive/tlnet/archive/mcf2graph.doc.r61128.tar.xz
+2021/11/24 | 920856 | systems/texlive/tlnet/archive/tex4ht.r61135.tar.xz
+2021/11/24 | 87678 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2021/11/24 | 8763 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
+2021/11/24 | 8350 | fonts/cochineal/README
+2021/11/24 | 83333 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
+2021/11/24 | 824 | macros/latex/contrib/zref-clever/README.md
+2021/11/24 | 819186 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2021/11/24 | 81457 | macros/latex/contrib/easybook/easybook.tex
+2021/11/24 | 813037 | install/macros/latex/contrib/l3build.tds.zip
+2021/11/24 | 81136 | macros/latex/contrib/easybook/easybook.dtx
+2021/11/24 | 809766 | macros/latex/contrib/l3build.zip
+2021/11/24 | 80765 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2021/11/24 | 78762 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
+2021/11/24 | 78160 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
+2021/11/24 | 7782 | macros/latex/contrib/l3build/l3build-arguments.lua
+2021/11/24 | 7716 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
+2021/11/24 | 76897 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
+2021/11/24 | 76111 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
+2021/11/24 | 7559 | macros/latex/contrib/l3build/l3build-variables.lua
+2021/11/24 | 749268 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-x64-2.9.tar.lzma
+2021/11/24 | 748896 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
+2021/11/24 | 74243 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2021/11/24 | 740125 | macros/latex/contrib/l3build/l3build.pdf
+2021/11/24 | 73886 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
+2021/11/24 | 73350 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
+2021/11/24 | 73115 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
+2021/11/24 | 72232 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2021/11/24 | 7194 | macros/latex/contrib/l3build/l3build-manifest.lua
+2021/11/24 | 71917 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
+2021/11/24 | 71640 | systems/texlive/tlnet/archive/glossaries-extra.r61131.tar.xz
+2021/11/24 | 71092 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
+2021/11/24 | 70 | macros/latex/contrib/zref-clever/DEPENDS.txt
+2021/11/24 | 69940 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
+2021/11/24 | 685901 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-2.9.tar.lzma
+2021/11/24 | 68560 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
+2021/11/24 | 6810757 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2021/11/24 | 680814 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
+2021/11/24 | 67623 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
+2021/11/24 | 67461 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
+2021/11/24 | 6712 | macros/latex/contrib/l3build/l3build-typesetting.lua
+2021/11/24 | 66235 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
+2021/11/24 | 66115 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2021/11/24 | 64704 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
+2021/11/24 | 64427 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
+2021/11/24 | 64174 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
+2021/11/24 | 63730 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
+2021/11/24 | 629638 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
+2021/11/24 | 629162 | systems/win32/miktex/tm/packages/files.csv.lzma
+2021/11/24 | 6289 | macros/latex/contrib/l3build/l3build.lua
+2021/11/24 | 628985 | systems/win32/miktex/tm/packages/next/files.csv.lzma
+2021/11/24 | 62744 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2021/11/24 | 62554 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2021/11/24 | 624342 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
+2021/11/24 | 623936 | macros/latex/contrib/easybook.zip
+2021/11/24 | 61827 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2021/11/24 | 6151357 | fonts/cochineal.zip
+2021/11/24 | 603256 | systems/texlive/tlnet/archive/easybook.doc.r61129.tar.xz
+2021/11/24 | 59974 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
+2021/11/24 | 597523 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2021/11/24 | 589725 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
+2021/11/24 | 582438 | macros/latex/contrib/easybook/easybook.pdf
+2021/11/24 | 57961 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
+2021/11/24 | 57590 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
+2021/11/24 | 57463 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
+2021/11/24 | 57144 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
+2021/11/24 | 56787 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
+2021/11/24 | 566034 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
+2021/11/24 | 56530 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
+2021/11/24 | 56463 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
+2021/11/24 | 56460 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
+2021/11/24 | 5645716 | systems/texlive/tlnet/archive/glossaries-extra.doc.r61131.tar.xz
+2021/11/24 | 56323 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
+2021/11/24 | 55499 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma
+2021/11/24 | 54599 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
+2021/11/24 | 5409716 | systems/texlive/tlnet/archive/bib2gls.doc.r61134.tar.xz
+2021/11/24 | 531952 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
+2021/11/24 | 52389 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
+2021/11/24 | 51836 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
+2021/11/24 | 51325 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
+2021/11/24 | 51175 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
+2021/11/24 | 51098 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
+2021/11/24 | 510457 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
+2021/11/24 | 50391 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
+2021/11/24 | 50120 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
+2021/11/24 | 5011 | macros/latex/contrib/l3build/l3build-aux.lua
+2021/11/24 | 5004 | systems/win32/miktex/tm/packages/next/miktex-config-2.9.tar.lzma
+2021/11/24 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2021/11/24 | 483385 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
+2021/11/24 | 48271 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
+2021/11/24 | 476834 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
+2021/11/24 | 4729 | macros/latex/contrib/l3build/l3build-ctan.lua
+2021/11/24 | 46897 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
+2021/11/24 | 465405 | support/latexmk.zip
+2021/11/24 | 46528 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
+2021/11/24 | 461748 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
+2021/11/24 | 45931 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
+2021/11/24 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2021/11/24 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2021/11/24 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2021/11/24 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2021/11/24 | 45334 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
+2021/11/24 | 44013 | macros/latex/contrib/fancyvrb/latex/fancyvrb.sty
+2021/11/24 | 4396 | systems/texlive/tlnet/archive/fcolumn.r61130.tar.xz
+2021/11/24 | 4338 | macros/latex/contrib/l3build/l3build-stdmain.lua
+2021/11/24 | 43353 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2021/11/24 | 43035 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
+2021/11/24 | 43000 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
+2021/11/24 | 42839 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
+2021/11/24 | 42680 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
+2021/11/24 | 42419 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
+2021/11/24 | 41261 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
+2021/11/24 | 40990 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
+2021/11/24 | 40691 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
+2021/11/24 | 401116 | systems/texlive/tlnet/archive/texlive-scripts.doc.r61124.tar.xz
+2021/11/24 | 392679 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
+2021/11/24 | 39022 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
+2021/11/24 | 38146 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
+2021/11/24 | 37816 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
+2021/11/24 | 37327 | support/latexmk/CHANGES
+2021/11/24 | 37250 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
+2021/11/24 | 36700 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
+2021/11/24 | 36628 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
+2021/11/24 | 36461 | macros/latex/contrib/l3build/l3build-check.lua
+2021/11/24 | 36291 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
+2021/11/24 | 35074 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
+2021/11/24 | 347916 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
+2021/11/24 | 34673 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2021/11/24 | 3382 | macros/latex/contrib/l3build/l3build-zip.lua
+2021/11/24 | 33651 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2021/11/24 | 330843 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
+2021/11/24 | 32558 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
+2021/11/24 | 325227 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
+2021/11/24 | 318992 | systems/texlive/tlnet/archive/fcolumn.doc.r61130.tar.xz
+2021/11/24 | 31656 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
+2021/11/24 | 31547 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
+2021/11/24 | 313230 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
+2021/11/24 | 31318 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
+2021/11/24 | 31199 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
+2021/11/24 | 30805 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2021/11/24 | 304271 | macros/latex/contrib/zref-clever/zref-clever.pdf
+2021/11/24 | 30044 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2021/11/24 | 2995 | macros/latex/contrib/zref-clever/zref-clever.ins
+2021/11/24 | 29823 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
+2021/11/24 | 295371 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
+2021/11/24 | 29078 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
+2021/11/24 | 284742 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
+2021/11/24 | 283970 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
+2021/11/24 | 28345 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
+2021/11/24 | 28167 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
+2021/11/24 | 2796565 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
+2021/11/24 | 278970 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
+2021/11/24 | 27702 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
+2021/11/24 | 2745 | macros/latex/contrib/l3build/l3build-unpack.lua
+2021/11/24 | 27421 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
+2021/11/24 | 27336 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
+2021/11/24 | 27198 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
+2021/11/24 | 269676 | systems/texlive/tlnet/archive/numspell.doc.r61132.tar.xz
+2021/11/24 | 26888 | systems/texlive/tlnet/archive/luamplib.source.r61133.tar.xz
+2021/11/24 | 2673326 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
+2021/11/24 | 258763 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
+2021/11/24 | 25631157 | systems/texlive/tlnet/install-tl.zip
+2021/11/24 | 25604 | systems/texlive/tlnet/archive/mcf2graph.r61128.tar.xz
+2021/11/24 | 255201 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
+2021/11/24 | 252826 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
+2021/11/24 | 252688 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2021/11/24 | 25246 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
+2021/11/24 | 250654 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
+2021/11/24 | 25014 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
+2021/11/24 | 25001 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
+2021/11/24 | 2476 | macros/latex/contrib/l3build/l3build-help.lua
+2021/11/24 | 243516 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
+2021/11/24 | 23901 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2021/11/24 | 237453 | macros/latex/contrib/zref-clever/zref-clever.dtx
+2021/11/24 | 2338 | macros/latex/contrib/l3build/CONTRIBUTING.md
+2021/11/24 | 23354 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
+2021/11/24 | 2322596 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2021/11/24 | 2285 | macros/latex/contrib/l3build/l3build-tagging.lua
+2021/11/24 | 22038 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
+2021/11/24 | 217426 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2021/11/24 | 215437 | support/latexmk/latexmk.txt
+2021/11/24 | 2149 | macros/latex/contrib/l3build/l3build-clean.lua
+2021/11/24 | 214799 | macros/latex/contrib/snaptodo.zip
+2021/11/24 | 21360 | systems/texlive/tlnet/archive/fcolumn.source.r61130.tar.xz
+2021/11/24 | 21169 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
+2021/11/24 | 20871507 | systems/texlive/tlnet/install-tl-windows.exe
+2021/11/24 | 208026 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
+2021/11/24 | 207162 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
+2021/11/24 | 202822 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
+2021/11/24 | 20113 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
+2021/11/24 | 2003279 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
+2021/11/24 | 199531 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
+2021/11/24 | 198317 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
+2021/11/24 | 198068 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
+2021/11/24 | 197410 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
+2021/11/24 | 196760 | support/latexmk/latexmk.pdf
+2021/11/24 | 195702 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2021/11/24 | 194726 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
+2021/11/24 | 192808 | systems/texlive/tlnet/archive/context-transliterator.doc.r61127.tar.xz
+2021/11/24 | 19012 | systems/texlive/tlnet/archive/context-transliterator.r61127.tar.xz
+2021/11/24 | 1836 | macros/latex/contrib/fancyvrb/Changes
+2021/11/24 | 1816 | macros/latex/contrib/l3build/l3build.1
+2021/11/24 | 18158 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
+2021/11/24 | 180126 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
+2021/11/24 | 17974 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2021/11/24 | 179745 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
+2021/11/24 | 179115 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
+2021/11/24 | 17704 | systems/texlive/tlnet/archive/easybook.source.r61129.tar.xz
+2021/11/24 | 17656 | systems/texlive/tlnet/archive/easybook.r61129.tar.xz
+2021/11/24 | 171176 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2021/11/24 | 1710499 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
+2021/11/24 | 16982968 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2021/11/24 | 167692 | support/TeX4ht/source/ChangeLog
+2021/11/24 | 16601 | fonts/cochineal/tex/cochineal.sty
+2021/11/24 | 16447 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
+2021/11/24 | 164415 | macros/latex/contrib/fancyvrb.zip
+2021/11/24 | 16361 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
+2021/11/24 | 159825 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
+2021/11/24 | 155921 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
+2021/11/24 | 1540 | macros/latex/contrib/l3build/l3build.ins
+2021/11/24 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2021/11/24 | 153912 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
+2021/11/24 | 153880 | systems/texlive/tlnet/archive/luamplib.doc.r61133.tar.xz
+2021/11/24 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2021/11/24 | 15022 | macros/latex/contrib/l3build/CHANGELOG.md
+2021/11/24 | 1481 | macros/latex/contrib/zref-clever/zref-clever-code.tex
+2021/11/24 | 147418 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
+2021/11/24 | 1470954 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
+2021/11/24 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2021/11/24 | 145 | macros/latex/contrib/zref-clever/CHANGELOG.md
+2021/11/24 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2021/11/24 | 14337 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
+2021/11/24 | 1422199 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2021/11/24 | 141135 | macros/latex/contrib/fancyvrb/doc/fancyvrb-doc.pdf
+2021/11/24 | 1391994 | install/macros/latex/contrib/zref-clever.tds.zip
+2021/11/24 | 1388380 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
+2021/11/24 | 1388245 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2021/11/24 | 13784 | systems/texlive/tlnet/archive/numspell.r61132.tar.xz
+2021/11/24 | 136714 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
+2021/11/24 | 1364552 | macros/latex/contrib/zref-clever.zip
+2021/11/24 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r61135.tar.xz
+2021/11/24 | 136280 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
+2021/11/24 | 1346947 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
+2021/11/24 | 13459 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
+2021/11/24 | 133958 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
+2021/11/24 | 131080 | systems/texlive/tlnet/archive/glossaries-extra.source.r61131.tar.xz
+2021/11/24 | 13092 | macros/latex/contrib/l3build/l3build-upload.lua
+2021/11/24 | 1300868 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2021/11/24 | 1290584 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
+2021/11/24 | 1286999 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2021/11/24 | 1286992 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
+2021/11/24 | 124756 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
+2021/11/24 | 1233540 | systems/texlive/tlnet/archive/bib2gls.source.r61134.tar.xz
+2021/11/24 | 12282 | macros/latex/contrib/l3build/l3build-file-functions.lua
+2021/11/24 | 1223560 | systems/texlive/tlnet/archive/tex4ht.source.r61135.tar.xz
+2021/11/24 | 119744 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
+2021/11/24 | 11932 | systems/texlive/tlnet/archive/luamplib.r61133.tar.xz
+2021/11/24 | 1184680 | systems/texlive/tlnet/archive/bib2gls.r61134.tar.xz
+2021/11/24 | 1169823 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
+2021/11/24 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
+2021/11/24 | 115234 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2021/11/24 | 112898 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2021/11/24 | 112598 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
+2021/11/24 | 1097540 | support/TeX4ht/source/tex4ht-4ht.tex
+2021/11/24 | 109135 | macros/latex/contrib/l3build/l3build.dtx
+2021/11/24 | 109074 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2021/11/24 | 108284 | systems/texlive/tlnet/archive/texlive-scripts.r61124.tar.xz
+2021/11/24 | 10795 | macros/latex/contrib/l3build/l3build-manifest-setup.lua
+2021/11/24 | 107860 | macros/latex/contrib/zref-clever/zref-clever.tex
+2021/11/24 | 1076111 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2021/11/24 | 107433 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
+2021/11/24 | 103995 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
+2021/11/24 | 1035367 | macros/latex/contrib/zref-clever/zref-clever-code.pdf
+2021/11/24 | 103389 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
+2021/11/24 | 1019 | macros/latex/contrib/l3build/README.md
+2021/11/24 | 100487 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
+2021/11/24 | 100072 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
2021/11/23 | 98595 | graphics/mcf2graph/mcf_data_base.mcf
2021/11/23 | 97698 | systems/win32/miktex/tm/packages/ekdosis__source.tar.lzma
-2021/11/23 | 97370 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
-2021/11/23 | 973110 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
-2021/11/23 | 96305 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
2021/11/23 | 956431 | graphics/mcf2graph.zip
-2021/11/23 | 95262 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
-2021/11/23 | 94775 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
-2021/11/23 | 94418 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
2021/11/23 | 93806 | macros/luatex/generic/luamplib/luamplib.dtx
-2021/11/23 | 923 | systems/win32/miktex/tm/packages/pr.ini
2021/11/23 | 9125 | macros/luatex/generic/luamplib/NEWS
-2021/11/23 | 87677 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
-2021/11/23 | 8763 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
-2021/11/23 | 83334 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
-2021/11/23 | 819185 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
2021/11/23 | 816706 | systems/win32/miktex/tm/packages/ekdosis__doc.tar.lzma
-2021/11/23 | 81439 | macros/latex/contrib/easybook/easybook.tex
-2021/11/23 | 80878 | macros/latex/contrib/easybook/easybook.dtx
-2021/11/23 | 80766 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
-2021/11/23 | 78762 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
-2021/11/23 | 78159 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
-2021/11/23 | 7715 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
-2021/11/23 | 76895 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
-2021/11/23 | 76110 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
-2021/11/23 | 749267 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-x64-2.9.tar.lzma
-2021/11/23 | 748896 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
2021/11/23 | 748258 | systems/win32/miktex/tm/packages/apa7__doc.tar.lzma
-2021/11/23 | 74242 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
-2021/11/23 | 73885 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
-2021/11/23 | 73350 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
-2021/11/23 | 73115 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
-2021/11/23 | 72231 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
-2021/11/23 | 71917 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
-2021/11/23 | 71091 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
-2021/11/23 | 69940 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
-2021/11/23 | 685904 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-2.9.tar.lzma
-2021/11/23 | 68559 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
-2021/11/23 | 6810759 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2021/11/23 | 680813 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
+2021/11/23 | 6854 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2021/11/23 | 678185 | macros/latex/contrib/nicematrix/nicematrix.dtx
-2021/11/23 | 67623 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
-2021/11/23 | 67459 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
-2021/11/23 | 66234 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
-2021/11/23 | 66115 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2021/11/23 | 6758 | macros/latex/contrib/snaptodo/snaptodo.tex
2021/11/23 | 6515729 | macros/latex/contrib/glossaries-extra.zip
-2021/11/23 | 64703 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
-2021/11/23 | 64426 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
-2021/11/23 | 64174 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
-2021/11/23 | 63730 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
-2021/11/23 | 629637 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
-2021/11/23 | 629162 | systems/win32/miktex/tm/packages/files.csv.lzma
-2021/11/23 | 628985 | systems/win32/miktex/tm/packages/next/files.csv.lzma
-2021/11/23 | 62744 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
-2021/11/23 | 62552 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
-2021/11/23 | 624342 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
-2021/11/23 | 623958 | macros/latex/contrib/easybook.zip
-2021/11/23 | 61824 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
-2021/11/23 | 600644 | systems/texlive/tlnet/archive/easybook.doc.r61120.tar.xz
-2021/11/23 | 59973 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
-2021/11/23 | 597523 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
2021/11/23 | 5941 | systems/win32/miktex/tm/packages/expkv-cs.tar.lzma
-2021/11/23 | 589723 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
2021/11/23 | 584296 | systems/texlive/tlnet/archive/l3kernel.source.r61121.tar.xz
2021/11/23 | 582653 | systems/win32/miktex/tm/packages/easybook__doc.tar.lzma
-2021/11/23 | 582542 | macros/latex/contrib/easybook/easybook.pdf
2021/11/23 | 581972 | systems/win32/miktex/tm/packages/l3kernel__source.tar.lzma
-2021/11/23 | 57961 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
-2021/11/23 | 57589 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
-2021/11/23 | 57461 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
-2021/11/23 | 57142 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
-2021/11/23 | 56789 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
-2021/11/23 | 566032 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
-2021/11/23 | 56530 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
-2021/11/23 | 56462 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
-2021/11/23 | 56459 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
-2021/11/23 | 56321 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
-2021/11/23 | 55498 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma
-2021/11/23 | 54597 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
2021/11/23 | 53380 | graphics/pgf/contrib/xistercian/xistercian.dtx
-2021/11/23 | 531953 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
-2021/11/23 | 52389 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
-2021/11/23 | 51836 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
-2021/11/23 | 51323 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
-2021/11/23 | 51175 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
-2021/11/23 | 51096 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
-2021/11/23 | 510456 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
-2021/11/23 | 50390 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
-2021/11/23 | 50120 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
-2021/11/23 | 5001 | systems/win32/miktex/tm/packages/next/miktex-config-2.9.tar.lzma
+2021/11/23 | 499 | macros/latex/contrib/snaptodo/README
2021/11/23 | 490739 | macros/latex/contrib/nicematrix/nicematrix-french.pdf
-2021/11/23 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
-2021/11/23 | 483384 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
-2021/11/23 | 48270 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
-2021/11/23 | 476832 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
-2021/11/23 | 46896 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
-2021/11/23 | 46527 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
2021/11/23 | 4650 | systems/win32/miktex/tm/packages/fcolumn.tar.lzma
-2021/11/23 | 461748 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
-2021/11/23 | 45930 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
-2021/11/23 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2021/11/23 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
-2021/11/23 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2021/11/23 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
-2021/11/23 | 45334 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
2021/11/23 | 447881 | systems/win32/miktex/tm/packages/expkv-cs__doc.tar.lzma
2021/11/23 | 44718 | graphics/mcf2graph/mcf_man_soc.mf
-2021/11/23 | 43353 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
-2021/11/23 | 43035 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
-2021/11/23 | 43000 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
-2021/11/23 | 42839 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
-2021/11/23 | 42679 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
-2021/11/23 | 42419 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
-2021/11/23 | 41261 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
-2021/11/23 | 40990 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
-2021/11/23 | 40690 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
2021/11/23 | 4016 | macros/luatex/generic/luamplib/test-luamplib-latex.tex
-2021/11/23 | 401120 | systems/texlive/tlnet/archive/texlive-scripts.doc.r61116.tar.xz
+2021/11/23 | 4014 | macros/latex/contrib/snaptodo/snaptodo.sty
2021/11/23 | 39309 | systems/win32/miktex/tm/packages/easybook__source.tar.lzma
-2021/11/23 | 392678 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
-2021/11/23 | 39022 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
2021/11/23 | 3872 | macros/luatex/generic/luamplib/test-luamplib-plain.tex
2021/11/23 | 383617 | graphics/mcf2graph/mcf_manual.pdf
-2021/11/23 | 38145 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
-2021/11/23 | 37816 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
-2021/11/23 | 37249 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
2021/11/23 | 36778 | macros/latex/contrib/numspell/numspell-latin.sty
-2021/11/23 | 36697 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
-2021/11/23 | 36626 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
-2021/11/23 | 36292 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
-2021/11/23 | 35073 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
-2021/11/23 | 347915 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
-2021/11/23 | 34673 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
-2021/11/23 | 33650 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
2021/11/23 | 33187 | systems/win32/miktex/tm/packages/apa7__source.tar.lzma
-2021/11/23 | 330842 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
-2021/11/23 | 32558 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
-2021/11/23 | 325227 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
2021/11/23 | 319740 | systems/win32/miktex/tm/packages/fcolumn__doc.tar.lzma
2021/11/23 | 318151 | graphics/mcf2graph/mcf_example.pdf
2021/11/23 | 317130 | graphics/pgf/contrib/xistercian.zip
-2021/11/23 | 31656 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
-2021/11/23 | 31545 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
2021/11/23 | 315178 | graphics/pgf/contrib/xistercian/xistercian.pdf
-2021/11/23 | 313228 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
-2021/11/23 | 31316 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
-2021/11/23 | 31199 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
-2021/11/23 | 30805 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
-2021/11/23 | 30043 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
-2021/11/23 | 29822 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
2021/11/23 | 29712 | systems/win32/miktex/tm/packages/xassoccnt__source.tar.lzma
-2021/11/23 | 295371 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
2021/11/23 | 291124 | macros/latex/contrib/numspell.zip
-2021/11/23 | 29077 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
-2021/11/23 | 284742 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
-2021/11/23 | 283969 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
-2021/11/23 | 28344 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
-2021/11/23 | 28166 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
-2021/11/23 | 2796565 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
-2021/11/23 | 278967 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
-2021/11/23 | 27702 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
2021/11/23 | 2752 | macros/luatex/generic/luamplib/Makefile
-2021/11/23 | 27423 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
-2021/11/23 | 27335 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
-2021/11/23 | 27198 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
2021/11/23 | 270892 | macros/latex/contrib/numspell/numspell.pdf
-2021/11/23 | 2673326 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
2021/11/23 | 26376 | systems/win32/miktex/tm/packages/expkv-cs__source.tar.lzma
-2021/11/23 | 258757 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
-2021/11/23 | 25631172 | systems/texlive/tlnet/install-tl.zip
-2021/11/23 | 255202 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
-2021/11/23 | 252909 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
-2021/11/23 | 252730 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
-2021/11/23 | 25244 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
-2021/11/23 | 250654 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
-2021/11/23 | 25012 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
-2021/11/23 | 25001 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
-2021/11/23 | 243511 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
-2021/11/23 | 23900 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
-2021/11/23 | 23354 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
-2021/11/23 | 2324304 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
2021/11/23 | 2252 | graphics/mcf2graph/mcf_exa_soc.mf
2021/11/23 | 223013 | macros/context/contrib/context-transliterator.zip
-2021/11/23 | 22036 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
2021/11/23 | 21977 | systems/win32/miktex/tm/packages/fcolumn__source.tar.lzma
2021/11/23 | 21786 | systems/win32/miktex/tm/packages/ekdosis.tar.lzma
-2021/11/23 | 217428 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
2021/11/23 | 2134432 | systems/texlive/tlnet/archive/kpfonts-otf.doc.r61119.tar.xz
2021/11/23 | 2122202 | systems/win32/miktex/tm/packages/kpfonts-otf__doc.tar.lzma
-2021/11/23 | 21170 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
-2021/11/23 | 20873835 | systems/texlive/tlnet/install-tl-windows.exe
2021/11/23 | 20843 | systems/win32/miktex/tm/packages/kpfonts-otf__source.tar.lzma
-2021/11/23 | 208026 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
-2021/11/23 | 207163 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
+2021/11/23 | 207510 | macros/latex/contrib/snaptodo/snaptodo.pdf
2021/11/23 | 2043177 | macros/latex/contrib/nicematrix.zip
-2021/11/23 | 202822 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
-2021/11/23 | 20113 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
-2021/11/23 | 2003283 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
2021/11/23 | 1996 | macros/luatex/generic/luamplib/README
-2021/11/23 | 199533 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
2021/11/23 | 198427 | install/macros/luatex/generic/luamplib.tds.zip
-2021/11/23 | 198318 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
-2021/11/23 | 198068 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
2021/11/23 | 19786 | systems/win32/miktex/tm/packages/xassoccnt.tar.lzma
-2021/11/23 | 197412 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
-2021/11/23 | 195703 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
-2021/11/23 | 194727 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
2021/11/23 | 185234 | macros/latex/contrib/nicematrix/nicematrix-french.tex
2021/11/23 | 184407 | graphics/mcf2graph/mcf_mplib_exa.pdf
2021/11/23 | 184009 | macros/luatex/generic/luamplib.zip
-2021/11/23 | 18158 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
-2021/11/23 | 180126 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
-2021/11/23 | 17974 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
-2021/11/23 | 179745 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
-2021/11/23 | 179112 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
2021/11/23 | 17781 | macros/latex/contrib/numspell/numspell-magyar.sty
-2021/11/23 | 17700 | systems/texlive/tlnet/archive/easybook.source.r61120.tar.xz
-2021/11/23 | 17660 | systems/texlive/tlnet/archive/easybook.r61120.tar.xz
+2021/11/23 | 173478 | support/latexmk/latexmk.1
2021/11/23 | 17278 | macros/latex/contrib/numspell/numspell.tex
2021/11/23 | 17133 | macros/latex/contrib/numspell/numspell-french.sty
-2021/11/23 | 171174 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
-2021/11/23 | 1710500 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
-2021/11/23 | 16983388 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
2021/11/23 | 169640 | systems/texlive/tlnet/archive/l3kernel.r61121.tar.xz
2021/11/23 | 169189 | systems/win32/miktex/tm/packages/l3kernel.tar.lzma
-2021/11/23 | 16447 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
2021/11/23 | 16410 | systems/win32/miktex/tm/packages/easybook.tar.lzma
-2021/11/23 | 16361 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
2021/11/23 | 16028 | macros/latex/contrib/numspell/numspell-italian.sty
-2021/11/23 | 159825 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
-2021/11/23 | 155920 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
-2021/11/23 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2021/11/23 | 153911 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
-2021/11/23 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
2021/11/23 | 151338 | macros/luatex/generic/luamplib/luamplib.pdf
-2021/11/23 | 147417 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
-2021/11/23 | 1470955 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
-2021/11/23 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
2021/11/23 | 14557 | macros/latex/contrib/numspell/numspell.sty
-2021/11/23 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
2021/11/23 | 1434511 | macros/latex/contrib/nicematrix/nicematrix.pdf
-2021/11/23 | 14337 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
2021/11/23 | 14315 | systems/win32/miktex/tm/packages/apa7.tar.lzma
-2021/11/23 | 1422198 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
-2021/11/23 | 1388154 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
-2021/11/23 | 1387859 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
-2021/11/23 | 136713 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
-2021/11/23 | 136278 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
-2021/11/23 | 1346945 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
-2021/11/23 | 13460 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
-2021/11/23 | 133957 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
-2021/11/23 | 1300868 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
2021/11/23 | 12962 | macros/latex/contrib/numspell/numspell-german.sty
-2021/11/23 | 1290586 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
-2021/11/23 | 1286466 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
-2021/11/23 | 1286390 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
2021/11/23 | 1284 | graphics/pgf/contrib/xistercian/README.md
-2021/11/23 | 124756 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
-2021/11/23 | 119744 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
2021/11/23 | 118599 | graphics/mcf2graph/mcf2graph.mf
-2021/11/23 | 1169826 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
-2021/11/23 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
-2021/11/23 | 115233 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
2021/11/23 | 11369 | macros/latex/contrib/numspell/numspell-english.sty
-2021/11/23 | 112898 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
2021/11/23 | 1125 | macros/latex/contrib/numspell/README
-2021/11/23 | 112597 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
2021/11/23 | 1113148 | systems/win32/miktex/tm/packages/xassoccnt__doc.tar.lzma
2021/11/23 | 11094 | systems/win32/miktex/tm/packages/graphics-def.tar.lzma
2021/11/23 | 11059148 | systems/texlive/tlnet/archive/l3kernel.doc.r61121.tar.xz
-2021/11/23 | 109073 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
2021/11/23 | 10886287 | systems/win32/miktex/tm/packages/l3kernel__doc.tar.lzma
-2021/11/23 | 108296 | systems/texlive/tlnet/archive/texlive-scripts.r61116.tar.xz
2021/11/23 | 1081 | systems/win32/miktex/tm/packages/graphics-def__doc.tar.lzma
2021/11/23 | 1081853 | systems/win32/miktex/tm/packages/kpfonts-otf.tar.lzma
2021/11/23 | 1081348 | systems/texlive/tlnet/archive/kpfonts-otf.r61119.tar.xz
-2021/11/23 | 1076110 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
-2021/11/23 | 107431 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
-2021/11/23 | 103994 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
-2021/11/23 | 103389 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
-2021/11/23 | 100486 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
+2021/11/23 | 1044 | macros/latex/contrib/snaptodo/test/before_after.tex
2021/11/23 | 10039941 | support/bib2gls.zip
-2021/11/23 | 100072 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
2021/11/22 | 9999 | macros/latex/contrib/l3kernel/l3news10.tex
2021/11/22 | 995 | macros/latex/contrib/glossaries-extra/README
2021/11/22 | 986 | support/bib2gls/examples/sample-hierarchical.tex
@@ -356,7 +437,6 @@
2021/11/22 | 7019700 | systems/texlive/tlnet/archive/xetex.i386-netbsd.r61101.tar.xz
2021/11/22 | 7003264 | systems/texlive/tlnet/archive/xetex.i386-cygwin.r61101.tar.xz
2021/11/22 | 69523 | macros/latex/contrib/l3kernel/l3candidates.dtx
-2021/11/22 | 6914 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2021/11/22 | 690 | macros/latex/contrib/glossaries-extra/samples/sample-docdef.tex
2021/11/22 | 69044 | macros/latex/contrib/l3kernel/l3text-case.dtx
2021/11/22 | 6900260 | systems/texlive/tlnet/archive/xetex.amd64-freebsd.r61101.tar.xz
@@ -386,6 +466,7 @@
2021/11/22 | 62496 | graphics/mcf2graph/mcf_manual.tex
2021/11/22 | 623104 | macros/latex/contrib/l3kernel/expl3.pdf
2021/11/22 | 617 | macros/latex/contrib/glossaries-extra/samples/sample-suppl-hyp.tex
+2021/11/22 | 613 | macros/latex/contrib/snaptodo/test/circle_testing.tex
2021/11/22 | 61070 | support/bib2gls/examples/sample-markuplanguages.pdf
2021/11/22 | 604 | systems/texlive/tlnet/archive/graphics-def.doc.r61111.tar.xz
2021/11/22 | 601516 | macros/latex/contrib/glossaries-extra/glossaries-extra-manual.tex
@@ -515,6 +596,7 @@
2021/11/22 | 26249 | macros/latex/contrib/l3kernel/l3deprecation.dtx
2021/11/22 | 25864 | macros/latex/contrib/glossaries-extra/samples/sample-onelink.pdf
2021/11/22 | 2585 | support/bib2gls/examples/chemicalformula.bib
+2021/11/22 | 25858 | macros/latex/contrib/snaptodo/test/stress_testing.tex
2021/11/22 | 25824 | systems/texlive/tlnet/archive/expkv-cs.source.r61109.tar.xz
2021/11/22 | 25650 | macros/latex/contrib/l3kernel/l3fp-random.dtx
2021/11/22 | 255317 | support/bib2gls/examples/sample-multi1.pdf
@@ -639,8 +721,10 @@
2021/11/22 | 11935 | macros/latex/contrib/glossaries-extra/samples/sample-mixture.tex
2021/11/22 | 1191 | macros/latex/contrib/glossaries-extra/samples/sample-entrycount.tex
2021/11/22 | 11884 | macros/latex/contrib/l3kernel/l3styleguide.tex
+2021/11/22 | 118800005 | macros/context/latest/cont-tmf.zip
2021/11/22 | 11781 | macros/latex/contrib/l3kernel/l3fparray.dtx
2021/11/22 | 11591 | macros/latex/contrib/glossaries-extra/samples/sample-name-font.tex
+2021/11/22 | 114 | macros/latex/contrib/snaptodo/test/minimal_testing.tex
2021/11/22 | 114588 | macros/latex/contrib/l3kernel/l3news04.pdf
2021/11/22 | 1141224 | systems/texlive/tlnet/archive/xassoccnt.doc.r61112.tar.xz
2021/11/22 | 113422 | macros/latex/contrib/l3kernel/l3str-convert.dtx
@@ -684,7 +768,6 @@
2021/11/21 | 93 | indexing/upmendex/source/tests/range3.ist
2021/11/21 | 92 | indexing/upmendex/source/tests/range2.ist
2021/11/21 | 9227 | indexing/upmendex/source/convert.c
-2021/11/21 | 920796 | systems/texlive/tlnet/archive/tex4ht.r61097.tar.xz
2021/11/21 | 8788 | macros/latex/contrib/graphics-def/dvisvgm.def
2021/11/21 | 872 | indexing/upmendex/doc/samples/option/japanese.idx
2021/11/21 | 853 | macros/luatex/latex/ekdosis/samples/Makefile
@@ -843,7 +926,6 @@
2021/11/21 | 139844 | systems/win32/miktex/tm/packages/fancyvrb__doc.tar.lzma
2021/11/21 | 1379 | indexing/upmendex/doc/samples/alphabet/Makefile
2021/11/21 | 136769 | systems/win32/miktex/tm/packages/koma-script.tar.lzma
-2021/11/21 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r61097.tar.xz
2021/11/21 | 1362 | indexing/upmendex/source/Makefile.am
2021/11/21 | 1349 | indexing/upmendex/source/exkana.h
2021/11/21 | 1348 | indexing/upmendex/source/tests/locale1.ind
@@ -857,7 +939,6 @@
2021/11/21 | 123700 | macros/latex/contrib/xassoccnt/xassoccnt.sty
2021/11/21 | 1231 | indexing/upmendex/doc/samples/mdxsty03.ist
2021/11/21 | 1228 | macros/latex/contrib/xassoccnt/xassoccnt_totalcounters_example.tex
-2021/11/21 | 1225152 | systems/texlive/tlnet/archive/tex4ht.source.r61097.tar.xz
2021/11/21 | 12221 | macros/luatex/latex/ekdosis/ekdosis.el
2021/11/21 | 12111 | systems/win32/miktex/tm/packages/fancyvrb.tar.lzma
2021/11/21 | 1200 | indexing/upmendex/source/tests/rule.ind
@@ -908,9 +989,9 @@
2021/11/20 | 4572 | systems/win32/miktex/tm/packages/utf8add.tar.lzma
2021/11/20 | 440690 | systems/win32/miktex/tm/packages/bodeplot__doc.tar.lzma
2021/11/20 | 440328 | systems/texlive/tlnet/archive/bodeplot.doc.r61092.tar.xz
-2021/11/20 | 43854 | macros/latex/contrib/fancyvrb/latex/fancyvrb.sty
2021/11/20 | 42890 | systems/win32/miktex/tm/packages/latex-tools-dev.tar.lzma
2021/11/20 | 42878 | systems/win32/miktex/tm/packages/oberdiek.tar.lzma
+2021/11/20 | 417811 | support/latexmk/latexmk.pl
2021/11/20 | 4078 | systems/win32/miktex/tm/packages/exesheet.tar.lzma
2021/11/20 | 39979 | info/lshort/chinese/src/chap/chap.05.style.tex
2021/11/20 | 3982 | systems/win32/miktex/tm/packages/utf8add__source.tar.lzma
@@ -931,6 +1012,7 @@
2021/11/20 | 22989 | info/lshort/chinese/src/chap/fdl.tex
2021/11/20 | 228576 | systems/win32/miktex/tm/packages/latex-tools-dev__source.tar.lzma
2021/11/20 | 219704 | systems/win32/miktex/tm/packages/latex-base-dev.tar.lzma
+2021/11/20 | 2176 | support/latexmk/example_rcfiles/texinfo-latexmkrc
2021/11/20 | 2045049 | systems/win32/miktex/tm/packages/arara__doc.tar.lzma
2021/11/20 | 2042255 | systems/win32/miktex/tm/packages/siunitx__doc.tar.lzma
2021/11/20 | 2038280 | systems/texlive/tlnet/archive/siunitx.doc.r61093.tar.xz
@@ -941,9 +1023,8 @@
2021/11/20 | 18920 | systems/win32/miktex/tm/packages/texdimens__source.tar.lzma
2021/11/20 | 1891025 | systems/win32/miktex/tm/packages/mathalpha__doc.tar.lzma
2021/11/20 | 178367 | systems/win32/miktex/tm/packages/exesheet__doc.tar.lzma
-2021/11/20 | 167304 | support/TeX4ht/source/ChangeLog
+2021/11/20 | 16753 | support/latexmk/INSTALL
2021/11/20 | 16728 | systems/win32/miktex/tm/packages/exesheet__source.tar.lzma
-2021/11/20 | 164112 | macros/latex/contrib/fancyvrb.zip
2021/11/20 | 1606418 | systems/win32/miktex/tm/packages/hitszthesis__doc.tar.lzma
2021/11/20 | 1589261 | info/lshort/chinese.zip
2021/11/20 | 1472258 | info/lshort/chinese/lshort-zh-cn.pdf
@@ -956,6 +1037,7 @@
2021/11/20 | 127451 | systems/win32/miktex/tm/packages/fontools__doc.tar.lzma
2021/11/20 | 1240 | info/lshort/chinese/README-zh.md
2021/11/20 | 122693 | systems/win32/miktex/tm/packages/thubeamer__source.tar.lzma
+2021/11/20 | 11808 | support/latexmk/README
2021/11/20 | 117817 | systems/win32/miktex/tm/packages/latexindent__source.tar.lzma
2021/11/20 | 115201 | systems/win32/miktex/tm/packages/texdimens__doc.tar.lzma
2021/11/20 | 1142 | info/lshort/chinese/src/lshort-zh-cn.tex
@@ -970,8 +1052,6 @@
2021/11/19 | 458165 | graphics/pgf/contrib/bodeplot.zip
2021/11/19 | 41100 | macros/latex/contrib/fancyvrb/doc/fancyvrb-doc.tex
2021/11/19 | 1888792 | systems/texlive/tlnet/archive/mathalpha.doc.r61089.tar.xz
-2021/11/19 | 1729 | macros/latex/contrib/fancyvrb/Changes
-2021/11/19 | 140917 | macros/latex/contrib/fancyvrb/doc/fancyvrb-doc.pdf
2021/11/18 | 996 | macros/latex/contrib/siunitx/README.md
2021/11/18 | 98475 | macros/latex/contrib/siunitx/siunitx-unit.dtx
2021/11/18 | 9572 | macros/latex/contrib/siunitx/siunitx-symbol.dtx
@@ -1014,162 +1094,6 @@
2021/11/18 | 147740 | macros/latex/contrib/siunitx/siunitx.tex
2021/11/18 | 1416 | graphics/pgf/contrib/bodeplot/bodeplot.ins
2021/11/18 | 121120 | macros/latex/contrib/siunitx/siunitx-number.dtx
-2021/11/18 | 118788261 | macros/context/latest/cont-tmf.zip
2021/11/18 | 10440572 | systems/texlive/tlnet/archive/arara.r61086.tar.xz
2021/11/18 | 10106 | macros/latex/contrib/siunitx/siunitx-abbreviation.dtx
2021/11/18 | 100236 | systems/texlive/tlnet/archive/arara.source.r61086.tar.xz
-2021/11/17 | 9916 | systems/texlive/tlnet/archive/hologo.r61078.tar.xz
-2021/11/17 | 984 | support/arara/scripts/rules/arara-rule-make.yaml
-2021/11/17 | 950 | support/arara/scripts/rules/arara-rule-gnuplot.yaml
-2021/11/17 | 923 | support/arara/scripts/rules/arara-rule-move.yaml
-2021/11/17 | 910 | support/arara/scripts/rules/arara-rule-xindex.yaml
-2021/11/17 | 878 | support/arara/scripts/rules/arara-rule-ghostscript.yaml
-2021/11/17 | 8617176 | systems/texlive/tlnet/archive/oberdiek.doc.r61066.tar.xz
-2021/11/17 | 842 | support/arara/scripts/rules/arara-rule-tikzmake.yaml
-2021/11/17 | 839 | support/arara/scripts/rules/arara-rule-biber.yaml
-2021/11/17 | 8396 | systems/texlive/tlnet/archive/hypdoc.source.r61077.tar.xz
-2021/11/17 | 832 | support/arara/scripts/rules/arara-rule-nomencl.yaml
-2021/11/17 | 8136 | systems/texlive/tlnet/archive/thubeamer.source.r61071.tar.xz
-2021/11/17 | 812 | support/arara/scripts/rules/arara-rule-songidx.yaml
-2021/11/17 | 812 | support/arara/scripts/rules/arara-rule-dvipdfmx.yaml
-2021/11/17 | 81117 | support/arara/doc/chapters/methods.tex
-2021/11/17 | 809 | support/arara/scripts/rules/arara-rule-ps2pdf.yaml
-2021/11/17 | 808 | support/arara/scripts/rules/arara-rule-dvipdfm.yaml
-2021/11/17 | 799 | support/arara/scripts/rules/arara-rule-dvips.yaml
-2021/11/17 | 796 | support/arara/scripts/rules/arara-rule-copy.yaml
-2021/11/17 | 795 | macros/latex/contrib/easybook/README.md
-2021/11/17 | 78600 | systems/texlive/tlnet/archive/utf8add.doc.r61074.tar.xz
-2021/11/17 | 7560 | systems/texlive/tlnet/archive/latex-firstaid-dev.source.r61076.tar.xz
-2021/11/17 | 7353 | support/arara/doc/chapters/yaml.tex
-2021/11/17 | 695128 | systems/texlive/tlnet/archive/thubeamer.doc.r61071.tar.xz
-2021/11/17 | 682 | support/arara/scripts/rules/arara-rule-sketch.yaml
-2021/11/17 | 681992 | systems/texlive/tlnet/archive/latex-base-dev.source.r61076.tar.xz
-2021/11/17 | 67996 | systems/texlive/tlnet/archive/latexindent.r61075.tar.xz
-2021/11/17 | 65844 | systems/texlive/tlnet/archive/latex-amsmath-dev.source.r61076.tar.xz
-2021/11/17 | 651 | support/arara/scripts/rules/arara-rule-spix.yaml
-2021/11/17 | 6492 | systems/texlive/tlnet/archive/collection-latexextra.r61077.tar.xz
-2021/11/17 | 647 | support/arara/scripts/rules/arara-rule-makeglossarieslite.yaml
-2021/11/17 | 647 | support/arara/scripts/rules/arara-rule-convert.yaml
-2021/11/17 | 626 | support/arara/scripts/rules/arara-rule-upbibtex.yaml
-2021/11/17 | 621 | support/arara/scripts/rules/arara-rule-bibtexu.yaml
-2021/11/17 | 621 | support/arara/scripts/rules/arara-rule-bibtex8.yaml
-2021/11/17 | 61172 | support/arara/doc/figures/optionbox1.pdf
-2021/11/17 | 60850 | support/arara/doc/figures/dropdown1.pdf
-2021/11/17 | 5 | support/arara/doc/version.tex
-2021/11/17 | 59941 | support/arara/doc/figures/inputbox1.pdf
-2021/11/17 | 596 | support/arara/scripts/rules/arara-rule-pbibtex.yaml
-2021/11/17 | 59540 | support/arara/doc/figures/optionbox2.pdf
-2021/11/17 | 592 | support/arara/scripts/rules/arara-rule-bibtex.yaml
-2021/11/17 | 59101 | support/arara/doc/figures/dropdown2.pdf
-2021/11/17 | 588 | support/arara/scripts/rules/arara-rule-pdftk.yaml
-2021/11/17 | 58249 | support/arara/doc/figures/inputbox2.pdf
-2021/11/17 | 5789 | support/arara/scripts/rules/arara-rule-bib2gls.yaml
-2021/11/17 | 578024 | systems/texlive/tlnet/archive/hologo.doc.r61078.tar.xz
-2021/11/17 | 576 | support/arara/scripts/arara.sh
-2021/11/17 | 54949 | support/arara/doc/figures/messagebox1.pdf
-2021/11/17 | 546 | support/arara/scripts/rules/arara-rule-qpdf.yaml
-2021/11/17 | 53224 | support/arara/doc/figures/messagebox2.pdf
-2021/11/17 | 5285184 | systems/texlive/tlnet/archive/latex-tools-dev.doc.r61076.tar.xz
-2021/11/17 | 52368 | systems/texlive/tlnet/archive/latex-graphics-dev.source.r61076.tar.xz
-2021/11/17 | 50740 | systems/texlive/tlnet/archive/fontools.r61067.tar.xz
-2021/11/17 | 4722 | support/arara/README.md
-2021/11/17 | 42988 | systems/texlive/tlnet/archive/oberdiek.r61066.tar.xz
-2021/11/17 | 42812 | systems/texlive/tlnet/archive/latex-tools-dev.r61076.tar.xz
-2021/11/17 | 4272 | systems/texlive/tlnet/archive/utf8add.r61074.tar.xz
-2021/11/17 | 4254 | support/arara/scripts/rules/arara-rule-context.yaml
-2021/11/17 | 4074 | support/arara/scripts/rules/arara-rule-datatooltk.yaml
-2021/11/17 | 4061192 | systems/texlive/tlnet/archive/latexindent.win32.r61075.tar.xz
-2021/11/17 | 40086 | support/arara/doc/arara-quickstart.tex
-2021/11/17 | 39 | support/arara/doc/arararc.yaml
-2021/11/17 | 37238 | support/arara/doc/chapters/concepts.tex
-2021/11/17 | 3480 | systems/texlive/tlnet/archive/hypdoc.r61077.tar.xz
-2021/11/17 | 34172 | systems/texlive/tlnet/archive/hitszthesis.source.r61073.tar.xz
-2021/11/17 | 3362 | support/arara/doc/arara-manual.tex
-2021/11/17 | 3356 | systems/texlive/tlnet/archive/pst-arrow.r61069.tar.xz
-2021/11/17 | 33026 | support/arara/doc/arara.sty
-2021/11/17 | 3276 | systems/texlive/tlnet/archive/latex-firstaid-dev.r61076.tar.xz
-2021/11/17 | 3253 | support/arara/scripts/rules/arara-rule-pdfcrop.yaml
-2021/11/17 | 322512 | systems/texlive/tlnet/archive/hypdoc.doc.r61077.tar.xz
-2021/11/17 | 320 | support/arara/scripts/rules/arara-rule-halt.yaml
-2021/11/17 | 30668 | systems/texlive/tlnet/archive/latex-amsmath-dev.r61076.tar.xz
-2021/11/17 | 3026 | support/arara/doc/logos/bird.pdf
-2021/11/17 | 2990 | support/arara/scripts/rules/arara-rule-indent.yaml
-2021/11/17 | 28306760 | systems/texlive/tlnet/archive/latex-base-dev.doc.r61076.tar.xz
-2021/11/17 | 26880 | support/arara/doc/chapters/cli.tex
-2021/11/17 | 2544 | support/arara/scripts/rules/arara-rule-ltx2any.yaml
-2021/11/17 | 252986 | support/arara/doc/arara-quickstart.pdf
-2021/11/17 | 25112 | systems/texlive/tlnet/archive/hitszthesis.r61073.tar.xz
-2021/11/17 | 2435 | support/arara/scripts/rules/arara-rule-makeglossaries.yaml
-2021/11/17 | 2394656 | systems/texlive/tlnet/archive/latex-amsmath-dev.doc.r61076.tar.xz
-2021/11/17 | 232572 | systems/texlive/tlnet/archive/latex-firstaid-dev.doc.r61076.tar.xz
-2021/11/17 | 228544 | systems/texlive/tlnet/archive/latex-tools-dev.source.r61076.tar.xz
-2021/11/17 | 220552 | systems/texlive/tlnet/archive/latex-base-dev.r61076.tar.xz
-2021/11/17 | 2108 | support/arara/doc/chapters/license.tex
-2021/11/17 | 2100 | support/arara/scripts/rules/arara-rule-perltex.yaml
-2021/11/17 | 2075 | macros/latex/contrib/easybook/easybook.ins
-2021/11/17 | 2028360 | systems/texlive/tlnet/archive/latex-graphics-dev.doc.r61076.tar.xz
-2021/11/17 | 20201 | support/arara/doc/chapters/configuration.tex
-2021/11/17 | 1989 | support/arara/scripts/rules/arara-rule-frontespizio.yaml
-2021/11/17 | 19880 | systems/texlive/tlnet/archive/hologo.source.r61078.tar.xz
-2021/11/17 | 1975 | support/arara/scripts/rules/arara-rule-xindy.yaml
-2021/11/17 | 1974 | support/arara/scripts/rules/arara-rule-texindy.yaml
-2021/11/17 | 1971304 | support/arara/doc/arara-manual.pdf
-2021/11/17 | 1884 | support/arara/scripts/rules/arara-rule-latexmk.yaml
-2021/11/17 | 1837 | support/arara/scripts/rules/arara-rule-detex.yaml
-2021/11/17 | 1727 | support/arara/doc/arara.1
-2021/11/17 | 1722 | support/arara/scripts/rules/arara-rule-pythontex.yaml
-2021/11/17 | 1709 | support/arara/scripts/rules/arara-rule-texcount.yaml
-2021/11/17 | 1672 | support/arara/scripts/rules/arara-rule-fig2dev.yaml
-2021/11/17 | 1656872 | systems/texlive/tlnet/archive/hitszthesis.doc.r61073.tar.xz
-2021/11/17 | 1625 | support/arara/scripts/rules/arara-rule-pdflatex.yaml
-2021/11/17 | 1625 | support/arara/scripts/rules/arara-rule-lualatex.yaml
-2021/11/17 | 1610 | support/arara/scripts/rules/arara-rule-latex.yaml
-2021/11/17 | 1522 | support/arara/scripts/rules/arara-rule-xelatex.yaml
-2021/11/17 | 1522 | support/arara/scripts/rules/arara-rule-uplatex.yaml
-2021/11/17 | 1517 | support/arara/scripts/rules/arara-rule-platex.yaml
-2021/11/17 | 15164 | systems/texlive/tlnet/archive/latex-graphics-dev.r61076.tar.xz
-2021/11/17 | 1503 | support/arara/scripts/rules/arara-rule-makeindex.yaml
-2021/11/17 | 1478 | support/arara/scripts/rules/arara-rule-asymptote.yaml
-2021/11/17 | 1470 | support/arara/scripts/rules/arara-rule-knitr.yaml
-2021/11/17 | 14613 | support/arara/doc/chapters/deploying.tex
-2021/11/17 | 1448 | support/arara/scripts/rules/arara-rule-dvisvgm.yaml
-2021/11/17 | 14215 | support/arara/doc/logos/logo1.pdf
-2021/11/17 | 14166 | support/arara/doc/logos/logo2.pdf
-2021/11/17 | 140957 | support/arara/doc/figures/arara.png
-2021/11/17 | 138933 | support/arara/doc/chapters/rules.tex
-2021/11/17 | 138288 | systems/texlive/tlnet/archive/pst-arrow.doc.r61069.tar.xz
-2021/11/17 | 13588036 | support/arara.zip
-2021/11/17 | 13574569 | install/support/arara.tds.zip
-2021/11/17 | 13532 | support/arara/doc/chapters/mvel.tex
-2021/11/17 | 1347 | support/arara/doc/figures/gl.pdf
-2021/11/17 | 1341 | support/arara/scripts/rules/arara-rule-clean.yaml
-2021/11/17 | 132632 | systems/texlive/tlnet/archive/fontools.doc.r61067.tar.xz
-2021/11/17 | 1324 | support/arara/scripts/rules/arara-rule-sage.yaml
-2021/11/17 | 131975 | support/arara/source/arara-6.1.3-src.zip
-2021/11/17 | 1284 | support/arara/scripts/rules/arara-rule-pdfcsplain.yaml
-2021/11/17 | 1282 | support/arara/scripts/rules/arara-rule-llmk.yaml
-2021/11/17 | 1278 | support/arara/scripts/rules/arara-rule-dvipspdf.yaml
-2021/11/17 | 1276 | support/arara/scripts/rules/arara-rule-luahbtex.yaml
-2021/11/17 | 1274 | support/arara/scripts/rules/arara-rule-metapost.yaml
-2021/11/17 | 1272 | support/arara/scripts/rules/arara-rule-csplain.yaml
-2021/11/17 | 1268 | support/arara/scripts/rules/arara-rule-pdftex.yaml
-2021/11/17 | 1268 | support/arara/scripts/rules/arara-rule-luatex.yaml
-2021/11/17 | 12528 | support/arara/doc/chapters/introduction.tex
-2021/11/17 | 121904 | systems/texlive/tlnet/archive/thubeamer.r61071.tar.xz
-2021/11/17 | 121624 | systems/texlive/tlnet/archive/texdimens.doc.r61070.tar.xz
-2021/11/17 | 12065 | support/arara/doc/chapters/building.tex
-2021/11/17 | 11976 | support/arara/doc/chapters/logging.tex
-2021/11/17 | 1166 | support/arara/scripts/rules/arara-rule-xetex.yaml
-2021/11/17 | 1166 | support/arara/scripts/rules/arara-rule-uptex.yaml
-2021/11/17 | 11665766 | support/arara/scripts/arara.jar
-2021/11/17 | 1162 | support/arara/scripts/rules/arara-rule-ptex.yaml
-2021/11/17 | 11436 | systems/texlive/tlnet/archive/texdimens.r61070.tar.xz
-2021/11/17 | 114004 | systems/texlive/tlnet/archive/oberdiek.source.r61066.tar.xz
-2021/11/17 | 1128296 | systems/texlive/tlnet/archive/latexindent.doc.r61075.tar.xz
-2021/11/17 | 1111 | support/arara/scripts/rules/arara-rule-xdvipdfmx.yaml
-2021/11/17 | 1107 | support/arara/scripts/rules/arara-rule-animate.yaml
-2021/11/17 | 1105 | support/arara/scripts/rules/arara-rule-authorindex.yaml
-2021/11/17 | 1062 | support/arara/scripts/rules/arara-rule-etex.yaml
-2021/11/17 | 1050 | support/arara/scripts/rules/arara-rule-tex.yaml
-2021/11/17 | 1046 | support/arara/doc/rules/quickstart.yaml
-2021/11/17 | 1032 | support/arara/doc/rules/manual.yaml
diff --git a/fonts/cochineal/README b/fonts/cochineal/README
index 5e2463dc3b..8e0424c310 100644
--- a/fonts/cochineal/README
+++ b/fonts/cochineal/README
@@ -19,7 +19,10 @@ Files provided "as is", with no warranties.
The support files are provided in encodings OT1, T1, TS1 and LY1 for users of Western scripts, LGR for Greek scripts and T2A and OT2 for Cyrillic scripts.
-Current version: 1.07 (2021-11-13)
+Current version: 1.071 (2021-11-23)
+
+Changes in version 1.071
+Corrected definitions of \oldstylenums and \liningnums in cochineal.sty. (Thanks Noel Merino Hernández.)
Changes in version 1.07
Many of the corrections below were spurred by reports from Bernhard Hermes, to whom I offer thanks.
diff --git a/fonts/cochineal/tex/cochineal.sty b/fonts/cochineal/tex/cochineal.sty
index 15f976ce3c..72c6724587 100644
--- a/fonts/cochineal/tex/cochineal.sty
+++ b/fonts/cochineal/tex/cochineal.sty
@@ -1,8 +1,8 @@
%% cochineal.sty
%%
\NeedsTeXFormat{LaTeX2e}
-\def\fileversion{1.07}
-\def\filedate{2021/11/13}
+\def\fileversion{1.071}
+\def\filedate{2021/11/23}
\ProvidesPackage{cochineal}
[\filedate\space v\fileversion.]
@@ -502,9 +502,9 @@
\def\Cochineal@figurestyle{OsF}
\fi
\DeclareTextFontCommand{%
- \oldstylenums}{Cochineal-\Cochineal@figurealign OsF}
+ \oldstylenums}{\fontfamily{Cochineal-\Cochineal@figurealign OsF}\selectfont}
\DeclareTextFontCommand{%
- \liningnums}{Cochineal-\Cochineal@figurealign LF}
+ \liningnums}{\fontfamily{Cochineal-\Cochineal@figurealign LF}\selectfont}
\DeclareTextFontCommand{%
\tabularnums}{\fontfamily{Cochineal-T\Cochineal@figurestyle}\selectfont}
\DeclareTextFontCommand{%
diff --git a/macros/latex/contrib/easybook/easybook.dtx b/macros/latex/contrib/easybook/easybook.dtx
index d69282b790..633dde041c 100644
--- a/macros/latex/contrib/easybook/easybook.dtx
+++ b/macros/latex/contrib/easybook/easybook.dtx
@@ -15,7 +15,7 @@
%<*class>
\NeedsTeXFormat{LaTeX2e}[2020/10/01]
\RequirePackage{l3keys2e}
-\ProvidesExplClass{easybook}{2021/11/22}{1.40V}
+\ProvidesExplClass{easybook}{2021/11/24}{1.40X}
{Typeset Chinese theses or books}
\bool_set_false:N \l__eb_compile_draft_bool
@@ -325,7 +325,7 @@
%<*package>
\NeedsTeXFormat{LaTeX2e}[2020/10/01]
\RequirePackage{l3keys2e,etoolbox}
-\ProvidesExplPackage{easybase}{2021/11/22}{1.40V}
+\ProvidesExplPackage{easybase}{2021/11/24}{1.40X}
{Typeset Chinese theses or books}
\cs_generate_variant:Nn \dim_set:Nn { NV }
@@ -1854,7 +1854,6 @@
\cs_new_protected:Npn \seteqcomp #1
{ \keys_set:nn { eb/eqcomp} {#1} }
-\cs_new:Npn \eb@itembox { \item\makebox }
\cs_new:Npn \eb_eqsymb_left_margin_calc:
{
\hbox_set:Nn \l_tmpa_box { \l__eb_eqsymb_delim_tl }
@@ -1876,27 +1875,38 @@
#3
\end{eb@eqcomp@list}
}{}
+\cs_new_protected:Npn \eb_eqsymb_format_mark:n #1
+ {
+ \tl_use:N \l__eb_eqsymb_font_tl
+ {
+ \tl_if_eq:NnT \l__eb_eqsymb_mode_tl { math }
+ { \ensuremath }{#1}
+ }
+ }
+\cs_new_protected:Npn \eb_eqsymb_space_delim:nn #1#2
+ {
+ \hspace{\l__eb_eqsymb_space_dim}
+ \IfBooleanTF{#1}
+ {\makebox{#2}}
+ {\makebox[\box_wd:N \l_tmpa_box][\l__eb_eqsymb_delim_align_tl]{#2}}
+ \hspace{\l__eb_eqsymb_space_dim}
+ }
+\cs_new_protected:Npn \eb@itembox { \item\makebox }
\NewDocumentCommand{\symb}{smO{\l__eb_eqsymb_delim_tl}}
{
\IfBooleanTF{#1}
{
- \eb_eqsymb_left_margin_calc:
- \makebox
+ \eb_eqsymb_format_mark:n {#2}
+ \eb_eqsymb_space_delim:nn {#1} {#3}
}
- {\eb@itembox}[\l_tmpa_dim]
{
- \makebox[\box_wd:N \l_tmpb_box]{\l__eb_eqsymb_intro_tl}
- \makebox[\l__eb_eqsymb_width_dim][\l__eb_eqsymb_item_align_tl]
+ \eb@itembox[\l_tmpa_dim]
{
- \tl_use:N \l__eb_eqsymb_font_tl
- {
- \tl_if_eq:NnT \l__eb_eqsymb_mode_tl { math }
- { \ensuremath }{#2}
- }
+ \makebox[\box_wd:N \l_tmpb_box]{\l__eb_eqsymb_intro_tl}
+ \makebox[\l__eb_eqsymb_width_dim][\l__eb_eqsymb_item_align_tl]
+ {\eb_eqsymb_format_mark:n {#2}}
+ \eb_eqsymb_space_delim:nn {#1} {#3}
}
- \hspace{\l__eb_eqsymb_space_dim}
- \makebox[\box_wd:N \l_tmpa_box][\l__eb_eqsymb_delim_align_tl]{#3}
- \hspace{\l__eb_eqsymb_space_dim}
}
\tl_clear:N \l__eb_eqsymb_intro_tl
\ignorespaces
@@ -1918,7 +1928,7 @@
\cs_set_eq:NN \newtheorem \declaretheorem
\cs_new_protected:Npn \eb_if_thmframe_with_tcolorbox:TF #1#2
{
- \bool_if:NT \l__eb_thmframe_bool
+ \bool_if:NT \l__eb_thm_frame_bool
{ \@ifpackageloaded{tcolorbox}{#1}{#2} }
}
\NewDocumentCommand{\deftheorem}
@@ -1954,7 +1964,7 @@
{ \ctex_define:nn { thmset } { #1 .tl_set:N = #2 } }
\ctex_define:nn { thmset }
{
- thmframe .bool_set:N = \l__eb_thmframe_bool,
+ thmframe .bool_set:N = \l__eb_thm_frame_bool,
thmframe .default:n = true,
thmframe .initial:n = false,
thmbox .meta:n = { thmframe = #1 },
@@ -2370,7 +2380,7 @@
}
%</package>
%<*tcolorbox>
-\ProvidesExplFile{eb-tcolorbox.cfg}{2021/11/22}{1.40V}
+\ProvidesExplFile{eb-tcolorbox.cfg}{2021/11/24}{1.40X}
{Customization of tcolorbox for easybook}
\cs_set_protected:Npn \setexercise #1
@@ -2465,7 +2475,7 @@
\newtcbstyle{tc-ebfbox}
{
on~line,sharpish~corners,
- top = 2pt,bottom = 2pt,left = 1pt,right = 1pt,
+ top = 1.5pt,bottom = 1.5pt,left = 1pt,right = 1pt,
boxrule = 0.5pt,leftrule = 0pt,rightrule = 0pt
}
\tcbset
diff --git a/macros/latex/contrib/easybook/easybook.pdf b/macros/latex/contrib/easybook/easybook.pdf
index 9d88bbc59a..befe08edfb 100644
--- a/macros/latex/contrib/easybook/easybook.pdf
+++ b/macros/latex/contrib/easybook/easybook.pdf
Binary files differ
diff --git a/macros/latex/contrib/easybook/easybook.tex b/macros/latex/contrib/easybook/easybook.tex
index ad430de031..7c9e48b3a8 100644
--- a/macros/latex/contrib/easybook/easybook.tex
+++ b/macros/latex/contrib/easybook/easybook.tex
@@ -20,8 +20,8 @@
name = easybook,
color-scheme = blue,
title = EASYBOOK 使用手册,
- version = v1.40V,
- date = 2021/11/22,
+ version = v1.40X,
+ date = 2021/11/24,
authors = 瞿毅,
info = 排版简体中文学ä½è®ºæ–‡å’Œä¹¦ç±,
email = q1jx@foxmail.com,
@@ -1106,7 +1106,7 @@
\begin{commands}\noitemsep
\command{newcounter}[\marg{计数器}\oarg{父计数器}]\default{}
\command{counteruse}[\sarg\oarg{父计数器}\darg{ç¼–å·}\marg{计数器}\oarg{分隔符}\darg{æ•´æ•°}]
- 命令 \cs{newcounter} 是 \LaTeX 自带的创建计数器命令,计数器值输出命令 \cs{counteruse} 以一定的格å¼ä½¿ç”¨ç”±å®ƒåˆ›å»ºçš„计数器,将会以 \cs*{the}\meta{父计数器}\meta{分隔符}\cs*{the}\meta{计数器} 输出这ç§è®¡æ•°å™¨çš„值。命令 \cs{counteruse} 仅具有\textbf{输出功能},并ä¸ä¼šæ”¹å˜è®¡æ•°å™¨åŽŸæœ‰çš„绑定关系。默认æ¯ä½¿ç”¨ä¸€æ¬¡å‘½ä»¤ \meta{计数器} 的值增加 1,带有星å·çš„命令使 \meta{计数器} 值ä¿æŒä¸å˜ï¼Œ\meta{ç¼–å·} 为 \code{arabic} 或 \code{alpha} 等形å¼ï¼Œ\meta{计数器} 的值也å¯ä»¥è®¾ä¸ºæŒ‡å®šçš„ \meta{æ•´æ•°}。
+ 命令 \cs{newcounter} 是 \LaTeX 自带的创建计数器命令,计数器值输出命令 \cs{counteruse} 以一定的格å¼ä½¿ç”¨ç”±å®ƒåˆ›å»ºçš„计数器,将会以 \cs*{the}\meta{父计数器}\meta{分隔符}\cs*{the}\meta{计数器} 输出这ç§è®¡æ•°å™¨çš„值。命令 \cs{counteruse} 仅具有\textbf{输出功能},并ä¸ä¼šæ”¹å˜è®¡æ•°å™¨åŽŸæœ‰çš„绑定关系。默认æ¯ä½¿ç”¨ä¸€æ¬¡å‘½ä»¤ \meta{计数器} 的值增加 1,带有星å·çš„命令使 \meta{计数器} 值ä¿æŒä¸å˜ï¼Œ\meta{计数器} 的值也å¯ä»¥è®¾ä¸ºæŒ‡å®šçš„ \meta{æ•´æ•°}。计数器的 \meta{ç¼–å·} 为 \code{arabic} 或 \code{alph} 等计数形å¼ã€‚
在一定的场åˆä¸‹å¯èƒ½ç”¨åˆ° \cs{counteruse} 命令,比如通过新建快æ·å‘½ä»¤åœ¨ä¸€äº›ä½ç½®ä½¿ç”¨å®šç†çŽ¯å¢ƒçš„计数器,使用 \cs{labelformat} 设置计数器的引用标签需添加 \code{eb@}:
\begin{ctexexam}
diff --git a/macros/latex/contrib/fancyvrb/Changes b/macros/latex/contrib/fancyvrb/Changes
index 7033c93e33..31b72a061c 100644
--- a/macros/latex/contrib/fancyvrb/Changes
+++ b/macros/latex/contrib/fancyvrb/Changes
@@ -1,4 +1,6 @@
--- fancyvrb.sty
+4.1a 2021/11/24 - updated filedate (hv)
+4.1 2021/11/24 - make lastline without argument possible (hv)
4.0 2021/11/19 - added lastline=0 for no output (hv)
3.9 2021/10/15 - fix for \@currentcounter and \@currentlabel (hv)
3.8 2021/08/12 - fix for linenumbers and reused SaveVerbatim (hv)
diff --git a/macros/latex/contrib/fancyvrb/doc/fancyvrb-doc.pdf b/macros/latex/contrib/fancyvrb/doc/fancyvrb-doc.pdf
index 3542c93f54..532bcc51d2 100644
--- a/macros/latex/contrib/fancyvrb/doc/fancyvrb-doc.pdf
+++ b/macros/latex/contrib/fancyvrb/doc/fancyvrb-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/fancyvrb/latex/fancyvrb.sty b/macros/latex/contrib/fancyvrb/latex/fancyvrb.sty
index 47ef7ea7ba..75f418e7be 100644
--- a/macros/latex/contrib/fancyvrb/latex/fancyvrb.sty
+++ b/macros/latex/contrib/fancyvrb/latex/fancyvrb.sty
@@ -2,7 +2,7 @@
%% This is file `fancyvrb.sty',
%%
%% COPYRIGHT 1992-1999, by Timothy Van Zandt <tvz@zandtwerk.kellogg.nwu.edu>
-%% 2000-... , by Herbert Voss <hvoss@tug.org>
+%% 2000-2021 ... , by Herbert Voss <hvoss@tug.org>
%%
%% This package may be distributed under the terms of the LaTeX Project Public
%% License, as described in lppl.txt in the base LaTeX distribution.
@@ -13,9 +13,9 @@
%% verbatim environments and commands and extensive documentation.
%%
\NeedsTeXFormat{LaTeX2e}
-\def\fileversion{4.0}
-\def\filedate{2021/11/19}
-\ProvidesPackage{fancyvrb}[2021/11/18 v4.0 verbatim text (tvz,hv)]
+\def\fileversion{4.1a}
+\def\filedate{2021/11/24}
+\ProvidesPackage{fancyvrb}[\filedate~ \fileversion ~verbatim text (tvz,hv)]
%\message{Style option: `fancyvrb' v\fileversion \space <\filedate> (tvz)}
\csname fancyvrb@loaded\endcsname
\let\fancyvrb@loaded\endinput
@@ -168,7 +168,9 @@
\def\KV@FV@firstline@default{%
\let\FancyVerbStartNum\z@
\let\FancyVerbStartString\relax}
+%
\def\FancyVerbStopNum{1}
+%
\define@key{FV}{lastline}{%
\afterassignment\FV@ParseStop\@tempcnta=0#1\relax\@nil{#1}}
\def\FV@ParseStop#1\relax\@nil#2{%
@@ -178,10 +180,16 @@
\else
\edef\FancyVerbStopString{#2}%
\fi}
+%\def\KV@FV@lastline@default{%
+% \let\FancyVerbStopNum\z@
+% \let\FancyVerbStopString\relax}
\def\KV@FV@lastline@default{%
- \let\FancyVerbStopNum\z@
- \let\FancyVerbStopString\relax}
-\fvset{firstline,lastline=\m@ne}
+ \let\FancyVerbStopNum\m@ne
+ \let\FancyVerbStopString\relax
+}
+\KV@FV@firstline@default
+\KV@FV@lastline@default
+\fvset{firstline,lastline}
\newcount\FV@CodeLineNo
\def\FV@PreProcessLine{%
\global\advance\FV@CodeLineNo\@ne
diff --git a/macros/latex/contrib/l3build/CHANGELOG.md b/macros/latex/contrib/l3build/CHANGELOG.md
index c6f67da4b2..5834851339 100644
--- a/macros/latex/contrib/l3build/CHANGELOG.md
+++ b/macros/latex/contrib/l3build/CHANGELOG.md
@@ -7,6 +7,8 @@ this project uses date-based 'snapshot' version identifiers.
## [Unreleased]
+## [2021-11-24]
+
## [2021-11-12]
### Changed
@@ -14,6 +16,8 @@ this project uses date-based 'snapshot' version identifiers.
### Fixed
- Allow config names ending with 'lua', as long as they don't end with '.lua'
+- All documentation files are build in a consistent environment with support
+ files visible.
## [2021-08-28]
@@ -517,7 +521,8 @@ this project uses date-based 'snapshot' version identifiers.
- Rationalise short option names: removed `-d`, `-E`, `-r`
- Target `cmdcheck`: specific to LaTeX kernel work
-[Unreleased]: https://github.com/latex3/l3build/compare/2021-11-12...HEAD
+[Unreleased]: https://github.com/latex3/l3build/compare/2021-11-24...HEAD
+[2021-11-24]: https://github.com/latex3/l3build/compare/2021-11-12...2021-11-24
[2021-11-12]: https://github.com/latex3/l3build/compare/2021-08-28...2021-11-12
[2021-08-28]: https://github.com/latex3/l3build/compare/2021-08-27...2021-08-28
[2021-08-27]: https://github.com/latex3/l3build/compare/2021-05-06...2021-08-27
diff --git a/macros/latex/contrib/l3build/README.md b/macros/latex/contrib/l3build/README.md
index f75e873dfd..de540162dd 100644
--- a/macros/latex/contrib/l3build/README.md
+++ b/macros/latex/contrib/l3build/README.md
@@ -1,7 +1,7 @@
l3build: a testing and building system for LaTeX
=================================================
-Release 2021-11-12
+Release 2021-11-24
Overview
--------
diff --git a/macros/latex/contrib/l3build/l3build-typesetting.lua b/macros/latex/contrib/l3build/l3build-typesetting.lua
index 4934c3f497..1d44a2bc08 100644
--- a/macros/latex/contrib/l3build/l3build-typesetting.lua
+++ b/macros/latex/contrib/l3build/l3build-typesetting.lua
@@ -174,7 +174,12 @@ end
local function docinit()
-- Set up
+ dep_install(typesetdeps)
+ unpack({sourcefiles, typesetsourcefiles}, {sourcefiledir, docfiledir})
cleandir(typesetdir)
+ for _,file in pairs(typesetfiles) do
+ cp(file, unpackdir, typesetdir)
+ end
for _,filetype in pairs(
{bibfiles, docfiles, typesetfiles, typesetdemofiles}
) do
@@ -188,8 +193,6 @@ local function docinit()
for _,file in pairs(typesetsuppfiles) do
cp(file, supportdir, typesetdir)
end
- dep_install(typesetdeps)
- unpack({sourcefiles, typesetsourcefiles}, {sourcefiledir, docfiledir})
-- Main loop for doc creation
local errorlevel = typeset_demo_tasks()
if errorlevel ~= 0 then
@@ -208,30 +211,28 @@ function doc(files)
local done = {}
for _,typesetfiles in ipairs({typesetdemofiles,typesetfiles}) do
for _,glob in pairs(typesetfiles) do
- for _,dir in ipairs({typesetdir,unpackdir}) do
- for _,p in ipairs(tree(dir,glob)) do
- local path,srcname = splitpath(p.cwd)
- local name = jobname(srcname)
- if not done[name] then
- local typeset = true
- -- Allow for command line selection of files
- if files and next(files) then
- typeset = false
- for _,file in pairs(files) do
- if name == file then
- typeset = true
- break
- end
+ for _,p in ipairs(tree(typesetdir,glob)) do
+ local path,srcname = splitpath(p.cwd)
+ local name = jobname(srcname)
+ if not done[name] then
+ local typeset = true
+ -- Allow for command line selection of files
+ if files and next(files) then
+ typeset = false
+ for _,file in pairs(files) do
+ if name == file then
+ typeset = true
+ break
end
end
- -- Now know if we should typeset this source
- if typeset then
- errorlevel = typesetpdf(srcname,path)
- if errorlevel ~= 0 then
- return errorlevel
- else
- done[name] = true
- end
+ end
+ -- Now know if we should typeset this source
+ if typeset then
+ errorlevel = typesetpdf(srcname,path)
+ if errorlevel ~= 0 then
+ return errorlevel
+ else
+ done[name] = true
end
end
end
diff --git a/macros/latex/contrib/l3build/l3build.1 b/macros/latex/contrib/l3build/l3build.1
index 3faa8f04b1..5cf404fdf0 100644
--- a/macros/latex/contrib/l3build/l3build.1
+++ b/macros/latex/contrib/l3build/l3build.1
@@ -1,4 +1,4 @@
-.TH l3build 1 "2021-11-12"
+.TH l3build 1 "2021-11-24"
.SH NAME
l3build \- Checking and building packages
.SH SYNOPSIS
diff --git a/macros/latex/contrib/l3build/l3build.dtx b/macros/latex/contrib/l3build/l3build.dtx
index b0d5aab879..88cb82e0d4 100644
--- a/macros/latex/contrib/l3build/l3build.dtx
+++ b/macros/latex/contrib/l3build/l3build.dtx
@@ -236,7 +236,7 @@
% }^^A
% }
%
-% \date{Released 2021-11-12}
+% \date{Released 2021-11-24}
%
% \maketitle
% \tableofcontents
diff --git a/macros/latex/contrib/l3build/l3build.lua b/macros/latex/contrib/l3build/l3build.lua
index b48aa306f7..993e5863a9 100755
--- a/macros/latex/contrib/l3build/l3build.lua
+++ b/macros/latex/contrib/l3build/l3build.lua
@@ -25,7 +25,7 @@ for those people who are interested.
--]]
-- Version information
-release_date = "2021-11-12"
+release_date = "2021-11-24"
-- File operations are aided by the LuaFileSystem module
local lfs = require("lfs")
diff --git a/macros/latex/contrib/l3build/l3build.pdf b/macros/latex/contrib/l3build/l3build.pdf
index 7c23434947..06ff54ce90 100644
--- a/macros/latex/contrib/l3build/l3build.pdf
+++ b/macros/latex/contrib/l3build/l3build.pdf
Binary files differ
diff --git a/macros/latex/contrib/snaptodo/README b/macros/latex/contrib/snaptodo/README
new file mode 100644
index 0000000000..8d990a8be3
--- /dev/null
+++ b/macros/latex/contrib/snaptodo/README
@@ -0,0 +1,22 @@
+
+# snaptodo
+
+https://github.com/Symbol1/snaptodo
+
+Hsin-Po Wang
+mailto:a.simple.people@gmail.com
+https://github.com/Symbol1/snaptodo
+
+This is snaptodo,
+an alternative to todonote
+that differs in the following ways
+
+* Depending on where you call `\todo`,
+ the note is on the left or right margin,
+ whichever is closer.
+* The notes bump each other
+ so they never overlap;
+ the lines never overlap either
+* Aesthetic and customizable style.
+
+License = https://www.latex-project.org/lppl/lppl-1-3c/
diff --git a/macros/latex/contrib/snaptodo/snaptodo.pdf b/macros/latex/contrib/snaptodo/snaptodo.pdf
new file mode 100644
index 0000000000..7115795b1b
--- /dev/null
+++ b/macros/latex/contrib/snaptodo/snaptodo.pdf
Binary files differ
diff --git a/macros/latex/contrib/snaptodo/snaptodo.sty b/macros/latex/contrib/snaptodo/snaptodo.sty
new file mode 100644
index 0000000000..13bc847374
--- /dev/null
+++ b/macros/latex/contrib/snaptodo/snaptodo.sty
@@ -0,0 +1,168 @@
+
+% # snaptodo
+%
+% Hsin-Po Wang
+% mailto:a.simple.people@gmail.com
+% https://www.symbol.codes
+%
+% This is snaptodo.sty,
+% an alternative to todonote.sty
+% that differs in the following ways
+%
+% * Depending on where you call `\todo`,
+% the note is on the left or right margin,
+% whichever is closer.
+% * The notes bump each other
+% so they never overlap;
+% the lines never overlap either
+% * Aesthetic and customizable style.
+%
+% License = https://www.latex-project.org/lppl/lppl-1-3c/
+
+
+\NeedsTeXFormat{LaTeX2e}[2021/06/01]
+
+\ProvidesPackage{snaptodo}[2021/11/22]
+
+\RequirePackage{tikzpagenodes}[2012/09/16]
+
+\ifx\todo\snaptodo@undefined
+\else
+ \PackageWarning{snaptodo}{%
+ Control sequence \protect\todo\space was defined.\MessageBreak
+ I am going to override it anyways.
+ }
+\fi
+
+\def\todo{%
+ \snaptodo@initialize
+ \global\let\todo\snaptodo@main
+ \todo
+}
+
+\def\snaptodo@initialize{%
+ \tikz[overlay]
+ \node(snaptodo@margin@left){}
+ node(snaptodo@margin@right){}
+ coordinate(snaptodo@baseline@left){}
+ coordinate(snaptodo@baseline@right){}
+ coordinate(snaptodo@descent@left){}
+ coordinate(snaptodo@descent@right){}
+ ;%
+}
+
+\def\snaptodo@main{%
+ \pgfutil@ifnextchar[
+ {\snaptodo@main@opt}
+ {\snaptodo@main@opt[]}%]
+}
+
+\def\snaptodo@main@opt[#1]#2{%
+ \tikz[remember picture,overlay]{
+ \snaptodoset{#1}
+ \snaptodo@remember@side
+ \snaptodo@typeset@margin@block{#2}
+ \snaptodo@dipict@call@chain
+ }%
+}
+
+\def\snaptodo@remember@side{
+ \pgfpointanchor{current page}{center}
+ \ifdim\pgf@x>\std@chainbias
+ \def\std@westeast{west}
+ \def\std@eastwest{east}
+ \def\std@leftright{left}
+ \def\std@rightleft{right}
+ \def\std@plusminus{+}
+ \else
+ \def\std@westeast{east}
+ \def\std@eastwest{west}
+ \def\std@leftright{right}
+ \def\std@rightleft{left}
+ \def\std@plusminus{-}
+ \fi
+}
+
+\def\snaptodo@typeset@margin@block#1{
+ \pgfpointanchor{current page text area}\std@westeast
+ \xdef\std@descent@xpt{\the\pgf@x}
+ \node(snaptodo@margin@\std@leftright)[
+ /snaptodo/margin@block,
+ /snaptodo/margin block/.try,
+ /utils/exec={
+ \let\tikz@transform=\snaptodo@margin@block@transform
+ }
+ ]{#1};
+}
+
+\def\snaptodo@margin@block@transform{
+ \pgftransformshift{\pgfpoint{\std@descent@xpt}0}
+ \pgftransformshift{\pgfpoint{-\std@plusminus\marginparsep}0}
+ \pgfpointanchor{snaptodo@baseline@\std@leftright}{center}
+ \ifdim\pgf@y<0pt\else
+ \pgfpointanchor{snaptodo@margin@\std@leftright}{south}
+ \pgftransformshift{\pgfpoint0{min(
+ \std@blockrise
+ ,
+ \pgf@y
+ -\ht\pgfnodeparttextbox
+ -\dp\pgfnodeparttextbox
+ -2*\pgfkeysvalueof{/pgf/inner ysep}
+ -\std@blocksep
+ )}}
+ \fi
+}
+
+\def\snaptodo@dipict@call@chain{
+ \pgfpointanchor{snaptodo@baseline@\std@leftright}{center}
+ \ifdim\pgf@y<0pt
+ \def\std@descent@y{0}
+ \else
+ \pgfpointanchor{snaptodo@descent@\std@leftright}{center}
+ \pgfmathsetmacro\std@descent@y{min(\pgf@y-\std@chainsep,0)}
+ \fi
+ \snaptodo@dipict@call@chain@drawer
+}
+
+\def\snaptodo@dipict@call@chain@drawer{
+ \draw[/snaptodo/call@chain,/snaptodo/call chain/.try]
+ (0,\std@chainsep)--
+ (0,0)coordinate(snaptodo@baseline@\std@leftright){}--
+ (0,\std@descent@y pt)coordinate(snaptodo@descent@\std@leftright){}--
+ (\std@descent@xpt,\std@descent@y pt)--
+ (snaptodo@margin@\std@leftright.south \std@eastwest)--
+ (snaptodo@margin@\std@leftright.south \std@westeast)
+ ;
+}
+
+\colorlet{snaptodo@chain}{yellow!50!black}
+\colorlet{snaptodo@block}{red!50!black}
+
+\def\snaptodoset{\pgfqkeys{/snaptodo}}
+
+\snaptodoset{
+ .unknown/.code={%
+ \let\snaptodo@key\pgfkeyscurrentname%
+ \pgfkeys{/pgf/\snaptodo@key/.try={#1}}%
+ },
+ block rise/.store in=\std@blockrise,
+ block rise=0pt,
+ block sep/.store in=\std@blocksep,
+ block sep=\baselineskip,
+ margin@block/.style={
+ above \std@leftright,
+ text width={\marginparwidth-2*\pgfkeysvalueof{/pgf/inner xsep}},
+ align=flush \std@leftright,
+ text=snaptodo@block,
+ },
+ chain bias/.store in=\std@chainbias,
+ chain bias=0pt,
+ chain sep/.store in=\std@chainsep,
+ chain sep=0.5ex,
+ call@chain/.style={
+ draw=snaptodo@chain,
+ blend mode=darken,
+ }
+}
+
+\endinput
diff --git a/macros/latex/contrib/snaptodo/snaptodo.tex b/macros/latex/contrib/snaptodo/snaptodo.tex
new file mode 100644
index 0000000000..65a3d7d3a6
--- /dev/null
+++ b/macros/latex/contrib/snaptodo/snaptodo.tex
@@ -0,0 +1,229 @@
+
+\documentclass{article}
+
+\def\todo{}
+\usepackage{snaptodo}
+
+\usepackage[pdfusetitle,urlbordercolor=red!50!black]{hyperref}
+
+\begin{document}
+
+\title{Snaptodo---A Snap-to-the-Correct-Side Todo\thanks{
+ Repository
+ \url{https://github.com/Symbol1/snaptodo}.
+}}
+
+\author{Hsin-Po Wang\thanks{
+ Email
+ \href{mailto:a.simple.people@gmail.com}{\ttfamily a.simple.people@gmail.com}.
+ Website
+ \url{https://www.symbol.codes}.}}
+
+\maketitle
+
+\begin{abstract}
+ Snaptodo package is an alternative to the todonote package
+ that differs in the following ways:
+ (A) Depending on where you call
+ {\ttfamily\color{red!50!black}\string\todo},
+ the note is put on the left or right margin,
+ whichever is closer.
+ (B) The notes bump each other down so they never overlap;
+ the lines never overlap either;
+ and they don't trigger the marginpar warning.
+ (C) Minimalistic, aesthetic, and customizable style.
+
+\end{abstract}
+
+\section{Installation}
+
+ Copy and paste
+ {\ttfamily\verb|snaptodo.sty|}
+ to your working directory.
+
+\section{Minimal Working Example}
+
+ \begin{verbatim}
+ \documentclass{article}
+ \usepackage{snaptodo}
+ \begin{document}
+ Your done
+ \todo{Your todo}
+ \end{document}
+ \end{verbatim}
+
+\section{Showcase of Examples}
+
+ Using snaptodo is as simple as calling
+ {\ttfamily\verb|\todo|}%
+ \todo{Calling \texttt{\string\todo}!}
+ and compile twice.%
+ \todo{Compile twice!}
+ If the calling point%
+ \todo{Calling point!}
+ is on the left of a page,%
+ \todo{Left of a page!}
+ the todo note---after compiling twice of
+ course---will appear to the left margin.%
+ \todo{On the left margin!}
+ And vice versa.%
+ \todo{Vice versa!}
+
+\section{Customization}
+
+ I defined
+ {\ttfamily\verb|\snaptodoset|}
+ that works like
+ {\ttfamily\verb|\tikzset|} and
+ {\ttfamily\verb|\pgfplotsset|}.
+ While you can access dedicated options by
+ {\ttfamily\verb|\snaptodoset{<some_option>}|},
+ you can also assess the exact same options by
+ {\ttfamily\verb|\pgfkeys{/snaptodo/<some_option>}|}.
+ For local changes, you can put them here
+ {\ttfamily\verb|\todo[<some_option>]{}|}.
+
+\subsection{Color}
+
+ The color of the broken line is
+ {\ttfamily\verb|snaptodo@chain|}.
+ The default color for that is
+ {\ttfamily\verb|red!50!black|}.
+ Saying
+ {\ttfamily\verb|\colorlet{snaptodo@chain}{green!50!white}|}
+ lets you to change this color globally. On the other hand,
+ for locally changing this color, one may prefer using
+ {\ttfamily\verb|\todo[call chain/.style=green!50!white]|}.%
+ \todo[call chain/.style=green!50!white]{New broken line color}
+
+ The color of the note text is
+ {\ttfamily\verb|snaptodo@block|}.
+ The default color for that is
+ {\ttfamily\verb|yellow!50!black|}.
+ Saying
+ {\ttfamily\verb|\colorlet{snaptodo@block}{blue!50!white}|}
+ lets you change this color. On the other hand,
+ for locally changing this color, one may prefer using
+ {\ttfamily\verb|\todo[margin block/.style=blue!50!white]|}.%
+ \todo[margin block/.style=blue!50!white]{New note text color}
+
+\subsection{Line style}
+
+ In order to use a thicker or thinner broken line,
+ recall the standard Ti\emph kZ option
+ {\ttfamily\verb|[thick]|},
+ {\ttfamily\verb|[ultra thin]|},
+ or
+ {\ttfamily\verb|[line width=???]|}.
+ In our case, simply put that option in the proper style
+ {\ttfamily\verb|\todo[call chain/.style={line width=???}]{}|}.%
+ \todo[call chain/.style={line width=2pt}]{Thicker broken line}
+
+ In order to use a special dash pattern,
+ recall the standard Ti\emph kZ option
+ {\ttfamily\verb|[dotted]|},
+ {\ttfamily\verb|[dashed]|},
+ or
+ {\ttfamily\verb|[dash pattern=???]|}.
+ In our case, simply put that option in the proper style
+ {\ttfamily\verb|\todo[call chain/.style={dash pattern=???}]{}|}.%
+ \todo[call chain/.style={dashed}]{Dashed broken line}
+
+\subsection{Sep and width}
+
+ The gap between two note blocks is stored in
+ {\ttfamily\verb|/snaptodo/block sep|}.
+ The default length is
+ {\ttfamily\verb|\baselineskip|}.
+ Use
+ {\ttfamily\verb|\snaptodoset{block sep=0pt}|}
+ for global setting and use
+ {\ttfamily\verb|\todo[block sep=0pt]{note}|}%
+ \todo[block sep=0pt]{2 blocks close.}
+ \todo[block sep=0pt]{..to each other}
+ for local setting this.
+
+ The gap between two horizontal lines is stored in
+ {\ttfamily\verb|/snaptodo/chain sep|}.
+ The default length is
+ {\ttfamily\verb|0.5ex|}.
+ To change, use
+ {\ttfamily\verb|\snaptodoset{chain sep=0pt}|}
+ for global setting and
+ {\ttfamily\verb|\todo[chain sep=0pt]{note}|}%
+ \todo[chain sep=0pt]{2 chains close.}
+ \todo[chain sep=0pt]{..to each other}
+ for local setting.
+
+ The width of the note block is
+ {\ttfamily\verb|\marginparwidth|}.
+ The width where the broken line has slope is
+ {\ttfamily\verb|\marginparsep|}.
+ These are the built-in dimensions.
+ (So modify them with care!)
+
+\subsection{Bias}
+
+ The tipping point between snapping to the left versus
+ to the right is the center of the page, by default.
+ You can change this by
+ {\ttfamily\verb|/snaptodo/chain bias=-99in|}.%
+ \todo[chain bias=-99in]{Forced to the left}
+ That way, all todo notes are forcedly
+ snapped to the left hand side. Or, by
+ \todo[chain bias=99in]{Forced to the right}%
+ {\ttfamily\verb|/snaptodo/call bias=99in|},
+ all todo notes are forcedly snapped to the right hand side.
+
+\subsection{Rise}
+
+ If your document is really busy, e.g., like
+ {\ttfamily\verb|stress_testing.tex|},
+ consider setting a positive
+ {\ttfamily\verb|/snaptodo/block rise|}.%
+ \todo[block rise=2em]{Rising}
+ \todo[block rise=2em]{to leave}
+ \todo[block rise=2em]{room.}
+ For instance,
+ {\ttfamily\verb|\todo[block rise=2em]{}|}.
+ That way, a note will rise by that amount
+ to leave more rooms for later notes.
+ (But if there will be overlay,
+ the notes automatically bump down.)
+
+
+\subsection{Alignment}
+
+ By
+ {\ttfamily\verb|/snaptodo/margin block/.style={align=???}|}
+ one can control the alignment of note text.
+ The default setting is
+ {\ttfamily\verb|align=flush \std@leftright|},
+ which flushes the text toward the page edges.
+ If
+ {\ttfamily\verb|align=flush \std@rightleft|},
+ is what you do,%
+ \makeatletter
+ \todo[margin block/.style={align=flush \std@rightleft}]
+ {flush toward text body}
+ \makeatother
+ the text will be flushed toward the main
+ text body. Don't forget that you need
+ {\ttfamily\verb|\makeatletter|}
+ and
+ {\ttfamily\verb|\makeatother|}
+ to handel control sequences with the at character.
+
+\subsection{Font}
+
+ Font size is controlled by
+ \todo[margin block/.style={font=\tiny}]{tiny}
+ \todo[margin block/.style={font=\Large}]{Large}
+ \todo[margin block/.style={font=\Huge}]{Huge}
+ {\ttfamily\verb|/snpatodo/margin block/.style={font=...}|}.
+ \todo[margin block/.style={font=\itshape}]{itshape}
+ \todo[margin block/.style={font=\sffamily}]{sffamily}
+ \todo[margin block/.style={font=\bfseries}]{bfseries}
+ So is font family.
+
+\end{document}
diff --git a/macros/latex/contrib/snaptodo/test/before_after.tex b/macros/latex/contrib/snaptodo/test/before_after.tex
new file mode 100644
index 0000000000..99552464e2
--- /dev/null
+++ b/macros/latex/contrib/snaptodo/test/before_after.tex
@@ -0,0 +1,39 @@
+
+\documentclass{article}
+
+\usepackage{snaptodo}
+
+\begin{document}
+
+\marginparsep=48pt
+\marginparwidth=72pt
+
+\section{Before todo notes}
+
+We the People of the United States, in Order to form a more perfect Union,
+establish Justice, insure domestic Tranquility, provide for the common defence,
+promote the general Welfare, and secure the Blessings of Liberty to ourselves
+and our Posterity, do ordain and establish this Constitution for the United
+States of America.
+
+\def\todoexample{%
+ \pgfmathtruncatemacro\wc{round(1+rnd*10)}%
+ \todo{%
+ \foreach\w in{1,...,\wc}{%
+ \pgfmathsetmacro\l{1+rnd*10}%
+ \rule{\l pt}{1ex}
+ }%
+ },
+}
+\catcode`\,=\active
+\let,=\todoexample
+
+\section{After todo notes}
+
+We the People of the United States, in Order to form a more perfect Union,
+establish Justice, insure domestic Tranquility, provide for the common defence,
+promote the general Welfare, and secure the Blessings of Liberty to ourselves
+and our Posterity, do ordain and establish this Constitution for the United
+States of America.
+
+\end{document}
diff --git a/macros/latex/contrib/snaptodo/test/circle_testing.tex b/macros/latex/contrib/snaptodo/test/circle_testing.tex
new file mode 100644
index 0000000000..f501a03cd1
--- /dev/null
+++ b/macros/latex/contrib/snaptodo/test/circle_testing.tex
@@ -0,0 +1,41 @@
+
+\documentclass{article}
+
+\usepackage[
+ papersize={4in,3in},
+ text={2in,2in},
+ marginparwidth=40pt,
+ marginparsep=20pt
+]{geometry}
+
+\usepackage{snaptodo}
+
+\begin{document}
+
+\def\nframe{120}
+\foreach\fr in{1,...,\nframe}{
+
+ \noindent\\[\dimexpr-1em-\baselineskip]
+ \todo{North West}
+ \hfill
+ \todo{North East}
+
+ \vskip0ptplus1fill
+ \pgfmathsetmacro\x{72*cos(\fr0/\nframe*36*3)}
+ \pgfmathsetmacro\y{72*sin(\fr0/\nframe*36*2)}
+ \vskip\y pt
+ \noindent
+ \hskip1in
+ \hskip\x pt%
+ \todo{Hobbit}
+ \vskip-\y pt
+ \vskip0ptplus1fill
+
+ \noindent
+ \todo{South West}
+ \hfill
+ \todo{South East}
+ \clearpage
+}
+
+\end{document}
diff --git a/macros/latex/contrib/snaptodo/test/minimal_testing.tex b/macros/latex/contrib/snaptodo/test/minimal_testing.tex
new file mode 100644
index 0000000000..428eaa1676
--- /dev/null
+++ b/macros/latex/contrib/snaptodo/test/minimal_testing.tex
@@ -0,0 +1,7 @@
+
+\documentclass{article}
+\usepackage{snaptodo}
+\begin{document}
+ Your done
+ \todo{Your todo}
+\end{document}
diff --git a/macros/latex/contrib/snaptodo/test/stress_testing.tex b/macros/latex/contrib/snaptodo/test/stress_testing.tex
new file mode 100644
index 0000000000..c2b5617fce
--- /dev/null
+++ b/macros/latex/contrib/snaptodo/test/stress_testing.tex
@@ -0,0 +1,491 @@
+
+\documentclass{article}
+
+\usepackage{snaptodo}
+
+\begin{document}
+
+\marginparsep=48pt
+\marginparwidth=72pt
+
+\def\todoexample{%
+ \pgfmathtruncatemacro\wc{round(1+rnd*10)}%
+ \todo{%
+ \foreach\w in{1,...,\wc}{%
+ \pgfmathsetmacro\l{1+rnd*10}%
+ \rule{\l pt}{1ex}
+ }%
+ },
+}
+\catcode`\,=\active
+\let,=\todoexample
+
+We the People of the United States, in Order to form a more perfect Union,
+establish Justice, insure domestic Tranquility, provide for the common defence,
+promote the general Welfare, and secure the Blessings of Liberty to ourselves
+and our Posterity, do ordain and establish this Constitution for the United
+States of America.
+
+Article. I. Section. 1. All legislative Powers herein granted shall be vested
+in a Congress of the United States, which shall consist of a Senate and House of
+Representatives.
+
+
+Section. 2. The House of Representatives shall be composed of Members chosen
+every second Year by the People of the several States, and the Electors in each
+State shall have the Qualifications requisite for Electors of the most numerous
+Branch of the State Legislature.
+
+No Person shall be a Representative who shall not have attained to the age of
+twenty five Years, and been seven Years a Citizen of the United States, and who
+shall not, when elected, be an Inhabitant of that State in which he shall be
+chosen.
+
+Representatives and direct Taxes shall be apportioned among the several States
+which may be included within this Union, according to their respective Numbers,
+which shall be determined by adding to the whole Number of free Persons,
+including those bound to Service for a Term of Years, and excluding Indians not
+taxed, three fifths of all other Persons. The actual Enumeration shall be made
+within three Years after the first Meeting of the Congress of the United States,
+and within every subsequent Term of ten Years, in such Manner as they shall by
+Law direct. The Number of Representatives shall not exceed one for every thirty
+Thousand, but each State shall have at Least one Representative; and until such
+enumeration shall be made, the State of New Hampshire shall be entitled to chuse
+three, Massachusetts eight, Rhode-Island and Providence Plantations one,
+Connecticut five, New-York six, New Jersey four, Pennsylvania eight, Delaware
+one, Maryland six, Virginia ten, North Carolina five, South Carolina five, and
+Georgia three.
+
+When vacancies happen in the Representation from any State, the Executive
+Authority thereof shall issue Writs of Election to fill such Vacancies.
+
+The House of Representatives shall chuse their Speaker and other Officers; and
+shall have the sole Power of Impeachment.
+
+
+Section. 3. The Senate of the United States shall be composed of two Senators
+from each State, chosen by the Legislature thereof, for six Years; and each
+Senator shall have one Vote.
+
+Immediately after they shall be assembled in Consequence of the first Election,
+they shall be divided as equally as may be into three Classes. The Seats of the
+Senators of the first Class shall be vacated at the Expiration of the second
+Year, of the second Class at the Expiration of the fourth Year, and of the third
+Class at the Expiration of the sixth Year, so that one third may be chosen every
+second Year; and if Vacancies happen by Resignation, or otherwise, during the
+Recess of the Legislature of any State, the Executive thereof may make temporary
+Appointments until the next Meeting of the Legislature, which shall then fill
+such Vacancies.
+
+No Person shall be a Senator who shall not have attained to the Age of thirty
+Years, and been nine Years a Citizen of the United States, and who shall not,
+when elected, be an Inhabitant of that State for which he shall be chosen.
+
+The Vice President of the United States shall be President of the Senate but
+shall have no Vote, unless they be equally divided.
+
+The Senate shall chuse their other Officers, and also a President pro tempore,
+in the Absence of the Vice President, or when he shall exercise the Office of
+President of the United States.
+
+The Senate shall have the sole Power to try all Impeachments. When sitting for
+that Purpose, they shall be on Oath or Affirmation. When the President of the
+United States is tried the Chief Justice shall preside: And no Person shall be
+convicted without the Concurrence of two thirds of the Members present.
+
+Judgment in Cases of Impeachment shall not extend further than to removal from
+Office, and disqualification to hold and enjoy any Office of honor, Trust or
+Profit under the United States: but the Party convicted shall nevertheless be
+liable and subject to Indictment, Trial, Judgment and Punishment, according to
+Law.
+
+
+Section. 4. The Times, Places and Manner of holding Elections for Senators and
+Representatives, shall be prescribed in each State by the Legislature thereof;
+but the Congress may at any time by Law make or alter such Regulations, except
+as to the Places of chusing Senators.
+
+The Congress shall assemble at least once in every Year, and such Meeting shall
+be on the first Monday in December, unless they shall by Law appoint a different
+Day.
+
+
+Section. 5. Each House shall be the Judge of the Elections, Returns and
+Qualifications of its own Members, and a Majority of each shall constitute a
+Quorum to do Business; but a smaller Number may adjourn from day to day, and may
+be authorized to compel the Attendance of absent Members, in such Manner, and
+under such Penalties as each House may provide.
+
+Each House may determine the Rules of its Proceedings, punish its Members for
+disorderly Behaviour, and, with the Concurrence of two thirds, expel a Member.
+
+Each House shall keep a Journal of its Proceedings, and from time to time
+publish the same, excepting such Parts as may in their Judgment require Secrecy;
+and the Yeas and Nays of the Members of either House on any question shall, at
+the Desire of one fifth of those Present, be entered on the Journal.
+
+Neither House, during the Session of Congress, shall, without the Consent of the
+other, adjourn for more than three days, nor to any other Place than that in
+which the two Houses shall be sitting.
+
+
+Section. 6. The Senators and Representatives shall receive a Compensation for
+their Services, to be ascertained by Law, and paid out of the Treasury of the
+United States. They shall in all Cases, except Treason, Felony and Breach of the
+Peace, be privileged from Arrest during their Attendance at the Session of their
+respective Houses, and in going to and returning from the same; and for any
+Speech or Debate in either House, they shall not be questioned in any other
+Place.
+
+No Senator or Representative shall, during the Time for which he was elected, be
+appointed to any civil Office under the Authority of the United States, which
+shall have been created, or the Emoluments whereof shall have been encreased
+during such time; and no Person holding any Office under the United States,
+shall be a Member of either House during his Continuance in Office.
+
+
+Section. 7. All Bills for raising Revenue shall originate in the House of
+Representatives; but the Senate may propose or concur with amendments as on
+other Bills.
+
+Every Bill which shall have passed the House of Representatives and the Senate,
+shall, before it become a law, be presented to the President of the United
+States: If he approve he shall sign it, but if not he shall return it, with his
+Objections to that House in which it shall have originated, who shall enter the
+Objections at large on their Journal, and proceed to reconsider it. If after
+such Reconsideration two thirds of that House shall agree to pass the Bill, it
+shall be sent, together with the Objections, to the other House, by which it
+shall likewise be reconsidered, and if approved by two thirds of that House, it
+shall become a Law. But in all such Cases the Votes of both Houses shall be
+determined by Yeas and Nays, and the Names of the Persons voting for and against
+the Bill shall be entered on the Journal of each House respectively. If any Bill
+shall not be returned by the President within ten Days (Sundays excepted) after
+it shall have been presented to him, the Same shall be a Law, in like Manner as
+if he had signed it, unless the Congress by their Adjournment prevent its
+Return, in which Case it shall not be a Law.
+
+Every Order, Resolution, or Vote to which the Concurrence of the Senate and
+House of Representatives may be necessary (except on a question of Adjournment)
+shall be presented to the President of the United States; and before the Same
+shall take Effect, shall be approved by him, or being disapproved by him, shall
+be repassed by two thirds of the Senate and House of Representatives, according
+to the Rules and Limitations prescribed in the Case of a Bill.
+
+
+Section. 8. The Congress shall have Power To lay and collect Taxes, Duties,
+Imposts and Excises, to pay the Debts and provide for the common Defence and
+general Welfare of the United States; but all Duties, Imposts and Excises shall
+be uniform throughout the United States;
+
+To borrow Money on the credit of the United States;
+
+To regulate Commerce with foreign Nations, and among the several States, and
+with the Indian Tribes;
+
+To establish an uniform Rule of Naturalization, and uniform Laws on the subject
+of Bankruptcies throughout the United States;
+
+To coin Money, regulate the Value thereof, and of foreign Coin, and fix the
+Standard of Weights and Measures;
+
+To provide for the Punishment of counterfeiting the Securities and current Coin
+of the United States;
+
+To establish Post Offices and post Roads;
+
+To promote the Progress of Science and useful Arts, by securing for limited
+Times to Authors and Inventors the exclusive Right to their respective Writings
+and Discoveries;
+
+To constitute Tribunals inferior to the supreme Court;
+
+To define and punish Piracies and Felonies committed on the high Seas, and
+Offences against the Law of Nations;
+
+To declare War, grant Letters of Marque and Reprisal, and make Rules concerning
+Captures on Land and Water;
+
+To raise and support Armies, but no Appropriation of Money to that Use shall be
+for a longer Term than two Years;
+
+To provide and maintain a Navy;
+
+To make Rules for the Government and Regulation of the land and naval Forces;
+
+To provide for calling forth the Militia to execute the Laws of the Union,
+suppress Insurrections and repel Invasions;
+
+To provide for organizing, arming, and disciplining, the Militia, and for
+governing such Part of them as may be employed in the Service of the United
+States, reserving to the States respectively, the Appointment of the Officers,
+and the Authority of training the Militia according to the discipline prescribed
+by Congress;
+
+To exercise exclusive Legislation in all Cases whatsoever, over such District
+(not exceeding ten Miles square) as may, by Cession of Particular States, and
+the Acceptance of Congress, become the Seat of the Government of the United
+States, and to exercise like Authority over all Places purchased by the Consent
+of the Legislature of the State in which the Same shall be, for the Erection of
+Forts, Magazines, Arsenals, dock-Yards and other needful Buildings;—And
+
+To make all Laws which shall be necessary and proper for carrying into Execution
+the foregoing Powers and all other Powers vested by this Constitution in the
+Government of the United States, or in any Department or Officer thereof.
+
+
+Section. 9. The Migration or Importation of such Persons as any of the States
+now existing shall think proper to admit, shall not be prohibited by the
+Congress prior to the Year one thousand eight hundred and eight, but a Tax or
+duty may be imposed on such Importation, not exceeding ten dollars for each
+Person.
+
+The Privilege of the Writ of Habeas Corpus shall not be suspended, unless when
+in Cases of Rebellion or Invasion the public Safety may require it.
+
+No Bill of Attainder or ex post facto Law shall be passed.
+
+No Capitation, or other direct, Tax shall be laid, unless in Proportion to the
+Census or Enumeration herein before directed to be taken.
+
+No Tax or Duty shall be laid on Articles exported from any State.
+
+No Preference shall be given by any Regulation of Commerce or Revenue to the
+Ports of one State over those of another: nor shall Vessels bound to, or from,
+one State, be obliged to enter, clear or pay Duties in another.
+
+No Money shall be drawn from the Treasury, but in Consequence of Appropriations
+made by Law; and a regular Statement and Account of the Receipts and
+Expenditures of all public Money shall be published from time to time.
+
+No Title of Nobility shall be granted by the United States: And no Person
+holding any Office of Profit or Trust under them, shall, without the Consent of
+the Congress, accept of any present, Emolument, Office, or Title, of any kind
+whatever, from any King, Prince or foreign State.
+
+
+Section. 10. No State shall enter into any Treaty, Alliance, or Confederation;
+grant Letters of Marque and Reprisal; coin Money; emit Bills of Credit; make any
+Thing but gold and silver Coin a Tender in Payment of Debts; pass any Bill of
+Attainder, ex post facto Law, or Law impairing the Obligation of Contracts, or
+grant any Title of Nobility.
+
+No State shall, without the Consent of the Congress, lay any Imposts or Duties
+on Imports or Exports, except what may be absolutely necessary for executing
+it's inspection Laws: and the net Produce of all Duties and Imposts, laid by any
+State on Imports or Exports, shall be for the Use of the Treasury of the United
+States; and all such Laws shall be subject to the Revision and Controul of the
+Congress.
+
+No State shall, without the Consent of Congress, lay any Duty of Tonnage, keep
+Troops, or Ships of War in time of Peace, enter into any Agreement or Compact
+with another State, or with a foreign Power, or engage in War, unless actually
+invaded, or in such imminent Danger as will not admit of delay.
+
+
+Article. II. Section. 1. The executive Power shall be vested in a President of
+the United States of America. He shall hold his Office during the Term of four
+Years, and, together with the Vice President, chosen for the same Term, be
+elected, as follows:
+
+Each State shall appoint, in such Manner as the Legislature thereof may direct,
+a Number of Electors, equal to the whole Number of Senators and Representatives
+to which the State may be entitled in the Congress: but no Senator or
+Representative, or Person holding an Office of Trust or Profit under the United
+States, shall be appointed an Elector.
+
+The Electors shall meet in their respective States, and vote by Ballot for two
+Persons, of whom one at least shall not be an Inhabitant of the same State with
+themselves. And they shall make a List of all the Persons voted for, and of the
+Number of Votes for each; which List they shall sign and certify, and transmit
+sealed to the Seat of the Government of the United States, directed to the
+President of the Senate. The President of the Senate shall, in the Presence of
+the Senate and House of Representatives, open all the Certificates, and the
+Votes shall then be counted. The Person having the greatest Number of Votes
+shall be the President, if such Number be a Majority of the whole Number of
+Electors appointed; and if there be more than one who have such Majority, and
+have an equal Number of Votes, then the House of Representatives shall
+immediately chuse by Ballot one of them for President; and if no Person have a
+Majority, then from the five highest on the List the said House shall in like
+Manner chuse the President. But in chusing the President, the Votes shall be
+taken by States, the Representation from each State having one Vote; a quorum
+for this Purpose shall consist of a Member or Members from two thirds of the
+States, and a Majority of all the States shall be necessary to a Choice. In
+every Case, after the Choice of the President, the Person having the greatest
+Number of Votes of the Electors shall be the Vice President. But if there should
+remain two or more who have equal Votes, the Senate shall chuse from them by
+Ballot the Vice President.
+
+The Congress may determine the Time of chusing the Electors, and the Day on
+which they shall give their Votes; which Day shall be the same throughout the
+United States.
+
+No Person except a natural born Citizen, or a Citizen of the United States, at
+the time of the Adoption of this Constitution, shall be eligible to the Office
+of President; neither shall any person be eligible to that Office who shall not
+have attained to the Age of thirty five Years, and been fourteen Years a
+Resident within the United States.
+
+In Case of the Removal of the President from Office, or of his Death,
+Resignation, or Inability to discharge the Powers and Duties of the said Office,
+the Same shall devolve on the Vice President, and the Congress may by Law
+provide for the Case of Removal, Death, Resignation or Inability, both of the
+President and Vice President, declaring what Officer shall then act as
+President, and such Officer shall act accordingly, until the Disability be
+removed, or a President shall be elected.
+
+The President shall, at stated Times, receive for his Services, a Compensation,
+which shall neither be encreased nor diminished during the Period for which he
+shall have been elected, and he shall not receive within that Period any other
+Emolument from the United States, or any of them.
+
+Before he enter on the Execution of his Office, he shall take the following Oath
+or Affirmation:—“I do solemnly swear (or affirm) that I will faithfully execute
+the Office of President of the United States, and will to the best of my
+Ability, preserve, protect and defend the Constitution of the United States.â€
+
+
+Section. 2. The President shall be Commander in Chief of the Army and Navy of
+the United States, and of the Militia of the several States, when called into
+the actual Service of the United States; he may require the Opinion, in writing,
+of the principal Officer in each of the executive Departments, upon any Subject
+relating to the Duties of their respective Offices, and he shall have Power to
+Grant Reprieves and Pardons for Offences against the United States, except in
+Cases of Impeachment.
+
+He shall have Power, by and with the Advice and Consent of the Senate, to make
+Treaties, provided two thirds of the Senators present concur; and he shall
+nominate, and by and with the Advice and Consent of the Senate, shall appoint
+Ambassadors, other public Ministers and Consuls, Judges of the supreme Court,
+and all other Officers of the United States, whose Appointments are not herein
+otherwise provided for, and which shall be established by Law: but the Congress
+may by Law vest the Appointment of such inferior Officers, as they think proper,
+in the President alone, in the Courts of Law, or in the Heads of Departments.
+
+The President shall have Power to fill up all Vacancies that may happen during
+the Recess of the Senate, by granting Commissions which shall expire at the End
+of their next Session.
+
+
+Section. 3. He shall from time to time give to the Congress Information of the
+State of the Union, and recommend to their Consideration such Measures as he
+shall judge necessary and expedient; he may, on extraordinary Occasions, convene
+both Houses, or either of them, and in Case of Disagreement between them, with
+Respect to the Time of Adjournment, he may adjourn them to such Time as he shall
+think proper; he shall receive Ambassadors and other public Ministers; he shall
+take Care that the Laws be faithfully executed, and shall Commission all the
+Officers of the United States.
+
+
+Section. 4. The President, Vice President and all Civil Officers of the United
+States, shall be removed from Office on Impeachment for and Conviction of,
+Treason, Bribery, or other high Crimes and Misdemeanors.
+
+
+Article. III. Section. 1. The judicial Power of the United States, shall be
+vested in one supreme Court, and in such inferior Courts as the Congress may
+from time to time ordain and establish. The Judges, both of the supreme and
+inferior Courts, shall hold their Offices during good Behaviour, and shall, at
+stated Times, receive for their Services, a Compensation, which shall not be
+diminished during their Continuance in Office.
+
+
+Section. 2. The judicial Power shall extend to all Cases, in Law and Equity,
+arising under this Constitution, the Laws of the United States, and Treaties
+made, or which shall be made, under their Authority;—to all Cases affecting
+Ambassadors, other public ministers and Consuls;—to all Cases of admiralty and
+maritime Jurisdiction;—to Controversies to which the United States shall be a
+Party;—to Controversies between two or more States;—between a State and Citizens
+of another State;—between Citizens of different States;—between Citizens of the
+same State claiming Lands under Grants of different States, and between a State,
+or the Citizens thereof, and foreign States, Citizens or Subjects.
+
+In all Cases affecting Ambassadors, other public Ministers and Consuls, and
+those in which a State shall be Party, the supreme Court shall have original
+Jurisdiction. In all the other Cases before mentioned, the supreme Court shall
+have appellate Jurisdiction, both as to Law and Fact, with such Exceptions, and
+under such Regulations as the Congress shall make.
+
+The Trial of all Crimes, except in Cases of Impeachment, shall be by Jury; and
+such Trial shall be held in the State where the said Crimes shall have been
+committed; but when not committed within any State, the Trial shall be at such
+Place or Places as the Congress may by Law have directed.
+
+
+Section. 3. Treason against the United States, shall consist only in levying
+War against them, or in adhering to their Enemies, giving them Aid and Comfort.
+No Person shall be convicted of Treason unless on the Testimony of two Witnesses
+to the same overt Act, or on Confession in open Court.
+
+The Congress shall have Power to declare the Punishment of Treason, but no
+Attainder of Treason shall work Corruption of Blood, or Forfeiture except during
+the Life of the Person attainted.
+
+
+Article. IV. Section. 1. Full Faith and Credit shall be given in each State to
+the public Acts, Records, and judicial Proceedings of every other State. And the
+Congress may by general Laws prescribe the Manner in which such Acts, Records
+and Proceedings shall be proved, and the Effect thereof.
+
+
+Section. 2. The Citizens of each State shall be entitled to all Privileges and
+Immunities of Citizens in the several States.
+
+A Person charged in any State with Treason, Felony, or other Crime, who shall
+flee from Justice, and be found in another State, shall on Demand of the
+executive Authority of the State from which he fled, be delivered up, to be
+removed to the State having Jurisdiction of the Crime.
+
+No Person held to Service or Labour in one State, under the Laws thereof,
+escaping into another, shall, in Consequence of any Law or Regulation therein,
+be discharged from such Service or Labour, but shall be delivered up on Claim of
+the Party to whom such Service or Labour may be due.
+
+
+Section. 3. New States may be admitted by the Congress into this Union; but no
+new State shall be formed or erected within the Jurisdiction of any other State;
+nor any State be formed by the Junction of two or more States, or Parts of
+States, without the Consent of the Legislatures of the States concerned as well
+as of the Congress.
+
+The Congress shall have Power to dispose of and make all needful Rules and
+Regulations respecting the Territory or other Property belonging to the United
+States; and nothing in this Constitution shall be so construed as to Prejudice
+any Claims of the United States, or of any particular State.
+
+
+Section. 4. The United States shall guarantee to every State in this Union a
+Republican Form of Government, and shall protect each of them against Invasion;
+and on Application of the Legislature, or of the Executive (when the Legislature
+cannot be convened) against domestic Violence.
+
+
+Article. V. The Congress, whenever two thirds of both Houses shall deem it
+necessary, shall propose Amendments to this Constitution, or, on the Application
+of the Legislatures of two thirds of the several States, shall call a Convention
+for proposing Amendments, which, in either Case, shall be valid to all Intents
+and Purposes, as Part of this Constitution, when ratified by the Legislatures of
+three fourths of the several States, or by Conventions in three fourths thereof,
+as the one or the other Mode of Ratification may be proposed by the Congress;
+Provided that no Amendment which may be made prior to the Year One thousand
+eight hundred and eight shall in any Manner affect the first and fourth Clauses
+in the Ninth Section of the first Article; and that no State, without its
+Consent, shall be deprived of its equal Suffrage in the Senate.
+
+
+Article. VI. All Debts contracted and Engagements entered into, before the
+Adoption of this Constitution, shall be as valid against the United States under
+this Constitution, as under the Confederation.
+
+This Constitution, and the Laws of the United States which shall be made in
+Pursuance thereof; and all Treaties made, or which shall be made, under the
+Authority of the United States, shall be the supreme Law of the Land; and the
+Judges in every State shall be bound thereby, any Thing in the Constitution or
+Laws of any state to the Contrary notwithstanding.
+
+The Senators and Representatives before mentioned, and the Members of the
+several State Legislatures, and all executive and judicial Officers, both of the
+United States and of the several States, shall be bound by Oath or Affirmation,
+to support this Constitution; but no religious Test shall ever be required as a
+Qualification to any Office or public Trust under the United States.
+
+\end{document}
diff --git a/macros/latex/contrib/zref-clever/CHANGELOG.md b/macros/latex/contrib/zref-clever/CHANGELOG.md
new file mode 100644
index 0000000000..dc8ce5a3eb
--- /dev/null
+++ b/macros/latex/contrib/zref-clever/CHANGELOG.md
@@ -0,0 +1,8 @@
+# Changelog
+
+## [Unreleased](https://github.com/gusbrs/zref-clever/compare/v0.1.0-alpha...HEAD)
+
+## [v0.1.0-alpha]
+
+### Added
+- Initial release.
diff --git a/macros/latex/contrib/zref-clever/DEPENDS.txt b/macros/latex/contrib/zref-clever/DEPENDS.txt
new file mode 100644
index 0000000000..4b47b74955
--- /dev/null
+++ b/macros/latex/contrib/zref-clever/DEPENDS.txt
@@ -0,0 +1,5 @@
+hard zref
+hard l3packages
+hard oberdiek
+soft hyperref
+soft zref-check
diff --git a/macros/latex/contrib/zref-clever/MANIFEST.md b/macros/latex/contrib/zref-clever/MANIFEST.md
new file mode 100644
index 0000000000..98f72887da
--- /dev/null
+++ b/macros/latex/contrib/zref-clever/MANIFEST.md
@@ -0,0 +1,350 @@
+# Manifest for zref-clever
+
+This file is a listing of all files considered to be part of this package.
+It is automatically generated with `texlua build.lua manifest`.
+
+
+## Repository manifest
+
+The following groups list the files included in the development repository of the package.
+Files listed with a ‘†’ marker are included in the TDS but not CTAN files, and files listed
+with ‘‡’ are included in both.
+
+### Source files
+
+These are source files for a number of purposes, including the `unpack` process which
+generates the installation files of the package. Additional files included here will also
+be installed for processing such as testing.
+
+* zref-clever.dtx ‡
+* zref-clever.ins ‡
+
+### Typeset documentation source files
+
+These files are typeset using LaTeX to produce the PDF documentation for the package.
+
+* zref-clever-code.tex ‡
+* zref-clever.tex ‡
+
+### Text files
+
+Plain text files included as documentation or metadata.
+
+* CHANGELOG.md ‡
+* MANIFEST.md ‡
+* README.md ‡
+* readme-ctan.md
+* DEPENDS.txt ‡
+
+### Derived files
+
+The files created by ‘unpacking’ the package sources. This typically includes
+`.sty` and `.cls` files created from DocStrip `.dtx` files.
+
+* zref-clever.sty †
+* zref-clever-english.dict †
+* zref-clever-french.dict †
+* zref-clever-german.dict †
+* zref-clever-portuguese.dict †
+* zref-clever-spanish.dict †
+
+### Typeset documents
+
+The output files (PDF, essentially) from typesetting the various source, demo,
+etc., package files.
+
+* zref-clever-code.pdf ‡
+* zref-clever.pdf ‡
+
+### Test files
+
+These files form the test suite for the package. `.lvt` or `.lte` files are the individual
+unit tests, and `.tlg` are the stored output for ensuring changes to the package produce
+the same output. These output files are sometimes shared and sometime specific for
+different engines (pdfTeX, XeTeX, LuaTeX, etc.).
+
+* zc-LanguageSetup01.lvt
+* zc-RefTypeSetup01.lvt
+* zc-class-article01.lvt
+* zc-class-book01.lvt
+* zc-class-memoir01.lvt
+* zc-class-report01.lvt
+* zc-class-scrartcl01.lvt
+* zc-class-scrbook01.lvt
+* zc-class-scrreprt01.lvt
+* zc-compat-amsmath01.lvt
+* zc-compat-appendices01.lvt
+* zc-compat-appendix01.lvt
+* zc-compat-breqn01.lvt
+* zc-compat-enumitem01.lvt
+* zc-compat-koma-script01.lvt
+* zc-compat-listings01.lvt
+* zc-compat-memoir01.lvt
+* zc-compat-subcaption01.lvt
+* zc-compat-subfig01.lvt
+* zc-dictionaries01.lvt
+* zc-dictionaries02.lvt
+* zc-howto-amsmath01.lvt
+* zc-howto-enumitem01.lvt
+* zc-howto-listings01.lvt
+* zc-howto-newfloat01.lvt
+* zc-howto-newfloat02.lvt
+* zc-howto-newfloat03.lvt
+* zc-howto-newfloat04.lvt
+* zc-howto-newfloat05.lvt
+* zc-howto-newtheorem01.lvt
+* zc-howto-newtheorem02.lvt
+* zc-howto-newtheorem03.lvt
+* zc-howto-newtheorem04.lvt
+* zc-howto-zref-xr01.lvt
+* zc-label-options01.lvt
+* zc-languages01.lvt
+* zc-opt-check01.lvt
+* zc-opt-d01.lvt
+* zc-opt-g01.lvt
+* zc-opt-hyperref01.lvt
+* zc-opt-hyperref02.lvt
+* zc-opt-hyperref03.lvt
+* zc-opt-hyperref04.lvt
+* zc-opt-hyperref05.lvt
+* zc-opt-lang01.lvt
+* zc-opt-lang02.lvt
+* zc-opt-lang03.lvt
+* zc-opt-lang04.lvt
+* zc-opt-lang05.lvt
+* zc-opt-lang06.lvt
+* zc-opt-nocompat01.lvt
+* zc-opt-nocompat02.lvt
+* zc-opt-nocompat03.lvt
+* zc-opt-ref01.lvt
+* zc-opt-ref02.lvt
+* zc-opt-titleref01.lvt
+* zc-precedence-rules01.lvt
+* zc-sort01.lvt
+* zc-typeset01.lvt
+* zc-workaround-breqn01.lvt
+* zc-zcref-options01.lvt
+* zc-LanguageSetup01.luatex.tlg
+* zc-LanguageSetup01.tlg
+* zc-LanguageSetup01.xetex.tlg
+* zc-RefTypeSetup01.luatex.tlg
+* zc-RefTypeSetup01.tlg
+* zc-RefTypeSetup01.xetex.tlg
+* zc-class-article01.luatex.tlg
+* zc-class-article01.tlg
+* zc-class-article01.xetex.tlg
+* zc-class-book01.luatex.tlg
+* zc-class-book01.tlg
+* zc-class-book01.xetex.tlg
+* zc-class-memoir01.luatex.tlg
+* zc-class-memoir01.tlg
+* zc-class-memoir01.xetex.tlg
+* zc-class-report01.luatex.tlg
+* zc-class-report01.tlg
+* zc-class-report01.xetex.tlg
+* zc-class-scrartcl01.luatex.tlg
+* zc-class-scrartcl01.tlg
+* zc-class-scrartcl01.xetex.tlg
+* zc-class-scrbook01.luatex.tlg
+* zc-class-scrbook01.tlg
+* zc-class-scrbook01.xetex.tlg
+* zc-class-scrreprt01.luatex.tlg
+* zc-class-scrreprt01.tlg
+* zc-class-scrreprt01.xetex.tlg
+* zc-compat-amsmath01.luatex.tlg
+* zc-compat-amsmath01.tlg
+* zc-compat-amsmath01.xetex.tlg
+* zc-compat-appendices01.luatex.tlg
+* zc-compat-appendices01.tlg
+* zc-compat-appendices01.xetex.tlg
+* zc-compat-appendix01.luatex.tlg
+* zc-compat-appendix01.tlg
+* zc-compat-appendix01.xetex.tlg
+* zc-compat-breqn01.luatex.tlg
+* zc-compat-breqn01.tlg
+* zc-compat-breqn01.xetex.tlg
+* zc-compat-enumitem01.luatex.tlg
+* zc-compat-enumitem01.tlg
+* zc-compat-enumitem01.xetex.tlg
+* zc-compat-koma-script01.luatex.tlg
+* zc-compat-koma-script01.tlg
+* zc-compat-koma-script01.xetex.tlg
+* zc-compat-listings01.luatex.tlg
+* zc-compat-listings01.tlg
+* zc-compat-listings01.xetex.tlg
+* zc-compat-memoir01.luatex.tlg
+* zc-compat-memoir01.tlg
+* zc-compat-memoir01.xetex.tlg
+* zc-compat-subcaption01.luatex.tlg
+* zc-compat-subcaption01.tlg
+* zc-compat-subcaption01.xetex.tlg
+* zc-compat-subfig01.luatex.tlg
+* zc-compat-subfig01.tlg
+* zc-compat-subfig01.xetex.tlg
+* zc-dictionaries01.tlg
+* zc-dictionaries02.luatex.tlg
+* zc-dictionaries02.tlg
+* zc-dictionaries02.xetex.tlg
+* zc-howto-amsmath01.luatex.tlg
+* zc-howto-amsmath01.tlg
+* zc-howto-amsmath01.xetex.tlg
+* zc-howto-enumitem01.luatex.tlg
+* zc-howto-enumitem01.tlg
+* zc-howto-enumitem01.xetex.tlg
+* zc-howto-listings01.luatex.tlg
+* zc-howto-listings01.tlg
+* zc-howto-listings01.xetex.tlg
+* zc-howto-newfloat01.luatex.tlg
+* zc-howto-newfloat01.tlg
+* zc-howto-newfloat01.xetex.tlg
+* zc-howto-newfloat02.luatex.tlg
+* zc-howto-newfloat02.tlg
+* zc-howto-newfloat02.xetex.tlg
+* zc-howto-newfloat03.luatex.tlg
+* zc-howto-newfloat03.tlg
+* zc-howto-newfloat03.xetex.tlg
+* zc-howto-newfloat04.luatex.tlg
+* zc-howto-newfloat04.tlg
+* zc-howto-newfloat04.xetex.tlg
+* zc-howto-newfloat05.luatex.tlg
+* zc-howto-newfloat05.tlg
+* zc-howto-newfloat05.xetex.tlg
+* zc-howto-newtheorem01.luatex.tlg
+* zc-howto-newtheorem01.tlg
+* zc-howto-newtheorem01.xetex.tlg
+* zc-howto-newtheorem02.luatex.tlg
+* zc-howto-newtheorem02.tlg
+* zc-howto-newtheorem02.xetex.tlg
+* zc-howto-newtheorem03.luatex.tlg
+* zc-howto-newtheorem03.tlg
+* zc-howto-newtheorem03.xetex.tlg
+* zc-howto-newtheorem04.luatex.tlg
+* zc-howto-newtheorem04.tlg
+* zc-howto-newtheorem04.xetex.tlg
+* zc-howto-zref-xr01.luatex.tlg
+* zc-howto-zref-xr01.tlg
+* zc-howto-zref-xr01.xetex.tlg
+* zc-label-options01.luatex.tlg
+* zc-label-options01.tlg
+* zc-languages01.tlg
+* zc-opt-check01.luatex.tlg
+* zc-opt-check01.tlg
+* zc-opt-d01.tlg
+* zc-opt-g01.tlg
+* zc-opt-hyperref01.luatex.tlg
+* zc-opt-hyperref01.tlg
+* zc-opt-hyperref01.xetex.tlg
+* zc-opt-hyperref02.luatex.tlg
+* zc-opt-hyperref02.tlg
+* zc-opt-hyperref02.xetex.tlg
+* zc-opt-hyperref03.luatex.tlg
+* zc-opt-hyperref03.tlg
+* zc-opt-hyperref03.xetex.tlg
+* zc-opt-hyperref04.luatex.tlg
+* zc-opt-hyperref04.tlg
+* zc-opt-hyperref04.xetex.tlg
+* zc-opt-hyperref05.luatex.tlg
+* zc-opt-hyperref05.tlg
+* zc-opt-hyperref05.xetex.tlg
+* zc-opt-lang01.luatex.tlg
+* zc-opt-lang01.tlg
+* zc-opt-lang01.xetex.tlg
+* zc-opt-lang02.luatex.tlg
+* zc-opt-lang02.tlg
+* zc-opt-lang02.xetex.tlg
+* zc-opt-lang03.luatex.tlg
+* zc-opt-lang03.tlg
+* zc-opt-lang03.xetex.tlg
+* zc-opt-lang04.luatex.tlg
+* zc-opt-lang04.tlg
+* zc-opt-lang04.xetex.tlg
+* zc-opt-lang05.luatex.tlg
+* zc-opt-lang05.tlg
+* zc-opt-lang05.xetex.tlg
+* zc-opt-lang06.luatex.tlg
+* zc-opt-lang06.tlg
+* zc-opt-lang06.xetex.tlg
+* zc-opt-nocompat01.luatex.tlg
+* zc-opt-nocompat01.tlg
+* zc-opt-nocompat01.xetex.tlg
+* zc-opt-nocompat02.luatex.tlg
+* zc-opt-nocompat02.tlg
+* zc-opt-nocompat02.xetex.tlg
+* zc-opt-nocompat03.luatex.tlg
+* zc-opt-nocompat03.tlg
+* zc-opt-nocompat03.xetex.tlg
+* zc-opt-ref01.tlg
+* zc-opt-ref02.luatex.tlg
+* zc-opt-ref02.tlg
+* zc-opt-ref02.xetex.tlg
+* zc-opt-titleref01.luatex.tlg
+* zc-opt-titleref01.tlg
+* zc-opt-titleref01.xetex.tlg
+* zc-precedence-rules01.luatex.tlg
+* zc-precedence-rules01.tlg
+* zc-precedence-rules01.xetex.tlg
+* zc-sort01.tlg
+* zc-typeset01.luatex.tlg
+* zc-typeset01.tlg
+* zc-typeset01.xetex.tlg
+* zc-workaround-breqn01.luatex.tlg
+* zc-workaround-breqn01.tlg
+* zc-workaround-breqn01.xetex.tlg
+* zc-zcref-options01.luatex.tlg
+* zc-zcref-options01.tlg
+* zc-zcref-options01.xetex.tlg
+
+
+## TDS manifest
+
+The following groups list the files included in the TeX Directory Structure used to install
+the package into a TeX distribution.
+
+### Source files (TDS)
+
+All files included in the `zref-clever/source` directory.
+
+* zref-clever.dtx
+* zref-clever.ins
+
+### TeX files (TDS)
+
+All files included in the `zref-clever/tex` directory.
+
+* zref-clever-english.dict
+* zref-clever-french.dict
+* zref-clever-german.dict
+* zref-clever-portuguese.dict
+* zref-clever-spanish.dict
+* zref-clever.sty
+
+### Doc files (TDS)
+
+All files included in the `zref-clever/doc` directory.
+
+* CHANGELOG.md
+* DEPENDS.txt
+* MANIFEST.md
+* README.md
+* zref-clever-code.pdf
+* zref-clever-code.tex
+* zref-clever.pdf
+* zref-clever.tex
+
+
+## CTAN manifest
+
+The following group lists the files included in the CTAN package.
+
+### CTAN files
+
+* CHANGELOG.md
+* DEPENDS.txt
+* MANIFEST.md
+* README.md
+* zref-clever-code.pdf
+* zref-clever-code.tex
+* zref-clever.dtx
+* zref-clever.ins
+* zref-clever.pdf
+* zref-clever.tex
diff --git a/macros/latex/contrib/zref-clever/README.md b/macros/latex/contrib/zref-clever/README.md
new file mode 100644
index 0000000000..b260c87ec0
--- /dev/null
+++ b/macros/latex/contrib/zref-clever/README.md
@@ -0,0 +1,22 @@
+# zref-clever
+
+**Clever LaTeX cross-references based on zref**
+
+Author: Gustavo Barros
+Maintainer: Gustavo Barros
+
+`zref-clever` provides an user interface for making LaTeX cross-references
+which automates some of their typical features, thus easing their input in the
+document and improving the consistency of typeset results. A reference made
+with `\zcref` includes a "name" according to its "type" and lists of multiple
+labels can be automatically sorted and compressed into ranges when due. The
+reference format is highly and easily customizable, both globally and locally.
+`zref-clever` is based on `zref`'s extensible referencing system.
+
+License: LPPL Version 1.3c
+
+Repository: https://github.com/gusbrs/zref-clever
+
+Bug tracker: https://github.com/gusbrs/zref-clever/issues
+
+CTAN: https://ctan.org/pkg/zref-clever
diff --git a/macros/latex/contrib/zref-clever/zref-clever-code.pdf b/macros/latex/contrib/zref-clever/zref-clever-code.pdf
new file mode 100644
index 0000000000..b8105bc9e2
--- /dev/null
+++ b/macros/latex/contrib/zref-clever/zref-clever-code.pdf
Binary files differ
diff --git a/macros/latex/contrib/zref-clever/zref-clever-code.tex b/macros/latex/contrib/zref-clever/zref-clever-code.tex
new file mode 100644
index 0000000000..a258484ccc
--- /dev/null
+++ b/macros/latex/contrib/zref-clever/zref-clever-code.tex
@@ -0,0 +1,53 @@
+% \iffalse meta-comment
+%
+% File: zref-clever-code.tex
+%
+% This file is part of the LaTeX package "zref-clever".
+%
+% Copyright (C) 2021 Gustavo Barros
+%
+% It may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License (LPPL), either version 1.3c of this
+% license or (at your option) any later version. The latest version
+% of this license is in the file:
+%
+% https://www.latex-project.org/lppl.txt
+%
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+%
+% This work is "maintained" (as per LPPL maintenance status) by
+% Gustavo Barros.
+%
+% This work consists of the files zref-clever.dtx,
+% zref-clever.ins,
+% zref-clever.tex,
+% zref-clever-code.tex,
+% and the derived files listed in MANIFEST.md.
+%
+% The released version of this package is available from CTAN.
+%
+% -----------------------------------------------------------------------
+%
+% The development version of the package can be found at
+%
+% https://github.com/gusbrs/zref-clever
+%
+% for those people who are interested.
+%
+% -----------------------------------------------------------------------
+%
+% \fi
+
+\documentclass{l3doc}
+
+% Have \GetFileInfo pick up date and version data and used in the
+% documentation.
+\usepackage[cap,nameinlink=false,check,titleref]{zref-clever}
+
+\begin{document}
+
+\DocInput{zref-clever.dtx}
+
+\end{document}
diff --git a/macros/latex/contrib/zref-clever/zref-clever.dtx b/macros/latex/contrib/zref-clever/zref-clever.dtx
new file mode 100644
index 0000000000..024aa50a99
--- /dev/null
+++ b/macros/latex/contrib/zref-clever/zref-clever.dtx
@@ -0,0 +1,7161 @@
+% \iffalse meta-comment
+%
+% File: zref-clever.dtx
+%
+% This file is part of the LaTeX package "zref-clever".
+%
+% Copyright (C) 2021 Gustavo Barros
+%
+% It may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License (LPPL), either version 1.3c of this
+% license or (at your option) any later version. The latest version
+% of this license is in the file:
+%
+% https://www.latex-project.org/lppl.txt
+%
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+%
+% This work is "maintained" (as per LPPL maintenance status) by
+% Gustavo Barros.
+%
+% This work consists of the files zref-clever.dtx,
+% zref-clever.ins,
+% zref-clever.tex,
+% zref-clever-code.tex,
+% and the derived files listed in MANIFEST.md.
+%
+% The released version of this package is available from CTAN.
+%
+% -----------------------------------------------------------------------
+%
+% The development version of the package can be found at
+%
+% https://github.com/gusbrs/zref-clever
+%
+% for those people who are interested.
+%
+% -----------------------------------------------------------------------
+%
+% \fi
+%
+% \iffalse
+%<*driver>
+\documentclass{l3doc}
+
+% Have \GetFileInfo pick up date and version data and used in the
+% documentation.
+\usepackage[cap,nameinlink=false,check,titleref]{zref-clever}
+
+\begin{document}
+
+\DocInput{zref-clever.dtx}
+
+\end{document}
+%</driver>
+% \fi
+%
+% \DoNotIndex{\\,\{,\}}
+% \DoNotIndex{\c@,\cl@,\c@enumN,\p@}
+% \DoNotIndex{\the}
+%
+%
+% \NewDocumentCommand\opt{m}{\texttt{#1}}
+%
+% \pdfstringdefDisableCommands{%
+% \def\opt#1{#1}
+% }
+%
+% ^^A Have the Index at 'section' level rather than 'part'. Otherwise it is
+% ^^A just the same definition from 'l3doc.cls'.
+% \IndexPrologue{%
+% \section*{Index}
+% \markboth{Index}{Index}
+% \addcontentsline{toc}{section}{Index}
+% The italic numbers denote the pages where the corresponding entry is
+% described, numbers underlined point to the definition, all others indicate
+% the places where it is used.%
+% }
+%
+%
+% \GetFileInfo{zref-clever.sty}
+%
+% \title{%
+% The \pkg{zref-clever} package implementation%
+% \thanks{This file describes \fileversion, released \filedate.}%
+% }
+%
+% \author{%
+% Gustavo Barros%
+% \thanks{\url{https://github.com/gusbrs/zref-clever}}%
+% }
+%
+% \date{\filedate}
+%
+% \maketitle
+%
+% \tableofcontents
+%
+%
+% \section{Initial setup}
+%
+% Start the \pkg{DocStrip} guards.
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% Identify the internal prefix (\LaTeX3 \pkg{DocStrip} convention).
+% \begin{macrocode}
+%<@@=zrefclever>
+% \end{macrocode}
+%
+% Taking a stance on backward compatibility of the package. During initial
+% development, we have used freely recent features of the kernel (albeit
+% refraining from \pkg{l3candidates}, even though I'd have loved to have used
+% \cs{bool_case_true:}\dots{}). We presume \pkg{xparse} (which made to the
+% kernel in the 2020-10-01 release), and \pkg{expl3} as well (which made to
+% the kernel in the 2020-02-02 release). We also just use UTF-8 for the
+% dictionaries (which became the default input encoding in the 2018-04-01
+% release). Finally, a couple of changes came with the 2021-11-15 kernel
+% release, which are important here. First, a fix was made to the new hook
+% management system (\pkg{ltcmdhooks}), with implications to the hook we add
+% to \cs{appendix} (see \url{https://tex.stackexchange.com/q/617905} and
+% \url{https://github.com/latex3/latex2e/pull/699}, thanks Phelype Oleinik).
+% Second, the support for \cs{@currentcounter} has been improved, including
+% \cs{footnote} and \pkg{amsmath} (see
+% \url{https://github.com/latex3/latex2e/issues/687}, thanks Frank Mittelbach
+% and Ulrike Fischer). Hence, since we would not be able to go much backwards
+% without special handling anyway, we make the cut at the 2021-11-15 kernel
+% release.
+%
+% \begin{macrocode}
+\providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion}
+\IfFormatAtLeastTF{2021-11-15}
+ {}
+ {%
+ \PackageError{zref-clever}{LaTeX kernel too old}
+ {%
+ 'zref-clever' requires a LaTeX kernel 2021-11-15 or newer.%
+ \MessageBreak Loading will abort!%
+ }%
+ \endinput
+ }%
+% \end{macrocode}
+%
+%
+% Identify the package.
+% \begin{macrocode}
+\ProvidesExplPackage {zref-clever} {2021-11-24} {0.1.0-alpha}
+ {Clever LaTeX cross-references based on zref}
+% \end{macrocode}
+%
+%
+% \section{Dependencies}
+%
+% Required packages. Besides these, \pkg{zref-hyperref}, \pkg{zref-titleref},
+% and \pkg{zref-check} may also be loaded depending on user options.
+%
+% \begin{macrocode}
+\RequirePackage { zref-base }
+\RequirePackage { zref-user }
+\RequirePackage { zref-abspage }
+\RequirePackage { l3keys2e }
+\RequirePackage { ifdraft }
+% \end{macrocode}
+%
+%
+% \section{\pkg{zref} setup}
+%
+% For the purposes of the package, we need to store some information with the
+% labels, some of it standard, some of it not so much. So, we have to setup
+% \pkg{zref} to do so.
+%
+% Some basic properties are handled by \pkg{zref} itself, or some of its
+% modules. The \texttt{default} and \texttt{page} properties are provided by
+% \pkg{zref-base}, while \pkg{zref-abspage} provides the \texttt{abspage}
+% property which gives us a safe and easy way to sort labels for page
+% references.
+%
+% The \texttt{counter} property, in most cases, will be just the kernel's
+% \cs{@currentcounter}, set by \cs{refstepcounter}. However, not everywhere
+% is it assured that \cs{@currentcounter} gets updated as it should, so we
+% need to have some means to manually tell \pkg{zref-clever} what the current
+% counter actually is. This is done with the \opt{currentcounter} option, and
+% stored in \cs{l_@@_current_counter_tl}, whose default is
+% \cs{@currentcounter}.
+%
+% \begin{macrocode}
+\zref@newprop { zc@counter } { \l_@@_current_counter_tl }
+\zref@addprop \ZREF@mainlist { zc@counter }
+% \end{macrocode}
+%
+% The reference itself, stored by \pkg{zref-base} in the \texttt{default}
+% property, is somewhat a disputed real estate. In particular, the use of
+% \cs{labelformat} (previously from \pkg{varioref}, now in the kernel) will
+% include there the reference ``prefix'' and complicate the job we are trying
+% to do here. Hence, we isolate \cs[no-index]{the}\meta{counter} and store it
+% ``clean'' in \texttt{thecounter} for reserved use. Since
+% \cs{@currentlabel}, which populates the \texttt{default} property, is
+% \emph{more reliable} than \cs{@currentcounter}, \texttt{thecounter} is meant
+% to be kept as an \emph{option} (\opt{ref} option), in case there's need to
+% use \pkg{zref-clever} together with \cs{labelformat}. Based on the
+% definition of \cs{@currentlabel} done inside \cs{refstepcounter} in `texdoc
+% source2e', section `ltxref.dtx'. We just drop the \cs[no-index]{p@...}
+% prefix.
+%
+% \begin{macrocode}
+\zref@newprop { thecounter }
+ {
+ \cs_if_exist:cTF { c@ \l_@@_current_counter_tl }
+ { \use:c { the \l_@@_current_counter_tl } }
+ {
+ \cs_if_exist:cT { c@ \@currentcounter }
+ { \use:c { the \@currentcounter } }
+ }
+ }
+\zref@addprop \ZREF@mainlist { thecounter }
+% \end{macrocode}
+%
+%
+% Much of the work of \pkg{zref-clever} relies on the association between a
+% label's ``counter'' and its ``type'' (see the User manual section on
+% ``Reference types''). Superficially examined, one might think this relation
+% could just be stored in a global property list, rather than in the label
+% itself. However, there are cases in which we want to distinguish different
+% types for the same counter, depending on the document context. Hence, we
+% need to store the ``type'' of the ``counter'' for each ``label''. In
+% setting this, the presumption is that the label's type has the same name as
+% its counter, unless it is specified otherwise by the \opt{countertype}
+% option, as stored in \cs{l_@@_counter_type_prop}.
+%
+% \begin{macrocode}
+\zref@newprop { zc@type }
+ {
+ \exp_args:NNe \prop_if_in:NnTF \l_@@_counter_type_prop
+ \l_@@_current_counter_tl
+ {
+ \exp_args:NNe \prop_item:Nn \l_@@_counter_type_prop
+ { \l_@@_current_counter_tl }
+ }
+ { \l_@@_current_counter_tl }
+ }
+\zref@addprop \ZREF@mainlist { zc@type }
+% \end{macrocode}
+%
+%
+% Since the \texttt{default}/\texttt{thecounter} and \texttt{page} properties
+% store the ``\emph{printed} representation'' of their respective counters,
+% for sorting and compressing purposes, we are also interested in their
+% numeric values. So we store them in \texttt{zc@cntval} and
+% \texttt{zc@pgval}. For this, we use \cs[no-index]{c@}\meta{counter}, which
+% contains the counter's numerical value (see `texdoc source2e', section
+% `ltcounts.dtx').
+% \begin{macrocode}
+\zref@newprop { zc@cntval } [0]
+ {
+ \cs_if_exist:cTF { c@ \l_@@_current_counter_tl }
+ { \int_use:c { c@ \l_@@_current_counter_tl } }
+ {
+ \cs_if_exist:cT { c@ \@currentcounter }
+ { \int_use:c { c@ \@currentcounter } }
+ }
+ }
+\zref@addprop \ZREF@mainlist { zc@cntval }
+\zref@newprop* { zc@pgval } [0] { \int_use:c { c@page } }
+\zref@addprop \ZREF@mainlist { zc@pgval }
+% \end{macrocode}
+%
+%
+% However, since many counters (may) get reset along the document, we require
+% more than just their numeric values. We need to know the reset chain of a
+% given counter, in order to sort and compress a group of references. Also
+% here, the ``printed representation'' is not enough, not only because it is
+% easier to work with the numeric values but, given we occasionally group
+% multiple counters within a single type, sorting this group requires to know
+% the actual counter reset chain.
+%
+% Furthermore, even if it is true that most of the definitions of counters,
+% and hence of their reset behavior, is likely to be defined in the preamble,
+% this is not necessarily true. Users can create counters, newtheorems
+% mid-document, and alter their reset behavior along the way. Was that not
+% the case, we could just store the desired information at
+% \texttt{begindocument} in a variable and retrieve it when needed. But since
+% it is, we need to store the information with the label, with the values as
+% current when the label is set.
+%
+% Though counters can be reset at any time, and in different ways at that, the
+% most important use case is the automatic resetting of counters when some
+% other counter is stepped, as performed by the standard mechanisms of the
+% kernel (optional argument of \cs{newcounter}, \cs{@addtoreset},
+% \cs{counterwithin}, and related infrastructure). The canonical optional
+% argument of \cs{newcounter} establishes that the counter being created (the
+% mandatory argument) gets reset every time the ``enclosing counter'' gets
+% stepped (this is called in the usual sources ``within-counter'', ``old
+% counter'', ``supercounter'', ``parent counter'' etc.). This information is
+% somewhat tricky to get. For starters, the counters which may reset the
+% current counter are not retrievable from the counter itself, because this
+% information is stored with the counter that does the resetting, not with the
+% one that gets reset (the list is stored in \cs[no-index]{cl@}\meta{counter}
+% with format
+% \texttt{\cs{@elt}\{countera\}\cs{@elt}\{counterb\}\cs{@elt}\{counterc\}},
+% see \file{ltcounts.dtx} in \texttt{texdoc source2e}). Besides, there may be
+% a chain of resetting counters, which must be taken into account: if
+% \texttt{counterC} gets reset by \texttt{counterB}, and \texttt{counterB}
+% gets reset by \texttt{counterA}, stepping the latter affects all three of
+% them.
+%
+% The procedure below examines a set of counters, those in
+% \cs{l_@@_counter_resetters_seq}, and for each of them retrieves the set of
+% counters it resets, as stored in \cs[no-index]{cl@}\meta{counter}, looking
+% for the counter for which we are trying to set a label
+% (\cs{l_@@_current_counter_tl}, by default \cs{@currentcounter}, passed as an
+% argument to the functions). There is one relevant caveat to this procedure:
+% \cs{l_@@_counter_resetters_seq} is populated by hand with the ``usual
+% suspects'', there is no way (that I know of) to ensure it is exhaustive.
+% However, it is not that difficult to create a reasonable ``usual suspects''
+% list which, of course, should include the counters for the sectioning
+% commands to start with, and it is easy to add more counters to this list if
+% needed, with the option \opt{counterresetters}. Unfortunately, not all
+% counters are created alike, or reset alike. Some counters, even some kernel
+% ones, get reset by other mechanisms (notably, the \texttt{enumerate}
+% environment counters do not use the regular counter machinery for resetting
+% on each level, but are nested nevertheless by other means). Therefore,
+% inspecting \cs[no-index]{cl@}\meta{counter} cannot possibly fully account
+% for all of the automatic counter resetting which takes place in the
+% document. And there's also no other ``general rule'' we could grab on for
+% this, as far as I know. So we provide a way to manually tell
+% \pkg{zref-clever} of these cases, by means of the \opt{counterresetby}
+% option, whose information is stored in \cs{l_@@_counter_resetby_prop}. This
+% manual specification has precedence over the search through
+% \cs{l_@@_counter_resetters_seq}, and should be handled with care, since
+% there is no possible verification mechanism for this.
+%
+%
+% \begin{macro}[EXP]{\@@_get_enclosing_counters_value:n}
+% Recursively generate a \emph{sequence} of ``enclosing counters'' values,
+% for a given \meta{counter} and leave it in the input stream. This
+% function must be expandable, since it gets called from \cs{zref@newprop}
+% and is the one responsible for generating the desired information when
+% the label is being set. Note that the order in which we are getting this
+% information is reversed, since we are navigating the counter reset chain
+% bottom-up. But it is very hard to do otherwise here where we need
+% expandable functions, and easy to handle at the reading side.
+% \begin{syntax}
+% \cs{@@_get_enclosing_counters_value:n} \Arg{counter}
+% \end{syntax}
+% \begin{macrocode}
+\cs_new:Npn \@@_get_enclosing_counters_value:n #1
+ {
+ \cs_if_exist:cT { c@ \@@_counter_reset_by:n {#1} }
+ {
+ { \int_use:c { c@ \@@_counter_reset_by:n {#1} } }
+ \@@_get_enclosing_counters_value:e
+ { \@@_counter_reset_by:n {#1} }
+ }
+ }
+% \end{macrocode}
+%
+% Both \texttt{e} and \texttt{f} expansions work for this particular recursive
+% call. I'll stay with the \texttt{e} variant, since conceptually it is what
+% I want (\texttt{x} itself is not expandable), and this package is anyway not
+% compatible with older kernels for which the performance penalty of the
+% \texttt{e} expansion would ensue (see also
+% \url{https://tex.stackexchange.com/q/611370/#comment1529282_611385}, thanks
+% Enrico Gregorio, aka `egreg').
+% \begin{macrocode}
+\cs_generate_variant:Nn \@@_get_enclosing_counters_value:n { e }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}[EXP]{\@@_counter_reset_by:n}
+% Auxiliary function for \cs{@@_get_enclosing_counters_value:n}, and useful
+% on its own standing. It is broken in parts to be able to use the
+% expandable mapping functions. \cs{@@_counter_reset_by:n} leaves in the
+% stream the ``enclosing counter'' which resets \meta{counter}.
+% \begin{syntax}
+% \cs{@@_counter_reset_by:n} \Arg{counter}
+% \end{syntax}
+% \begin{macrocode}
+\cs_new:Npn \@@_counter_reset_by:n #1
+ {
+ \bool_if:nTF
+ { \prop_if_in_p:Nn \l_@@_counter_resetby_prop {#1} }
+ { \prop_item:Nn \l_@@_counter_resetby_prop {#1} }
+ {
+ \seq_map_tokens:Nn \l_@@_counter_resetters_seq
+ { \@@_counter_reset_by_aux:nn {#1} }
+ }
+ }
+\cs_new:Npn \@@_counter_reset_by_aux:nn #1#2
+ {
+ \cs_if_exist:cT { c@ #2 }
+ {
+ \tl_if_empty:cF { cl@ #2 }
+ {
+ \tl_map_tokens:cn { cl@ #2 }
+ { \@@_counter_reset_by_auxi:nnn {#2} {#1} }
+ }
+ }
+ }
+\cs_new:Npn \@@_counter_reset_by_auxi:nnn #1#2#3
+ {
+ \str_if_eq:nnT {#2} {#3}
+ { \tl_map_break:n { \seq_map_break:n {#1} } }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% Finally, we create the \texttt{zc@enclval} property, and add it to the
+% \texttt{main} property list.
+% \begin{macrocode}
+\zref@newprop { zc@enclval }
+ {
+ \@@_get_enclosing_counters_value:e
+ \l_@@_current_counter_tl
+ }
+\zref@addprop \ZREF@mainlist { zc@enclval }
+% \end{macrocode}
+%
+%
+% Another piece of information we need is the page numbering format being used
+% by \cs{thepage}, so that we know when we can (or not) group a set of page
+% references in a range. Unfortunately, \texttt{page} is not a typical
+% counter in ways which complicates things. First, it does commonly get reset
+% along the document, not necessarily by the usual counter reset chains, but
+% rather with \cs{pagenumbering} or variations thereof. Second, the format of
+% the page number commonly changes in the document (roman, arabic, etc.), not
+% necessarily, though usually, together with a reset. Trying to ``parse''
+% \cs{thepage} to retrieve such information is bound to go wrong: we don't
+% know, and can't know, what is within that macro, and that's the business of
+% the user, or of the documentclass, or of the loaded packages. The technique
+% used by \pkg{cleveref}, which we borrow here, is simple and smart: store
+% with the label what \cs{thepage} would return, if the counter \cs{c@page}
+% was ``\(1\)''. That does not allow us to \emph{sort} the references,
+% luckily however, we have \texttt{abspage} which solves this problem. But we
+% can decide whether two labels can be compressed into a range or not based on
+% this format: if they are identical, we can compress them, otherwise, we
+% can't. To do so, we locally redefine \cs{c@page} to return ``1'', thus
+% avoiding any global spillovers of this trick. Since this operation is not
+% expandable we cannot run it directly from the property definition. Hence,
+% we use a shipout hook, and set \cs{g_@@_page_format_tl}, which can then be
+% retrieved by the starred definition of
+% \texttt{\cs{zref@newprop}*\{zc@pgfmt\}}.
+%
+% \begin{macrocode}
+\tl_new:N \g_@@_page_format_tl
+\cs_new_protected:Npx \@@_page_format_aux: { \int_eval:n { 1 } }
+\AddToHook { shipout / before }
+ {
+ \group_begin:
+ \cs_set_eq:NN \c@page \@@_page_format_aux:
+ \tl_gset:Nx \g_@@_page_format_tl { \thepage }
+ \group_end:
+ }
+\zref@newprop* { zc@pgfmt } { \g_@@_page_format_tl }
+\zref@addprop \ZREF@mainlist { zc@pgfmt }
+% \end{macrocode}
+%
+%
+% Still some other properties which we don't need to handle at the data
+% provision side, but need to cater for at the retrieval side, are the ones
+% from the \pkg{zref-xr} module, which are added to the labels imported from
+% external documents, and needed to construct hyperlinks to them and to
+% distinguish them from the current document ones at sorting and compressing:
+% \texttt{urluse}, \texttt{url} and \texttt{externaldocument}.
+%
+%
+%
+% \section{Plumbing}
+%
+%
+% \subsection{Auxiliary}
+%
+%
+% \begin{macro}
+% {
+% \@@_if_package_loaded:n ,
+% \@@_if_class_loaded:n ,
+% }
+% Just a convenience, since sometimes we just need one of the branches, and
+% it is particularly easy to miss the empty F branch after a long T one.
+% \begin{macrocode}
+\prg_new_conditional:Npnn \@@_if_package_loaded:n #1 { T , F , TF }
+ { \IfPackageLoadedTF {#1} { \prg_return_true: } { \prg_return_false: } }
+\prg_new_conditional:Npnn \@@_if_class_loaded:n #1 { T , F , TF }
+ { \IfClassLoadedTF {#1} { \prg_return_true: } { \prg_return_false: } }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Messages}
+%
+%
+% \begin{macrocode}
+\msg_new:nnn { zref-clever } { option-not-type-specific }
+ {
+ Option~'#1'~is~not~type-specific~\msg_line_context:.~
+ Set~it~in~'\iow_char:N\\zcLanguageSetup'~before~first~'type'~
+ switch~or~as~package~option.
+ }
+\msg_new:nnn { zref-clever } { option-only-type-specific }
+ {
+ No~type~specified~for~option~'#1'~\msg_line_context:.~
+ Set~it~after~'type'~switch.
+ }
+\msg_new:nnn { zref-clever } { key-requires-value }
+ { The~'#1'~key~'#2'~requires~a~value~\msg_line_context:. }
+\msg_new:nnn { zref-clever } { language-declared }
+ { Language~'#1'~is~already~declared~\msg_line_context:.~Nothing~to~do. }
+\msg_new:nnn { zref-clever } { unknown-language-alias }
+ {
+ Language~'#1'~is~unknown~\msg_line_context:.~Can't~alias~to~it.~
+ See~documentation~for~'\iow_char:N\\zcDeclareLanguage'~and~
+ '\iow_char:N\\zcDeclareLanguageAlias'.
+ }
+\msg_new:nnn { zref-clever } { unknown-language-setup }
+ {
+ Language~'#1'~is~unknown~\msg_line_context:.~Can't~set~it~up.~
+ See~documentation~for~'\iow_char:N\\zcDeclareLanguage'~and~
+ '\iow_char:N\\zcDeclareLanguageAlias'.
+ }
+\msg_new:nnn { zref-clever } { unknown-language-opt }
+ {
+ Language~'#1'~is~unknown~\msg_line_context:.~Using~default.~
+ See~documentation~for~'\iow_char:N\\zcDeclareLanguage'~and~
+ '\iow_char:N\\zcDeclareLanguageAlias'.
+ }
+\msg_new:nnn { zref-clever } { unknown-language-decl }
+ {
+ Can't~set~declension~'#1'~for~unknown~language~'#2'~\msg_line_context:.~
+ See~documentation~for~'\iow_char:N\\zcDeclareLanguage'~and~
+ '\iow_char:N\\zcDeclareLanguageAlias'.
+ }
+\msg_new:nnn { zref-clever } { language-no-decl-ref }
+ {
+ Language~'#1'~has~no~declared~declension~cases~\msg_line_context:.~
+ Nothing~to~do~with~option~'d=#2'.
+ }
+\msg_new:nnn { zref-clever } { language-no-gender }
+ {
+ Language~'#1'~has~no~declared~gender~\msg_line_context:.~
+ Nothing~to~do~with~option~'#2=#3'.
+ }
+\msg_new:nnn { zref-clever } { language-no-decl-setup }
+ {
+ Language~'#1'~has~no~declared~declension~cases~\msg_line_context:.~
+ Nothing~to~do~with~option~'case=#2'.
+ }
+\msg_new:nnn { zref-clever } { unknown-decl-case }
+ {
+ Declension~case~'#1'~unknown~for~language~'#2'~\msg_line_context:.~
+ Using~default~declension~case.
+ }
+\msg_new:nnn { zref-clever } { nudge-multitype }
+ {
+ Reference~with~multiple~types~\msg_line_context:.~
+ You~may~wish~to~separate~them~or~review~language~around~it.
+ }
+\msg_new:nnn { zref-clever } { nudge-comptosing }
+ {
+ Multiple~labels~have~been~compressed~into~singular~type~name~
+ for~type~'#1'~\msg_line_context:.
+ }
+\msg_new:nnn { zref-clever } { nudge-plural-when-sg }
+ {
+ Option~'sg'~signals~that~a~singular~type~name~was~expected~
+ \msg_line_context:.~But~type~'#1'~has~plural~type~name.
+ }
+\msg_new:nnn { zref-clever } { gender-not-declared }
+ { Language~'#1'~has~no~'#2'~gender~declared~\msg_line_context:. }
+\msg_new:nnn { zref-clever } { nudge-gender-mismatch }
+ {
+ Gender~mismatch~for~type~'#1'~\msg_line_context:.~
+ You've~specified~'g=#2'~but~type~name~is~'#3'~for~language~'#4'.
+ }
+\msg_new:nnn { zref-clever } { nudge-gender-not-declared-for-type }
+ {
+ You've~specified~'g=#1'~\msg_line_context:.~
+ But~gender~for~type~'#2'~is~not~declared~for~language~'#3'.
+ }
+\msg_new:nnn { zref-clever } { nudgeif-unknown-value }
+ { Unknown~value~'#1'~for~'nudgeif'~option~\msg_line_context:. }
+\msg_new:nnn { zref-clever } { option-document-only }
+ { Option~'#1'~is~only~available~after~\iow_char:N\\begin\{document\}. }
+\msg_new:nnn { zref-clever } { dict-loaded }
+ { Loaded~'#1'~dictionary. }
+\msg_new:nnn { zref-clever } { dict-not-available }
+ { Dictionary~for~'#1'~not~available~\msg_line_context:. }
+\msg_new:nnn { zref-clever } { unknown-language-load }
+ {
+ Language~'#1'~is~unknown~\msg_line_context:.~Unable~to~load~dictionary.~
+ See~documentation~for~'\iow_char:N\\zcDeclareLanguage'~and~
+ '\iow_char:N\\zcDeclareLanguageAlias'.
+ }
+\msg_new:nnn { zref-clever } { zref-property-undefined }
+ {
+ Option~'ref=#1'~requested~\msg_line_context:.~
+ But~the~property~'#1'~is~not~declared,~falling-back~to~'default'.
+ }
+\msg_new:nnn { zref-clever } { hyperref-preamble-only }
+ {
+ Option~'hyperref'~only~available~in~the~preamble~\msg_line_context:.~
+ To~inhibit~hyperlinking~locally,~you~can~use~the~starred~version~of~
+ '\iow_char:N\\zcref'.
+ }
+\msg_new:nnn { zref-clever } { missing-hyperref }
+ { Missing~'hyperref'~package.~Setting~'hyperref=false'. }
+\msg_new:nnn { zref-clever } { titleref-preamble-only }
+ {
+ Option~'titleref'~only~available~in~the~preamble~\msg_line_context:.~
+ Did~you~mean~'ref=title'?.
+ }
+\msg_new:nnn { zref-clever } { option-preamble-only }
+ { Option~'#1'~only~available~in~the~preamble~\msg_line_context:. }
+\msg_new:nnn { zref-clever } { unknown-compat-module }
+ {
+ Unknown~compatibility~module~'#1'~given~to~option~'nocompat'.~
+ Nothing~to~do.
+ }
+\msg_new:nnn { zref-clever } { missing-zref-check }
+ {
+ Option~'check'~requested~\msg_line_context:.~
+ But~package~'zref-check'~is~not~loaded,~can't~run~the~checks.
+ }
+\msg_new:nnn { zref-clever } { missing-type }
+ { Reference~type~undefined~for~label~'#1'~\msg_line_context:. }
+\msg_new:nnn { zref-clever } { missing-property }
+ { Reference~property~'#1'~undefined~for~label~'#2'~\msg_line_context:. }
+\msg_new:nnn { zref-clever } { missing-name }
+ { Reference~format~option~'#1'~undefined~for~type~'#2'~\msg_line_context:. }
+\msg_new:nnn { zref-clever } { missing-string }
+ {
+ We~couldn't~find~a~value~for~reference~option~'#1'~\msg_line_context:.~
+ But~we~should~have:~throw~a~rock~at~the~maintainer.
+ }
+\msg_new:nnn { zref-clever } { single-element-range }
+ { Range~for~type~'#1'~resulted~in~single~element~\msg_line_context:. }
+\msg_new:nnn { zref-clever } { compat-package }
+ { Loaded~support~for~'#1'~package. }
+\msg_new:nnn { zref-clever } { compat-class }
+ { Loaded~support~for~'#1'~documentclass. }
+% \end{macrocode}
+%
+%
+% \subsection{Data extraction}
+%
+%
+% \begin{macro}{\@@_def_extract:Nnnn}
+% Extract property \meta{prop} from \meta{label} and sets variable \meta{tl
+% var} with extracted value. Ensure \cs{zref@extractdefault} is expanded
+% exactly twice, but no further to retrieve the proper value. In case the
+% property is not found, set \meta{tl var} with \meta{default}.
+% \begin{syntax}
+% \cs{@@_def_extract:Nnnn} \Arg{tl val}
+% ~~\Arg{label} \Arg{prop} \Arg{default}
+% \end{syntax}
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_def_extract:Nnnn #1#2#3#4
+ {
+ \exp_args:NNNo \exp_args:NNo \tl_set:Nn #1
+ { \zref@extractdefault {#2} {#3} {#4} }
+ }
+\cs_generate_variant:Nn \@@_def_extract:Nnnn { NVnn }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_extract_unexp:nnn}
+% Extract property \meta{prop} from \meta{label}. Ensure that, in the
+% context of an x expansion, \cs{zref@extractdefault} is expanded exactly
+% twice, but no further to retrieve the proper value. Thus, this is meant
+% to be use in an x expansion context, not in other situations. In case the
+% property is not found, leave \meta{default} in the stream.
+% \begin{syntax}
+% \cs{@@_extract_unexp:nnn}\Arg{label}\Arg{prop}\Arg{default}
+% \end{syntax}
+% \begin{macrocode}
+\cs_new:Npn \@@_extract_unexp:nnn #1#2#3
+ {
+ \exp_args:NNo \exp_args:No
+ \exp_not:n { \zref@extractdefault {#1} {#2} {#3} }
+ }
+\cs_generate_variant:Nn \@@_extract_unexp:nnn { Vnn , nvn , Vvn }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_extract:nnn}
+% An internal version for \cs{zref@extractdefault}.
+% \begin{syntax}
+% \cs{@@_extract:nnn}\Arg{label}\Arg{prop}\Arg{default}
+% \end{syntax}
+% \begin{macrocode}
+\cs_new:Npn \@@_extract:nnn #1#2#3
+ { \zref@extractdefault {#1} {#2} {#3} }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Reference format}
+%
+% For a general discussion on the precedence rules for reference format
+% options, see Section ``Reference format'' in the User manual. Internally,
+% these precedence rules are handled / enforced in \cs{@@_get_ref_string:nN},
+% \cs{@@_get_ref_font:nN}, and \cs{@@_type_name_setup:} which are the basic
+% functions to retrieve proper values for reference format settings. The
+% ``fallback'' settings are stored in \cs{g_@@_fallback_dict_prop}.
+%
+%
+% \begin{macro}
+% {
+% \l_@@_setup_type_tl ,
+% \l_@@_dict_language_tl ,
+% \l_@@_dict_decl_case_tl ,
+% \l_@@_dict_declension_seq ,
+% \l_@@_dict_gender_seq ,
+% }
+% Store ``current'' type, language, and declension cases in different places
+% for option and translation handling, notably in
+% \cs{@@_provide_dictionary:n}, \cs{zcRefTypeSetup}, and
+% \cs{zcLanguageSetup}. But also for translations retrieval, in
+% \cs{@@_get_type_transl:nnnN} and \cs{@@_get_default_transl:nnN}.
+% \begin{macrocode}
+\tl_new:N \l_@@_setup_type_tl
+\tl_new:N \l_@@_dict_language_tl
+\tl_new:N \l_@@_dict_decl_case_tl
+\seq_new:N \l_@@_dict_declension_seq
+\seq_new:N \l_@@_dict_gender_seq
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}
+% {
+% \c_@@_ref_options_necessarily_not_type_specific_seq ,
+% \c_@@_ref_options_possibly_type_specific_seq ,
+% \c_@@_ref_options_type_names_seq ,
+% \c_@@_ref_options_font_seq ,
+% \c_@@_ref_options_typesetup_seq ,
+% \c_@@_ref_options_reference_seq ,
+% }
+% Lists of reference format related options in ``categories''. Since
+% these options are set in different scopes, and at different places,
+% storing the actual lists in centralized variables makes the job not only
+% easier later on, but also keeps things consistent.
+% \begin{macrocode}
+\seq_const_from_clist:Nn
+ \c_@@_ref_options_necessarily_not_type_specific_seq
+ {
+ tpairsep ,
+ tlistsep ,
+ tlastsep ,
+ notesep ,
+ }
+\seq_const_from_clist:Nn
+ \c_@@_ref_options_possibly_type_specific_seq
+ {
+ namesep ,
+ pairsep ,
+ listsep ,
+ lastsep ,
+ rangesep ,
+ refpre ,
+ refpos ,
+ }
+% \end{macrocode}
+% Only ``type names'' are ``necessarily type-specific'', which makes them
+% somewhat special on the retrieval side of things. In short, they don't have
+% their values queried by \cs{@@_get_ref_string:nN}, but by
+% \cs{@@_type_name_setup:}.
+% \begin{macrocode}
+\seq_const_from_clist:Nn
+ \c_@@_ref_options_type_names_seq
+ {
+ Name-sg ,
+ name-sg ,
+ Name-pl ,
+ name-pl ,
+ Name-sg-ab ,
+ name-sg-ab ,
+ Name-pl-ab ,
+ name-pl-ab ,
+ }
+% \end{macrocode}
+% \cs{c_@@_ref_options_font_seq} are technically ``possibly type-specific'',
+% but are not ``language-specific'', so we separate them.
+% \begin{macrocode}
+\seq_const_from_clist:Nn
+ \c_@@_ref_options_font_seq
+ {
+ namefont ,
+ reffont ,
+ }
+% \end{macrocode}
+% And, finally, some combined groups of the above variables, for convenience.
+% \begin{macrocode}
+\seq_new:N \c_@@_ref_options_typesetup_seq
+\seq_gconcat:NNN \c_@@_ref_options_typesetup_seq
+ \c_@@_ref_options_possibly_type_specific_seq
+ \c_@@_ref_options_type_names_seq
+\seq_gconcat:NNN \c_@@_ref_options_typesetup_seq
+ \c_@@_ref_options_typesetup_seq
+ \c_@@_ref_options_font_seq
+\seq_new:N \c_@@_ref_options_reference_seq
+\seq_gconcat:NNN \c_@@_ref_options_reference_seq
+ \c_@@_ref_options_necessarily_not_type_specific_seq
+ \c_@@_ref_options_possibly_type_specific_seq
+\seq_gconcat:NNN \c_@@_ref_options_reference_seq
+ \c_@@_ref_options_reference_seq
+ \c_@@_ref_options_font_seq
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsection{Languages}
+%
+% \begin{macro}{\g_@@_languages_prop}
+% Stores the names of known languages and the mapping from ``language name''
+% to ``dictionary name''. Whether or not a language or alias is known to
+% \pkg{zref-clever} is decided by its presence in this property list. A
+% ``base language'' (loose concept here, meaning just ``the name we gave for
+% the dictionary in that particular language'') is just like any other one,
+% the only difference is that the ``language name'' happens to be the same
+% as the ``dictionary name'', in other words, it is an ``alias to itself''.
+% \begin{macrocode}
+\prop_new:N \g_@@_languages_prop
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}[int]{\zcDeclareLanguage}
+% Declare a new language for use with \pkg{zref-clever}. \meta{language} is
+% taken to be both the ``language name'' and the ``dictionary name''.
+% \oarg{options} receive a \texttt{k=v} set of options, with three valid
+% options. The first, \opt{declension}, takes the noun declension cases
+% prefixes for \meta{language} as a comma separated list, whose first
+% element is taken to be the default case. The second, \opt{gender},
+% receives the genders for \meta{language} as comma separated list. The
+% third, \opt{allcaps}, receives no value, and indicates that for
+% \meta{language} all nouns must be capitalized for grammatical reasons, in
+% which case, the \opt{cap} option is disregarded for \meta{language}. If
+% \meta{language} is already known, just warn. This implies a particular
+% restriction regarding \oarg{options}, namely that these options, when
+% defined by the package, cannot be redefined by the user. This is
+% deliberate, otherwise the built-in dictionaries would become much too
+% sensitive to this particular user input, and unnecessarily so.
+% \cs{zcDeclareLanguage} is preamble only.
+% \begin{syntax}
+% \cs{zcDeclareLanguage} \oarg{options} \marg{language}
+% \end{syntax}
+% \begin{macrocode}
+\NewDocumentCommand \zcDeclareLanguage { O { } m }
+ {
+ \group_begin:
+ \tl_if_empty:nF {#2}
+ {
+ \prop_if_in:NnTF \g_@@_languages_prop {#2}
+ { \msg_warning:nnn { zref-clever } { language-declared } {#2} }
+ {
+ \prop_gput:Nnn \g_@@_languages_prop {#2} {#2}
+ \prop_new:c { g_@@_dict_ #2 _prop }
+ \tl_set:Nn \l_@@_dict_language_tl {#2}
+ \keys_set:nn { zref-clever / declarelang } {#1}
+ }
+ }
+ \group_end:
+ }
+\@onlypreamble \zcDeclareLanguage
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}[int]{\zcDeclareLanguageAlias}
+% Declare \meta{language alias} to be an alias of \meta{aliased language}.
+% \meta{aliased language} must be already known to \pkg{zref-clever}, as
+% stored in \cs{g_@@_languages_prop}. \cs{zcDeclareLanguageAlias} is
+% preamble only.
+% \begin{syntax}
+% \cs{zcDeclareLanguageAlias} \marg{language alias} \marg{aliased language}
+% \end{syntax}
+% \begin{macrocode}
+\NewDocumentCommand \zcDeclareLanguageAlias { m m }
+ {
+ \tl_if_empty:nF {#1}
+ {
+ \prop_if_in:NnTF \g_@@_languages_prop {#2}
+ {
+ \exp_args:NNnx
+ \prop_gput:Nnn \g_@@_languages_prop {#1}
+ { \prop_item:Nn \g_@@_languages_prop {#2} }
+ }
+ { \msg_warning:nnn { zref-clever } { unknown-language-alias } {#2} }
+ }
+ }
+\@onlypreamble \zcDeclareLanguageAlias
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \begin{macrocode}
+\keys_define:nn { zref-clever / declarelang }
+ {
+ declension .code:n =
+ {
+ \prop_gput:cnn
+ { g_@@_dict_ \l_@@_dict_language_tl _prop }
+ { declension } {#1}
+ } ,
+ declension .value_required:n = true ,
+ gender .code:n =
+ {
+ \prop_gput:cnn
+ { g_@@_dict_ \l_@@_dict_language_tl _prop }
+ { gender } {#1}
+ } ,
+ gender .value_required:n = true ,
+ allcaps .code:n =
+ {
+ \prop_gput:cnn
+ { g_@@_dict_ \l_@@_dict_language_tl _prop }
+ { allcaps } { true }
+ } ,
+ allcaps .value_forbidden:n = true ,
+ }
+% \end{macrocode}
+%
+%
+%
+% \begin{macro}{\@@_process_language_options:}
+% Auxiliary function for \cs{@@_zcref:nnn}, responsible for processing
+% options from \cs{zcDeclareLanguage}. It is necessary to separate them
+% from the reference options machinery because their behavior is language
+% dependent, but the language itself can also be set as an option
+% (\opt{lang}, value stored in \cs{l_@@_ref_language_tl}). Hence, we must
+% validate these options after the reference options have been set. It is
+% expected to be called right (or soon) after \cs{keys_set:nn} in
+% \cs{@@_zcref:nnn}, where current values for \cs{l_@@_ref_language_tl} and
+% \cs{l_@@_ref_decl_case_tl} are in place.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_process_language_options:
+ {
+ \exp_args:NNx \prop_get:NnNTF \g_@@_languages_prop
+ { \l_@@_ref_language_tl }
+ \l_@@_dict_language_tl
+ {
+% \end{macrocode}
+% Validate the declension case (\opt{d}) option against the declared cases for
+% the reference language. If the user value for the latter does not match the
+% declension cases declared for the former, the function sets an appropriate
+% value for \cs{l_@@_ref_decl_case_tl}, either using the default case, or
+% clearing the variable, depending on the language setup. And also issues a
+% warning about it.
+% \begin{macrocode}
+ \exp_args:NNx \seq_set_from_clist:Nn
+ \l_@@_dict_declension_seq
+ {
+ \prop_item:cn
+ {
+ g_@@_dict_
+ \l_@@_dict_language_tl _prop
+ }
+ { declension }
+ }
+ \seq_if_empty:NTF \l_@@_dict_declension_seq
+ {
+ \tl_if_empty:NF \l_@@_ref_decl_case_tl
+ {
+ \msg_warning:nnxx { zref-clever }
+ { language-no-decl-ref }
+ { \l_@@_ref_language_tl }
+ { \l_@@_ref_decl_case_tl }
+ \tl_clear:N \l_@@_ref_decl_case_tl
+ }
+ }
+ {
+ \tl_if_empty:NTF \l_@@_ref_decl_case_tl
+ {
+ \seq_get_left:NN \l_@@_dict_declension_seq
+ \l_@@_ref_decl_case_tl
+ }
+ {
+ \seq_if_in:NVF \l_@@_dict_declension_seq
+ \l_@@_ref_decl_case_tl
+ {
+ \msg_warning:nnxx { zref-clever }
+ { unknown-decl-case }
+ { \l_@@_ref_decl_case_tl }
+ { \l_@@_ref_language_tl }
+ \seq_get_left:NN \l_@@_dict_declension_seq
+ \l_@@_ref_decl_case_tl
+ }
+ }
+ }
+% \end{macrocode}
+% Validate the gender (\opt{g}) option against the declared genders for the
+% reference language. If the user value for the latter does not match the
+% genders declared for the former, clear \cs{l_@@_ref_gender_tl} and warn.
+% \begin{macrocode}
+ \exp_args:NNx \seq_set_from_clist:Nn
+ \l_@@_dict_gender_seq
+ {
+ \prop_item:cn
+ {
+ g_@@_dict_
+ \l_@@_dict_language_tl _prop
+ }
+ { gender }
+ }
+ \seq_if_empty:NTF \l_@@_dict_gender_seq
+ {
+ \tl_if_empty:NF \l_@@_ref_gender_tl
+ {
+ \msg_warning:nnxxx { zref-clever }
+ { language-no-gender }
+ { \l_@@_ref_language_tl }
+ { g }
+ { \l_@@_ref_gender_tl }
+ \tl_clear:N \l_@@_ref_gender_tl
+ }
+ }
+ {
+ \tl_if_empty:NF \l_@@_ref_gender_tl
+ {
+ \seq_if_in:NVF \l_@@_dict_gender_seq
+ \l_@@_ref_gender_tl
+ {
+ \msg_warning:nnxx { zref-clever }
+ { gender-not-declared }
+ { \l_@@_ref_language_tl }
+ { \l_@@_ref_gender_tl }
+ \tl_clear:N \l_@@_ref_gender_tl
+ }
+ }
+ }
+% \end{macrocode}
+% Ensure \cs{l_@@_capitalize_bool} is set to \texttt{true} when the language
+% was declared with \opt{allcaps} option.
+% \begin{macrocode}
+ \str_if_eq:eeT
+ {
+ \prop_item:cn
+ {
+ g_@@_dict_
+ \l_@@_dict_language_tl _prop
+ }
+ { allcaps }
+ }
+ { true }
+ { \bool_set_true:N \l_@@_capitalize_bool }
+ }
+ {
+% \end{macrocode}
+% If the language itself is not declared, we still have to issue declension
+% and gender warnings, if \opt{d} or \opt{g} options were used.
+% \begin{macrocode}
+ \tl_if_empty:NF \l_@@_ref_decl_case_tl
+ {
+ \msg_warning:nnxx { zref-clever } { unknown-language-decl }
+ { \l_@@_ref_decl_case_tl }
+ { \l_@@_ref_language_tl }
+ \tl_clear:N \l_@@_ref_decl_case_tl
+ }
+ \tl_if_empty:NF \l_@@_ref_gender_tl
+ {
+ \msg_warning:nnxxx { zref-clever }
+ { language-no-gender }
+ { \l_@@_ref_language_tl }
+ { g }
+ { \l_@@_ref_gender_tl }
+ \tl_clear:N \l_@@_ref_gender_tl
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsection{Dictionaries}
+%
+% Contrary to general options and type options, which are always \emph{local},
+% ``dictionaries'', ``translations'' or ``language-specific settings'' are
+% always \emph{global}. Hence, the loading of built-in dictionaries, as well
+% as settings done with \cs{zcLanguageSetup}, should set the relevant
+% variables globally.
+%
+% The built-in dictionaries and their related infrastructure are designed to
+% perform ``on the fly'' loading of dictionaries, ``lazily'' as needed. Much
+% like \pkg{babel} does for languages not declared in the preamble, but used
+% in the document. This offers some convenience, of course, and that's one
+% reason to do it. But it also has the purpose of parsimony, of ``loading the
+% least possible''. Therefore, we load at \texttt{begindocument} one single
+% language (see \zcref[ref=title, noname]{sec:lang-option}), as specified by
+% the user in the preamble with the \opt{lang} option or, failing any
+% specification, the current language of the document, which is the default.
+% Anything else is lazily loaded, on the fly, along the document.
+%
+% This design decision has also implications to the \emph{form} the dictionary
+% files assumed. As far as my somewhat impressionistic sampling goes,
+% dictionary or localization files of the most common packages in this area of
+% functionality, are usually a set of commands which perform the relevant
+% definitions and assignments in the preamble or at \texttt{begindocument}.
+% This includes \pkg{translator}, \pkg{translations}, but also \pkg{babel}'s
+% \file{.ldf} files, and \pkg{biblatex}'s \file{.lbx} files. I'm not really
+% well acquainted with this machinery, but as far as I grasp, they all rely on
+% some variation of \cs{ProvidesFile} and \cs{input}. And they can be safely
+% \cs{input} without generating spurious content, because they rely on being
+% loaded before the document has actually started. As far as I can tell,
+% \pkg{babel}'s ``on the fly'' functionality is not based on the \file{.ldf}
+% files, but on the \file{.ini} files, and on \cs{babelprovide}. And the
+% \file{.ini} files are not in this form, but actually resemble
+% ``configuration files'' of sorts, which means they are read and processed
+% somehow else than with just \cs{input}. So we do the more or less the same
+% here. It seems a reasonable way to ensure we can load dictionaries on the
+% fly robustly mid-document, without getting paranoid with the last bit of
+% white-space in them, and without introducing any undue content on the stream
+% when we cannot afford to do it. Hence, \pkg{zref-clever}'s built-in
+% dictionary files are a set of \emph{key-value options} which are read from
+% the file, and fed to \texttt{\cs{keys_set:nn}\{zref-clever/dictionary\}} by
+% \cs{@@_provide_dictionary:n}. And they use the same syntax and options as
+% \cs{zcLanguageSetup} does. The dictionary file itself is read with
+% \cs{ExplSyntaxOn} with the usual implications for white-space and catcodes.
+%
+% \cs{@@_provide_dictionary:n} is only meant to load the built-in
+% dictionaries. For languages declared by the user, or for any settings to a
+% known language made with \cs{zcLanguageSetup}, values are populated directly
+% to a variable \cs{g_@@_dict_\meta{language}_prop}. Hence, there is no need
+% to ``load'' anything in this case: definitions and assignments made by the
+% user are performed immediately.
+%
+%
+% \subsubsection*{Provide}
+%
+% \begin{macro}{\g_@@_loaded_dictionaries_seq}
+% Used to keep track of whether a dictionary has already been loaded or not.
+% \begin{macrocode}
+\seq_new:N \g_@@_loaded_dictionaries_seq
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_@@_load_dict_verbose_bool}
+% Controls whether \cs{@@_provide_dictionary:n} fails silently or verbosely
+% in case of unknown languages or dictionaries not found.
+% \begin{macrocode}
+\bool_new:N \l_@@_load_dict_verbose_bool
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@@_provide_dictionary:n}
+% Load dictionary for known \meta{language} if it is available and if it has
+% not already been loaded.
+% \begin{syntax}
+% \cs{@@_provide_dictionary:n} \Arg{language}
+% \end{syntax}
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_provide_dictionary:n #1
+ {
+ \group_begin:
+ \@bsphack
+ \prop_get:NnNTF \g_@@_languages_prop {#1}
+ \l_@@_dict_language_tl
+ {
+ \seq_if_in:NVF
+ \g_@@_loaded_dictionaries_seq
+ \l_@@_dict_language_tl
+ {
+ \exp_args:Nx \file_get:nnNTF
+ { zref-clever- \l_@@_dict_language_tl .dict }
+ { \ExplSyntaxOn }
+ \l_tmpa_tl
+ {
+ \tl_clear:N \l_@@_setup_type_tl
+ \exp_args:NNx \seq_set_from_clist:Nn
+ \l_@@_dict_declension_seq
+ {
+ \prop_item:cn
+ {
+ g_@@_dict_
+ \l_@@_dict_language_tl _prop
+ }
+ { declension }
+ }
+ \seq_if_empty:NTF \l_@@_dict_declension_seq
+ { \tl_clear:N \l_@@_dict_decl_case_tl }
+ {
+ \seq_get_left:NN \l_@@_dict_declension_seq
+ \l_@@_dict_decl_case_tl
+ }
+ \exp_args:NNx \seq_set_from_clist:Nn
+ \l_@@_dict_gender_seq
+ {
+ \prop_item:cn
+ {
+ g_@@_dict_
+ \l_@@_dict_language_tl _prop
+ }
+ { gender }
+ }
+ \keys_set:nV { zref-clever / dictionary } \l_tmpa_tl
+ \seq_gput_right:NV \g_@@_loaded_dictionaries_seq
+ \l_@@_dict_language_tl
+ \msg_note:nnx { zref-clever } { dict-loaded }
+ { \l_@@_dict_language_tl }
+ }
+ {
+ \bool_if:NT \l_@@_load_dict_verbose_bool
+ {
+ \msg_warning:nnx { zref-clever } { dict-not-available }
+ { \l_@@_dict_language_tl }
+ }
+% \end{macrocode}
+% Even if we don't have the actual dictionary, we register it as ``loaded''.
+% At this point, it is a known language, properly declared. There is no point
+% in trying to load it multiple times, because users cannot really provide the
+% dictionary files (well, technically they could, but we are working so they
+% don't need to, and have better ways to do what they want). And if the users
+% had provided some translations themselves, by means of \cs{zcLanguageSetup},
+% everything would be in place, and they could use the \opt{lang} option
+% multiple times, and the \texttt{dict-not-available} warning would never go
+% away.
+% \begin{macrocode}
+ \seq_gput_right:NV \g_@@_loaded_dictionaries_seq
+ \l_@@_dict_language_tl
+ }
+ }
+ }
+ {
+ \bool_if:NT \l_@@_load_dict_verbose_bool
+ { \msg_warning:nnn { zref-clever } { unknown-language-load } {#1} }
+ }
+ \@esphack
+ \group_end:
+ }
+\cs_generate_variant:Nn \@@_provide_dictionary:n { x }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@@_provide_dictionary_verbose:n}
+% Does the same as \cs{@@_provide_dictionary:n}, but warns if the loading of
+% the dictionary has failed.
+% \begin{syntax}
+% \cs{@@_provide_dictionary_verbose:n} \Arg{language}
+% \end{syntax}
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_provide_dictionary_verbose:n #1
+ {
+ \group_begin:
+ \bool_set_true:N \l_@@_load_dict_verbose_bool
+ \@@_provide_dictionary:n {#1}
+ \group_end:
+ }
+\cs_generate_variant:Nn \@@_provide_dictionary_verbose:n { x }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}
+% {
+% \@@_provide_dict_type_transl:nn ,
+% \@@_provide_dict_default_transl:nn ,
+% }
+% A couple of auxiliary functions for the of
+% \texttt{{zref-clever/dictionary}} keys set in
+% \cs{@@_provide_dictionary:n}. They respectively ``provide'' (i.e. set if
+% it value does not exist, do nothing if it already does) ``type-specific''
+% and ``default'' translations. Both receive \meta{key} and
+% \meta{translation} as arguments, but \cs{@@_provide_dict_type_transl:nn}
+% relies on the current value of \cs{l_@@_setup_type_tl}, as set by the
+% \texttt{type} key.
+% \begin{syntax}
+% \cs{@@_provide_dict_type_transl:nn} \Arg{key} \Arg{translation}
+% \cs{@@_provide_dict_default_transl:nn} \Arg{key} \Arg{translation}
+% \end{syntax}
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_provide_dict_type_transl:nn #1#2
+ {
+ \exp_args:Nnx \prop_gput_if_new:cnn
+ { g_@@_dict_ \l_@@_dict_language_tl _prop }
+ { type- \l_@@_setup_type_tl - #1 } {#2}
+ }
+\cs_new_protected:Npn \@@_provide_dict_default_transl:nn #1#2
+ {
+ \prop_gput_if_new:cnn
+ { g_@@_dict_ \l_@@_dict_language_tl _prop }
+ { default- #1 } {#2}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% The set of keys for \texttt{{zref-clever/dictionary}}, which is used to
+% process the dictionary files in \cs{@@_provide_dictionary:n}. The no-op
+% cases for each category have their messages sent to ``info''. These
+% messages should not occur, as long as the dictionaries are well formed, but
+% they're placed there nevertheless, and can be leveraged in regression tests.
+%
+% \begin{macrocode}
+\keys_define:nn { zref-clever / dictionary }
+ {
+ type .code:n =
+ {
+ \tl_if_empty:nTF {#1}
+ { \tl_clear:N \l_@@_setup_type_tl }
+ { \tl_set:Nn \l_@@_setup_type_tl {#1} }
+ } ,
+ case .code:n =
+ {
+ \seq_if_empty:NTF \l_@@_dict_declension_seq
+ {
+ \msg_info:nnxx { zref-clever } { language-no-decl-setup }
+ { \l_@@_dict_language_tl } {#1}
+ }
+ {
+ \seq_if_in:NnTF \l_@@_dict_declension_seq {#1}
+ { \tl_set:Nn \l_@@_dict_decl_case_tl {#1} }
+ {
+ \msg_info:nnxx { zref-clever } { unknown-decl-case }
+ {#1} { \l_@@_dict_language_tl }
+ \seq_get_left:NN \l_@@_dict_declension_seq
+ \l_@@_dict_decl_case_tl
+ }
+ }
+ } ,
+ case .value_required:n = true ,
+ gender .code:n =
+ {
+ \seq_if_empty:NTF \l_@@_dict_gender_seq
+ {
+ \msg_info:nnxxx { zref-clever } { language-no-gender }
+ { \l_@@_dict_language_tl } { gender } {#1}
+ }
+ {
+ \tl_if_empty:NTF \l_@@_setup_type_tl
+ {
+ \msg_info:nnn { zref-clever }
+ { option-only-type-specific } { gender }
+ }
+ {
+ \seq_if_in:NnTF \l_@@_dict_gender_seq {#1}
+ { \@@_provide_dict_type_transl:nn { gender } {#1} }
+ {
+ \msg_info:nnxx { zref-clever } { gender-not-declared }
+ { \l_@@_dict_language_tl } {#1}
+ }
+ }
+ }
+ } ,
+ gender .value_required:n = true ,
+ }
+\seq_map_inline:Nn
+ \c_@@_ref_options_necessarily_not_type_specific_seq
+ {
+ \keys_define:nn { zref-clever / dictionary }
+ {
+ #1 .value_required:n = true ,
+ #1 .code:n =
+ {
+ \tl_if_empty:NTF \l_@@_setup_type_tl
+ { \@@_provide_dict_default_transl:nn {#1} {##1} }
+ {
+ \msg_info:nnn { zref-clever }
+ { option-not-type-specific } {#1}
+ }
+ } ,
+ }
+ }
+\seq_map_inline:Nn
+ \c_@@_ref_options_possibly_type_specific_seq
+ {
+ \keys_define:nn { zref-clever / dictionary }
+ {
+ #1 .value_required:n = true ,
+ #1 .code:n =
+ {
+ \tl_if_empty:NTF \l_@@_setup_type_tl
+ { \@@_provide_dict_default_transl:nn {#1} {##1} }
+ { \@@_provide_dict_type_transl:nn {#1} {##1} }
+ } ,
+ }
+ }
+\seq_map_inline:Nn
+ \c_@@_ref_options_type_names_seq
+ {
+ \keys_define:nn { zref-clever / dictionary }
+ {
+ #1 .value_required:n = true ,
+ #1 .code:n =
+ {
+ \tl_if_empty:NTF \l_@@_setup_type_tl
+ {
+ \msg_info:nnn { zref-clever }
+ { option-only-type-specific } {#1}
+ }
+ {
+ \tl_if_empty:NTF \l_@@_dict_decl_case_tl
+ { \@@_provide_dict_type_transl:nn {#1} {##1} }
+ {
+ \@@_provide_dict_type_transl:nn
+ { \l_@@_dict_decl_case_tl - #1 } {##1}
+ }
+ }
+ } ,
+ }
+ }
+% \end{macrocode}
+%
+%
+%
+% \subsubsection*{Fallback}
+%
+% All ``strings'' queried with \cs{@@_get_ref_string:nN} -- in practice, those
+% in either \cs{c_@@_ref_options_necessarily_not_type_specific_seq} or
+% \cs{c_@@_ref_options_possibly_type_specific_seq} -- must have their values
+% set for ``fallback'', even if to empty ones, since this is what will be
+% retrieved in the absence of a proper translation, which will be the case if
+% \pkg{babel} or \pkg{polyglossia} is loaded and sets a language which
+% \pkg{zref-clever} does not know. On the other hand, ``type names'' are not
+% looked for in ``fallback'', since it is indeed impossible to provide any
+% reasonable value for them for a ``specified but unknown language''. Also
+% ``font'' options -- those in \cs{c_@@_ref_options_font_seq}, and queried
+% with \cs{@@_get_ref_font:nN} -- do not need to be provided here, since the
+% later function sets an empty value if the option is not found.
+%
+% \begin{macrocode}
+\prop_new:N \g_@@_fallback_dict_prop
+\prop_gset_from_keyval:Nn \g_@@_fallback_dict_prop
+ {
+ tpairsep = {,~} ,
+ tlistsep = {,~} ,
+ tlastsep = {,~} ,
+ notesep = {~} ,
+ namesep = {\nobreakspace} ,
+ pairsep = {,~} ,
+ listsep = {,~} ,
+ lastsep = {,~} ,
+ rangesep = {\textendash} ,
+ refpre = {} ,
+ refpos = {} ,
+ }
+% \end{macrocode}
+%
+%
+%
+% \subsubsection*{Get translations}
+%
+% \begin{macro}{\@@_get_type_transl:nnnNF}
+% Get type-specific translation of \meta{key} for \meta{type} and
+% \meta{language}, and store it in \meta{tl variable} if found. If not
+% found, leave the \meta{false code} on the stream, in which case the value
+% of \meta{tl variable} should not be relied upon.
+% \begin{syntax}
+% \cs{@@_get_type_transl:nnnNF} \Arg{language} \Arg{type} \Arg{key}
+% ~~\meta{tl variable} \Arg{false code}
+% \end{syntax}
+% \begin{macrocode}
+\prg_new_protected_conditional:Npnn
+ \@@_get_type_transl:nnnN #1#2#3#4 { F }
+ {
+ \prop_get:NnNTF \g_@@_languages_prop {#1}
+ \l_@@_dict_language_tl
+ {
+ \prop_get:cnNTF
+ { g_@@_dict_ \l_@@_dict_language_tl _prop }
+ { type- #2 - #3 } #4
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+ { \prg_return_false: }
+ }
+\prg_generate_conditional_variant:Nnn
+ \@@_get_type_transl:nnnN { xxxN , xxnN } { F }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@@_get_default_transl:nnNF}
+% Get default translation of \meta{key} for \meta{language}, and store it in
+% \meta{tl variable} if found. If not found, leave the \meta{false code} on
+% the stream, in which case the value of \meta{tl variable} should not be
+% relied upon.
+% \begin{syntax}
+% \cs{@@_get_default_transl:nnNF} \Arg{language} \Arg{key}
+% ~~\meta{tl variable} \Arg{false code}
+% \end{syntax}
+% \begin{macrocode}
+\prg_new_protected_conditional:Npnn
+ \@@_get_default_transl:nnN #1#2#3 { F }
+ {
+ \prop_get:NnNTF \g_@@_languages_prop {#1}
+ \l_@@_dict_language_tl
+ {
+ \prop_get:cnNTF
+ { g_@@_dict_ \l_@@_dict_language_tl _prop }
+ { default- #2 } #3
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+ { \prg_return_false: }
+ }
+\prg_generate_conditional_variant:Nnn
+ \@@_get_default_transl:nnN { xnN } { F }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@@_get_fallback_transl:nNF}
+% Get fallback translation of \meta{key}, and store it in \meta{tl variable}
+% if found. If not found, leave the \meta{false code} on the stream, in
+% which case the value of \meta{tl variable} should not be relied upon.
+% \begin{syntax}
+% \cs{@@_get_fallback_transl:nNF} \Arg{key}
+% ~~\meta{tl variable} \Arg{false code}
+% \end{syntax}
+% \begin{macrocode}
+% {<key>}<tl var to set>
+\prg_new_protected_conditional:Npnn
+ \@@_get_fallback_transl:nN #1#2 { F }
+ {
+ \prop_get:NnNTF \g_@@_fallback_dict_prop
+ { #1 } #2
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsection{Options}
+%
+%
+% \subsubsection*{Auxiliary}
+%
+%
+% \begin{macro}{\@@_prop_put_non_empty:Nnn}
+% If \meta{value} is empty, remove \meta{key} from \meta{property list}.
+% Otherwise, add \meta{key} = \meta{value} to \meta{property list}.
+% \begin{syntax}
+% \cs{@@_prop_put_non_empty:Nnn} \meta{property list} \Arg{key} \Arg{value}
+% \end{syntax}
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_prop_put_non_empty:Nnn #1#2#3
+ {
+ \tl_if_empty:nTF {#3}
+ { \prop_remove:Nn #1 {#2} }
+ { \prop_put:Nnn #1 {#2} {#3} }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection*{\opt{ref} option}
+%
+% \cs{l_@@_ref_property_tl} stores the property to which the reference is
+% being made. Note that one thing \emph{must} be handled at this point: the
+% existence of the property itself, as far as \pkg{zref} is concerned. This
+% because typesetting relies on the check \cs{zref@ifrefcontainsprop}, which
+% \emph{presumes} the property is defined and silently expands the \emph{true}
+% branch if it is not (see \url{https://github.com/ho-tex/zref/issues/13},
+% thanks Ulrike Fischer). Therefore, before adding anything to
+% \cs{l_@@_ref_property_tl}, check if first here with
+% \cs{zref@ifpropundefined}: close it at the door.
+%
+%
+% \begin{macrocode}
+\tl_new:N \l_@@_ref_property_tl
+\keys_define:nn { zref-clever / reference }
+ {
+ ref .code:n =
+ {
+ \zref@ifpropundefined {#1}
+ {
+ \msg_warning:nnn { zref-clever } { zref-property-undefined } {#1}
+ \tl_set:Nn \l_@@_ref_property_tl { default }
+ }
+ { \tl_set:Nn \l_@@_ref_property_tl {#1} }
+ } ,
+ ref .initial:n = default ,
+ ref .value_required:n = true ,
+ page .meta:n = { ref = page },
+ page .value_forbidden:n = true ,
+ }
+% \end{macrocode}
+%
+%
+%
+% \subsubsection*{\opt{typeset} option}
+%
+% \begin{macrocode}
+\bool_new:N \l_@@_typeset_ref_bool
+\bool_new:N \l_@@_typeset_name_bool
+\keys_define:nn { zref-clever / reference }
+ {
+ typeset .choice: ,
+ typeset / both .code:n =
+ {
+ \bool_set_true:N \l_@@_typeset_ref_bool
+ \bool_set_true:N \l_@@_typeset_name_bool
+ } ,
+ typeset / ref .code:n =
+ {
+ \bool_set_true:N \l_@@_typeset_ref_bool
+ \bool_set_false:N \l_@@_typeset_name_bool
+ } ,
+ typeset / name .code:n =
+ {
+ \bool_set_false:N \l_@@_typeset_ref_bool
+ \bool_set_true:N \l_@@_typeset_name_bool
+ } ,
+ typeset .initial:n = both ,
+ typeset .value_required:n = true ,
+
+ noname .meta:n = { typeset = ref } ,
+ noname .value_forbidden:n = true ,
+ noref .meta:n = { typeset = name } ,
+ noref .value_forbidden:n = true ,
+ }
+% \end{macrocode}
+%
+%
+%
+% \subsubsection*{\opt{sort} option}
+%
+% \begin{macrocode}
+\bool_new:N \l_@@_typeset_sort_bool
+\keys_define:nn { zref-clever / reference }
+ {
+ sort .bool_set:N = \l_@@_typeset_sort_bool ,
+ sort .initial:n = true ,
+ sort .default:n = true ,
+ nosort .meta:n = { sort = false },
+ nosort .value_forbidden:n = true ,
+ }
+% \end{macrocode}
+%
+%
+%
+% \subsubsection*{\opt{typesort} option}
+%
+% \cs{l_@@_typesort_seq} is stored reversed, since the sort priorities are
+% computed in the negative range in \cs{@@_sort_default_different_types:nn},
+% so that we can implicitly rely on `0' being the ``last value'', and spare
+% creating an integer variable using \cs{seq_map_indexed_inline:Nn}.
+%
+% \begin{macrocode}
+\seq_new:N \l_@@_typesort_seq
+\keys_define:nn { zref-clever / reference }
+ {
+ typesort .code:n =
+ {
+ \seq_set_from_clist:Nn \l_@@_typesort_seq {#1}
+ \seq_reverse:N \l_@@_typesort_seq
+ } ,
+ typesort .initial:n =
+ { part , chapter , section , paragraph },
+ typesort .value_required:n = true ,
+ notypesort .code:n =
+ { \seq_clear:N \l_@@_typesort_seq } ,
+ notypesort .value_forbidden:n = true ,
+ }
+% \end{macrocode}
+%
+%
+%
+% \subsubsection*{\opt{comp} option}
+%
+% \begin{macrocode}
+\bool_new:N \l_@@_typeset_compress_bool
+\keys_define:nn { zref-clever / reference }
+ {
+ comp .bool_set:N = \l_@@_typeset_compress_bool ,
+ comp .initial:n = true ,
+ comp .default:n = true ,
+ nocomp .meta:n = { comp = false },
+ nocomp .value_forbidden:n = true ,
+ }
+% \end{macrocode}
+%
+%
+%
+% \subsubsection*{\opt{range} option}
+%
+% \begin{macrocode}
+\bool_new:N \l_@@_typeset_range_bool
+\keys_define:nn { zref-clever / reference }
+ {
+ range .bool_set:N = \l_@@_typeset_range_bool ,
+ range .initial:n = false ,
+ range .default:n = true ,
+ }
+% \end{macrocode}
+%
+%
+%
+% \subsubsection*{\opt{cap} and \opt{capfirst} options}
+%
+% \begin{macrocode}
+\bool_new:N \l_@@_capitalize_bool
+\bool_new:N \l_@@_capitalize_first_bool
+\keys_define:nn { zref-clever / reference }
+ {
+ cap .bool_set:N = \l_@@_capitalize_bool ,
+ cap .initial:n = false ,
+ cap .default:n = true ,
+ nocap .meta:n = { cap = false },
+ nocap .value_forbidden:n = true ,
+
+ capfirst .bool_set:N = \l_@@_capitalize_first_bool ,
+ capfirst .initial:n = false ,
+ capfirst .default:n = true ,
+ }
+% \end{macrocode}
+%
+%
+% \subsubsection*{\opt{abbrev} and \opt{noabbrevfirst} options}
+%
+% \begin{macrocode}
+\bool_new:N \l_@@_abbrev_bool
+\bool_new:N \l_@@_noabbrev_first_bool
+\keys_define:nn { zref-clever / reference }
+ {
+ abbrev .bool_set:N = \l_@@_abbrev_bool ,
+ abbrev .initial:n = false ,
+ abbrev .default:n = true ,
+ noabbrev .meta:n = { abbrev = false },
+ noabbrev .value_forbidden:n = true ,
+
+ noabbrevfirst .bool_set:N = \l_@@_noabbrev_first_bool ,
+ noabbrevfirst .initial:n = false ,
+ noabbrevfirst .default:n = true ,
+ }
+% \end{macrocode}
+%
+%
+%
+% \subsubsection*{\opt{S} option}
+%
+% \begin{macrocode}
+\keys_define:nn { zref-clever / reference }
+ {
+ S .meta:n =
+ { capfirst = true , noabbrevfirst = true },
+ S .value_forbidden:n = true ,
+ }
+% \end{macrocode}
+%
+%
+% \subsubsection*{\opt{hyperref} option}
+%
+% \begin{macrocode}
+\bool_new:N \l_@@_use_hyperref_bool
+\bool_new:N \l_@@_warn_hyperref_bool
+\keys_define:nn { zref-clever / reference }
+ {
+ hyperref .choice: ,
+ hyperref / auto .code:n =
+ {
+ \bool_set_true:N \l_@@_use_hyperref_bool
+ \bool_set_false:N \l_@@_warn_hyperref_bool
+ } ,
+ hyperref / true .code:n =
+ {
+ \bool_set_true:N \l_@@_use_hyperref_bool
+ \bool_set_true:N \l_@@_warn_hyperref_bool
+ } ,
+ hyperref / false .code:n =
+ {
+ \bool_set_false:N \l_@@_use_hyperref_bool
+ \bool_set_false:N \l_@@_warn_hyperref_bool
+ } ,
+ hyperref .initial:n = auto ,
+ hyperref .default:n = auto
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\AddToHook { begindocument }
+ {
+ \@@_if_package_loaded:nTF { hyperref }
+ {
+ \bool_if:NT \l_@@_use_hyperref_bool
+ { \RequirePackage { zref-hyperref } }
+ }
+ {
+ \bool_if:NT \l_@@_warn_hyperref_bool
+ { \msg_warning:nn { zref-clever } { missing-hyperref } }
+ \bool_set_false:N \l_@@_use_hyperref_bool
+ }
+ \keys_define:nn { zref-clever / reference }
+ {
+ hyperref .code:n =
+ { \msg_warning:nn { zref-clever } { hyperref-preamble-only } }
+ }
+ }
+% \end{macrocode}
+%
+%
+%
+% \subsubsection*{\opt{nameinlink} option}
+%
+% \begin{macrocode}
+\str_new:N \l_@@_nameinlink_str
+\keys_define:nn { zref-clever / reference }
+ {
+ nameinlink .choice: ,
+ nameinlink / true .code:n =
+ { \str_set:Nn \l_@@_nameinlink_str { true } } ,
+ nameinlink / false .code:n =
+ { \str_set:Nn \l_@@_nameinlink_str { false } } ,
+ nameinlink / single .code:n =
+ { \str_set:Nn \l_@@_nameinlink_str { single } } ,
+ nameinlink / tsingle .code:n =
+ { \str_set:Nn \l_@@_nameinlink_str { tsingle } } ,
+ nameinlink .initial:n = tsingle ,
+ nameinlink .default:n = true ,
+ }
+% \end{macrocode}
+%
+%
+% \subsubsection*{\opt{preposinlink} option}
+%
+% \begin{macrocode}
+\bool_new:N \l_@@_preposinlink_bool
+\keys_define:nn { zref-clever / reference }
+ {
+ preposinlink .bool_set:N = \l_@@_preposinlink_bool ,
+ preposinlink .initial:n = false ,
+ preposinlink .default:n = true ,
+ }
+% \end{macrocode}
+%
+%
+% \subsubsection*{\opt{lang} option}
+% \phantomsection{}\zlabel{sec:lang-option}
+%
+% \cs{l_@@_current_language_tl} is an internal alias for \pkg{babel}'s
+% \cs{languagename} or \pkg{polyglossia}'s \cs{mainbabelname} and, if none of
+% them is loaded, we set it to \texttt{english}. \cs{l_@@_main_language_tl}
+% is an internal alias for \pkg{babel}'s \cs{bbl@main@language} or for
+% \pkg{polyglossia}'s \cs{mainbabelname}, as the case may be. Note that for
+% \pkg{polyglossia} we get \pkg{babel}'s language names, so that we only need
+% to handle those internally. \cs{l_@@_ref_language_tl} is the internal
+% variable which stores the language in which the reference is to be made.
+%
+% The overall setup here seems a little roundabout, but this is actually
+% required. In the preamble, we (potentially) don't yet have values for the
+% ``current'' and ``main'' document languages, this must be retrieved at a
+% \texttt{begindocument} hook. The \texttt{begindocument} hook is responsible
+% to get values for \cs{l_@@_current_language_tl} and
+% \cs{l_@@_main_language_tl}, and to set the default for
+% \cs{l_@@_ref_language_tl}. Package options, or preamble calls to
+% \cs{zcsetup} are also hooked at \texttt{begindocument}, but come after the
+% first hook, so that the pertinent variables have been set when they are
+% executed. Finally, we set a third \texttt{begindocument} hook, at
+% \texttt{begindocument/before}, so that it runs after any options set in the
+% preamble. This hook redefines the \opt{lang} option for immediate execution
+% in the document body, and ensures the \texttt{current} language's dictionary
+% gets loaded, if it hadn't been already.
+%
+% For the \pkg{babel} and \pkg{polyglossia} variables which store the
+% ``current'' and ``main'' languages, see
+% \url{https://tex.stackexchange.com/a/233178}, including comments,
+% particularly the one by Javier Bezos. For the \pkg{babel} and
+% \pkg{polyglossia} variables which store the list of loaded languages, see
+% \url{https://tex.stackexchange.com/a/281220}, including comments,
+% particularly PLK's. Note, however, that languages loaded by
+% \cs{babelprovide}, either directly, ``on the fly'', or with the
+% \texttt{provide} option, \texttt{do not} get included in \cs{bbl@loaded}.
+%
+
+% \begin{macrocode}
+\tl_new:N \l_@@_ref_language_tl
+\tl_new:N \l_@@_current_language_tl
+\tl_new:N \l_@@_main_language_tl
+\AddToHook { begindocument }
+ {
+ \@@_if_package_loaded:nTF { babel }
+ {
+ \tl_set:Nn \l_@@_current_language_tl { \languagename }
+ \tl_set:Nn \l_@@_main_language_tl { \bbl@main@language }
+ }
+ {
+ \@@_if_package_loaded:nTF { polyglossia }
+ {
+ \tl_set:Nn \l_@@_current_language_tl { \babelname }
+ \tl_set:Nn \l_@@_main_language_tl { \mainbabelname }
+ }
+ {
+ \tl_set:Nn \l_@@_current_language_tl { english }
+ \tl_set:Nn \l_@@_main_language_tl { english }
+ }
+ }
+% \end{macrocode}
+% Provide default value for \cs{l_@@_ref_language_tl} corresponding to option
+% \opt{current}, but do so outside of the \pkg{l3keys} machinery (that is,
+% instead of using \texttt{.initial:n}), so that we are able to distinguish
+% when the user actually gave the option, in which case the dictionary loading
+% is done verbosely, from when we are setting the default value (here), in
+% which case the dictionary loading is done silently.
+% \begin{macrocode}
+ \tl_set:Nn \l_@@_ref_language_tl
+ { \l_@@_current_language_tl }
+ }
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\keys_define:nn { zref-clever / reference }
+ {
+ lang .code:n =
+ {
+ \AddToHook { begindocument }
+ {
+ \str_case:nnF {#1}
+ {
+ { current }
+ {
+ \tl_set:Nn \l_@@_ref_language_tl
+ { \l_@@_current_language_tl }
+ \@@_provide_dictionary_verbose:x
+ { \l_@@_ref_language_tl }
+ }
+
+ { main }
+ {
+ \tl_set:Nn \l_@@_ref_language_tl
+ { \l_@@_main_language_tl }
+ \@@_provide_dictionary_verbose:x
+ { \l_@@_ref_language_tl }
+ }
+ }
+ {
+ \prop_if_in:NnTF \g_@@_languages_prop {#1}
+ { \tl_set:Nn \l_@@_ref_language_tl {#1} }
+ {
+ \msg_warning:nnn { zref-clever }
+ { unknown-language-opt } {#1}
+ \tl_set:Nn \l_@@_ref_language_tl
+ { \l_@@_current_language_tl }
+ }
+ \@@_provide_dictionary_verbose:x
+ { \l_@@_ref_language_tl }
+ }
+ }
+ } ,
+ lang .value_required:n = true ,
+ }
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\AddToHook { begindocument / before }
+ {
+ \AddToHook { begindocument }
+ {
+% \end{macrocode}
+% If any \opt{lang} option has been given by the user, the corresponding
+% language is already loaded, otherwise, ensure the default one
+% (\texttt{current}) gets loaded early, but not verbosely.
+% \begin{macrocode}
+ \@@_provide_dictionary:x { \l_@@_ref_language_tl }
+% \end{macrocode}
+% Redefinition of the \texttt{lang} key option for the document body. Also,
+% drop the verbose dictionary loading in the document body, as it can become
+% intrusive depending on the use case, and does not provide much ``juice''
+% anyway: in \cs{zcref} missing names warnings will already ensue.
+% \begin{macrocode}
+ \keys_define:nn { zref-clever / reference }
+ {
+ lang .code:n =
+ {
+ \str_case:nnF {#1}
+ {
+ { current }
+ {
+ \tl_set:Nn \l_@@_ref_language_tl
+ { \l_@@_current_language_tl }
+ \@@_provide_dictionary:x
+ { \l_@@_ref_language_tl }
+ }
+
+ { main }
+ {
+ \tl_set:Nn \l_@@_ref_language_tl
+ { \l_@@_main_language_tl }
+ \@@_provide_dictionary:x
+ { \l_@@_ref_language_tl }
+ }
+ }
+ {
+ \prop_if_in:NnTF \g_@@_languages_prop {#1}
+ { \tl_set:Nn \l_@@_ref_language_tl {#1} }
+ {
+ \msg_warning:nnn { zref-clever }
+ { unknown-language-opt } {#1}
+ \tl_set:Nn \l_@@_ref_language_tl
+ { \l_@@_current_language_tl }
+ }
+ \@@_provide_dictionary:x
+ { \l_@@_ref_language_tl }
+ }
+ } ,
+ lang .value_required:n = true ,
+ }
+ }
+ }
+% \end{macrocode}
+%
+%
+%
+% \subsubsection*{\opt{d} option}
+%
+% For setting the declension case. Short for convenience and for not
+% polluting the markup too much given that, for languages that need it, it may
+% get to be used frequently.
+%
+% Thanks \texttt{@samcarter} and Alan Munn for useful comments about
+% declension on the TeX.SX chat. Also, Florent Rougon's efforts in this area,
+% with the \pkg{xcref} package (\url{https://github.com/frougon/xcref}), have
+% been an insightful source to frame the problem in general terms.
+%
+% \begin{macrocode}
+\tl_new:N \l_@@_ref_decl_case_tl
+\keys_define:nn { zref-clever / reference }
+ {
+ d .code:n =
+ { \msg_warning:nnn { zref-clever } { option-document-only } { d } } ,
+ }
+\AddToHook { begindocument }
+ {
+ \keys_define:nn { zref-clever / reference }
+ {
+% \end{macrocode}
+% We just store the value at this point, which is validated by
+% \cs{@@_process_language_options:} after \cs{keys_set:nn}.
+% \begin{macrocode}
+ d .tl_set:N = \l_@@_ref_decl_case_tl ,
+ d .value_required:n = true ,
+ }
+ }
+% \end{macrocode}
+%
+%
+%
+% \subsubsection*{\opt{nudge} \& co.\ options}
+%
+% \begin{macrocode}
+\bool_new:N \l_@@_nudge_enabled_bool
+\bool_new:N \l_@@_nudge_multitype_bool
+\bool_new:N \l_@@_nudge_comptosing_bool
+\bool_new:N \l_@@_nudge_singular_bool
+\bool_new:N \l_@@_nudge_gender_bool
+\tl_new:N \l_@@_ref_gender_tl
+\keys_define:nn { zref-clever / reference }
+ {
+ nudge .choice: ,
+ nudge / true .code:n =
+ { \bool_set_true:N \l_@@_nudge_enabled_bool } ,
+ nudge / false .code:n =
+ { \bool_set_false:N \l_@@_nudge_enabled_bool } ,
+ nudge / ifdraft .code:n =
+ {
+ \ifdraft
+ { \bool_set_false:N \l_@@_nudge_enabled_bool }
+ { \bool_set_true:N \l_@@_nudge_enabled_bool }
+ } ,
+ nudge / iffinal .code:n =
+ {
+ \ifoptionfinal
+ { \bool_set_true:N \l_@@_nudge_enabled_bool }
+ { \bool_set_false:N \l_@@_nudge_enabled_bool }
+ } ,
+ nudge .initial:n = false ,
+ nudge .default:n = true ,
+ nonudge .meta:n = { nudge = false } ,
+ nonudge .value_forbidden:n = true ,
+ nudgeif .code:n =
+ {
+ \bool_set_false:N \l_@@_nudge_multitype_bool
+ \bool_set_false:N \l_@@_nudge_comptosing_bool
+ \bool_set_false:N \l_@@_nudge_gender_bool
+ \clist_map_inline:nn {#1}
+ {
+ \str_case:nnF {##1}
+ {
+ { multitype }
+ { \bool_set_true:N \l_@@_nudge_multitype_bool }
+ { comptosing }
+ { \bool_set_true:N \l_@@_nudge_comptosing_bool }
+ { gender }
+ { \bool_set_true:N \l_@@_nudge_gender_bool }
+ { all }
+ {
+ \bool_set_true:N \l_@@_nudge_multitype_bool
+ \bool_set_true:N \l_@@_nudge_comptosing_bool
+ \bool_set_true:N \l_@@_nudge_gender_bool
+ }
+ }
+ {
+ \msg_warning:nnn { zref-clever }
+ { nudgeif-unknown-value } {##1}
+ }
+ }
+ } ,
+ nudgeif .value_required:n = true ,
+ nudgeif .initial:n = all ,
+ sg .bool_set:N = \l_@@_nudge_singular_bool ,
+ sg .initial:n = false ,
+ sg .default:n = true ,
+ g .code:n =
+ { \msg_warning:nnn { zref-clever } { option-document-only } { g } } ,
+ }
+\AddToHook { begindocument }
+ {
+ \keys_define:nn { zref-clever / reference }
+ {
+% \end{macrocode}
+% We just store the value at this point, which is validated by
+% \cs{@@_process_language_options:} after \cs{keys_set:nn}.
+% \begin{macrocode}
+ g .tl_set:N = \l_@@_ref_gender_tl ,
+ g .value_required:n = true ,
+ }
+ }
+% \end{macrocode}
+%
+%
+%
+% \subsubsection*{\opt{font} option}
+%
+% \opt{font} \emph{can't be used as a package option}, since the options get
+% expanded by \LaTeX{} before being passed to the package (see
+% \url{https://tex.stackexchange.com/a/489570}). It can be set in \cs{zcref}
+% and, for global settings, with \cs{zcsetup}. Note that, technically, the
+% ``raw'' options are already available as \cs{@raw@opt@\meta{package}.sty}
+% (see \url{https://tex.stackexchange.com/a/618439}, thanks David Carlisle).
+%
+% \begin{macrocode}
+\tl_new:N \l_@@_ref_typeset_font_tl
+\keys_define:nn { zref-clever / reference }
+ { font .tl_set:N = \l_@@_ref_typeset_font_tl }
+% \end{macrocode}
+%
+%
+%
+% \subsubsection*{\opt{titleref} option}
+%
+% \begin{macrocode}
+\keys_define:nn { zref-clever / reference }
+ {
+ titleref .code:n = { \RequirePackage { zref-titleref } } ,
+ titleref .value_forbidden:n = true ,
+ }
+\AddToHook { begindocument }
+ {
+ \keys_define:nn { zref-clever / reference }
+ {
+ titleref .code:n =
+ { \msg_warning:nn { zref-clever } { titleref-preamble-only } }
+ }
+ }
+% \end{macrocode}
+%
+%
+% \subsubsection*{\opt{note} option}
+%
+% \begin{macrocode}
+\tl_new:N \l_@@_zcref_note_tl
+\keys_define:nn { zref-clever / reference }
+ {
+ note .tl_set:N = \l_@@_zcref_note_tl ,
+ note .value_required:n = true ,
+ }
+% \end{macrocode}
+%
+%
+% \subsubsection*{\opt{check} option}
+%
+% Integration with \pkg{zref-check}.
+%
+% \begin{macrocode}
+\bool_new:N \l_@@_zrefcheck_available_bool
+\bool_new:N \l_@@_zcref_with_check_bool
+\keys_define:nn { zref-clever / reference }
+ {
+ check .code:n = { \RequirePackage { zref-check } } ,
+ check .value_forbidden:n = true ,
+ }
+\AddToHook { begindocument }
+ {
+ \@@_if_package_loaded:nTF { zref-check }
+ {
+ \bool_set_true:N \l_@@_zrefcheck_available_bool
+ \keys_define:nn { zref-clever / reference }
+ {
+ check .code:n =
+ {
+ \bool_set_true:N \l_@@_zcref_with_check_bool
+ \keys_set:nn { zref-check / zcheck } {#1}
+ } ,
+ check .value_required:n = true ,
+ }
+ }
+ {
+ \bool_set_false:N \l_@@_zrefcheck_available_bool
+ \keys_define:nn { zref-clever / reference }
+ {
+ check .value_forbidden:n = false ,
+ check .code:n =
+ { \msg_warning:nn { zref-clever } { missing-zref-check } } ,
+ }
+ }
+ }
+% \end{macrocode}
+%
+%
+% \subsubsection*{\opt{countertype} option}
+%
+% \cs{l_@@_counter_type_prop} is used by \texttt{zc@type} property, and stores
+% a mapping from ``counter'' to ``reference type''. Only those counters whose
+% type name is different from that of the counter need to be specified, since
+% \texttt{zc@type} presumes the counter as the type if the counter is not
+% found in \cs{l_@@_counter_type_prop}.
+%
+% \begin{macrocode}
+\prop_new:N \l_@@_counter_type_prop
+\keys_define:nn { zref-clever / label }
+ {
+ countertype .code:n =
+ {
+ \keyval_parse:nnn
+ {
+ \msg_warning:nnnn { zref-clever }
+ { key-requires-value } { countertype }
+ }
+ {
+ \@@_prop_put_non_empty:Nnn
+ \l_@@_counter_type_prop
+ }
+ {#1}
+ } ,
+ countertype .value_required:n = true ,
+ countertype .initial:n =
+ {
+ subsection = section ,
+ subsubsection = section ,
+ subparagraph = paragraph ,
+ enumi = item ,
+ enumii = item ,
+ enumiii = item ,
+ enumiv = item ,
+ mpfootnote = footnote ,
+ } ,
+ }
+% \end{macrocode}
+%
+%
+% \subsubsection*{\opt{counterresetters} option}
+%
+% \cs{l_@@_counter_resetters_seq} is used by \cs{@@_counter_reset_by:n} to
+% populate the \texttt{zc@enclval} property, and stores the list of counters
+% which are potential ``enclosing counters'' for other counters. This option
+% is constructed such that users can only \emph{add} items to the variable.
+% There would be little gain and some risk in allowing removal, and the syntax
+% of the option would become unnecessarily more complicated. Besides, users
+% can already override, for any particular counter, the search done from the
+% set in \cs{l_@@_counter_resetters_seq} with the \opt{counterresetby} option.
+%
+% \begin{macrocode}
+\seq_new:N \l_@@_counter_resetters_seq
+\keys_define:nn { zref-clever / label }
+ {
+ counterresetters .code:n =
+ {
+ \clist_map_inline:nn {#1}
+ {
+ \seq_if_in:NnF \l_@@_counter_resetters_seq {##1}
+ {
+ \seq_put_right:Nn
+ \l_@@_counter_resetters_seq {##1}
+ }
+ }
+ } ,
+ counterresetters .initial:n =
+ {
+ part ,
+ chapter ,
+ section ,
+ subsection ,
+ subsubsection ,
+ paragraph ,
+ subparagraph ,
+ },
+ counterresetters .value_required:n = true ,
+ }
+% \end{macrocode}
+%
+%
+%
+% \subsubsection*{\opt{counterresetby} option}
+%
+% \cs{l_@@_counter_resetby_prop} is used by \cs{@@_counter_reset_by:n} to
+% populate the \texttt{zc@enclval} property, and stores a mapping from
+% counters to the counter which resets each of them. This mapping has
+% precedence in \cs{@@_counter_reset_by:n} over the search through
+% \cs{l_@@_counter_resetters_seq}.
+%
+% \begin{macrocode}
+\prop_new:N \l_@@_counter_resetby_prop
+\keys_define:nn { zref-clever / label }
+ {
+ counterresetby .code:n =
+ {
+ \keyval_parse:nnn
+ {
+ \msg_warning:nnn { zref-clever }
+ { key-requires-value } { counterresetby }
+ }
+ {
+ \@@_prop_put_non_empty:Nnn
+ \l_@@_counter_resetby_prop
+ }
+ {#1}
+ } ,
+ counterresetby .value_required:n = true ,
+ counterresetby .initial:n =
+ {
+% \end{macrocode}
+% The counters for the \texttt{enumerate} environment do not use the regular
+% counter machinery for resetting on each level, but are nested nevertheless
+% by other means, treat them as exception.
+% \begin{macrocode}
+ enumii = enumi ,
+ enumiii = enumii ,
+ enumiv = enumiii ,
+ } ,
+ }
+% \end{macrocode}
+%
+%
+% \subsubsection*{\opt{currentcounter} option}
+%
+% \cs{l_@@_current_counter_tl} is pretty much the starting point of all of the
+% data specification for label setting done by \pkg{zref} with our setup for
+% it. It exists because we must provide some ``handle'' to specify the
+% current counter for packages/features that do not set \cs{@currentcounter}
+% appropriately.
+%
+% \begin{macrocode}
+\tl_new:N \l_@@_current_counter_tl
+\keys_define:nn { zref-clever / label }
+ {
+ currentcounter .tl_set:N = \l_@@_current_counter_tl ,
+ currentcounter .value_required:n = true ,
+ currentcounter .initial:n = \@currentcounter ,
+ }
+% \end{macrocode}
+%
+%
+% \subsubsection*{\opt{nocompat} option}
+%
+%
+% \begin{macrocode}
+\bool_new:N \g_@@_nocompat_bool
+\seq_new:N \g_@@_nocompat_modules_seq
+\keys_define:nn { zref-clever / reference }
+ {
+ nocompat .code:n =
+ {
+ \tl_if_empty:nTF {#1}
+ { \bool_gset_true:N \g_@@_nocompat_bool }
+ {
+ \clist_map_inline:nn {#1}
+ {
+ \seq_if_in:NnF \g_@@_nocompat_modules_seq {##1}
+ {
+ \seq_gput_right:Nn
+ \g_@@_nocompat_modules_seq {##1}
+ }
+ }
+ }
+ } ,
+ }
+\AddToHook { begindocument }
+ {
+ \keys_define:nn { zref-clever / reference }
+ {
+ nocompat .code:n =
+ {
+ \msg_warning:nnn { zref-clever }
+ { option-preamble-only } { nocompat }
+ }
+ }
+ }
+\AtEndOfPackage
+ {
+ \AddToHook { begindocument }
+ {
+ \seq_map_inline:Nn \g_@@_nocompat_modules_seq
+ { \msg_warning:nnn { zref-clever } { unknown-compat-module } {#1} }
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macro}{\@@_compat_module:nn}
+% Function to be used for compatibility modules loading. It should load the
+% module as long as \cs{l_@@_nocompat_bool} is false and \meta{module} is
+% not in \cs{l_@@_nocompat_modules_seq}. The \texttt{begindocument} hook is
+% needed so that we can have the option functional along the whole preamble,
+% not just at package load time. This requirement might be relaxed if we
+% made the option only available at load time, but this would not buy us
+% much leeway anyway, since for most compatibility modules, we must test for
+% the presence of packages at \texttt{begindocument}, only kernel features
+% and document classes could be checked reliably before that. Besides,
+% since we are using the new hook management system, there is always its
+% functionality to deal with potential loading order issues.
+% \begin{syntax}
+% \cs{@@_compat_module:nn} \Arg{module} \Arg{code}
+% \end{syntax}
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_compat_module:nn #1#2
+ {
+ \AddToHook { begindocument }
+ {
+ \bool_if:NF \g_@@_nocompat_bool
+ { \seq_if_in:NnF \g_@@_nocompat_modules_seq {#1} {#2} }
+ \seq_gremove_all:Nn \g_@@_nocompat_modules_seq {#1}
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsubsection*{Reference options}
+% \zlabel{sec:reference-options}
+%
+% This is a set of options related to reference typesetting which receive
+% equal treatment and, hence, are handled in batch. Since we are dealing with
+% options to be passed to \cs{zcref} or to \cs{zcsetup} or at load time, only
+% ``not necessarily type-specific'' options are pertinent here. However, they
+% \emph{may} either be type-specific or language-specific, and thus must be
+% stored in a property list, \cs{l_@@_ref_options_prop}, in order to be
+% retrieved from the option \emph{name} by \cs{@@_get_ref_string:nN} and
+% \cs{@@_get_ref_font:nN} according to context and precedence rules.
+%
+% The keys are set so that any value, including an empty one, is added to
+% \cs{l_@@_ref_options_prop}, while a key with \emph{no value} removes the
+% property from the list, so that these options can then fall back to lower
+% precedence levels settings. For discussion about the used technique, see
+% \zcref{sec:zcreftypesetup}.
+%
+% \begin{macrocode}
+\prop_new:N \l_@@_ref_options_prop
+\seq_map_inline:Nn
+ \c_@@_ref_options_reference_seq
+ {
+ \keys_define:nn { zref-clever / reference }
+ {
+ #1 .default:V = \c_novalue_tl ,
+ #1 .code:n =
+ {
+ \tl_if_novalue:nTF {##1}
+ { \prop_remove:Nn \l_@@_ref_options_prop {#1} }
+ { \prop_put:Nnn \l_@@_ref_options_prop {#1} {##1} }
+ } ,
+ }
+ }
+% \end{macrocode}
+%
+%
+%
+% \subsubsection*{Package options}
+%
+% The options have been separated in two different groups, so that we can
+% potentially apply them selectively to different contexts: \texttt{label} and
+% \texttt{reference}. Currently, the only use of this selection is the
+% ability to exclude label related options from \cs{zcref}'s options. Anyway,
+% for load-time package options and for \cs{zcsetup} we want the whole set, so
+% we aggregate the two into \texttt{zref-clever/zcsetup}, and use that here.
+%
+% \begin{macrocode}
+\keys_define:nn { }
+ {
+ zref-clever / zcsetup .inherit:n =
+ {
+ zref-clever / label ,
+ zref-clever / reference ,
+ }
+ }
+% \end{macrocode}
+%
+%
+% Process load-time package options
+% (\url{https://tex.stackexchange.com/a/15840}).
+% \begin{macrocode}
+\ProcessKeysOptions { zref-clever / zcsetup }
+% \end{macrocode}
+%
+%
+%
+% \section{Configuration}
+%
+% \subsection{\cs{zcsetup}}
+%
+%
+% \begin{macro}[int]{\zcsetup}
+% Provide \cs{zcsetup}.
+% \begin{syntax}
+% \cs{zcsetup}\marg{options}
+% \end{syntax}
+% \begin{macrocode}
+\NewDocumentCommand \zcsetup { m }
+ { \@@_zcsetup:n {#1} }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_zcsetup:n}
+% A version of \cs{zcsetup} for internal use with variant.
+% \begin{syntax}
+% \cs{@@_zcsetup:n}\marg{options}
+% \end{syntax}
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_zcsetup:n #1
+ { \keys_set:nn { zref-clever / zcsetup } {#1} }
+\cs_generate_variant:Nn \@@_zcsetup:n { x }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsection{\cs{zcRefTypeSetup}}
+% \zlabel{sec:zcreftypesetup}
+%
+% \cs{zcRefTypeSetup} is the main user interface for ``type-specific''
+% reference formatting. Settings done by this command have a higher
+% precedence than any translation, hence they override any language-specific
+% setting, either done at \cs{zcLanguageSetup} or by the package's
+% dictionaries. On the other hand, they have a lower precedence than non
+% type-specific general options. The \meta{options} should be given in the
+% usual \texttt{key=val} format. The \meta{type} does not need to pre-exist,
+% the property list variable to store the properties for the type gets created
+% if need be.
+%
+% \begin{macro}[int]{\zcRefTypeSetup}
+% \begin{syntax}
+% \cs{zcRefTypeSetup} \marg{type} \marg{options}
+% \end{syntax}
+% \begin{macrocode}
+\NewDocumentCommand \zcRefTypeSetup { m m }
+ {
+ \prop_if_exist:cF { l_@@_type_ #1 _options_prop }
+ { \prop_new:c { l_@@_type_ #1 _options_prop } }
+ \tl_set:Nn \l_@@_setup_type_tl {#1}
+ \keys_set:nn { zref-clever / typesetup } {#2}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% Inside \cs{zcRefTypeSetup} any of the options \emph{can} receive empty
+% values, and those values, if they exist in the property list, will override
+% translations, regardless of their emptiness. In principle, we could live
+% with the situation of, once a setting has been made in
+% \cs{l_@@_type_<type>_options_prop} or in \cs{l_@@_ref_options_prop} it stays
+% there forever, and can only be overridden by a new value at the same
+% precedence level or a higher one. But it would be nice if an user can
+% ``unset'' an option at either of those scopes to go back to the lower
+% precedence level of the translations at any given point. So both in
+% \cs{zcRefTypeSetup} and in setting reference options (see
+% \zcref{sec:reference-options}), we leverage the distinction of an ``empty
+% valued key'' (\texttt{key=} or \texttt{key=\{\}}) from a ``key with no
+% value'' (\texttt{key}). This distinction is captured internally by the
+% lower-level key parsing, but must be made explicit at \cs{keys_set:nn} by
+% means of the \texttt{.default:V} property of the key in \cs{keys_define:nn}.
+% For the technique and some discussion about it, see
+% \url{https://tex.stackexchange.com/q/614690} (thanks Jonathan P.\ Spratte,
+% aka `Skillmon', and Phelype Oleinik) and
+% \url{https://github.com/latex3/latex3/pull/988}.
+%
+% \begin{macrocode}
+\seq_map_inline:Nn
+ \c_@@_ref_options_necessarily_not_type_specific_seq
+ {
+ \keys_define:nn { zref-clever / typesetup }
+ {
+ #1 .code:n =
+ {
+ \msg_warning:nnn { zref-clever }
+ { option-not-type-specific } {#1}
+ } ,
+ }
+ }
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\seq_map_inline:Nn
+ \c_@@_ref_options_typesetup_seq
+ {
+ \keys_define:nn { zref-clever / typesetup }
+ {
+ #1 .default:V = \c_novalue_tl ,
+ #1 .code:n =
+ {
+ \tl_if_novalue:nTF {##1}
+ {
+ \prop_remove:cn
+ {
+ l_@@_type_
+ \l_@@_setup_type_tl _options_prop
+ }
+ {#1}
+ }
+ {
+ \prop_put:cnn
+ {
+ l_@@_type_
+ \l_@@_setup_type_tl _options_prop
+ }
+ {#1} {##1}
+ }
+ } ,
+ }
+ }
+% \end{macrocode}
+%
+%
+%
+% \subsection{\cs{zcLanguageSetup}}
+%
+% \cs{zcLanguageSetup} is the main user interface for ``language-specific''
+% reference formatting, be it ``type-specific'' or not. The difference
+% between the two cases is captured by the \texttt{type} key, which works as a
+% sort of a ``switch''. Inside the \meta{options} argument of
+% \cs{zcLanguageSetup}, any options made before the first \texttt{type} key
+% declare ``default'' (non type-specific) translations. When the
+% \texttt{type} key is given with a value, the options following it will set
+% ``type-specific'' translations for that type. The current type can be
+% switched off by an empty \texttt{type} key. \cs{zcLanguageSetup} is
+% preamble only.
+%
+% \begin{macro}[int]{\zcLanguageSetup}
+% \begin{syntax}
+% \cs{zcLanguageSetup}\marg{language}\marg{options}
+% \end{syntax}
+% \begin{macrocode}
+\NewDocumentCommand \zcLanguageSetup { m m }
+ {
+ \group_begin:
+ \prop_get:NnNTF \g_@@_languages_prop {#1}
+ \l_@@_dict_language_tl
+ {
+ \tl_clear:N \l_@@_setup_type_tl
+ \exp_args:NNx \seq_set_from_clist:Nn
+ \l_@@_dict_declension_seq
+ {
+ \prop_item:cn
+ {
+ g_@@_dict_
+ \l_@@_dict_language_tl _prop
+ }
+ { declension }
+ }
+ \seq_if_empty:NTF \l_@@_dict_declension_seq
+ { \tl_clear:N \l_@@_dict_decl_case_tl }
+ {
+ \seq_get_left:NN \l_@@_dict_declension_seq
+ \l_@@_dict_decl_case_tl
+ }
+ \exp_args:NNx \seq_set_from_clist:Nn
+ \l_@@_dict_gender_seq
+ {
+ \prop_item:cn
+ {
+ g_@@_dict_
+ \l_@@_dict_language_tl _prop
+ }
+ { gender }
+ }
+ \keys_set:nn { zref-clever / langsetup } {#2}
+ }
+ { \msg_warning:nnn { zref-clever } { unknown-language-setup } {#1} }
+ \group_end:
+ }
+\@onlypreamble \zcLanguageSetup
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}
+% {
+% \@@_declare_type_transl:nnnn ,
+% \@@_declare_default_transl:nnn ,
+% }
+% A couple of auxiliary functions for the of
+% \texttt{{zref-clever/translation}} keys set in \cs{zcLanguageSetup}. They
+% respectively declare (unconditionally set) ``type-specific'' and
+% ``default'' translations.
+% \begin{syntax}
+% \cs{@@_declare_type_transl:nnnn} \Arg{language} \Arg{type}
+% ~~\Arg{key} \Arg{translation}
+% \cs{@@_declare_default_transl:nnn} \Arg{language}
+% ~~\Arg{key} \Arg{translation}
+% \end{syntax}
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_declare_type_transl:nnnn #1#2#3#4
+ {
+ \prop_gput:cnn { g_@@_dict_ #1 _prop }
+ { type- #2 - #3 } {#4}
+ }
+\cs_generate_variant:Nn \@@_declare_type_transl:nnnn { VVnn , VVxn }
+\cs_new_protected:Npn \@@_declare_default_transl:nnn #1#2#3
+ {
+ \prop_gput:cnn { g_@@_dict_ #1 _prop }
+ { default- #2 } {#3}
+ }
+\cs_generate_variant:Nn \@@_declare_default_transl:nnn { Vnn }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% The set of keys for \texttt{{zref-clever/langsetup}}, which is used to
+% set language-specific translations in \cs{zcLanguageSetup}.
+%
+% \begin{macrocode}
+\keys_define:nn { zref-clever / langsetup }
+ {
+ type .code:n =
+ {
+ \tl_if_empty:nTF {#1}
+ { \tl_clear:N \l_@@_setup_type_tl }
+ { \tl_set:Nn \l_@@_setup_type_tl {#1} }
+ } ,
+ case .code:n =
+ {
+ \seq_if_empty:NTF \l_@@_dict_declension_seq
+ {
+ \msg_warning:nnxx { zref-clever } { language-no-decl-setup }
+ { \l_@@_dict_language_tl } {#1}
+ }
+ {
+ \seq_if_in:NnTF \l_@@_dict_declension_seq {#1}
+ { \tl_set:Nn \l_@@_dict_decl_case_tl {#1} }
+ {
+ \msg_warning:nnxx { zref-clever } { unknown-decl-case }
+ {#1} { \l_@@_dict_language_tl }
+ \seq_get_left:NN \l_@@_dict_declension_seq
+ \l_@@_dict_decl_case_tl
+ }
+ }
+ } ,
+ case .value_required:n = true ,
+ gender .code:n =
+ {
+ \seq_if_empty:NTF \l_@@_dict_gender_seq
+ {
+ \msg_warning:nnxxx { zref-clever } { language-no-gender }
+ { \l_@@_dict_language_tl } { gender } {#1}
+ }
+ {
+ \tl_if_empty:NTF \l_@@_setup_type_tl
+ {
+ \msg_warning:nnn { zref-clever }
+ { option-only-type-specific } { gender }
+ }
+ {
+ \seq_if_in:NnTF \l_@@_dict_gender_seq {#1}
+ {
+ \@@_declare_type_transl:VVnn
+ \l_@@_dict_language_tl
+ \l_@@_setup_type_tl
+ { gender } {#1}
+ }
+ {
+ \msg_warning:nnxx { zref-clever } { gender-not-declared }
+ { \l_@@_dict_language_tl } {#1}
+ }
+ }
+ }
+ } ,
+ gender .value_required:n = true ,
+ }
+\seq_map_inline:Nn
+ \c_@@_ref_options_necessarily_not_type_specific_seq
+ {
+ \keys_define:nn { zref-clever / langsetup }
+ {
+ #1 .value_required:n = true ,
+ #1 .code:n =
+ {
+ \tl_if_empty:NTF \l_@@_setup_type_tl
+ {
+ \@@_declare_default_transl:Vnn
+ \l_@@_dict_language_tl
+ {#1} {##1}
+ }
+ {
+ \msg_warning:nnn { zref-clever }
+ { option-not-type-specific } {#1}
+ }
+ } ,
+ }
+ }
+\seq_map_inline:Nn
+ \c_@@_ref_options_possibly_type_specific_seq
+ {
+ \keys_define:nn { zref-clever / langsetup }
+ {
+ #1 .value_required:n = true ,
+ #1 .code:n =
+ {
+ \tl_if_empty:NTF \l_@@_setup_type_tl
+ {
+ \@@_declare_default_transl:Vnn
+ \l_@@_dict_language_tl
+ {#1} {##1}
+ }
+ {
+ \@@_declare_type_transl:VVnn
+ \l_@@_dict_language_tl
+ \l_@@_setup_type_tl
+ {#1} {##1}
+ }
+ } ,
+ }
+ }
+\seq_map_inline:Nn
+ \c_@@_ref_options_type_names_seq
+ {
+ \keys_define:nn { zref-clever / langsetup }
+ {
+ #1 .value_required:n = true ,
+ #1 .code:n =
+ {
+ \tl_if_empty:NTF \l_@@_setup_type_tl
+ {
+ \msg_warning:nnn { zref-clever }
+ { option-only-type-specific } {#1}
+ }
+ {
+ \tl_if_empty:NTF \l_@@_dict_decl_case_tl
+ {
+ \@@_declare_type_transl:VVnn
+ \l_@@_dict_language_tl
+ \l_@@_setup_type_tl
+ {#1} {##1}
+ }
+ {
+ \@@_declare_type_transl:VVxn
+ \l_@@_dict_language_tl
+ \l_@@_setup_type_tl
+ { \l_@@_dict_decl_case_tl - #1 } {##1}
+ }
+ }
+ } ,
+ }
+ }
+% \end{macrocode}
+%
+%
+%
+% \section{User interface}
+%
+% \subsection{\cs{zcref}}
+%
+%
+% \begin{macro}[int]{\zcref}
+% The main user command of the package.
+% \begin{syntax}
+% \cs{zcref}\meta{*}\oarg{options}\marg{labels}
+% \end{syntax}
+% \begin{macrocode}
+\NewDocumentCommand \zcref { s O { } m }
+ { \zref@wrapper@babel \@@_zcref:nnn {#3} {#1} {#2} }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@@_zcref:nnnn}
+% An intermediate internal function, which does the actual heavy lifting,
+% and places \Arg{labels} as first argument, so that it can be protected by
+% \cs{zref@wrapper@babel} in \cs{zcref}.
+% \begin{syntax}
+% \cs{@@_zcref:nnnn} \Arg{labels} \Arg{*} \Arg{options}
+% \end{syntax}
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_zcref:nnn #1#2#3
+ {
+ \group_begin:
+% \end{macrocode}
+% Set options.
+% \begin{macrocode}
+ \keys_set:nn { zref-clever / reference } {#3}
+% \end{macrocode}
+% Store arguments values.
+% \begin{macrocode}
+ \seq_set_from_clist:Nn \l_@@_zcref_labels_seq {#1}
+ \bool_set:Nn \l_@@_link_star_bool {#2}
+% \end{macrocode}
+% Ensure dictionary for reference language is loaded, if available. We cannot
+% rely on \cs{keys_set:nn} for the task, since if the \opt{lang} option is set
+% for \texttt{current}, the actual language may have changed outside our
+% control. \cs{@@_provide_dictionary:x} does nothing if the dictionary is
+% already loaded.
+% \begin{macrocode}
+ \@@_provide_dictionary:x { \l_@@_ref_language_tl }
+% \end{macrocode}
+% Process \cs{zcDeclareLanguage} options.
+% \begin{macrocode}
+ \@@_process_language_options:
+% \end{macrocode}
+% Integration with \pkg{zref-check}.
+% \begin{macrocode}
+ \bool_lazy_and:nnT
+ { \l_@@_zrefcheck_available_bool }
+ { \l_@@_zcref_with_check_bool }
+ { \zrefcheck_zcref_beg_label: }
+% \end{macrocode}
+% Sort the labels.
+% \begin{macrocode}
+ \bool_lazy_or:nnT
+ { \l_@@_typeset_sort_bool }
+ { \l_@@_typeset_range_bool }
+ { \@@_sort_labels: }
+% \end{macrocode}
+% Typeset the references. Also, set the reference font, and group it, so that
+% it does not leak to the note.
+% \begin{macrocode}
+ \group_begin:
+ \l_@@_ref_typeset_font_tl
+ \@@_typeset_refs:
+ \group_end:
+% \end{macrocode}
+% Typeset \texttt{note}.
+% \begin{macrocode}
+ \tl_if_empty:NF \l_@@_zcref_note_tl
+ {
+ \@@_get_ref_string:nN { notesep } \l_tmpa_tl
+ \l_tmpa_tl
+ \l_@@_zcref_note_tl
+ }
+% \end{macrocode}
+% Integration with \pkg{zref-check}.
+% \begin{macrocode}
+ \bool_lazy_and:nnT
+ { \l_@@_zrefcheck_available_bool }
+ { \l_@@_zcref_with_check_bool }
+ {
+ \zrefcheck_zcref_end_label_maybe:
+ \zrefcheck_zcref_run_checks_on_labels:n
+ { \l_@@_zcref_labels_seq }
+ }
+% \end{macrocode}
+% Integration with \pkg{mathtools}.
+% \begin{macrocode}
+ \bool_if:NT \l_@@_mathtools_showonlyrefs_bool
+ {
+ \@@_mathtools_showonlyrefs:n
+ { \l_@@_zcref_labels_seq }
+ }
+ \group_end:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_@@_zcref_labels_seq, \l_@@_link_star_bool}
+% \begin{macrocode}
+\seq_new:N \l_@@_zcref_labels_seq
+\bool_new:N \l_@@_link_star_bool
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsection{\cs{zcpageref}}
+%
+%
+% \begin{macro}[int]{\zcpageref}
+% A \cs{pageref} equivalent of \cs{zcref}.
+% \begin{syntax}
+% \cs{zcpageref}\meta{*}\oarg{options}\marg{labels}
+% \end{syntax}
+% \begin{macrocode}
+\NewDocumentCommand \zcpageref { s O { } m }
+ {
+ \IfBooleanTF {#1}
+ { \zcref*[#2, ref = page] {#3} }
+ { \zcref [#2, ref = page] {#3} }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \section{Sorting}
+%
+% Sorting is certainly a ``big task'' for \pkg{zref-clever} but, in the end,
+% it boils down to ``carefully done branching'', and quite some of it. The
+% sorting of ``page'' references is very much lightened by the availability of
+% \texttt{abspage}, from the \pkg{zref-abspage} module, which offers ``just
+% what we need'' for our purposes. The sorting of ``default'' references
+% falls on two main cases: i) labels of the same type; ii) labels of different
+% types. The first case is sorted according to the priorities set by the
+% \opt{typesort} option or, if that is silent for the case, by the order in
+% which labels were given by the user in \cs{zcref}. The second case is the
+% most involved one, since it is possible for multiple counters to be bundled
+% together in a single reference type. Because of this, sorting must take
+% into account the whole chain of ``enclosing counters'' for the counters of
+% the labels at hand.
+%
+% \begin{macro}
+% {
+% \l_@@_label_type_a_tl ,
+% \l_@@_label_type_b_tl ,
+% \l_@@_label_enclval_a_tl ,
+% \l_@@_label_enclval_b_tl ,
+% \l_@@_label_extdoc_a_tl ,
+% \l_@@_label_extdoc_b_tl ,
+% }
+% Auxiliary variables, for use in sorting, and some also in typesetting.
+% Used to store reference information -- label properties -- of the
+% ``current'' (\texttt{a}) and ``next'' (\texttt{b}) labels.
+% \begin{macrocode}
+\tl_new:N \l_@@_label_type_a_tl
+\tl_new:N \l_@@_label_type_b_tl
+\tl_new:N \l_@@_label_enclval_a_tl
+\tl_new:N \l_@@_label_enclval_b_tl
+\tl_new:N \l_@@_label_extdoc_a_tl
+\tl_new:N \l_@@_label_extdoc_b_tl
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_@@_sort_decided_bool}
+% Auxiliary variable for \cs{@@_sort_default_same_type:nn}, signals if the
+% sorting between two labels has been decided or not.
+% \begin{macrocode}
+\bool_new:N \l_@@_sort_decided_bool
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_@@_sort_prior_a_int,\l_@@_sort_prior_b_int}
+% Auxiliary variables for \cs{@@_sort_default_different_types:nn}. Store
+% the sort priority of the ``current'' and ``next'' labels.
+% \begin{macrocode}
+\int_new:N \l_@@_sort_prior_a_int
+\int_new:N \l_@@_sort_prior_b_int
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_@@_label_types_seq}
+% Stores the order in which reference types appear in the label list
+% supplied by the user in \cs{zcref}. This variable is populated by
+% \cs{@@_label_type_put_new_right:n} at the start of \cs{@@_sort_labels:}.
+% This order is required as a ``last resort'' sort criterion between the
+% reference types, for use in \cs{@@_sort_default_different_types:nn}.
+% \begin{macrocode}
+\seq_new:N \l_@@_label_types_seq
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@@_sort_labels:}
+% The main sorting function. It does not receive arguments, but it is
+% expected to be run inside \cs{@@_zcref:nnnn} where a number of environment
+% variables are to be set appropriately. In particular,
+% \cs{l_@@_zcref_labels_seq} should contain the labels received as argument
+% to \cs{zcref}, and the function performs its task by sorting this
+% variable.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_sort_labels:
+ {
+% \end{macrocode}
+% Store label types sequence.
+% \begin{macrocode}
+ \seq_clear:N \l_@@_label_types_seq
+ \tl_if_eq:NnF \l_@@_ref_property_tl { page }
+ {
+ \seq_map_function:NN \l_@@_zcref_labels_seq
+ \@@_label_type_put_new_right:n
+ }
+% \end{macrocode}
+% Sort.
+% \begin{macrocode}
+ \seq_sort:Nn \l_@@_zcref_labels_seq
+ {
+ \zref@ifrefundefined {##1}
+ {
+ \zref@ifrefundefined {##2}
+ {
+ % Neither label is defined.
+ \sort_return_same:
+ }
+ {
+ % The second label is defined, but the first isn't, leave the
+ % undefined first (to be more visible).
+ \sort_return_same:
+ }
+ }
+ {
+ \zref@ifrefundefined {##2}
+ {
+ % The first label is defined, but the second isn't, bring the
+ % second forward.
+ \sort_return_swapped:
+ }
+ {
+ % The interesting case: both labels are defined. References
+ % to the "default" property or to the "page" are quite
+ % different with regard to sorting, so we branch them here to
+ % specialized functions.
+ \tl_if_eq:NnTF \l_@@_ref_property_tl { page }
+ { \@@_sort_page:nn {##1} {##2} }
+ { \@@_sort_default:nn {##1} {##2} }
+ }
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_label_type_put_new_right:n}
+% Auxiliary function used to store the order in which reference types appear
+% in the label list supplied by the user in \cs{zcref}. It is expected to
+% be run inside \cs{@@_sort_labels:}, and stores the types sequence in
+% \cs{l_@@_label_types_seq}. I have tried to handle the same task inside
+% \cs{seq_sort:Nn} in \cs{@@_sort_labels:} to spare mapping over
+% \cs{l_@@_zcref_labels_seq}, but it turned out it not to be easy to rely on
+% the order the labels get processed at that point, since the variable is
+% being sorted there. Besides, the mapping is simple, not a particularly
+% expensive operation. Anyway, this keeps things clean.
+% \begin{syntax}
+% \cs{@@_label_type_put_new_right:n} \Arg{label}
+% \end{syntax}
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_label_type_put_new_right:n #1
+ {
+ \@@_def_extract:Nnnn
+ \l_@@_label_type_a_tl {#1} { zc@type } { \c_empty_tl }
+ \seq_if_in:NVF \l_@@_label_types_seq
+ \l_@@_label_type_a_tl
+ {
+ \seq_put_right:NV \l_@@_label_types_seq
+ \l_@@_label_type_a_tl
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@@_sort_default:nn}
+% The heavy-lifting function for sorting of defined labels for ``default''
+% references (that is, a standard reference, not to ``page''). This
+% function is expected to be called within the sorting loop of
+% \cs{@@_sort_labels:} and receives the pair of labels being considered for
+% a change of order or not. It should \emph{always} ``return'' either
+% \cs{sort_return_same:} or \cs{sort_return_swapped:}.
+% \begin{syntax}
+% \cs{@@_sort_default:nn} \Arg{label a} \Arg{label b}
+% \end{syntax}
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_sort_default:nn #1#2
+ {
+ \@@_def_extract:Nnnn
+ \l_@@_label_type_a_tl {#1} { zc@type } { zc@missingtype }
+ \@@_def_extract:Nnnn
+ \l_@@_label_type_b_tl {#2} { zc@type } { zc@missingtype }
+
+ \tl_if_eq:NNTF
+ \l_@@_label_type_a_tl
+ \l_@@_label_type_b_tl
+ { \@@_sort_default_same_type:nn {#1} {#2} }
+ { \@@_sort_default_different_types:nn {#1} {#2} }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@@_sort_default_same_type:nn}
+% \begin{syntax}
+% \cs{@@_sort_default_same_type:nn} \Arg{label a} \Arg{label b}
+% \end{syntax}
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_sort_default_same_type:nn #1#2
+ {
+ \@@_def_extract:Nnnn \l_@@_label_enclval_a_tl
+ {#1} { zc@enclval } { \c_empty_tl }
+ \tl_reverse:N \l_@@_label_enclval_a_tl
+ \@@_def_extract:Nnnn \l_@@_label_enclval_b_tl
+ {#2} { zc@enclval } { \c_empty_tl }
+ \tl_reverse:N \l_@@_label_enclval_b_tl
+ \@@_def_extract:Nnnn \l_@@_label_extdoc_a_tl
+ {#1} { externaldocument } { \c_empty_tl }
+ \@@_def_extract:Nnnn \l_@@_label_extdoc_b_tl
+ {#2} { externaldocument } { \c_empty_tl }
+
+ \bool_set_false:N \l_@@_sort_decided_bool
+
+ % First we check if there's any "external document" difference (coming
+ % from 'zref-xr') and, if so, sort based on that.
+ \tl_if_eq:NNF
+ \l_@@_label_extdoc_a_tl
+ \l_@@_label_extdoc_b_tl
+ {
+ \bool_if:nTF
+ {
+ \tl_if_empty_p:V \l_@@_label_extdoc_a_tl &&
+ ! \tl_if_empty_p:V \l_@@_label_extdoc_b_tl
+ }
+ {
+ \bool_set_true:N \l_@@_sort_decided_bool
+ \sort_return_same:
+ }
+ {
+ \bool_if:nTF
+ {
+ ! \tl_if_empty_p:V \l_@@_label_extdoc_a_tl &&
+ \tl_if_empty_p:V \l_@@_label_extdoc_b_tl
+ }
+ {
+ \bool_set_true:N \l_@@_sort_decided_bool
+ \sort_return_swapped:
+ }
+ {
+ \bool_set_true:N \l_@@_sort_decided_bool
+ % Two different "external documents": last resort, sort by the
+ % document name itself.
+ \str_compare:eNeTF
+ { \l_@@_label_extdoc_b_tl } <
+ { \l_@@_label_extdoc_a_tl }
+ { \sort_return_swapped: }
+ { \sort_return_same: }
+ }
+ }
+ }
+
+ \bool_until_do:Nn \l_@@_sort_decided_bool
+ {
+ \bool_if:nTF
+ {
+ % Both are empty: neither label has any (further) "enclosing
+ % counters" (left).
+ \tl_if_empty_p:V \l_@@_label_enclval_a_tl &&
+ \tl_if_empty_p:V \l_@@_label_enclval_b_tl
+ }
+ {
+ \bool_set_true:N \l_@@_sort_decided_bool
+ \int_compare:nNnTF
+ { \@@_extract:nnn {#1} { zc@cntval } { -1 } }
+ >
+ { \@@_extract:nnn {#2} { zc@cntval } { -1 } }
+ { \sort_return_swapped: }
+ { \sort_return_same: }
+ }
+ {
+ \bool_if:nTF
+ {
+ % `a' is empty (and `b' is not): `b' may be nested in `a'.
+ \tl_if_empty_p:V \l_@@_label_enclval_a_tl
+ }
+ {
+ \bool_set_true:N \l_@@_sort_decided_bool
+ \int_compare:nNnTF
+ { \@@_extract:nnn {#1} { zc@cntval } { } }
+ >
+ { \tl_head:N \l_@@_label_enclval_b_tl }
+ { \sort_return_swapped: }
+ { \sort_return_same: }
+ }
+ {
+ \bool_if:nTF
+ {
+ % `b' is empty (and `a' is not): `a' may be nested in `b'.
+ \tl_if_empty_p:V \l_@@_label_enclval_b_tl
+ }
+ {
+ \bool_set_true:N \l_@@_sort_decided_bool
+ \int_compare:nNnTF
+ { \tl_head:N \l_@@_label_enclval_a_tl }
+ <
+ { \@@_extract:nnn {#2} { zc@cntval } { } }
+ { \sort_return_same: }
+ { \sort_return_swapped: }
+ }
+ {
+ % Neither is empty: we can compare the values of the
+ % current enclosing counter in the loop, if they are
+ % equal, we are still in the loop, if they are not, a
+ % sorting decision can be made directly.
+ \int_compare:nNnTF
+ { \tl_head:N \l_@@_label_enclval_a_tl }
+ =
+ { \tl_head:N \l_@@_label_enclval_b_tl }
+ {
+ \tl_set:Nx \l_@@_label_enclval_a_tl
+ { \tl_tail:N \l_@@_label_enclval_a_tl }
+ \tl_set:Nx \l_@@_label_enclval_b_tl
+ { \tl_tail:N \l_@@_label_enclval_b_tl }
+ }
+ {
+ \bool_set_true:N \l_@@_sort_decided_bool
+ \int_compare:nNnTF
+ { \tl_head:N \l_@@_label_enclval_a_tl }
+ >
+ { \tl_head:N \l_@@_label_enclval_b_tl }
+ { \sort_return_swapped: }
+ { \sort_return_same: }
+ }
+ }
+ }
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@@_sort_default_different_types:nn}
+% \begin{syntax}
+% \cs{@@_sort_default_different_types:nn} \Arg{label a} \Arg{label b}
+% \end{syntax}
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_sort_default_different_types:nn #1#2
+ {
+% \end{macrocode}
+% Retrieve sort priorities for \meta{label a} and \meta{label b}.
+% \cs{l_@@_typesort_seq} was stored in reverse sequence, and we compute the
+% sort priorities in the negative range, so that we can implicitly rely on `0'
+% being the ``last value''.
+% \begin{macrocode}
+ \int_zero:N \l_@@_sort_prior_a_int
+ \int_zero:N \l_@@_sort_prior_b_int
+ \seq_map_indexed_inline:Nn \l_@@_typesort_seq
+ {
+ \tl_if_eq:nnTF {##2} {{othertypes}}
+ {
+ \int_compare:nNnT { \l_@@_sort_prior_a_int } = { 0 }
+ { \int_set:Nn \l_@@_sort_prior_a_int { - ##1 } }
+ \int_compare:nNnT { \l_@@_sort_prior_b_int } = { 0 }
+ { \int_set:Nn \l_@@_sort_prior_b_int { - ##1 } }
+ }
+ {
+ \tl_if_eq:NnTF \l_@@_label_type_a_tl {##2}
+ { \int_set:Nn \l_@@_sort_prior_a_int { - ##1 } }
+ {
+ \tl_if_eq:NnT \l_@@_label_type_b_tl {##2}
+ { \int_set:Nn \l_@@_sort_prior_b_int { - ##1 } }
+ }
+ }
+ }
+% \end{macrocode}
+% Then do the actual sorting.
+% \begin{macrocode}
+ \bool_if:nTF
+ {
+ \int_compare_p:nNn
+ { \l_@@_sort_prior_a_int } <
+ { \l_@@_sort_prior_b_int }
+ }
+ { \sort_return_same: }
+ {
+ \bool_if:nTF
+ {
+ \int_compare_p:nNn
+ { \l_@@_sort_prior_a_int } >
+ { \l_@@_sort_prior_b_int }
+ }
+ { \sort_return_swapped: }
+ {
+ % Sort priorities are equal: the type that occurs first in
+ % `labels', as given by the user, is kept (or brought) forward.
+ \seq_map_inline:Nn \l_@@_label_types_seq
+ {
+ \tl_if_eq:NnTF \l_@@_label_type_a_tl {##1}
+ { \seq_map_break:n { \sort_return_same: } }
+ {
+ \tl_if_eq:NnT \l_@@_label_type_b_tl {##1}
+ { \seq_map_break:n { \sort_return_swapped: } }
+ }
+ }
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@@_sort_page:nn}
+% The sorting function for sorting of defined labels for references to
+% ``page''. This function is expected to be called within the sorting loop
+% of \cs{@@_sort_labels:} and receives the pair of labels being considered
+% for a change of order or not. It should \emph{always} ``return'' either
+% \cs{sort_return_same:} or \cs{sort_return_swapped:}. Compared to the
+% sorting of default labels, this is a piece of cake (thanks to
+% \texttt{abspage}).
+% \begin{syntax}
+% \cs{@@_sort_page:nn} \Arg{label a} \Arg{label b}
+% \end{syntax}
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_sort_page:nn #1#2
+ {
+ \int_compare:nNnTF
+ { \@@_extract:nnn {#1} { abspage } { -1 } }
+ >
+ { \@@_extract:nnn {#2} { abspage } { -1 } }
+ { \sort_return_swapped: }
+ { \sort_return_same: }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \section{Typesetting}
+%
+% ``Typesetting'' the reference, which here includes the parsing of the labels
+% and eventual compression of labels in sequence into ranges, is definitely
+% the ``crux'' of \pkg{zref-clever}. This because we process the label set as
+% a stack, in a single pass, and hence ``parsing'', ``compressing'', and
+% ``typesetting'' must be decided upon at the same time, making it difficult
+% to slice the job into more specific and self-contained tasks. So, do bear
+% this in mind before you curse me for the length of some of the functions
+% below, or before a more orthodox ``docstripper'' complains about me not
+% sticking to code commenting conventions to keep the code more readable in
+% the \file{.dtx} file.
+%
+% While processing the label stack (kept in \cs{l_@@_typeset_labels_seq}),
+% \cs{@@_typeset_refs:} ``sees'' two labels, and two labels only, the
+% ``current'' one (kept in \cs{l_@@_label_a_tl}), and the ``next'' one (kept
+% in \cs{l_@@_label_b_tl}). However, the typesetting needs (a lot) more
+% information than just these two immediate labels to make a number of
+% critical decisions. Some examples: i) We cannot know if labels ``current''
+% and ``next'' of the same type are a ``pair'', or just ``elements in a
+% list'', until we examine the label after ``next''; ii) If the ``next'' label
+% is of the same type as the ``current'', and it is in immediate sequence to
+% it, it potentially forms a ``range'', but we cannot know if ``next'' is
+% actually the end of the range until we examined an arbitrary number of
+% labels, and found one which is not in sequence from the previous one; iii)
+% When processing a type block, the ``name'' comes first, however, we only
+% know if that name should be plural, or if it should be included in the
+% hyperlink, after processing an arbitrary number of labels and find one of a
+% different type. One could naively assume that just examining ``next'' would
+% be enough for this, since we can know if it is of the same type or not.
+% Alas, ``there be ranges'', and a compression operation may boil down to a
+% single element, so we have to process the whole type block to know how its
+% name should be typeset; iv) Similar issues apply to lists of type blocks,
+% each of which is of arbitrary length: we can only know if two type blocks
+% form a ``pair'' or are ``elements in a list'' when we finish the
+% block. Etc.\ etc.\ etc.
+%
+% We handle this by storing the reference ``pieces'' in ``queues'', instead of
+% typesetting them immediately upon processing. The ``queues'' get typeset at
+% the point where all the information needed is available, which usually
+% happens when a type block finishes (we see something of a different type in
+% ``next'', signaled by \cs{l_@@_last_of_type_bool}), or the stack itself
+% finishes (has no more elements, signaled by \cs{l_@@_typeset_last_bool}).
+% And, in processing a type block, the type ``name'' gets added last (on the
+% left) of the queue. The very first reference of its type always follows the
+% name, since it may form a hyperlink with it (so we keep it stored
+% separately, in \cs{l_@@_type_first_label_tl}, with
+% \cs{l_@@_type_first_label_type_tl} being its type). And, since we may need
+% up to two type blocks in storage before typesetting, we have two of these
+% ``queues'': \cs{l_@@_typeset_queue_curr_tl} and
+% \cs{l_@@_typeset_queue_prev_tl}.
+%
+% Some of the relevant cases (e.g., distinguishing ``pair'' from ``list'') are
+% handled by counters, the main ones are: one for the ``type''
+% (\cs{l_@@_type_count_int}) and one for the ``label in the current type
+% block'' (\cs{l_@@_label_count_int}).
+%
+% Range compression, in particular, relies heavily on counting to be able do
+% distinguish relevant cases. \cs{l_@@_range_count_int} counts the number of
+% elements in the current sequential ``streak'', and
+% \cs{l_@@_range_same_count_int} counts the number of \emph{equal} elements in
+% that same ``streak''. The difference between the two allows us to
+% distinguish the cases in which a range actually ``skips'' a number in the
+% sequence, in which case we should use a range separator, from when they are
+% after all just contiguous, in which case a pair separator is called for.
+% Since, as usual, we can only know this when a arbitrary long ``streak''
+% finishes, we have to store the label which (potentially) begins a range
+% (kept in \cs{l_@@_range_beg_label_tl}). \cs{l_@@_next_maybe_range_bool}
+% signals when ``next'' is potentially a range with ``current'', and
+% \cs{l_@@_next_is_same_bool} when their values are actually equal.
+%
+%
+% One further thing to discuss here -- to keep this ``on record'' -- is
+% inhibition of compression for individual labels. It is not difficult to
+% handle it at the infrastructure side, what gets sloppy is the user facing
+% syntax to signal such inhibition. For some possible alternatives for this
+% (and good ones at that) see \url{https://tex.stackexchange.com/q/611370}
+% (thanks Enrico Gregorio, Phelype Oleinik, and Steven B.\ Segletes). Yet
+% another alternative would be an option receiving the label(s) not to be
+% compressed, this would be a repetition, but would keep the syntax clean.
+% All in all, probably the best is simply not to allow individual inhibition
+% of compression. We can already control compression of each \cs{zcref} call
+% with existing options, this should be enough. I don't think the small extra
+% flexibility individual label control for this would grant is worth the
+% syntax disruption it would entail. Anyway, it would be easy to deal with
+% this in case the need arose, by just adding another condition (coming from
+% whatever the chosen syntax was) when we check for
+% \cs{@@_labels_in_sequence:nn} in \cs{@@_typeset_refs_not_last_of_type:}.
+% But I remain unconvinced of the pertinence of doing so.
+%
+%
+% \subsection*{Variables}
+%
+% \begin{macro}
+% {
+% \l_@@_typeset_labels_seq ,
+% \l_@@_typeset_last_bool ,
+% \l_@@_last_of_type_bool ,
+% }
+% Auxiliary variables for \cs{@@_typeset_refs:} main stack control.
+% \begin{macrocode}
+\seq_new:N \l_@@_typeset_labels_seq
+\bool_new:N \l_@@_typeset_last_bool
+\bool_new:N \l_@@_last_of_type_bool
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}
+% {
+% \l_@@_type_count_int ,
+% \l_@@_label_count_int ,
+% }
+% Auxiliary variables for \cs{@@_typeset_refs:} main counters.
+% \begin{macrocode}
+\int_new:N \l_@@_type_count_int
+\int_new:N \l_@@_label_count_int
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}
+% {
+% \l_@@_label_a_tl ,
+% \l_@@_label_b_tl ,
+% \l_@@_typeset_queue_prev_tl ,
+% \l_@@_typeset_queue_curr_tl ,
+% \l_@@_type_first_label_tl ,
+% \l_@@_type_first_label_type_tl
+% }
+% Auxiliary variables for \cs{@@_typeset_refs:} main ``queue'' control and
+% storage.
+% \begin{macrocode}
+\tl_new:N \l_@@_label_a_tl
+\tl_new:N \l_@@_label_b_tl
+\tl_new:N \l_@@_typeset_queue_prev_tl
+\tl_new:N \l_@@_typeset_queue_curr_tl
+\tl_new:N \l_@@_type_first_label_tl
+\tl_new:N \l_@@_type_first_label_type_tl
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}
+% {
+% \l_@@_type_name_tl ,
+% \l_@@_name_in_link_bool ,
+% \l_@@_name_format_tl ,
+% \l_@@_name_format_fallback_tl ,
+% \l_@@_type_name_gender_tl ,
+% }
+% Auxiliary variables for \cs{@@_typeset_refs:} type name handling.
+% \begin{macrocode}
+\tl_new:N \l_@@_type_name_tl
+\bool_new:N \l_@@_name_in_link_bool
+\tl_new:N \l_@@_name_format_tl
+\tl_new:N \l_@@_name_format_fallback_tl
+\tl_new:N \l_@@_type_name_gender_tl
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}
+% {
+% \l_@@_range_count_int ,
+% \l_@@_range_same_count_int ,
+% \l_@@_range_beg_label_tl ,
+% \l_@@_next_maybe_range_bool ,
+% \l_@@_next_is_same_bool ,
+% }
+% Auxiliary variables for \cs{@@_typeset_refs:} range handling.
+% \begin{macrocode}
+\int_new:N \l_@@_range_count_int
+\int_new:N \l_@@_range_same_count_int
+\tl_new:N \l_@@_range_beg_label_tl
+\bool_new:N \l_@@_next_maybe_range_bool
+\bool_new:N \l_@@_next_is_same_bool
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}
+% {
+% \l_@@_tpairsep_tl ,
+% \l_@@_tlistsep_tl ,
+% \l_@@_tlastsep_tl ,
+% \l_@@_namesep_tl ,
+% \l_@@_pairsep_tl ,
+% \l_@@_listsep_tl ,
+% \l_@@_lastsep_tl ,
+% \l_@@_rangesep_tl ,
+% \l_@@_refpre_tl ,
+% \l_@@_refpos_tl ,
+% \l_@@_namefont_tl ,
+% \l_@@_reffont_tl ,
+% }
+% Auxiliary variables for \cs{@@_typeset_refs:} separators, refpre/pos and
+% font options.
+% \begin{macrocode}
+\tl_new:N \l_@@_tpairsep_tl
+\tl_new:N \l_@@_tlistsep_tl
+\tl_new:N \l_@@_tlastsep_tl
+\tl_new:N \l_@@_namesep_tl
+\tl_new:N \l_@@_pairsep_tl
+\tl_new:N \l_@@_listsep_tl
+\tl_new:N \l_@@_lastsep_tl
+\tl_new:N \l_@@_rangesep_tl
+\tl_new:N \l_@@_refpre_tl
+\tl_new:N \l_@@_refpos_tl
+\tl_new:N \l_@@_namefont_tl
+\tl_new:N \l_@@_reffont_tl
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\l_@@_verbose_testing_bool}
+% Internal variable which enables extra log messaging at points of interest
+% in the code for purposes of regression testing. Particularly relevant to
+% keep track of expansion control in \cs{l_@@_typeset_queue_curr_tl}.
+% \begin{macrocode}
+\bool_new:N \l_@@_verbose_testing_bool
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection*{Main functions}
+%
+% \begin{macro}{\@@_typeset_refs:}
+% Main typesetting function for \cs{zcref}.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_typeset_refs:
+ {
+ \seq_set_eq:NN \l_@@_typeset_labels_seq
+ \l_@@_zcref_labels_seq
+ \tl_clear:N \l_@@_typeset_queue_prev_tl
+ \tl_clear:N \l_@@_typeset_queue_curr_tl
+ \tl_clear:N \l_@@_type_first_label_tl
+ \tl_clear:N \l_@@_type_first_label_type_tl
+ \tl_clear:N \l_@@_range_beg_label_tl
+ \int_zero:N \l_@@_label_count_int
+ \int_zero:N \l_@@_type_count_int
+ \int_zero:N \l_@@_range_count_int
+ \int_zero:N \l_@@_range_same_count_int
+
+ % Get type block options (not type-specific).
+ \@@_get_ref_string:nN { tpairsep }
+ \l_@@_tpairsep_tl
+ \@@_get_ref_string:nN { tlistsep }
+ \l_@@_tlistsep_tl
+ \@@_get_ref_string:nN { tlastsep }
+ \l_@@_tlastsep_tl
+
+ % Process label stack.
+ \bool_set_false:N \l_@@_typeset_last_bool
+ \bool_until_do:Nn \l_@@_typeset_last_bool
+ {
+ \seq_pop_left:NN \l_@@_typeset_labels_seq
+ \l_@@_label_a_tl
+ \seq_if_empty:NTF \l_@@_typeset_labels_seq
+ {
+ \tl_clear:N \l_@@_label_b_tl
+ \bool_set_true:N \l_@@_typeset_last_bool
+ }
+ {
+ \seq_get_left:NN \l_@@_typeset_labels_seq
+ \l_@@_label_b_tl
+ }
+
+ \tl_if_eq:NnTF \l_@@_ref_property_tl { page }
+ {
+ \tl_set:Nn \l_@@_label_type_a_tl { page }
+ \tl_set:Nn \l_@@_label_type_b_tl { page }
+ }
+ {
+ \@@_def_extract:NVnn \l_@@_label_type_a_tl
+ \l_@@_label_a_tl { zc@type } { zc@missingtype }
+ \@@_def_extract:NVnn \l_@@_label_type_b_tl
+ \l_@@_label_b_tl { zc@type } { zc@missingtype }
+ }
+
+ % First, we establish whether the "current label" (i.e. `a') is the
+ % last one of its type. This can happen because the "next label"
+ % (i.e. `b') is of a different type (or different definition status),
+ % or because we are at the end of the list.
+ \bool_if:NTF \l_@@_typeset_last_bool
+ { \bool_set_true:N \l_@@_last_of_type_bool }
+ {
+ \zref@ifrefundefined { \l_@@_label_a_tl }
+ {
+ \zref@ifrefundefined { \l_@@_label_b_tl }
+ { \bool_set_false:N \l_@@_last_of_type_bool }
+ { \bool_set_true:N \l_@@_last_of_type_bool }
+ }
+ {
+ \zref@ifrefundefined { \l_@@_label_b_tl }
+ { \bool_set_true:N \l_@@_last_of_type_bool }
+ {
+ % Neither is undefined, we must check the types.
+ \tl_if_eq:NNTF
+ \l_@@_label_type_a_tl
+ \l_@@_label_type_b_tl
+ { \bool_set_false:N \l_@@_last_of_type_bool }
+ { \bool_set_true:N \l_@@_last_of_type_bool }
+ }
+ }
+ }
+
+ % Handle warnings in case of reference or type undefined.
+ % Test: 'zc-typeset01.lvt': "Typeset refs: warn ref undefined"
+ \zref@refused { \l_@@_label_a_tl }
+ % Test: 'zc-typeset01.lvt': "Typeset refs: warn missing type"
+ \zref@ifrefundefined { \l_@@_label_a_tl }
+ {}
+ {
+ \tl_if_eq:NnT \l_@@_label_type_a_tl { zc@missingtype }
+ {
+ \msg_warning:nnx { zref-clever } { missing-type }
+ { \l_@@_label_a_tl }
+ }
+ \zref@ifrefcontainsprop
+ { \l_@@_label_a_tl }
+ { \l_@@_ref_property_tl }
+ { }
+ {
+ \msg_warning:nnxx { zref-clever } { missing-property }
+ { \l_@@_ref_property_tl }
+ { \l_@@_label_a_tl }
+ }
+ }
+
+ % Get type-specific separators, refpre/pos and font options, once per
+ % type.
+ \int_compare:nNnT { \l_@@_label_count_int } = { 0 }
+ {
+ \@@_get_ref_string:nN { namesep }
+ \l_@@_namesep_tl
+ \@@_get_ref_string:nN { pairsep }
+ \l_@@_pairsep_tl
+ \@@_get_ref_string:nN { listsep }
+ \l_@@_listsep_tl
+ \@@_get_ref_string:nN { lastsep }
+ \l_@@_lastsep_tl
+ \@@_get_ref_string:nN { rangesep }
+ \l_@@_rangesep_tl
+ \@@_get_ref_string:nN { refpre }
+ \l_@@_refpre_tl
+ \@@_get_ref_string:nN { refpos }
+ \l_@@_refpos_tl
+ \@@_get_ref_font:nN { namefont }
+ \l_@@_namefont_tl
+ \@@_get_ref_font:nN { reffont }
+ \l_@@_reffont_tl
+ }
+
+ % Here we send this to a couple of auxiliary functions.
+ \bool_if:NTF \l_@@_last_of_type_bool
+ % There exists no next label of the same type as the current.
+ { \@@_typeset_refs_last_of_type: }
+ % There exists a next label of the same type as the current.
+ { \@@_typeset_refs_not_last_of_type: }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% This is actually the one meaningful ``big branching'' we can do while
+% processing the label stack: i) the ``current'' label is the last of its type
+% block; or ii) the ``current'' label is \emph{not} the last of its type
+% block. Indeed, as mentioned above, quite a number of things can only be
+% decided when the type block ends, and we only know this when we look at the
+% ``next'' label and find something of a different ``type'' (loose here, maybe
+% different definition status, maybe end of stack). So, though this is not
+% very strict, \cs{@@_typeset_refs_last_of_type:} is more of a ``wrapping
+% up'' function, and it is indeed the one which does the actual typesetting,
+% while \cs{@@_typeset_refs_not_last_of_type:} is more of an
+% ``accumulation'' function.
+%
+%
+% \begin{macro}{\@@_typeset_refs_last_of_type:}
+% Handles typesetting when the current label is the last of its type.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_typeset_refs_last_of_type:
+ {
+ % Process the current label to the current queue.
+ \int_case:nnF { \l_@@_label_count_int }
+ {
+ % It is the last label of its type, but also the first one, and that's
+ % what matters here: just store it.
+ % Test: 'zc-typeset01.lvt': "Last of type: single"
+ { 0 }
+ {
+ \tl_set:NV \l_@@_type_first_label_tl
+ \l_@@_label_a_tl
+ \tl_set:NV \l_@@_type_first_label_type_tl
+ \l_@@_label_type_a_tl
+ }
+
+ % The last is the second: we have a pair (if not repeated).
+ % Test: 'zc-typeset01.lvt': "Last of type: pair"
+ { 1 }
+ {
+ \int_compare:nNnF { \l_@@_range_same_count_int } = { 1 }
+ {
+ \tl_put_right:Nx \l_@@_typeset_queue_curr_tl
+ {
+ \exp_not:V \l_@@_pairsep_tl
+ \@@_get_ref:V \l_@@_label_a_tl
+ }
+ }
+ }
+ }
+ % Last is third or more of its type: without repetition, we'd have the
+ % last element on a list, but control for possible repetition.
+ {
+ \int_case:nnF { \l_@@_range_count_int }
+ {
+ % There was no range going on.
+ % Test: 'zc-typeset01.lvt': "Last of type: not range"
+ { 0 }
+ {
+ \tl_put_right:Nx \l_@@_typeset_queue_curr_tl
+ {
+ \exp_not:V \l_@@_lastsep_tl
+ \@@_get_ref:V \l_@@_label_a_tl
+ }
+ }
+ % Last in the range is also the second in it.
+ % Test: 'zc-typeset01.lvt': "Last of type: pair in sequence"
+ { 1 }
+ {
+ \tl_put_right:Nx \l_@@_typeset_queue_curr_tl
+ {
+ % We know `range_beg_label' is not empty, since this is the
+ % second element in the range, but the third or more in the
+ % type list.
+ \exp_not:V \l_@@_listsep_tl
+ \@@_get_ref:V \l_@@_range_beg_label_tl
+ \int_compare:nNnF
+ { \l_@@_range_same_count_int } = { 1 }
+ {
+ \exp_not:V \l_@@_lastsep_tl
+ \@@_get_ref:V \l_@@_label_a_tl
+ }
+ }
+ }
+ }
+ % Last in the range is third or more in it.
+ {
+ \int_case:nnF
+ {
+ \l_@@_range_count_int -
+ \l_@@_range_same_count_int
+ }
+ {
+ % Repetition, not a range.
+ % Test: 'zc-typeset01.lvt': "Last of type: range to one"
+ { 0 }
+ {
+ % If `range_beg_label' is empty, it means it was also the
+ % first of the type, and hence was already handled.
+ \tl_if_empty:VF \l_@@_range_beg_label_tl
+ {
+ \tl_put_right:Nx \l_@@_typeset_queue_curr_tl
+ {
+ \exp_not:V \l_@@_lastsep_tl
+ \@@_get_ref:V
+ \l_@@_range_beg_label_tl
+ }
+ }
+ }
+ % A `range', but with no skipped value, treat as list.
+ % Test: 'zc-typeset01.lvt': "Last of type: range to pair"
+ { 1 }
+ {
+ \tl_put_right:Nx \l_@@_typeset_queue_curr_tl
+ {
+ % Ditto.
+ \tl_if_empty:VF \l_@@_range_beg_label_tl
+ {
+ \exp_not:V \l_@@_listsep_tl
+ \@@_get_ref:V
+ \l_@@_range_beg_label_tl
+ }
+ \exp_not:V \l_@@_lastsep_tl
+ \@@_get_ref:V \l_@@_label_a_tl
+ }
+ }
+ }
+ {
+ % An actual range.
+ % Test: 'zc-typeset01.lvt': "Last of type: range"
+ \tl_put_right:Nx \l_@@_typeset_queue_curr_tl
+ {
+ % Ditto.
+ \tl_if_empty:VF \l_@@_range_beg_label_tl
+ {
+ \exp_not:V \l_@@_lastsep_tl
+ \@@_get_ref:V
+ \l_@@_range_beg_label_tl
+ }
+ \exp_not:V \l_@@_rangesep_tl
+ \@@_get_ref:V \l_@@_label_a_tl
+ }
+ }
+ }
+ }
+
+ % Handle "range" option. The idea is simple: if the queue is not empty,
+ % we replace it with the end of the range (or pair). We can still
+ % retrieve the end of the range from `label_a' since we know to be
+ % processing the last label of its type at this point.
+ \bool_if:NT \l_@@_typeset_range_bool
+ {
+ \tl_if_empty:NTF \l_@@_typeset_queue_curr_tl
+ {
+ \zref@ifrefundefined { \l_@@_type_first_label_tl }
+ { }
+ {
+ \msg_warning:nnx { zref-clever } { single-element-range }
+ { \l_@@_type_first_label_type_tl }
+ }
+ }
+ {
+ \bool_set_false:N \l_@@_next_maybe_range_bool
+ \zref@ifrefundefined { \l_@@_type_first_label_tl }
+ { }
+ {
+ \@@_labels_in_sequence:nn
+ { \l_@@_type_first_label_tl }
+ { \l_@@_label_a_tl }
+ }
+ % Test: 'zc-typeset01.lvt': "Last of type: option range"
+ % Test: 'zc-typeset01.lvt': "Last of type: option range to pair"
+ \tl_set:Nx \l_@@_typeset_queue_curr_tl
+ {
+ \bool_if:NTF \l_@@_next_maybe_range_bool
+ { \exp_not:V \l_@@_pairsep_tl }
+ { \exp_not:V \l_@@_rangesep_tl }
+ \@@_get_ref:V \l_@@_label_a_tl
+ }
+ }
+ }
+
+ % Now that the type block is finished, we can add the name and the first
+ % ref to the queue. Also, if "typeset" option is not "both", handle it
+ % here as well.
+ \@@_type_name_setup:
+ \bool_if:nTF
+ { \l_@@_typeset_ref_bool && \l_@@_typeset_name_bool }
+ {
+ \tl_put_left:Nx \l_@@_typeset_queue_curr_tl
+ { \@@_get_ref_first: }
+ }
+ {
+ \bool_if:NTF \l_@@_typeset_ref_bool
+ {
+ % Test: 'zc-typeset01.lvt': "Last of type: option typeset ref"
+ \tl_put_left:Nx \l_@@_typeset_queue_curr_tl
+ { \@@_get_ref:V \l_@@_type_first_label_tl }
+ }
+ {
+ \bool_if:NTF \l_@@_typeset_name_bool
+ {
+ % Test: 'zc-typeset01.lvt': "Last of type: option typeset name"
+ \tl_set:Nx \l_@@_typeset_queue_curr_tl
+ {
+ \bool_if:NTF \l_@@_name_in_link_bool
+ {
+ \exp_not:N \group_begin:
+ \exp_not:V \l_@@_namefont_tl
+ % It's two '@s', but escaped for DocStrip.
+ \exp_not:N \hyper@@@@link
+ {
+ \@@_extract_url_unexp:V
+ \l_@@_type_first_label_tl
+ }
+ {
+ \@@_extract_unexp:Vnn
+ \l_@@_type_first_label_tl
+ { anchor } { }
+ }
+ { \exp_not:V \l_@@_type_name_tl }
+ \exp_not:N \group_end:
+ }
+ {
+ \exp_not:N \group_begin:
+ \exp_not:V \l_@@_namefont_tl
+ \exp_not:V \l_@@_type_name_tl
+ \exp_not:N \group_end:
+ }
+ }
+ }
+ {
+ % Logically, this case would correspond to "typeset=none", but
+ % it should not occur, given that the options are set up to
+ % typeset either "ref" or "name". Still, leave here a
+ % sensible fallback, equal to the behavior of "both".
+ % Test: 'zc-typeset01.lvt': "Last of type: option typeset none"
+ \tl_put_left:Nx \l_@@_typeset_queue_curr_tl
+ { \@@_get_ref_first: }
+ }
+ }
+ }
+
+ % Typeset the previous type block, if there is one.
+ \int_compare:nNnT { \l_@@_type_count_int } > { 0 }
+ {
+ \int_compare:nNnT { \l_@@_type_count_int } > { 1 }
+ { \l_@@_tlistsep_tl }
+ \l_@@_typeset_queue_prev_tl
+ }
+
+ % Extra log for testing.
+ \bool_if:NT \l_@@_verbose_testing_bool
+ { \tl_show:N \l_@@_typeset_queue_curr_tl }
+
+ % Wrap up loop, or prepare for next iteration.
+ \bool_if:NTF \l_@@_typeset_last_bool
+ {
+ % We are finishing, typeset the current queue.
+ \int_case:nnF { \l_@@_type_count_int }
+ {
+ % Single type.
+ % Test: 'zc-typeset01.lvt': "Last of type: single type"
+ { 0 }
+ { \l_@@_typeset_queue_curr_tl }
+ % Pair of types.
+ % Test: 'zc-typeset01.lvt': "Last of type: pair of types"
+ { 1 }
+ {
+ \l_@@_tpairsep_tl
+ \l_@@_typeset_queue_curr_tl
+ }
+ }
+ {
+ % Last in list of types.
+ % Test: 'zc-typeset01.lvt': "Last of type: list of types"
+ \l_@@_tlastsep_tl
+ \l_@@_typeset_queue_curr_tl
+ }
+ % And nudge in case of multitype reference.
+ \bool_lazy_all:nT
+ {
+ { \l_@@_nudge_enabled_bool }
+ { \l_@@_nudge_multitype_bool }
+ { \int_compare_p:nNn { \l_@@_type_count_int } > { 0 } }
+ }
+ { \msg_warning:nn { zref-clever } { nudge-multitype } }
+ }
+ {
+ % There are further labels, set variables for next iteration.
+ \tl_set_eq:NN \l_@@_typeset_queue_prev_tl
+ \l_@@_typeset_queue_curr_tl
+ \tl_clear:N \l_@@_typeset_queue_curr_tl
+ \tl_clear:N \l_@@_type_first_label_tl
+ \tl_clear:N \l_@@_type_first_label_type_tl
+ \tl_clear:N \l_@@_range_beg_label_tl
+ \int_zero:N \l_@@_label_count_int
+ \int_incr:N \l_@@_type_count_int
+ \int_zero:N \l_@@_range_count_int
+ \int_zero:N \l_@@_range_same_count_int
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@@_typeset_refs_not_last_of_type:}
+% Handles typesetting when the current label is not the last of its type.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_typeset_refs_not_last_of_type:
+ {
+ % Signal if next label may form a range with the current one (only
+ % considered if compression is enabled in the first place).
+ \bool_set_false:N \l_@@_next_maybe_range_bool
+ \bool_set_false:N \l_@@_next_is_same_bool
+ \bool_if:NT \l_@@_typeset_compress_bool
+ {
+ \zref@ifrefundefined { \l_@@_label_a_tl }
+ { }
+ {
+ \@@_labels_in_sequence:nn
+ { \l_@@_label_a_tl } { \l_@@_label_b_tl }
+ }
+ }
+
+ % Process the current label to the current queue.
+ \int_compare:nNnTF { \l_@@_label_count_int } = { 0 }
+ {
+ % Current label is the first of its type (also not the last, but it
+ % doesn't matter here): just store the label.
+ \tl_set:NV \l_@@_type_first_label_tl
+ \l_@@_label_a_tl
+ \tl_set:NV \l_@@_type_first_label_type_tl
+ \l_@@_label_type_a_tl
+
+ % If the next label may be part of a range, we set `range_beg_label'
+ % to "empty" (we deal with it as the "first", and must do it there, to
+ % handle hyperlinking), but also step the range counters.
+ % Test: 'zc-typeset01.lvt': "Not last of type: first is range"
+ \bool_if:NT \l_@@_next_maybe_range_bool
+ {
+ \tl_clear:N \l_@@_range_beg_label_tl
+ \int_incr:N \l_@@_range_count_int
+ \bool_if:NT \l_@@_next_is_same_bool
+ { \int_incr:N \l_@@_range_same_count_int }
+ }
+ }
+ {
+ % Current label is neither the first (nor the last) of its type.
+ \bool_if:NTF \l_@@_next_maybe_range_bool
+ {
+ % Starting, or continuing a range.
+ \int_compare:nNnTF
+ { \l_@@_range_count_int } = { 0 }
+ {
+ % There was no range going, we are starting one.
+ \tl_set:NV \l_@@_range_beg_label_tl
+ \l_@@_label_a_tl
+ \int_incr:N \l_@@_range_count_int
+ \bool_if:NT \l_@@_next_is_same_bool
+ { \int_incr:N \l_@@_range_same_count_int }
+ }
+ {
+ % Second or more in the range, but not the last.
+ \int_incr:N \l_@@_range_count_int
+ \bool_if:NT \l_@@_next_is_same_bool
+ { \int_incr:N \l_@@_range_same_count_int }
+ }
+ }
+ {
+ % Next element is not in sequence: there was no range, or we are
+ % closing one.
+ \int_case:nnF { \l_@@_range_count_int }
+ {
+ % There was no range going on.
+ % Test: 'zc-typeset01.lvt': "Not last of type: no range"
+ { 0 }
+ {
+ \tl_put_right:Nx \l_@@_typeset_queue_curr_tl
+ {
+ \exp_not:V \l_@@_listsep_tl
+ \@@_get_ref:V \l_@@_label_a_tl
+ }
+ }
+ % Last is second in the range: if `range_same_count' is also
+ % `1', it's a repetition (drop it), otherwise, it's a "pair
+ % within a list", treat as list.
+ % Test: 'zc-typeset01.lvt': "Not last of type: range pair to one"
+ % Test: 'zc-typeset01.lvt': "Not last of type: range pair"
+ { 1 }
+ {
+ \tl_put_right:Nx \l_@@_typeset_queue_curr_tl
+ {
+ \tl_if_empty:VF \l_@@_range_beg_label_tl
+ {
+ \exp_not:V \l_@@_listsep_tl
+ \@@_get_ref:V
+ \l_@@_range_beg_label_tl
+ }
+ \int_compare:nNnF
+ { \l_@@_range_same_count_int } = { 1 }
+ {
+ \exp_not:V \l_@@_listsep_tl
+ \@@_get_ref:V
+ \l_@@_label_a_tl
+ }
+ }
+ }
+ }
+ {
+ % Last is third or more in the range: if `range_count' and
+ % `range_same_count' are the same, its a repetition (drop it),
+ % if they differ by `1', its a list, if they differ by more,
+ % it is a real range.
+ \int_case:nnF
+ {
+ \l_@@_range_count_int -
+ \l_@@_range_same_count_int
+ }
+ {
+ % Test: 'zc-typeset01.lvt': "Not last of type: range to one"
+ { 0 }
+ {
+ \tl_put_right:Nx \l_@@_typeset_queue_curr_tl
+ {
+ \tl_if_empty:VF \l_@@_range_beg_label_tl
+ {
+ \exp_not:V \l_@@_listsep_tl
+ \@@_get_ref:V
+ \l_@@_range_beg_label_tl
+ }
+ }
+ }
+ % Test: 'zc-typeset01.lvt': "Not last of type: range to pair"
+ { 1 }
+ {
+ \tl_put_right:Nx \l_@@_typeset_queue_curr_tl
+ {
+ \tl_if_empty:VF \l_@@_range_beg_label_tl
+ {
+ \exp_not:V \l_@@_listsep_tl
+ \@@_get_ref:V
+ \l_@@_range_beg_label_tl
+ }
+ \exp_not:V \l_@@_listsep_tl
+ \@@_get_ref:V \l_@@_label_a_tl
+ }
+ }
+ }
+ {
+ % Test: 'zc-typeset01.lvt': "Not last of type: range"
+ \tl_put_right:Nx \l_@@_typeset_queue_curr_tl
+ {
+ \tl_if_empty:VF \l_@@_range_beg_label_tl
+ {
+ \exp_not:V \l_@@_listsep_tl
+ \@@_get_ref:V
+ \l_@@_range_beg_label_tl
+ }
+ \exp_not:V \l_@@_rangesep_tl
+ \@@_get_ref:V \l_@@_label_a_tl
+ }
+ }
+ }
+ % Reset counters.
+ \int_zero:N \l_@@_range_count_int
+ \int_zero:N \l_@@_range_same_count_int
+ }
+ }
+ % Step label counter for next iteration.
+ \int_incr:N \l_@@_label_count_int
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsection*{Auxiliary functions}
+%
+% \cs{@@_get_ref:n} and \cs{@@_get_ref_first:} are the two functions which
+% actually build the reference blocks for typesetting. \cs{@@_get_ref:n}
+% handles all references but the first of its type, and \cs{@@_get_ref_first:}
+% deals with the first reference of a type. Saying they do ``typesetting'' is
+% imprecise though, they actually prepare material to be accumulated in
+% \cs{l_@@_typeset_queue_curr_tl} inside \cs{@@_typeset_refs_last_of_type:}
+% and \cs{@@_typeset_refs_not_last_of_type:}. And this difference results
+% quite crucial for the \TeX{}nical requirements of these functions. This
+% because, as we are processing the label stack and accumulating content in
+% the queue, we are using a number of variables which are transient to the
+% current label, the label properties among them, but not only. Hence, these
+% variables \emph{must} be expanded to their current values to be stored in
+% the queue. Indeed, \cs{@@_get_ref:n} and \cs{@@_get_ref_first:} get called,
+% as they must, in the context of \texttt{x} type expansions. But we don't
+% want to expand the values of the variables themselves, so we need to get
+% current values, but stop expansion after that. In particular, reference
+% options given by the user should reach the stream for its final typesetting
+% (when the queue itself gets typeset) \emph{unmodified} (``no manipulation'',
+% to use the \texttt{n} signature jargon). We also need to prevent premature
+% expansion of material that can't be expanded at this point (e.g. grouping,
+% \cs{zref@default} or \cs[replace=false]{hyper@@link}). In a nutshell, the
+% job of these two functions is putting the pieces in place, but with proper
+% expansion control.
+%
+%
+% \begin{macro}{\@@_ref_default:, \@@_name_default:}
+% Default values for undefined references and undefined type names,
+% respectively. We are ultimately using \cs{zref@default}, but calls to it
+% should be made through these internal functions, according to the case.
+% As a bonus, we don't need to protect them with \cs{exp_not:N}, as
+% \cs{zref@default} would require, since we already define them protected.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_ref_default:
+ { \zref@default }
+\cs_new_protected:Npn \@@_name_default:
+ { \zref@default }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@@_get_ref:n}
+% Handles a complete reference block to be accumulated in the ``queue'',
+% including ``pre'' and ``pos'' elements, and hyperlinking. For use with
+% all labels, except the first of its type, which is done by
+% \cs{@@_get_ref_first:}.
+% \begin{syntax}
+% \cs{@@_get_ref:n} \Arg{label}
+% \end{syntax}
+% \begin{macrocode}
+\cs_new:Npn \@@_get_ref:n #1
+ {
+ \zref@ifrefcontainsprop {#1} { \l_@@_ref_property_tl }
+ {
+ \bool_if:nTF
+ {
+ \l_@@_use_hyperref_bool &&
+ ! \l_@@_link_star_bool
+ }
+ {
+ \bool_if:NF \l_@@_preposinlink_bool
+ { \exp_not:V \l_@@_refpre_tl }
+ % It's two `@s', but escaped for DocStrip.
+ \exp_not:N \hyper@@@@link
+ { \@@_extract_url_unexp:n {#1} }
+ { \@@_extract_unexp:nnn {#1} { anchor } { } }
+ {
+ \bool_if:NT \l_@@_preposinlink_bool
+ { \exp_not:V \l_@@_refpre_tl }
+ \exp_not:N \group_begin:
+ \exp_not:V \l_@@_reffont_tl
+ \@@_extract_unexp:nvn {#1}
+ { l_@@_ref_property_tl } { }
+ \exp_not:N \group_end:
+ \bool_if:NT \l_@@_preposinlink_bool
+ { \exp_not:V \l_@@_refpos_tl }
+ }
+ \bool_if:NF \l_@@_preposinlink_bool
+ { \exp_not:V \l_@@_refpos_tl }
+ }
+ {
+ \exp_not:V \l_@@_refpre_tl
+ \exp_not:N \group_begin:
+ \exp_not:V \l_@@_reffont_tl
+ \@@_extract_unexp:nvn {#1}
+ { l_@@_ref_property_tl } { }
+ \exp_not:N \group_end:
+ \exp_not:V \l_@@_refpos_tl
+ }
+ }
+ { \@@_ref_default: }
+ }
+\cs_generate_variant:Nn \@@_get_ref:n { V }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_get_ref_first:}
+% Handles a complete reference block for the first label of its type to be
+% accumulated in the ``queue'', including ``pre'' and ``pos'' elements,
+% hyperlinking, and the reference type ``name''. It does not receive
+% arguments, but relies on being called in the appropriate place in
+% \cs{@@_typeset_refs_last_of_type:} where a number of variables are
+% expected to be appropriately set for it to consume. Prominently among
+% those is \cs{l_@@_type_first_label_tl}, but it also expected to be called
+% right after \cs{@@_type_name_setup:} which sets \cs{l_@@_type_name_tl} and
+% \cs{l_@@_name_in_link_bool} which it uses.
+% \begin{macrocode}
+\cs_new:Npn \@@_get_ref_first:
+ {
+ \zref@ifrefundefined { \l_@@_type_first_label_tl }
+ { \@@_ref_default: }
+ {
+ \bool_if:NTF \l_@@_name_in_link_bool
+ {
+ \zref@ifrefcontainsprop
+ { \l_@@_type_first_label_tl }
+ { \l_@@_ref_property_tl }
+ {
+ % It's two `@s', but escaped for DocStrip.
+ \exp_not:N \hyper@@@@link
+ {
+ \@@_extract_url_unexp:V
+ \l_@@_type_first_label_tl
+ }
+ {
+ \@@_extract_unexp:Vnn
+ \l_@@_type_first_label_tl { anchor } { }
+ }
+ {
+ \exp_not:N \group_begin:
+ \exp_not:V \l_@@_namefont_tl
+ \exp_not:V \l_@@_type_name_tl
+ \exp_not:N \group_end:
+ \exp_not:V \l_@@_namesep_tl
+ \exp_not:V \l_@@_refpre_tl
+ \exp_not:N \group_begin:
+ \exp_not:V \l_@@_reffont_tl
+ \@@_extract_unexp:Vvn
+ \l_@@_type_first_label_tl
+ { l_@@_ref_property_tl } { }
+ \exp_not:N \group_end:
+ \bool_if:NT \l_@@_preposinlink_bool
+ { \exp_not:V \l_@@_refpos_tl }
+ }
+ \bool_if:NF \l_@@_preposinlink_bool
+ { \exp_not:V \l_@@_refpos_tl }
+ }
+ {
+ \exp_not:N \group_begin:
+ \exp_not:V \l_@@_namefont_tl
+ \exp_not:V \l_@@_type_name_tl
+ \exp_not:N \group_end:
+ \exp_not:V \l_@@_namesep_tl
+ \@@_ref_default:
+ }
+ }
+ {
+ \tl_if_empty:NTF \l_@@_type_name_tl
+ {
+ \@@_name_default:
+ \exp_not:V \l_@@_namesep_tl
+ }
+ {
+ \exp_not:N \group_begin:
+ \exp_not:V \l_@@_namefont_tl
+ \exp_not:V \l_@@_type_name_tl
+ \exp_not:N \group_end:
+ \exp_not:V \l_@@_namesep_tl
+ }
+ \zref@ifrefcontainsprop
+ { \l_@@_type_first_label_tl }
+ { \l_@@_ref_property_tl }
+ {
+ \bool_if:nTF
+ {
+ \l_@@_use_hyperref_bool &&
+ ! \l_@@_link_star_bool
+ }
+ {
+ \bool_if:NF \l_@@_preposinlink_bool
+ { \exp_not:V \l_@@_refpre_tl }
+ % It's two '@s', but escaped for DocStrip.
+ \exp_not:N \hyper@@@@link
+ {
+ \@@_extract_url_unexp:V
+ \l_@@_type_first_label_tl
+ }
+ {
+ \@@_extract_unexp:Vnn
+ \l_@@_type_first_label_tl { anchor } { }
+ }
+ {
+ \bool_if:NT \l_@@_preposinlink_bool
+ { \exp_not:V \l_@@_refpre_tl }
+ \exp_not:N \group_begin:
+ \exp_not:V \l_@@_reffont_tl
+ \@@_extract_unexp:Vvn
+ \l_@@_type_first_label_tl
+ { l_@@_ref_property_tl } { }
+ \exp_not:N \group_end:
+ \bool_if:NT \l_@@_preposinlink_bool
+ { \exp_not:V \l_@@_refpos_tl }
+ }
+ \bool_if:NF \l_@@_preposinlink_bool
+ { \exp_not:V \l_@@_refpos_tl }
+ }
+ {
+ \exp_not:V \l_@@_refpre_tl
+ \exp_not:N \group_begin:
+ \exp_not:V \l_@@_reffont_tl
+ \@@_extract_unexp:Vvn
+ \l_@@_type_first_label_tl
+ { l_@@_ref_property_tl } { }
+ \exp_not:N \group_end:
+ \exp_not:V \l_@@_refpos_tl
+ }
+ }
+ { \@@_ref_default: }
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_type_name_setup:}
+% Auxiliary function to \cs{@@_typeset_refs_last_of_type:}. It is
+% responsible for setting the type name variable \cs{l_@@_type_name_tl} and
+% \cs{l_@@_name_in_link_bool}. If a type name can't be found,
+% \cs{l_@@_type_name_tl} is cleared. The function takes no arguments, but
+% is expected to be called in \cs{@@_typeset_refs_last_of_type:} right
+% before \cs{@@_get_ref_first:}, which is the main consumer of the variables
+% it sets, though not the only one (and hence this cannot be moved into
+% \cs{@@_get_ref_first:} itself). It also expects a number of relevant
+% variables to have been appropriately set, and which it uses, prominently
+% \cs{l_@@_type_first_label_type_tl}, but also the queue itself in
+% \cs{l_@@_typeset_queue_curr_tl}, which should be ``ready except for the
+% first label'', and the type counter \cs{l_@@_type_count_int}.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_type_name_setup:
+ {
+ \zref@ifrefundefined { \l_@@_type_first_label_tl }
+ { \tl_clear:N \l_@@_type_name_tl }
+ {
+ \tl_if_eq:NnTF
+ \l_@@_type_first_label_type_tl { zc@missingtype }
+ { \tl_clear:N \l_@@_type_name_tl }
+ {
+ % Determine whether we should use capitalization, abbreviation,
+ % and plural.
+ \bool_lazy_or:nnTF
+ { \l_@@_capitalize_bool }
+ {
+ \l_@@_capitalize_first_bool &&
+ \int_compare_p:nNn { \l_@@_type_count_int } = { 0 }
+ }
+ { \tl_set:Nn \l_@@_name_format_tl {Name} }
+ { \tl_set:Nn \l_@@_name_format_tl {name} }
+ % If the queue is empty, we have a singular, otherwise, plural.
+ \tl_if_empty:NTF \l_@@_typeset_queue_curr_tl
+ { \tl_put_right:Nn \l_@@_name_format_tl { -sg } }
+ { \tl_put_right:Nn \l_@@_name_format_tl { -pl } }
+ \bool_lazy_and:nnTF
+ { \l_@@_abbrev_bool }
+ {
+ ! \int_compare_p:nNn
+ { \l_@@_type_count_int } = { 0 } ||
+ ! \l_@@_noabbrev_first_bool
+ }
+ {
+ \tl_set:NV \l_@@_name_format_fallback_tl
+ \l_@@_name_format_tl
+ \tl_put_right:Nn \l_@@_name_format_tl { -ab }
+ }
+ { \tl_clear:N \l_@@_name_format_fallback_tl }
+
+ % Handle number and gender nudges.
+ \bool_if:NT \l_@@_nudge_enabled_bool
+ {
+ \bool_if:NTF \l_@@_nudge_singular_bool
+ {
+ \tl_if_empty:NF \l_@@_typeset_queue_curr_tl
+ {
+ \msg_warning:nnx { zref-clever }
+ { nudge-plural-when-sg }
+ { \l_@@_type_first_label_type_tl }
+ }
+ }
+ {
+ \bool_lazy_all:nT
+ {
+ { \l_@@_nudge_comptosing_bool }
+ { \tl_if_empty_p:N \l_@@_typeset_queue_curr_tl }
+ {
+ \int_compare_p:nNn
+ { \l_@@_label_count_int } > { 0 }
+ }
+ }
+ {
+ \msg_warning:nnx { zref-clever }
+ { nudge-comptosing }
+ { \l_@@_type_first_label_type_tl }
+ }
+ }
+ \bool_lazy_and:nnT
+ { \l_@@_nudge_gender_bool }
+ { ! \tl_if_empty_p:N \l_@@_ref_gender_tl }
+ {
+ \@@_get_type_transl:xxnNF
+ { \l_@@_ref_language_tl }
+ { \l_@@_type_first_label_type_tl }
+ { gender }
+ \l_@@_type_name_gender_tl
+ { \tl_clear:N \l_@@_type_name_gender_tl }
+ \tl_if_eq:NNF
+ \l_@@_ref_gender_tl
+ \l_@@_type_name_gender_tl
+ {
+ \tl_if_empty:NTF \l_@@_type_name_gender_tl
+ {
+ \msg_warning:nnxxx { zref-clever }
+ { nudge-gender-not-declared-for-type }
+ { \l_@@_ref_gender_tl }
+ { \l_@@_type_first_label_type_tl }
+ { \l_@@_ref_language_tl }
+ }
+ {
+ \msg_warning:nnxxxx { zref-clever }
+ { nudge-gender-mismatch }
+ { \l_@@_type_first_label_type_tl }
+ { \l_@@_ref_gender_tl }
+ { \l_@@_type_name_gender_tl }
+ { \l_@@_ref_language_tl }
+ }
+ }
+ }
+ }
+
+ \tl_if_empty:NTF \l_@@_name_format_fallback_tl
+ {
+ \prop_get:cVNF
+ {
+ l_@@_type_
+ \l_@@_type_first_label_type_tl _options_prop
+ }
+ \l_@@_name_format_tl
+ \l_@@_type_name_tl
+ {
+ \tl_if_empty:NF \l_@@_ref_decl_case_tl
+ {
+ \tl_put_left:Nn \l_@@_name_format_tl { - }
+ \tl_put_left:NV \l_@@_name_format_tl
+ \l_@@_ref_decl_case_tl
+ }
+ \@@_get_type_transl:xxxNF
+ { \l_@@_ref_language_tl }
+ { \l_@@_type_first_label_type_tl }
+ { \l_@@_name_format_tl }
+ \l_@@_type_name_tl
+ {
+ \tl_clear:N \l_@@_type_name_tl
+ \msg_warning:nnxx { zref-clever } { missing-name }
+ { \l_@@_name_format_tl }
+ { \l_@@_type_first_label_type_tl }
+ }
+ }
+ }
+ {
+ \prop_get:cVNF
+ {
+ l_@@_type_
+ \l_@@_type_first_label_type_tl _options_prop
+ }
+ \l_@@_name_format_tl
+ \l_@@_type_name_tl
+ {
+ \prop_get:cVNF
+ {
+ l_@@_type_
+ \l_@@_type_first_label_type_tl _options_prop
+ }
+ \l_@@_name_format_fallback_tl
+ \l_@@_type_name_tl
+ {
+ \tl_if_empty:NF \l_@@_ref_decl_case_tl
+ {
+ \tl_put_left:Nn
+ \l_@@_name_format_tl { - }
+ \tl_put_left:NV \l_@@_name_format_tl
+ \l_@@_ref_decl_case_tl
+ \tl_put_left:Nn
+ \l_@@_name_format_fallback_tl { - }
+ \tl_put_left:NV
+ \l_@@_name_format_fallback_tl
+ \l_@@_ref_decl_case_tl
+ }
+ \@@_get_type_transl:xxxNF
+ { \l_@@_ref_language_tl }
+ { \l_@@_type_first_label_type_tl }
+ { \l_@@_name_format_tl }
+ \l_@@_type_name_tl
+ {
+ \@@_get_type_transl:xxxNF
+ { \l_@@_ref_language_tl }
+ { \l_@@_type_first_label_type_tl }
+ { \l_@@_name_format_fallback_tl }
+ \l_@@_type_name_tl
+ {
+ \tl_clear:N \l_@@_type_name_tl
+ \msg_warning:nnxx { zref-clever }
+ { missing-name }
+ { \l_@@_name_format_tl }
+ { \l_@@_type_first_label_type_tl }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ % Signal whether the type name is to be included in the hyperlink or not.
+ \bool_lazy_any:nTF
+ {
+ { ! \l_@@_use_hyperref_bool }
+ { \l_@@_link_star_bool }
+ { \tl_if_empty_p:N \l_@@_type_name_tl }
+ { \str_if_eq_p:Vn \l_@@_nameinlink_str { false } }
+ }
+ { \bool_set_false:N \l_@@_name_in_link_bool }
+ {
+ \bool_lazy_any:nTF
+ {
+ { \str_if_eq_p:Vn \l_@@_nameinlink_str { true } }
+ {
+ \str_if_eq_p:Vn \l_@@_nameinlink_str { tsingle } &&
+ \tl_if_empty_p:N \l_@@_typeset_queue_curr_tl
+ }
+ {
+ \str_if_eq_p:Vn \l_@@_nameinlink_str { single } &&
+ \tl_if_empty_p:N \l_@@_typeset_queue_curr_tl &&
+ \l_@@_typeset_last_bool &&
+ \int_compare_p:nNn { \l_@@_type_count_int } = { 0 }
+ }
+ }
+ { \bool_set_true:N \l_@@_name_in_link_bool }
+ { \bool_set_false:N \l_@@_name_in_link_bool }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@@_extract_url_unexp:n}
+% A convenience auxiliary function for extraction of the \texttt{url} /
+% \texttt{urluse} property, provided by the \pkg{zref-xr} module. Ensure
+% that, in the context of an x expansion, \cs{zref@extractdefault} is
+% expanded exactly twice, but no further to retrieve the proper value. See
+% documentation for \cs{@@_extract_unexp:nnn}.
+% \begin{macrocode}
+\cs_new:Npn \@@_extract_url_unexp:n #1
+ {
+ \zref@ifpropundefined { urluse }
+ { \@@_extract_unexp:nnn {#1} { url } { \c_empty_tl } }
+ {
+ \zref@ifrefcontainsprop {#1} { urluse }
+ { \@@_extract_unexp:nnn {#1} { urluse } { \c_empty_tl } }
+ { \@@_extract_unexp:nnn {#1} { url } { \c_empty_tl } }
+ }
+ }
+\cs_generate_variant:Nn \@@_extract_url_unexp:n { V }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@@_labels_in_sequence:nn}
+% Auxiliary function to \cs{@@_typeset_refs_not_last_of_type:}. Sets
+% \cs{l_@@_next_maybe_range_bool} to true if \meta{label b} comes in
+% immediate sequence from \meta{label a}. And sets both
+% \cs{l_@@_next_maybe_range_bool} and \cs{l_@@_next_is_same_bool} to true if
+% the two labels are the ``same'' (that is, have the same counter value).
+% These two boolean variables are the basis for all range and compression
+% handling inside \cs{@@_typeset_refs_not_last_of_type:}, so this function
+% is expected to be called at its beginning, if compression is enabled.
+% \begin{syntax}
+% \cs{@@_labels_in_sequence:nn} \Arg{label a} \Arg{label b}
+% \end{syntax}
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_labels_in_sequence:nn #1#2
+ {
+ \@@_def_extract:Nnnn \l_@@_label_extdoc_a_tl
+ {#1} { externaldocument } { \c_empty_tl }
+ \@@_def_extract:Nnnn \l_@@_label_extdoc_b_tl
+ {#2} { externaldocument } { \c_empty_tl }
+
+ \tl_if_eq:NNT
+ \l_@@_label_extdoc_a_tl
+ \l_@@_label_extdoc_b_tl
+ {
+ \tl_if_eq:NnTF \l_@@_ref_property_tl { page }
+ {
+ \exp_args:Nxx \tl_if_eq:nnT
+ { \@@_extract_unexp:nnn {#1} { zc@pgfmt } { } }
+ { \@@_extract_unexp:nnn {#2} { zc@pgfmt } { } }
+ {
+ \int_compare:nNnTF
+ { \@@_extract:nnn {#1} { zc@pgval } { -2 } + 1 }
+ =
+ { \@@_extract:nnn {#2} { zc@pgval } { -1 } }
+ { \bool_set_true:N \l_@@_next_maybe_range_bool }
+ {
+ \int_compare:nNnT
+ { \@@_extract:nnn {#1} { zc@pgval } { -1 } }
+ =
+ { \@@_extract:nnn {#2} { zc@pgval } { -1 } }
+ {
+ \bool_set_true:N \l_@@_next_maybe_range_bool
+ \bool_set_true:N \l_@@_next_is_same_bool
+ }
+ }
+ }
+ }
+ {
+ \exp_args:Nxx \tl_if_eq:nnT
+ { \@@_extract_unexp:nnn {#1} { zc@counter } { } }
+ { \@@_extract_unexp:nnn {#2} { zc@counter } { } }
+ {
+ \exp_args:Nxx \tl_if_eq:nnT
+ { \@@_extract_unexp:nnn {#1} { zc@enclval } { } }
+ { \@@_extract_unexp:nnn {#2} { zc@enclval } { } }
+ {
+ \int_compare:nNnTF
+ { \@@_extract:nnn {#1} { zc@cntval } { -2 } + 1 }
+ =
+ { \@@_extract:nnn {#2} { zc@cntval } { -1 } }
+ { \bool_set_true:N \l_@@_next_maybe_range_bool }
+ {
+ \int_compare:nNnT
+ { \@@_extract:nnn {#1} { zc@cntval } { -1 } }
+ =
+ { \@@_extract:nnn {#2} { zc@cntval } { -1 } }
+ {
+ \bool_set_true:N
+ \l_@@_next_maybe_range_bool
+ \exp_args:Nxx \tl_if_eq:nnT
+ {
+ \@@_extract_unexp:nvn {#1}
+ { l_@@_ref_property_tl } { }
+ }
+ {
+ \@@_extract_unexp:nvn {#2}
+ { l_@@_ref_property_tl } { }
+ }
+ {
+ \bool_set_true:N
+ \l_@@_next_is_same_bool
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% Finally, a couple of functions for retrieving options values, according to
+% the relevant precedence rules. They both receive an \meta{option} as
+% argument, and store the retrieved value in \meta{tl variable}. Though these
+% are mostly general functions (for a change\dots{}), they are not completely
+% so, they rely on the current state of \cs{l_@@_label_type_a_tl}, as set
+% during the processing of the label stack. This could be easily generalized,
+% of course, but I don't think it is worth it, \cs{l_@@_label_type_a_tl} is
+% indeed what we want in all practical cases. The difference between
+% \cs{@@_get_ref_string:nN} and \cs{@@_get_ref_font:nN} is the kind of option
+% each should be used for. \cs{@@_get_ref_string:nN} is meant for the general
+% options, and attempts to find values for them in all precedence levels (four
+% plus ``fallback''). \cs{@@_get_ref_font:nN} is intended for ``font''
+% options, which cannot be ``language-specific'', thus for these we just
+% search general options and type options.
+%
+% \begin{macro}{\@@_get_ref_string:nN}
+% \begin{syntax}
+% \cs{@@_get_ref_string:nN} \Arg{option} \Arg{tl variable}
+% \end{syntax}
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_get_ref_string:nN #1#2
+ {
+ % First attempt: general options.
+ \prop_get:NnNF \l_@@_ref_options_prop {#1} #2
+ {
+ % If not found, try type specific options.
+ \bool_lazy_and:nnTF
+ {
+ \prop_if_exist_p:c
+ {
+ l_@@_type_
+ \l_@@_label_type_a_tl _options_prop
+ }
+ }
+ {
+ \prop_if_in_p:cn
+ {
+ l_@@_type_
+ \l_@@_label_type_a_tl _options_prop
+ }
+ {#1}
+ }
+ {
+ \prop_get:cnN
+ {
+ l_@@_type_
+ \l_@@_label_type_a_tl _options_prop
+ }
+ {#1} #2
+ }
+ {
+ % If not found, try type specific translations.
+ \@@_get_type_transl:xxnNF
+ { \l_@@_ref_language_tl }
+ { \l_@@_label_type_a_tl }
+ {#1} #2
+ {
+ % If not found, try default translations.
+ \@@_get_default_transl:xnNF
+ { \l_@@_ref_language_tl }
+ {#1} #2
+ {
+ % If not found, try fallback.
+ \@@_get_fallback_transl:nNF {#1} #2
+ {
+ \tl_clear:N #2
+ \msg_warning:nnn { zref-clever }
+ { missing-string } {#1}
+ }
+ }
+ }
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_get_ref_font:nN}
+% \begin{syntax}
+% \cs{@@_get_ref_font:nN} \Arg{option} \Arg{tl variable}
+% \end{syntax}
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_get_ref_font:nN #1#2
+ {
+ % First attempt: general options.
+ \prop_get:NnNF \l_@@_ref_options_prop {#1} #2
+ {
+ % If not found, try type specific options.
+ \bool_if:nTF
+ {
+ \prop_if_exist_p:c
+ {
+ l_@@_type_
+ \l_@@_label_type_a_tl _options_prop
+ }
+ }
+ {
+ \prop_get:cnNF
+ {
+ l_@@_type_
+ \l_@@_label_type_a_tl _options_prop
+ }
+ {#1} #2
+ { \tl_clear:N #2 }
+ }
+ { \tl_clear:N #2 }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \section{Compatibility}
+%
+% This section is meant to aggregate any ``special handling'' needed for
+% \LaTeX{} kernel features, document classes, and packages, needed for
+% \pkg{zref-clever} to work properly with them.
+%
+%
+% \subsection{\opt{appendix}}
+%
+% One relevant case of different reference types sharing the same counter is
+% the \cs{appendix} which in some document classes, including the standard
+% ones, change the sectioning commands looks but, of course, keep using the
+% same counter. \file{book.cls} and \file{report.cls} reset counters
+% \texttt{chapter} and \texttt{section} to 0, change \cs{@chapapp} to use
+% \cs{appendixname} and use \cs{@Alph} for \cs{thechapter}. \file{article.cls}
+% resets counters \texttt{section} and \texttt{subsection} to 0, and uses
+% \cs{@Alph} for \cs{thesection}. \file{memoir.cls}, \file{scrbook.cls} and
+% \file{scrarticle.cls} do the same as their corresponding standard classes,
+% and sometimes a little more, but what interests us here is pretty much the
+% same. See also the \pkg{appendix} package.
+%
+% The standard \cs{appendix} command is a one way switch, in other words, it
+% cannot be reverted (see \url{https://tex.stackexchange.com/a/444057}). So,
+% even if the fact that it is a ``switch'' rather than an environment
+% complicates things, because we have to make ungrouped settings to correspond
+% to its effects, in practice this is not a big deal, since these settings are
+% never really reverted (by default, at least). Hence, hooking into
+% \cs{appendix} is a viable and natural alternative. The \cls{memoir} class
+% and the \pkg{appendix} package define the \texttt{appendices} and
+% \texttt{subappendices} environments, which provide for a way for the
+% appendix to ``end'', but in this case, of course, we can hook into the
+% environment instead.
+%
+% \begin{macrocode}
+\@@_compat_module:nn { appendix }
+ {
+ \AddToHook { cmd / appendix / before }
+ {
+ \@@_zcsetup:n
+ {
+ countertype =
+ {
+ chapter = appendix ,
+ section = appendix ,
+ subsection = appendix ,
+ subsubsection = appendix ,
+ paragraph = appendix ,
+ subparagraph = appendix ,
+ }
+ }
+ }
+ }
+% \end{macrocode}
+%
+% Depending on the definition of \cs{appendix}, using the hook may lead to
+% trouble with the first released version of \pkg{ltcmdhooks} (the one
+% released with the 2021-06-01 kernel). Particularly, if the definition of
+% the command being hooked at contains a double hash mark (\texttt{\#\#}) the
+% patch to add the hook, if it needs to be done with the \cs{scantokens}
+% method, may fail noisily (see \url{https://tex.stackexchange.com/q/617905},
+% thanks Phelype Oleinik). The 2021-11-15 kernel release already handle this
+% gracefully (see \url{https://github.com/latex3/latex2e/pull/699}, thanks
+% Phelype Oleinik).
+%
+%
+% \subsection{\opt{appendices}}
+%
+% This module applies both to the \pkg{appendix} package, and to the
+% \cls{memoir} class, since it ``emulates'' the package.
+%
+% \begin{macrocode}
+\@@_compat_module:nn { appendices }
+ {
+ \@@_if_package_loaded:nT { appendix }
+ {
+ \newcounter { zc@appendix }
+ \newcounter { zc@save@appendix }
+ \setcounter { zc@appendix } { 0 }
+ \setcounter { zc@save@appendix } { 0 }
+ \cs_if_exist:cTF { chapter }
+ {
+ \@@_zcsetup:n
+ { counterresetby = { chapter = zc@appendix } }
+ }
+ {
+ \cs_if_exist:cT { section }
+ {
+ \@@_zcsetup:n
+ { counterresetby = { section = zc@appendix } }
+ }
+ }
+ \AddToHook { env / appendices / begin }
+ {
+ \stepcounter { zc@save@appendix }
+ \setcounter { zc@appendix } { \value { zc@save@appendix } }
+ \@@_zcsetup:n
+ {
+ countertype =
+ {
+ chapter = appendix ,
+ section = appendix ,
+ subsection = appendix ,
+ subsubsection = appendix ,
+ paragraph = appendix ,
+ subparagraph = appendix ,
+ }
+ }
+ }
+ \AddToHook { env / appendices / end }
+ { \setcounter { zc@appendix } { 0 } }
+ \AddToHook { cmd / appendix / before }
+ {
+ \stepcounter { zc@save@appendix }
+ \setcounter { zc@appendix } { \value { zc@save@appendix } }
+ }
+ \AddToHook { env / subappendices / begin }
+ {
+ \@@_zcsetup:n
+ {
+ countertype =
+ {
+ section = appendix ,
+ subsection = appendix ,
+ subsubsection = appendix ,
+ paragraph = appendix ,
+ subparagraph = appendix ,
+ } ,
+ }
+ }
+ \msg_info:nnn { zref-clever } { compat-package } { appendix }
+ }
+ }
+% \end{macrocode}
+%
+%
+%
+% \subsection{\opt{memoir}}
+%
+% The \cls{memoir} document class has quite a number of cross-referencing
+% related features, mostly dealing with captions, subfloats, and notes. Some
+% of them are implemented in ways which make difficult the use of \pkg{zref},
+% particularly \cs{zlabel}, short of redefining the whole stuff ourselves.
+% Hopefully, these features are specialized enough to make \pkg{zref-clever}
+% useful enough with \cls{memoir} without much friction, but unless some
+% support is added upstream, it is difficult not to be a little intrusive
+% here.
+%
+% \begin{enumerate}
+% \item Caption functionality which receives \meta{label} as optional
+% argument, namely:
+% \begin{enumerate}
+% \item The \env{sidecaption} and \env{sidecontcaption} environments. These
+% environments \emph{store} the label in an internal macro,
+% \cs{m@mscaplabel}, at the begin environment code (more precisely in
+% \cs[replace=false]{@@sidecaption}), but both the call to
+% \cs{refstepcounter} and the expansion of \cs{m@mscaplabel} take place at
+% \cs{endsidecaption}. For this reason, hooks are not particularly
+% helpful, and there is not any easy way to grab the \meta{label} argument
+% to start with. I can see two ways to deal with these environments, none
+% of which I really like. First, map through \cs{m@mscaplabel} until
+% \cs{label} is found, then grab the next token which is the \meta{label}.
+% This can be used to set a \cs{zlabel} either with a kernel environment
+% hook, or with \cs{@mem@scap@afterhook} (the former requires running
+% \cs{refstepcounter} on our own, since the \texttt{env/.../end} hook
+% comes before this is done by \cs{endsidecaption}). Second, locally
+% redefine \cs{label} to set both labels inside the environments.
+% \item The bilingual caption commands: \cs{bitwonumcaption},
+% \cs{bionenumcaption}, and \cs{bicaption}. These commands do not support
+% setting the label in their arguments (the labels do get set, but they
+% end up included in the \texttt{title} property of the label too). So we
+% do the same for them as for \env{sidecaption}, just taking care of
+% grouping, since we can't count on the convenience of the environment
+% hook (luckily for us, they are scoped themselves, so we can add an extra
+% group there).
+% \end{enumerate}
+% \item The \cs{subcaptionref} command, which makes a reference to the
+% subcaption without the number of the main caption (e.g. ``(b)'', instead
+% of ``2.3(b)''), for labels set inside the \meta{subtitle} argument of the
+% subcaptioning commands, namely: \cs{subcaption}, \cs{contsubcaption},
+% \cs{subbottom}, \cs{contsubbottom}, \cs{subtop}. This functionality is
+% implemented by \cls{memoir} by setting a \emph{second label} with prefix
+% \texttt{sub@\meta{label}}, and storing there just that part of interest.
+% With \pkg{zref} this part is easier, since we can just add an extra
+% property and retrieve it later on. The thing is that it is hard to find a
+% place to hook into to add the property to the \texttt{main} list, since
+% \cls{memoir} does not really consider the possibility of some other
+% command setting labels. \cs{@memsubcaption} is the best place to hook I
+% could find. It is used by subcaptioning commands, and only those. And
+% there is no hope for an environment hook in this case anyway.
+% \item \cls{memoir}'s \cs{footnote}, \cs{verbfootnote}, \cs{sidefootnote} and
+% \cs{pagenote}, just as the regular \cs{footnote} until recently in the
+% kernel, do not set \cs{@currentcounter} alongside \cs{@currentlabel},
+% proper referencing to them requires setting the type for it.
+% \item Note that \cls{memoir}'s appendix features ``emulates'' the
+% \pkg{appendix} package, hence the corresponding compatibility module is
+% loaded for \cls{memoir} even if that package is not itself loaded. The
+% same is true for the \cs{appendix} command module, since it is also
+% defined.
+% \end{enumerate}
+%
+%
+% \begin{macrocode}
+\@@_compat_module:nn { memoir }
+ {
+ \@@_if_class_loaded:nT { memoir }
+ {
+% \end{macrocode}
+% Add subfigure and subtable support out of the box. Technically, this is not
+% ``default'' behavior for \cls{memoir}, users have to enable it with
+% \cs{newsubfloat}, but let this be smooth. Still, this does not cover any
+% other floats created with \cs{newfloat}. Also include setup for
+% \env{verse}.
+% \begin{macrocode}
+ \@@_zcsetup:n
+ {
+ countertype =
+ {
+ subfigure = figure ,
+ subtable = table ,
+ poemline = line ,
+ } ,
+ counterresetby =
+ {
+ subfigure = figure ,
+ subtable = table ,
+ } ,
+ }
+% \end{macrocode}
+% Support for caption \cls{memoir} features that require that \meta{label} be
+% supplied as an optional argument.
+% \begin{macrocode}
+ \cs_new_protected:Npn \@@_memoir_both_labels:
+ {
+ \cs_set_eq:NN \@@_memoir_orig_label:n \label
+ \cs_set:Npn \@@_memoir_label_and_zlabel:n ##1
+ {
+ \@@_memoir_orig_label:n {##1}
+ \zlabel{##1}
+ }
+ \cs_set_eq:NN \label \@@_memoir_label_and_zlabel:n
+ }
+ \AddToHook { env / sidecaption / begin }
+ { \@@_memoir_both_labels: }
+ \AddToHook { env / sidecontcaption / begin }
+ { \@@_memoir_both_labels: }
+ \AddToHook{ cmd / bitwonumcaption / before }
+ { \group_begin: \@@_memoir_both_labels: }
+ \AddToHook{ cmd / bitwonumcaption / after }
+ { \group_end: }
+ \AddToHook{ cmd / bionenumcaption / before }
+ { \group_begin: \@@_memoir_both_labels: }
+ \AddToHook{ cmd / bionenumcaption / after }
+ { \group_end: }
+ \AddToHook{ cmd / bicaption / before }
+ { \group_begin: \@@_memoir_both_labels: }
+ \AddToHook{ cmd / bicaption / after }
+ { \group_end: }
+% \end{macrocode}
+% Support for \texttt{subcaption} reference.
+% \begin{macrocode}
+ \zref@newprop { subcaption }
+ { \cs_if_exist_use:c { @@@@thesub \@captype } }
+ \AddToHook{ cmd / @memsubcaption / before }
+ { \zref@localaddprop \ZREF@mainlist { subcaption } }
+% \end{macrocode}
+% Support for \cs{footnote}, \cs{verbfootnote}, \cs{sidefootnote}, and
+% \cs{pagenote}.
+% \begin{macrocode}
+ \tl_new:N \l_@@_memoir_footnote_type_tl
+ \tl_set:Nn \l_@@_memoir_footnote_type_tl { footnote }
+ \AddToHook { env / minipage / begin }
+ { \tl_set:Nn \l_@@_memoir_footnote_type_tl { mpfootnote } }
+ \AddToHook { cmd / @makefntext / before }
+ {
+ \@@_zcsetup:x
+ { currentcounter = \l_@@_memoir_footnote_type_tl }
+ }
+ \AddToHook { cmd / @makesidefntext / before }
+ { \@@_zcsetup:n { currentcounter = sidefootnote } }
+ \@@_zcsetup:n
+ {
+ countertype =
+ {
+ sidefootnote = footnote ,
+ pagenote = endnote ,
+ } ,
+ }
+ \AddToHook { file / \jobname.ent / before }
+ { \@@_zcsetup:x { currentcounter = pagenote } }
+ \msg_info:nnn { zref-clever } { compat-class } { memoir }
+ }
+ }
+% \end{macrocode}
+%
+%
+%
+% \subsection{\opt{KOMA}}
+%
+% Support for \texttt{KOMA-Script} document classes.
+%
+% \begin{macrocode}
+\@@_compat_module:nn { KOMA }
+ {
+ \cs_if_exist:NT \KOMAClassName
+ {
+% \end{macrocode}
+% Add support for \env{captionbeside} and \env{captionofbeside} environments.
+% These environments \emph{do} run some variation of \cs{caption} and hence
+% \cs{refstepcounter}. However, this happens inside a parbox inside the
+% environment, thus grouped, such that we cannot see the variables set by
+% \cs{refstepcounter} when we are setting the label. \cs{@currentlabel} is
+% smuggled out of the group by KOMA, but the same care is not granted for
+% \cs{@currentcounter}. So we have to rely on \cs{@captype}, which the
+% underlying caption infrastructure feeds to \cs{refstepcounter}. Since we
+% must use \texttt{env/.../after} hooks, care should be taken not to set the
+% \opt{currentcounter} option unscoped, which would be quite disastrous. For
+% this reason, though more ``invasive'', we set \cs{@currentcounter} instead,
+% which at least will be set straight the next time \cs{refstepcounter} runs.
+% It sounds reasonable, it is the same treatment \cs{@currentlabel} is
+% receiving in this case.
+% \begin{macrocode}
+ \AddToHook { env / captionbeside / after }
+ {
+ \tl_if_exist:NT \@captype
+ { \tl_set_eq:NN \@currentcounter \@captype }
+ }
+ \tl_new:N \g_@@_koma_captionofbeside_captype_tl
+ \AddToHook { env / captionofbeside / end }
+ { \tl_gset_eq:NN \g_@@_koma_captype_tl \@captype }
+ \AddToHook { env / captionofbeside / after }
+ {
+ \tl_if_eq:NnF \@currenvir { document }
+ {
+ \tl_if_empty:NF \g_@@_koma_captype_tl
+ {
+ \tl_set_eq:NN
+ \@currentcounter \g_@@_koma_captype_tl
+ }
+ }
+ \tl_gclear:N \g_@@_koma_captype_tl
+ }
+ \msg_info:nnx { zref-clever } { compat-class } { \KOMAClassName }
+ }
+ }
+% \end{macrocode}
+%
+%
+%
+% \subsection{\opt{amsmath}}
+%
+% About this, see \url{https://tex.stackexchange.com/a/402297}.
+%
+% \begin{macrocode}
+\@@_compat_module:nn { amsmath }
+ {
+ \@@_if_package_loaded:nT { amsmath }
+ {
+% \end{macrocode}
+% First, we define a function for label setting inside \pkg{amsmath} math
+% environments, we want it to set both \cs{zlabel} and \cs{label}. We may
+% ``get a ride'', but not steal the place altogether. This makes for
+% potentially redundant labels, but seems a good compromise. We \emph{must}
+% use the lower level \cs{zref@label} in this context, and hence also handle
+% protection with \cs{zref@wrapper@babel}, because \cs{zlabel} makes itself
+% no-op when \cs{label} is equal to \cs{ltx@gobble}, and that's precisely the
+% case inside the \env{multline} environment (and, damn!, I took a beating of
+% this detail\dots{}).
+% \begin{macrocode}
+ \cs_set_nopar:Npn \@@_ltxlabel:n #1
+ {
+ \@@_orig_ltxlabel:n {#1}
+ \zref@wrapper@babel \zref@label {#1}
+ }
+% \end{macrocode}
+% Then we must store the original value of \cs{ltx@label}, which is the macro
+% actually responsible for setting the labels inside \pkg{amsmath}'s math
+% environments. And, after that, redefine it to be \cs{@@_ltxlabel:n}
+% instead. We must handle \pkg{hyperref} here, which comes very late in the
+% preamble, and which loads \pkg{nameref} at \texttt{begindocument}, which in
+% turn, lets \cs{ltx@label} be \cs{label}. This has to come after
+% \pkg{nameref}. Other classes packages also redefine \cs{ltx@label}, which
+% may cause some trouble. A \texttt{grep} on \texttt{texmf-dist} returns hits
+% for: \file{thm-restate.sty}, \file{smartref.sty}, \file{jmlrbook.cls},
+% \file{cleveref.sty}, \file{cryptocode.sty}, \file{nameref.sty},
+% \file{easyeqn.sty}, \file{empheq.sty}, \file{ntheorem.sty},
+% \file{nccmath.sty}, \file{nwejm.cls}, \file{nwejmart.cls},
+% \file{aguplus.sty}, \file{aguplus.cls}, \file{agupp.sty},
+% \file{amsmath.hyp}, \file{amsmath.sty} (surprise!), \file{amsmath.4ht},
+% \file{nameref.4ht}, \file{frenchle.sty}, \file{french.sty}, plus
+% corresponding documentations and different versions of the same packages.
+% That's not too many, but not ``just a few'' either. The critical ones are
+% explicitly handled here (\pkg{amsmath} itself, and \pkg{nameref}). A number
+% of those I'm really not acquainted with. For \pkg{cleveref}, in particular,
+% this procedure is not compatible with it. If we happen to come later than
+% it and override its definition, this may be a substantial problem for
+% \pkg{cleveref}, since it will find the label, but it won't contain the data
+% it is expecting. However, this should normally not occur, if the user has
+% followed the documented recommendation for \pkg{cleveref} to load it last,
+% or at least very late, and besides I don't see much of an use case for using
+% both \pkg{cleveref} and \pkg{zref-clever} together. I have documented in
+% the user manual that this module may cause potential issues, and how to work
+% around them. And I have made an upstream feature request for a hook, so
+% that this could be made more cleanly at
+% \url{https://github.com/latex3/hyperref/issues/212}.
+% \begin{macrocode}
+ \@@_if_package_loaded:nTF { hyperref }
+ {
+ \AddToHook { package / nameref / after }
+ {
+ \cs_new_eq:NN \@@_orig_ltxlabel:n \ltx@label
+ \cs_set_eq:NN \ltx@label \@@_ltxlabel:n
+ }
+ }
+ {
+ \cs_new_eq:NN \@@_orig_ltxlabel:n \ltx@label
+ \cs_set_eq:NN \ltx@label \@@_ltxlabel:n
+ }
+% \end{macrocode}
+% The \env{subequations} environment uses \texttt{parentequation} and
+% \texttt{equation} as counters, but only the later is subject to
+% \cs{refstepcounter}. What happens is: at the start, \texttt{equation} is
+% refstepped, it is then stored in \texttt{parentequation} and set to `0' and,
+% at the end of the environment it is restored to the value of
+% \texttt{parentequation}. We cannot even set \cs{@currentcounter} at
+% \texttt{env/.../begin}, since the call to
+% \cs{refstepcounter}\texttt{\{equation\}} done by \env{subequations} will
+% override that in sequence. Unfortunately, the suggestion to set
+% \cs{@currentcounter} to \texttt{parentequation} here was not accepted, see
+% \url{https://github.com/latex3/latex2e/issues/687#issuecomment-951451024}
+% and subsequent discussion. So, for \env{subequations}, we really must
+% specify manually \opt{currentcounter} and the resetting. Note that, for
+% \env{subequations}, \cs{zlabel} works just fine (that is, if given
+% immediately after \texttt{\\begin\{subequations\}}, to refer to the
+% parent equation).
+% \begin{macrocode}
+ \AddToHook { env / subequations / begin }
+ {
+ \@@_zcsetup:x
+ {
+ counterresetby =
+ {
+ parentequation =
+ \@@_counter_reset_by:n { equation } ,
+ equation = parentequation ,
+ } ,
+ currentcounter = parentequation ,
+ countertype = { parentequation = equation } ,
+ }
+ }
+% \end{macrocode}
+% \pkg{amsmath} does use \cs{refstepcounter} for the \texttt{equation} counter
+% throughout and does set \cs{@currentcounter} for \cs{tag}s. But we still
+% have to manually reset \opt{currentcounter} to default because, since we had
+% to manually set \opt{currentcounter} to \texttt{parentequation} in
+% \env{subequations}, we also have to manually set it to \env{equation} in
+% environments which may be used within it. The \env{xxalignat} environment
+% is not included, because it is ``starred'' by default (i.e.\ unnumbered),
+% and does not display or accepts labels or tags anyway. The \env{-ed}
+% (\env{gathered}, \env{aligned}, and \env{alignedat}) and \env{cases}
+% environments ``must appear within an enclosing math environment''. Same
+% logic applies to other environments defined or redefined by the package,
+% like \env{array}, \env{matrix} and variations. Finally, \env{split} too can
+% only be used as part of another environment.
+% \begin{macrocode}
+ \clist_map_inline:nn
+ {
+ equation ,
+ equation* ,
+ align ,
+ align* ,
+ alignat ,
+ alignat* ,
+ flalign ,
+ flalign* ,
+ xalignat ,
+ xalignat* ,
+ gather ,
+ gather* ,
+ multline ,
+ multline* ,
+ }
+ {
+ \AddToHook { env / #1 / begin }
+ { \@@_zcsetup:n { currentcounter = equation } }
+ }
+% \end{macrocode}
+% And a last touch of care for \pkg{amsmath}'s refinements: make the equation
+% references \cs{textup}.
+% \begin{macrocode}
+ \zcRefTypeSetup { equation }
+ {
+ reffont = \upshape ,
+ refpre = {\textup{(}} ,
+ refpos = {\textup{)}} ,
+ }
+ \msg_info:nnn { zref-clever } { compat-package } { amsmath }
+ }
+ }
+% \end{macrocode}
+%
+%
+%
+% \subsection{\opt{mathtools}}
+%
+% All math environments defined by \pkg{mathtools}, extending the
+% \pkg{amsmath} set, are meant to be used within enclosing math environments,
+% hence we don't need to handle them specially, since the numbering and the
+% counting is being done on the side of \pkg{amsmath}. This includes the new
+% \env{cases} and \env{matrix} variants, and also \env{multlined}.
+%
+% Hence, as far as I can tell, the only cross-reference related feature to
+% deal with is the \opt{showonlyrefs} option, whose machinery involves writing
+% an extra internal label to the \file{.aux} file to track for labels which
+% get actually referred to. This is a little more involved, and implies in
+% doing special handling inside \cs{zcref}, but the feature is very cool, so
+% it's worth it.
+%
+% \begin{macrocode}
+\bool_new:N \l_@@_mathtools_showonlyrefs_bool
+\@@_compat_module:nn { mathtools }
+ {
+ \@@_if_package_loaded:nT { mathtools }
+ {
+ \MH_if_boolean:nT { show_only_refs }
+ {
+ \bool_set_true:N \l_@@_mathtools_showonlyrefs_bool
+ \cs_new_protected:Npn \@@_mathtools_showonlyrefs:n #1
+ {
+ \@bsphack
+ \seq_map_inline:Nn #1
+ {
+ \exp_args:Nx \tl_if_eq:nnTF
+ { \@@_extract_unexp:nnn {##1} { zc@type } { } }
+ { equation }
+ {
+ \protected@write \@auxout { }
+ { \string \MT@newlabel {##1} }
+ }
+ {
+ \exp_args:Nx \tl_if_eq:nnT
+ { \@@_extract_unexp:nnn {##1} { zc@type } { } }
+ { parentequation }
+ {
+ \protected@write \@auxout { }
+ { \string \MT@newlabel {##1} }
+ }
+ }
+ }
+ \@esphack
+ }
+ \msg_info:nnn { zref-clever } { compat-package } { mathtools }
+ }
+ }
+ }
+% \end{macrocode}
+%
+%
+% \subsection{\opt{breqn}}
+%
+% From the \pkg{breqn} documentation: \textquote{Use of the normal \cs{label}
+% command instead of the \opt{label} option works, I think, most of the time
+% (untested)}. Indeed, light testing suggests it does work for \cs{zlabel}
+% just as well. However, if it happens not to work, there was no easy
+% alternative handle I could find. In particular, it does not seem viable to
+% leverage the \opt{label=} option without hacking the package internals, even
+% if the case of doing so would not be specially tricky, just ``not very
+% civil''.
+%
+% \begin{macrocode}
+\@@_compat_module:nn { breqn }
+ {
+ \@@_if_package_loaded:nT { breqn }
+ {
+% \end{macrocode}
+% Contrary to the practice in \pkg{amsmath}, which prints \cs{tag} even in
+% unnumbered environments, the starred environments from \pkg{breqn} don't
+% typeset any tag/number at all, even for a manually given \opt{number=} as an
+% option. So, even if one can actually set a label in them, it is not really
+% meaningful to make a reference to them. Also contrary to \pkg{amsmath}'s
+% practice, \pkg{breqn} uses \cs{stepcounter} instead of \cs{refstepcounter}
+% for incrementing the equation counters (see
+% \url{https://tex.stackexchange.com/a/241150}).
+% \begin{macrocode}
+ \AddToHook { env / dgroup / begin }
+ {
+ \@@_zcsetup:x
+ {
+ counterresetby =
+ {
+ parentequation =
+ \@@_counter_reset_by:n { equation } ,
+ equation = parentequation ,
+ } ,
+ currentcounter = parentequation ,
+ countertype = { parentequation = equation } ,
+ }
+ }
+ \clist_map_inline:nn
+ {
+ dmath ,
+ dseries ,
+ darray ,
+ }
+ {
+ \AddToHook { env / #1 / begin }
+ { \@@_zcsetup:n { currentcounter = equation } }
+ }
+ \msg_info:nnn { zref-clever } { compat-package } { breqn }
+ }
+ }
+% \end{macrocode}
+%
+%
+%
+% \subsection{\opt{listings}}
+%
+% \begin{macrocode}
+\@@_compat_module:nn { listings }
+ {
+ \@@_if_package_loaded:nT { listings }
+ {
+ \@@_zcsetup:n
+ {
+ countertype =
+ {
+ lstlisting = listing ,
+ lstnumber = line ,
+ } ,
+ counterresetby = { lstnumber = lstlisting } ,
+ }
+% \end{macrocode}
+% Set (also) a \cs{zlabel} with the label received in the \texttt{label=}
+% option from the \texttt{lstlisting} environment. The \emph{only} place to
+% set this label is the \texttt{PreInit} hook. This hook, comes right after
+% \cs{lst@MakeCaption} in \cs{lst@Init}, which runs \cs{refstepcounter} on
+% \texttt{lstlisting}, so we must come after it. Also \pkg{listings} itself
+% sets \cs{@currentlabel} to \cs{thelstnumber} in the \texttt{Init} hook,
+% which comes right after the \texttt{PreInit} one in \cs{lst@Init}. Since,
+% if we add to \texttt{Init} here, we go to the end of it, we'd be seeing the
+% wrong \cs{@currentlabel} at that point.
+% \begin{macrocode}
+ \lst@AddToHook { PreInit }
+ { \tl_if_empty:NF \lst@label { \zlabel { \lst@label } } }
+% \end{macrocode}
+% Set \texttt{currentcounter} to \texttt{lstnumber} in the \texttt{Init} hook,
+% since \pkg{listings} itself sets \cs{@currentlabel} to \cs{thelstnumber}
+% here. Note that \pkg{listings} \emph{does use} \cs{refstepcounter} on
+% \texttt{lstnumber}, but does so in the \texttt{EveryPar} hook, and there
+% must be some grouping involved such that \cs{@currentcounter} ends up not
+% being visible to the label. See section ``Line numbers'' of `\texttt{texdoc
+% listings-devel}' (the \file{.dtx}), and search for the definition of macro
+% \cs{c@lstnumber}. Indeed, the fact that \pkg{listings} manually sets
+% \cs{@currentlabel} to \cs{thelstnumber} is a signal that the work of
+% \cs{refstepcounter} is being restrained somehow.
+% \begin{macrocode}
+ \lst@AddToHook { Init }
+ { \@@_zcsetup:n { currentcounter = lstnumber } }
+ \msg_info:nnn { zref-clever } { compat-package } { listings }
+ }
+ }
+% \end{macrocode}
+%
+%
+% \subsection{\opt{enumitem}}
+%
+% The procedure below will ``see'' any changes made to the \texttt{enumerate}
+% environment (made with \pkg{enumitem}'s \cs{renewlist}) as long as it is
+% done in the preamble. Though, technically, \cs{renewlist} can be issued
+% anywhere in the document, this should be more than enough for the purpose at
+% hand. Besides, trying to retrieve this information ``on the fly'' would be
+% much overkill.
+%
+% The only real reason to ``renew'' \texttt{enumerate} itself is to change
+% \marg{max-depth}. \cs{renewlist} \emph{hard-codes} \texttt{max-depth} in
+% the environment's definition (well, just as the kernel does), so we cannot
+% retrieve this information from any sort of variable. But \cs{renewlist}
+% also creates any needed missing counters, so we can use their existence to
+% make the appropriate settings. In the end, the existence of the counters is
+% indeed what matters from \pkg{zref-clever}'s perspective. Since the first
+% four are defined by the kernel and already setup for \pkg{zref-clever} by
+% default, we start from \(5\), and stop at the first non-existent
+% \cs[no-index]{c@enumN} counter.
+%
+% \begin{macrocode}
+\@@_compat_module:nn { enumitem }
+ {
+ \@@_if_package_loaded:nT { enumitem }
+ {
+ \int_set:Nn \l_tmpa_int { 5 }
+ \bool_while_do:nn
+ {
+ \cs_if_exist_p:c
+ { c@ enum \int_to_roman:n { \l_tmpa_int } }
+ }
+ {
+ \@@_zcsetup:x
+ {
+ counterresetby =
+ {
+ enum \int_to_roman:n { \l_tmpa_int } =
+ enum \int_to_roman:n { \l_tmpa_int - 1 }
+ } ,
+ countertype =
+ { enum \int_to_roman:n { \l_tmpa_int } = item } ,
+ }
+ \int_incr:N \l_tmpa_int
+ }
+ \int_compare:nNnT { \l_tmpa_int } > { 5 }
+ { \msg_info:nnn { zref-clever } { compat-package } { enumitem } }
+ }
+ }
+% \end{macrocode}
+%
+%
+%
+% \subsection{\opt{subcaption}}
+%
+%
+% \begin{macrocode}
+\@@_compat_module:nn { subcaption }
+ {
+ \@@_if_package_loaded:nT { subcaption }
+ {
+ \@@_zcsetup:n
+ {
+ countertype =
+ {
+ subfigure = figure ,
+ subtable = table ,
+ } ,
+ counterresetby =
+ {
+ subfigure = figure ,
+ subtable = table ,
+ } ,
+ }
+% \end{macrocode}
+% Support for \texttt{subref} reference.
+% \begin{macrocode}
+ \zref@newprop { subref }
+ { \cs_if_exist_use:c { thesub \@captype } }
+ \tl_put_right:Nn \caption@subtypehook
+ { \zref@localaddprop \ZREF@mainlist { subref } }
+ }
+ }
+% \end{macrocode}
+%
+%
+% \subsection{\opt{subfig}}
+%
+% Though \pkg{subfig} offers \cs{subref} (as \pkg{subcaption}), I could not
+% find any reasonable place to add the \texttt{subref} property to
+% \pkg{zref}'s main list.
+%
+% \begin{macrocode}
+\@@_compat_module:nn { subfig }
+ {
+ \@@_if_package_loaded:nT { subfig }
+ {
+ \@@_zcsetup:n
+ {
+ countertype =
+ {
+ subfigure = figure ,
+ subtable = table ,
+ } ,
+ counterresetby =
+ {
+ subfigure = figure ,
+ subtable = table ,
+ } ,
+ }
+ }
+ }
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+%
+%
+% \section{Dictionaries}
+%
+% \subsection{English}
+%
+% \begin{macrocode}
+%<*package>
+\zcDeclareLanguage { english }
+\zcDeclareLanguageAlias { american } { english }
+\zcDeclareLanguageAlias { australian } { english }
+\zcDeclareLanguageAlias { british } { english }
+\zcDeclareLanguageAlias { canadian } { english }
+\zcDeclareLanguageAlias { newzealand } { english }
+\zcDeclareLanguageAlias { UKenglish } { english }
+\zcDeclareLanguageAlias { USenglish } { english }
+%</package>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*dict-english>
+% \end{macrocode}
+%
+% \begin{macrocode}
+namesep = {\nobreakspace} ,
+pairsep = {~and\nobreakspace} ,
+listsep = {,~} ,
+lastsep = {~and\nobreakspace} ,
+tpairsep = {~and\nobreakspace} ,
+tlistsep = {,~} ,
+tlastsep = {,~and\nobreakspace} ,
+notesep = {~} ,
+rangesep = {~to\nobreakspace} ,
+
+type = book ,
+ Name-sg = Book ,
+ name-sg = book ,
+ Name-pl = Books ,
+ name-pl = books ,
+
+type = part ,
+ Name-sg = Part ,
+ name-sg = part ,
+ Name-pl = Parts ,
+ name-pl = parts ,
+
+type = chapter ,
+ Name-sg = Chapter ,
+ name-sg = chapter ,
+ Name-pl = Chapters ,
+ name-pl = chapters ,
+
+type = section ,
+ Name-sg = Section ,
+ name-sg = section ,
+ Name-pl = Sections ,
+ name-pl = sections ,
+
+type = paragraph ,
+ Name-sg = Paragraph ,
+ name-sg = paragraph ,
+ Name-pl = Paragraphs ,
+ name-pl = paragraphs ,
+ Name-sg-ab = Par. ,
+ name-sg-ab = par. ,
+ Name-pl-ab = Par. ,
+ name-pl-ab = par. ,
+
+type = appendix ,
+ Name-sg = Appendix ,
+ name-sg = appendix ,
+ Name-pl = Appendices ,
+ name-pl = appendices ,
+
+type = subappendix ,
+ Name-sg = Appendix ,
+ name-sg = appendix ,
+ Name-pl = Appendices ,
+ name-pl = appendices ,
+
+type = page ,
+ Name-sg = Page ,
+ name-sg = page ,
+ Name-pl = Pages ,
+ name-pl = pages ,
+ name-sg-ab = p. ,
+ name-pl-ab = pp. ,
+ rangesep = {\textendash} ,
+
+type = line ,
+ Name-sg = Line ,
+ name-sg = line ,
+ Name-pl = Lines ,
+ name-pl = lines ,
+
+type = figure ,
+ Name-sg = Figure ,
+ name-sg = figure ,
+ Name-pl = Figures ,
+ name-pl = figures ,
+ Name-sg-ab = Fig. ,
+ name-sg-ab = fig. ,
+ Name-pl-ab = Figs. ,
+ name-pl-ab = figs. ,
+
+type = table ,
+ Name-sg = Table ,
+ name-sg = table ,
+ Name-pl = Tables ,
+ name-pl = tables ,
+
+type = item ,
+ Name-sg = Item ,
+ name-sg = item ,
+ Name-pl = Items ,
+ name-pl = items ,
+
+type = footnote ,
+ Name-sg = Footnote ,
+ name-sg = footnote ,
+ Name-pl = Footnotes ,
+ name-pl = footnotes ,
+
+type = endnote ,
+ Name-sg = Note ,
+ name-sg = note ,
+ Name-pl = Notes ,
+ name-pl = notes ,
+
+type = note ,
+ Name-sg = Note ,
+ name-sg = note ,
+ Name-pl = Notes ,
+ name-pl = notes ,
+
+type = equation ,
+ Name-sg = Equation ,
+ name-sg = equation ,
+ Name-pl = Equations ,
+ name-pl = equations ,
+ Name-sg-ab = Eq. ,
+ name-sg-ab = eq. ,
+ Name-pl-ab = Eqs. ,
+ name-pl-ab = eqs. ,
+ refpre = {(} ,
+ refpos = {)} ,
+
+type = theorem ,
+ Name-sg = Theorem ,
+ name-sg = theorem ,
+ Name-pl = Theorems ,
+ name-pl = theorems ,
+
+type = lemma ,
+ Name-sg = Lemma ,
+ name-sg = lemma ,
+ Name-pl = Lemmas ,
+ name-pl = lemmas ,
+
+type = corollary ,
+ Name-sg = Corollary ,
+ name-sg = corollary ,
+ Name-pl = Corollaries ,
+ name-pl = corollaries ,
+
+type = proposition ,
+ Name-sg = Proposition ,
+ name-sg = proposition ,
+ Name-pl = Propositions ,
+ name-pl = propositions ,
+
+type = definition ,
+ Name-sg = Definition ,
+ name-sg = definition ,
+ Name-pl = Definitions ,
+ name-pl = definitions ,
+
+type = proof ,
+ Name-sg = Proof ,
+ name-sg = proof ,
+ Name-pl = Proofs ,
+ name-pl = proofs ,
+
+type = result ,
+ Name-sg = Result ,
+ name-sg = result ,
+ Name-pl = Results ,
+ name-pl = results ,
+
+type = remark ,
+ Name-sg = Remark ,
+ name-sg = remark ,
+ Name-pl = Remarks ,
+ name-pl = remarks ,
+
+type = example ,
+ Name-sg = Example ,
+ name-sg = example ,
+ Name-pl = Examples ,
+ name-pl = examples ,
+
+type = algorithm ,
+ Name-sg = Algorithm ,
+ name-sg = algorithm ,
+ Name-pl = Algorithms ,
+ name-pl = algorithms ,
+
+type = listing ,
+ Name-sg = Listing ,
+ name-sg = listing ,
+ Name-pl = Listings ,
+ name-pl = listings ,
+
+type = exercise ,
+ Name-sg = Exercise ,
+ name-sg = exercise ,
+ Name-pl = Exercises ,
+ name-pl = exercises ,
+
+type = solution ,
+ Name-sg = Solution ,
+ name-sg = solution ,
+ Name-pl = Solutions ,
+ name-pl = solutions ,
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</dict-english>
+% \end{macrocode}
+%
+%
+%
+% \subsection{German}
+%
+% \begin{macrocode}
+%<*package>
+\zcDeclareLanguage
+ [ declension = { N , A , D , G } , gender = { f , m , n } , allcaps ]
+ { german }
+\zcDeclareLanguageAlias { austrian } { german }
+\zcDeclareLanguageAlias { germanb } { german }
+\zcDeclareLanguageAlias { ngerman } { german }
+\zcDeclareLanguageAlias { naustrian } { german }
+\zcDeclareLanguageAlias { nswissgerman } { german }
+\zcDeclareLanguageAlias { swissgerman } { german }
+%</package>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*dict-german>
+% \end{macrocode}
+%
+% \begin{macrocode}
+namesep = {\nobreakspace} ,
+pairsep = {~und\nobreakspace} ,
+listsep = {,~} ,
+lastsep = {~und\nobreakspace} ,
+tpairsep = {~und\nobreakspace} ,
+tlistsep = {,~} ,
+tlastsep = {~und\nobreakspace} ,
+notesep = {~} ,
+rangesep = {~bis\nobreakspace} ,
+
+type = book ,
+ gender = n ,
+ case = N ,
+ Name-sg = Buch ,
+ Name-pl = Bücher ,
+ case = A ,
+ Name-sg = Buch ,
+ Name-pl = Bücher ,
+ case = D ,
+ Name-sg = Buch ,
+ Name-pl = Büchern ,
+ case = G ,
+ Name-sg = Buches ,
+ Name-pl = Bücher ,
+
+type = part ,
+ gender = m ,
+ case = N ,
+ Name-sg = Teil ,
+ Name-pl = Teile ,
+ case = A ,
+ Name-sg = Teil ,
+ Name-pl = Teile ,
+ case = D ,
+ Name-sg = Teil ,
+ Name-pl = Teilen ,
+ case = G ,
+ Name-sg = Teiles ,
+ Name-pl = Teile ,
+
+type = chapter ,
+ gender = n ,
+ case = N ,
+ Name-sg = Kapitel ,
+ Name-pl = Kapitel ,
+ case = A ,
+ Name-sg = Kapitel ,
+ Name-pl = Kapitel ,
+ case = D ,
+ Name-sg = Kapitel ,
+ Name-pl = Kapiteln ,
+ case = G ,
+ Name-sg = Kapitels ,
+ Name-pl = Kapitel ,
+
+type = section ,
+ gender = m ,
+ case = N ,
+ Name-sg = Abschnitt ,
+ Name-pl = Abschnitte ,
+ case = A ,
+ Name-sg = Abschnitt ,
+ Name-pl = Abschnitte ,
+ case = D ,
+ Name-sg = Abschnitt ,
+ Name-pl = Abschnitten ,
+ case = G ,
+ Name-sg = Abschnitts ,
+ Name-pl = Abschnitte ,
+
+type = paragraph ,
+ gender = m ,
+ case = N ,
+ Name-sg = Absatz ,
+ Name-pl = Absätze ,
+ case = A ,
+ Name-sg = Absatz ,
+ Name-pl = Absätze ,
+ case = D ,
+ Name-sg = Absatz ,
+ Name-pl = Absätzen ,
+ case = G ,
+ Name-sg = Absatzes ,
+ Name-pl = Absätze ,
+
+type = appendix ,
+ gender = m ,
+ case = N ,
+ Name-sg = Anhang ,
+ Name-pl = Anhänge ,
+ case = A ,
+ Name-sg = Anhang ,
+ Name-pl = Anhänge ,
+ case = D ,
+ Name-sg = Anhang ,
+ Name-pl = Anhängen ,
+ case = G ,
+ Name-sg = Anhangs ,
+ Name-pl = Anhänge ,
+
+type = subappendix ,
+ gender = m ,
+ case = N ,
+ Name-sg = Anhang ,
+ Name-pl = Anhänge ,
+ case = A ,
+ Name-sg = Anhang ,
+ Name-pl = Anhänge ,
+ case = D ,
+ Name-sg = Anhang ,
+ Name-pl = Anhängen ,
+ case = G ,
+ Name-sg = Anhangs ,
+ Name-pl = Anhänge ,
+
+type = page ,
+ gender = f ,
+ case = N ,
+ Name-sg = Seite ,
+ Name-pl = Seiten ,
+ case = A ,
+ Name-sg = Seite ,
+ Name-pl = Seiten ,
+ case = D ,
+ Name-sg = Seite ,
+ Name-pl = Seiten ,
+ case = G ,
+ Name-sg = Seite ,
+ Name-pl = Seiten ,
+ rangesep = {\textendash} ,
+
+type = line ,
+ gender = f ,
+ case = N ,
+ Name-sg = Zeile ,
+ Name-pl = Zeilen ,
+ case = A ,
+ Name-sg = Zeile ,
+ Name-pl = Zeilen ,
+ case = D ,
+ Name-sg = Zeile ,
+ Name-pl = Zeilen ,
+ case = G ,
+ Name-sg = Zeile ,
+ Name-pl = Zeilen ,
+
+type = figure ,
+ gender = f ,
+ case = N ,
+ Name-sg = Abbildung ,
+ Name-pl = Abbildungen ,
+ Name-sg-ab = Abb. ,
+ Name-pl-ab = Abb. ,
+ case = A ,
+ Name-sg = Abbildung ,
+ Name-pl = Abbildungen ,
+ Name-sg-ab = Abb. ,
+ Name-pl-ab = Abb. ,
+ case = D ,
+ Name-sg = Abbildung ,
+ Name-pl = Abbildungen ,
+ Name-sg-ab = Abb. ,
+ Name-pl-ab = Abb. ,
+ case = G ,
+ Name-sg = Abbildung ,
+ Name-pl = Abbildungen ,
+ Name-sg-ab = Abb. ,
+ Name-pl-ab = Abb. ,
+
+type = table ,
+ gender = f ,
+ case = N ,
+ Name-sg = Tabelle ,
+ Name-pl = Tabellen ,
+ case = A ,
+ Name-sg = Tabelle ,
+ Name-pl = Tabellen ,
+ case = D ,
+ Name-sg = Tabelle ,
+ Name-pl = Tabellen ,
+ case = G ,
+ Name-sg = Tabelle ,
+ Name-pl = Tabellen ,
+
+type = item ,
+ gender = m ,
+ case = N ,
+ Name-sg = Punkt ,
+ Name-pl = Punkte ,
+ case = A ,
+ Name-sg = Punkt ,
+ Name-pl = Punkte ,
+ case = D ,
+ Name-sg = Punkt ,
+ Name-pl = Punkten ,
+ case = G ,
+ Name-sg = Punktes ,
+ Name-pl = Punkte ,
+
+type = footnote ,
+ gender = f ,
+ case = N ,
+ Name-sg = Fußnote ,
+ Name-pl = Fußnoten ,
+ case = A ,
+ Name-sg = Fußnote ,
+ Name-pl = Fußnoten ,
+ case = D ,
+ Name-sg = Fußnote ,
+ Name-pl = Fußnoten ,
+ case = G ,
+ Name-sg = Fußnote ,
+ Name-pl = Fußnoten ,
+
+type = endnote ,
+ gender = f ,
+ case = N ,
+ Name-sg = Endnote ,
+ Name-pl = Endnoten ,
+ case = A ,
+ Name-sg = Endnote ,
+ Name-pl = Endnoten ,
+ case = D ,
+ Name-sg = Endnote ,
+ Name-pl = Endnoten ,
+ case = G ,
+ Name-sg = Endnote ,
+ Name-pl = Endnoten ,
+
+type = note ,
+ gender = f ,
+ case = N ,
+ Name-sg = Anmerkung ,
+ Name-pl = Anmerkungen ,
+ case = A ,
+ Name-sg = Anmerkung ,
+ Name-pl = Anmerkungen ,
+ case = D ,
+ Name-sg = Anmerkung ,
+ Name-pl = Anmerkungen ,
+ case = G ,
+ Name-sg = Anmerkung ,
+ Name-pl = Anmerkungen ,
+
+type = equation ,
+ gender = f ,
+ case = N ,
+ Name-sg = Gleichung ,
+ Name-pl = Gleichungen ,
+ case = A ,
+ Name-sg = Gleichung ,
+ Name-pl = Gleichungen ,
+ case = D ,
+ Name-sg = Gleichung ,
+ Name-pl = Gleichungen ,
+ case = G ,
+ Name-sg = Gleichung ,
+ Name-pl = Gleichungen ,
+ refpre = {(} ,
+ refpos = {)} ,
+
+type = theorem ,
+ gender = n ,
+ case = N ,
+ Name-sg = Theorem ,
+ Name-pl = Theoreme ,
+ case = A ,
+ Name-sg = Theorem ,
+ Name-pl = Theoreme ,
+ case = D ,
+ Name-sg = Theorem ,
+ Name-pl = Theoremen ,
+ case = G ,
+ Name-sg = Theorems ,
+ Name-pl = Theoreme ,
+
+type = lemma ,
+ gender = n ,
+ case = N ,
+ Name-sg = Lemma ,
+ Name-pl = Lemmata ,
+ case = A ,
+ Name-sg = Lemma ,
+ Name-pl = Lemmata ,
+ case = D ,
+ Name-sg = Lemma ,
+ Name-pl = Lemmata ,
+ case = G ,
+ Name-sg = Lemmas ,
+ Name-pl = Lemmata ,
+
+type = corollary ,
+ gender = n ,
+ case = N ,
+ Name-sg = Korollar ,
+ Name-pl = Korollare ,
+ case = A ,
+ Name-sg = Korollar ,
+ Name-pl = Korollare ,
+ case = D ,
+ Name-sg = Korollar ,
+ Name-pl = Korollaren ,
+ case = G ,
+ Name-sg = Korollars ,
+ Name-pl = Korollare ,
+
+type = proposition ,
+ gender = m ,
+ case = N ,
+ Name-sg = Satz ,
+ Name-pl = Sätze ,
+ case = A ,
+ Name-sg = Satz ,
+ Name-pl = Sätze ,
+ case = D ,
+ Name-sg = Satz ,
+ Name-pl = Sätzen ,
+ case = G ,
+ Name-sg = Satzes ,
+ Name-pl = Sätze ,
+
+type = definition ,
+ gender = f ,
+ case = N ,
+ Name-sg = Definition ,
+ Name-pl = Definitionen ,
+ case = A ,
+ Name-sg = Definition ,
+ Name-pl = Definitionen ,
+ case = D ,
+ Name-sg = Definition ,
+ Name-pl = Definitionen ,
+ case = G ,
+ Name-sg = Definition ,
+ Name-pl = Definitionen ,
+
+type = proof ,
+ gender = m ,
+ case = N ,
+ Name-sg = Beweis ,
+ Name-pl = Beweise ,
+ case = A ,
+ Name-sg = Beweis ,
+ Name-pl = Beweise ,
+ case = D ,
+ Name-sg = Beweis ,
+ Name-pl = Beweisen ,
+ case = G ,
+ Name-sg = Beweises ,
+ Name-pl = Beweise ,
+
+type = result ,
+ gender = n ,
+ case = N ,
+ Name-sg = Ergebnis ,
+ Name-pl = Ergebnisse ,
+ case = A ,
+ Name-sg = Ergebnis ,
+ Name-pl = Ergebnisse ,
+ case = D ,
+ Name-sg = Ergebnis ,
+ Name-pl = Ergebnissen ,
+ case = G ,
+ Name-sg = Ergebnisses ,
+ Name-pl = Ergebnisse ,
+
+type = remark ,
+ gender = f ,
+ case = N ,
+ Name-sg = Bemerkung ,
+ Name-pl = Bemerkungen ,
+ case = A ,
+ Name-sg = Bemerkung ,
+ Name-pl = Bemerkungen ,
+ case = D ,
+ Name-sg = Bemerkung ,
+ Name-pl = Bemerkungen ,
+ case = G ,
+ Name-sg = Bemerkung ,
+ Name-pl = Bemerkungen ,
+
+type = example ,
+ gender = n ,
+ case = N ,
+ Name-sg = Beispiel ,
+ Name-pl = Beispiele ,
+ case = A ,
+ Name-sg = Beispiel ,
+ Name-pl = Beispiele ,
+ case = D ,
+ Name-sg = Beispiel ,
+ Name-pl = Beispielen ,
+ case = G ,
+ Name-sg = Beispiels ,
+ Name-pl = Beispiele ,
+
+type = algorithm ,
+ gender = m ,
+ case = N ,
+ Name-sg = Algorithmus ,
+ Name-pl = Algorithmen ,
+ case = A ,
+ Name-sg = Algorithmus ,
+ Name-pl = Algorithmen ,
+ case = D ,
+ Name-sg = Algorithmus ,
+ Name-pl = Algorithmen ,
+ case = G ,
+ Name-sg = Algorithmus ,
+ Name-pl = Algorithmen ,
+
+type = listing ,
+ gender = n ,
+ case = N ,
+ Name-sg = Listing ,
+ Name-pl = Listings ,
+ case = A ,
+ Name-sg = Listing ,
+ Name-pl = Listings ,
+ case = D ,
+ Name-sg = Listing ,
+ Name-pl = Listings ,
+ case = G ,
+ Name-sg = Listings ,
+ Name-pl = Listings ,
+
+type = exercise ,
+ gender = f ,
+ case = N ,
+ Name-sg = Ãœbungsaufgabe ,
+ Name-pl = Ãœbungsaufgaben ,
+ case = A ,
+ Name-sg = Ãœbungsaufgabe ,
+ Name-pl = Ãœbungsaufgaben ,
+ case = D ,
+ Name-sg = Ãœbungsaufgabe ,
+ Name-pl = Ãœbungsaufgaben ,
+ case = G ,
+ Name-sg = Ãœbungsaufgabe ,
+ Name-pl = Ãœbungsaufgaben ,
+
+type = solution ,
+ gender = f ,
+ case = N ,
+ Name-sg = Lösung ,
+ Name-pl = Lösungen ,
+ case = A ,
+ Name-sg = Lösung ,
+ Name-pl = Lösungen ,
+ case = D ,
+ Name-sg = Lösung ,
+ Name-pl = Lösungen ,
+ case = G ,
+ Name-sg = Lösung ,
+ Name-pl = Lösungen ,
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</dict-german>
+% \end{macrocode}
+%
+%
+%
+% \subsection{French}
+%
+% \begin{macrocode}
+%<*package>
+\zcDeclareLanguage [ gender = { f , m } ] { french }
+\zcDeclareLanguageAlias { acadian } { french }
+\zcDeclareLanguageAlias { canadien } { french }
+\zcDeclareLanguageAlias { francais } { french }
+\zcDeclareLanguageAlias { frenchb } { french }
+%</package>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*dict-french>
+% \end{macrocode}
+%
+% \begin{macrocode}
+namesep = {\nobreakspace} ,
+pairsep = {~et\nobreakspace} ,
+listsep = {,~} ,
+lastsep = {~et\nobreakspace} ,
+tpairsep = {~et\nobreakspace} ,
+tlistsep = {,~} ,
+tlastsep = {~et\nobreakspace} ,
+notesep = {~} ,
+rangesep = {~à\nobreakspace} ,
+
+type = book ,
+ gender = m ,
+ Name-sg = Livre ,
+ name-sg = livre ,
+ Name-pl = Livres ,
+ name-pl = livres ,
+
+type = part ,
+ gender = f ,
+ Name-sg = Partie ,
+ name-sg = partie ,
+ Name-pl = Parties ,
+ name-pl = parties ,
+
+type = chapter ,
+ gender = m ,
+ Name-sg = Chapitre ,
+ name-sg = chapitre ,
+ Name-pl = Chapitres ,
+ name-pl = chapitres ,
+
+type = section ,
+ gender = f ,
+ Name-sg = Section ,
+ name-sg = section ,
+ Name-pl = Sections ,
+ name-pl = sections ,
+
+type = paragraph ,
+ gender = m ,
+ Name-sg = Paragraphe ,
+ name-sg = paragraphe ,
+ Name-pl = Paragraphes ,
+ name-pl = paragraphes ,
+
+type = appendix ,
+ gender = f ,
+ Name-sg = Annexe ,
+ name-sg = annexe ,
+ Name-pl = Annexes ,
+ name-pl = annexes ,
+
+type = subappendix ,
+ gender = f ,
+ Name-sg = Annexe ,
+ name-sg = annexe ,
+ Name-pl = Annexes ,
+ name-pl = annexes ,
+
+type = page ,
+ gender = f ,
+ Name-sg = Page ,
+ name-sg = page ,
+ Name-pl = Pages ,
+ name-pl = pages ,
+ rangesep = {\textendash} ,
+
+type = line ,
+ gender = f ,
+ Name-sg = Ligne ,
+ name-sg = ligne ,
+ Name-pl = Lignes ,
+ name-pl = lignes ,
+
+type = figure ,
+ gender = f ,
+ Name-sg = Figure ,
+ name-sg = figure ,
+ Name-pl = Figures ,
+ name-pl = figures ,
+
+type = table ,
+ gender = f ,
+ Name-sg = Table ,
+ name-sg = table ,
+ Name-pl = Tables ,
+ name-pl = tables ,
+
+type = item ,
+ gender = m ,
+ Name-sg = Point ,
+ name-sg = point ,
+ Name-pl = Points ,
+ name-pl = points ,
+
+type = footnote ,
+ gender = f ,
+ Name-sg = Note ,
+ name-sg = note ,
+ Name-pl = Notes ,
+ name-pl = notes ,
+
+type = endnote ,
+ gender = f ,
+ Name-sg = Note ,
+ name-sg = note ,
+ Name-pl = Notes ,
+ name-pl = notes ,
+
+type = note ,
+ gender = f ,
+ Name-sg = Note ,
+ name-sg = note ,
+ Name-pl = Notes ,
+ name-pl = notes ,
+
+type = equation ,
+ gender = f ,
+ Name-sg = Équation ,
+ name-sg = équation ,
+ Name-pl = Équations ,
+ name-pl = équations ,
+ refpre = {(} ,
+ refpos = {)} ,
+
+type = theorem ,
+ gender = m ,
+ Name-sg = Théorème ,
+ name-sg = théorème ,
+ Name-pl = Théorèmes ,
+ name-pl = théorèmes ,
+
+type = lemma ,
+ gender = m ,
+ Name-sg = Lemme ,
+ name-sg = lemme ,
+ Name-pl = Lemmes ,
+ name-pl = lemmes ,
+
+type = corollary ,
+ gender = m ,
+ Name-sg = Corollaire ,
+ name-sg = corollaire ,
+ Name-pl = Corollaires ,
+ name-pl = corollaires ,
+
+type = proposition ,
+ gender = f ,
+ Name-sg = Proposition ,
+ name-sg = proposition ,
+ Name-pl = Propositions ,
+ name-pl = propositions ,
+
+type = definition ,
+ gender = f ,
+ Name-sg = Définition ,
+ name-sg = définition ,
+ Name-pl = Définitions ,
+ name-pl = définitions ,
+
+type = proof ,
+ gender = f ,
+ Name-sg = Démonstration ,
+ name-sg = démonstration ,
+ Name-pl = Démonstrations ,
+ name-pl = démonstrations ,
+
+type = result ,
+ gender = m ,
+ Name-sg = Résultat ,
+ name-sg = résultat ,
+ Name-pl = Résultats ,
+ name-pl = résultats ,
+
+type = remark ,
+ gender = f ,
+ Name-sg = Remarque ,
+ name-sg = remarque ,
+ Name-pl = Remarques ,
+ name-pl = remarques ,
+
+type = example ,
+ gender = m ,
+ Name-sg = Exemple ,
+ name-sg = exemple ,
+ Name-pl = Exemples ,
+ name-pl = exemples ,
+
+type = algorithm ,
+ gender = m ,
+ Name-sg = Algorithme ,
+ name-sg = algorithme ,
+ Name-pl = Algorithmes ,
+ name-pl = algorithmes ,
+
+type = listing ,
+ gender = f ,
+ Name-sg = Liste ,
+ name-sg = liste ,
+ Name-pl = Listes ,
+ name-pl = listes ,
+
+type = exercise ,
+ gender = m ,
+ Name-sg = Exercice ,
+ name-sg = exercice ,
+ Name-pl = Exercices ,
+ name-pl = exercices ,
+
+type = solution ,
+ gender = f ,
+ Name-sg = Solution ,
+ name-sg = solution ,
+ Name-pl = Solutions ,
+ name-pl = solutions ,
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</dict-french>
+% \end{macrocode}
+%
+%
+%
+% \subsection{Portuguese}
+%
+% \begin{macrocode}
+%<*package>
+\zcDeclareLanguage [ gender = { f , m } ] { portuguese }
+\zcDeclareLanguageAlias { brazilian } { portuguese }
+\zcDeclareLanguageAlias { brazil } { portuguese }
+\zcDeclareLanguageAlias { portuges } { portuguese }
+%</package>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*dict-portuguese>
+% \end{macrocode}
+%
+% \begin{macrocode}
+namesep = {\nobreakspace} ,
+pairsep = {~e\nobreakspace} ,
+listsep = {,~} ,
+lastsep = {~e\nobreakspace} ,
+tpairsep = {~e\nobreakspace} ,
+tlistsep = {,~} ,
+tlastsep = {~e\nobreakspace} ,
+notesep = {~} ,
+rangesep = {~a\nobreakspace} ,
+
+type = book ,
+ gender = m ,
+ Name-sg = Livro ,
+ name-sg = livro ,
+ Name-pl = Livros ,
+ name-pl = livros ,
+
+type = part ,
+ gender = f ,
+ Name-sg = Parte ,
+ name-sg = parte ,
+ Name-pl = Partes ,
+ name-pl = partes ,
+
+type = chapter ,
+ gender = m ,
+ Name-sg = Capítulo ,
+ name-sg = capítulo ,
+ Name-pl = Capítulos ,
+ name-pl = capítulos ,
+
+type = section ,
+ gender = f ,
+ Name-sg = Seção ,
+ name-sg = seção ,
+ Name-pl = Seções ,
+ name-pl = seções ,
+
+type = paragraph ,
+ gender = m ,
+ Name-sg = Parágrafo ,
+ name-sg = parágrafo ,
+ Name-pl = Parágrafos ,
+ name-pl = parágrafos ,
+ Name-sg-ab = Par. ,
+ name-sg-ab = par. ,
+ Name-pl-ab = Par. ,
+ name-pl-ab = par. ,
+
+type = appendix ,
+ gender = m ,
+ Name-sg = Apêndice ,
+ name-sg = apêndice ,
+ Name-pl = Apêndices ,
+ name-pl = apêndices ,
+
+type = subappendix ,
+ gender = m ,
+ Name-sg = Apêndice ,
+ name-sg = apêndice ,
+ Name-pl = Apêndices ,
+ name-pl = apêndices ,
+
+type = page ,
+ gender = f ,
+ Name-sg = Página ,
+ name-sg = página ,
+ Name-pl = Páginas ,
+ name-pl = páginas ,
+ name-sg-ab = p. ,
+ name-pl-ab = pp. ,
+ rangesep = {\textendash} ,
+
+type = line ,
+ gender = f ,
+ Name-sg = Linha ,
+ name-sg = linha ,
+ Name-pl = Linhas ,
+ name-pl = linhas ,
+
+type = figure ,
+ gender = f ,
+ Name-sg = Figura ,
+ name-sg = figura ,
+ Name-pl = Figuras ,
+ name-pl = figuras ,
+ Name-sg-ab = Fig. ,
+ name-sg-ab = fig. ,
+ Name-pl-ab = Figs. ,
+ name-pl-ab = figs. ,
+
+type = table ,
+ gender = f ,
+ Name-sg = Tabela ,
+ name-sg = tabela ,
+ Name-pl = Tabelas ,
+ name-pl = tabelas ,
+
+type = item ,
+ gender = m ,
+ Name-sg = Item ,
+ name-sg = item ,
+ Name-pl = Itens ,
+ name-pl = itens ,
+
+type = footnote ,
+ gender = f ,
+ Name-sg = Nota ,
+ name-sg = nota ,
+ Name-pl = Notas ,
+ name-pl = notas ,
+
+type = endnote ,
+ gender = f ,
+ Name-sg = Nota ,
+ name-sg = nota ,
+ Name-pl = Notas ,
+ name-pl = notas ,
+
+type = note ,
+ gender = f ,
+ Name-sg = Nota ,
+ name-sg = nota ,
+ Name-pl = Notas ,
+ name-pl = notas ,
+
+type = equation ,
+ gender = f ,
+ Name-sg = Equação ,
+ name-sg = equação ,
+ Name-pl = Equações ,
+ name-pl = equações ,
+ Name-sg-ab = Eq. ,
+ name-sg-ab = eq. ,
+ Name-pl-ab = Eqs. ,
+ name-pl-ab = eqs. ,
+ refpre = {(} ,
+ refpos = {)} ,
+
+type = theorem ,
+ gender = m ,
+ Name-sg = Teorema ,
+ name-sg = teorema ,
+ Name-pl = Teoremas ,
+ name-pl = teoremas ,
+
+type = lemma ,
+ gender = m ,
+ Name-sg = Lema ,
+ name-sg = lema ,
+ Name-pl = Lemas ,
+ name-pl = lemas ,
+
+type = corollary ,
+ gender = m ,
+ Name-sg = Corolário ,
+ name-sg = corolário ,
+ Name-pl = Corolários ,
+ name-pl = corolários ,
+
+type = proposition ,
+ gender = f ,
+ Name-sg = Proposição ,
+ name-sg = proposição ,
+ Name-pl = Proposições ,
+ name-pl = proposições ,
+
+type = definition ,
+ gender = f ,
+ Name-sg = Definição ,
+ name-sg = definição ,
+ Name-pl = Definições ,
+ name-pl = definições ,
+
+type = proof ,
+ gender = f ,
+ Name-sg = Demonstração ,
+ name-sg = demonstração ,
+ Name-pl = Demonstrações ,
+ name-pl = demonstrações ,
+
+type = result ,
+ gender = m ,
+ Name-sg = Resultado ,
+ name-sg = resultado ,
+ Name-pl = Resultados ,
+ name-pl = resultados ,
+
+type = remark ,
+ gender = f ,
+ Name-sg = Observação ,
+ name-sg = observação ,
+ Name-pl = Observações ,
+ name-pl = observações ,
+
+type = example ,
+ gender = m ,
+ Name-sg = Exemplo ,
+ name-sg = exemplo ,
+ Name-pl = Exemplos ,
+ name-pl = exemplos ,
+
+type = algorithm ,
+ gender = m ,
+ Name-sg = Algoritmo ,
+ name-sg = algoritmo ,
+ Name-pl = Algoritmos ,
+ name-pl = algoritmos ,
+
+type = listing ,
+ gender = f ,
+ Name-sg = Listagem ,
+ name-sg = listagem ,
+ Name-pl = Listagens ,
+ name-pl = listagens ,
+
+type = exercise ,
+ gender = m ,
+ Name-sg = Exercício ,
+ name-sg = exercício ,
+ Name-pl = Exercícios ,
+ name-pl = exercícios ,
+
+type = solution ,
+ gender = f ,
+ Name-sg = Solução ,
+ name-sg = solução ,
+ Name-pl = Soluções ,
+ name-pl = soluções ,
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</dict-portuguese>
+% \end{macrocode}
+%
+%
+%
+% \subsection{Spanish}
+%
+% \begin{macrocode}
+%<*package>
+\zcDeclareLanguage [ gender = { f , m } ] { spanish }
+%</package>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*dict-spanish>
+% \end{macrocode}
+%
+% \begin{macrocode}
+namesep = {\nobreakspace} ,
+pairsep = {~y\nobreakspace} ,
+listsep = {,~} ,
+lastsep = {~y\nobreakspace} ,
+tpairsep = {~y\nobreakspace} ,
+tlistsep = {,~} ,
+tlastsep = {~y\nobreakspace} ,
+notesep = {~} ,
+rangesep = {~a\nobreakspace} ,
+
+type = book ,
+ gender = m ,
+ Name-sg = Libro ,
+ name-sg = libro ,
+ Name-pl = Libros ,
+ name-pl = libros ,
+
+type = part ,
+ gender = f ,
+ Name-sg = Parte ,
+ name-sg = parte ,
+ Name-pl = Partes ,
+ name-pl = partes ,
+
+type = chapter ,
+ gender = m ,
+ Name-sg = Capítulo ,
+ name-sg = capítulo ,
+ Name-pl = Capítulos ,
+ name-pl = capítulos ,
+
+type = section ,
+ gender = f ,
+ Name-sg = Sección ,
+ name-sg = sección ,
+ Name-pl = Secciones ,
+ name-pl = secciones ,
+
+type = paragraph ,
+ gender = m ,
+ Name-sg = Párrafo ,
+ name-sg = párrafo ,
+ Name-pl = Párrafos ,
+ name-pl = párrafos ,
+
+type = appendix ,
+ gender = m ,
+ Name-sg = Apéndice ,
+ name-sg = apéndice ,
+ Name-pl = Apéndices ,
+ name-pl = apéndices ,
+
+type = subappendix ,
+ gender = m ,
+ Name-sg = Apéndice ,
+ name-sg = apéndice ,
+ Name-pl = Apéndices ,
+ name-pl = apéndices ,
+
+type = page ,
+ gender = f ,
+ Name-sg = Página ,
+ name-sg = página ,
+ Name-pl = Páginas ,
+ name-pl = páginas ,
+ rangesep = {\textendash} ,
+
+type = line ,
+ gender = f ,
+ Name-sg = Línea ,
+ name-sg = línea ,
+ Name-pl = Líneas ,
+ name-pl = líneas ,
+
+type = figure ,
+ gender = f ,
+ Name-sg = Figura ,
+ name-sg = figura ,
+ Name-pl = Figuras ,
+ name-pl = figuras ,
+
+type = table ,
+ gender = m ,
+ Name-sg = Cuadro ,
+ name-sg = cuadro ,
+ Name-pl = Cuadros ,
+ name-pl = cuadros ,
+
+type = item ,
+ gender = m ,
+ Name-sg = Punto ,
+ name-sg = punto ,
+ Name-pl = Puntos ,
+ name-pl = puntos ,
+
+type = footnote ,
+ gender = f ,
+ Name-sg = Nota ,
+ name-sg = nota ,
+ Name-pl = Notas ,
+ name-pl = notas ,
+
+type = endnote ,
+ gender = f ,
+ Name-sg = Nota ,
+ name-sg = nota ,
+ Name-pl = Notas ,
+ name-pl = notas ,
+
+type = note ,
+ gender = f ,
+ Name-sg = Nota ,
+ name-sg = nota ,
+ Name-pl = Notas ,
+ name-pl = notas ,
+
+type = equation ,
+ gender = f ,
+ Name-sg = Ecuación ,
+ name-sg = ecuación ,
+ Name-pl = Ecuaciones ,
+ name-pl = ecuaciones ,
+ refpre = {(} ,
+ refpos = {)} ,
+
+type = theorem ,
+ gender = m ,
+ Name-sg = Teorema ,
+ name-sg = teorema ,
+ Name-pl = Teoremas ,
+ name-pl = teoremas ,
+
+type = lemma ,
+ gender = m ,
+ Name-sg = Lema ,
+ name-sg = lema ,
+ Name-pl = Lemas ,
+ name-pl = lemas ,
+
+type = corollary ,
+ gender = m ,
+ Name-sg = Corolario ,
+ name-sg = corolario ,
+ Name-pl = Corolarios ,
+ name-pl = corolarios ,
+
+type = proposition ,
+ gender = f ,
+ Name-sg = Proposición ,
+ name-sg = proposición ,
+ Name-pl = Proposiciones ,
+ name-pl = proposiciones ,
+
+type = definition ,
+ gender = f ,
+ Name-sg = Definición ,
+ name-sg = definición ,
+ Name-pl = Definiciones ,
+ name-pl = definiciones ,
+
+type = proof ,
+ gender = f ,
+ Name-sg = Demostración ,
+ name-sg = demostración ,
+ Name-pl = Demostraciones ,
+ name-pl = demostraciones ,
+
+type = result ,
+ gender = m ,
+ Name-sg = Resultado ,
+ name-sg = resultado ,
+ Name-pl = Resultados ,
+ name-pl = resultados ,
+
+type = remark ,
+ gender = f ,
+ Name-sg = Observación ,
+ name-sg = observación ,
+ Name-pl = Observaciones ,
+ name-pl = observaciones ,
+
+type = example ,
+ gender = m ,
+ Name-sg = Ejemplo ,
+ name-sg = ejemplo ,
+ Name-pl = Ejemplos ,
+ name-pl = ejemplos ,
+
+type = algorithm ,
+ gender = m ,
+ Name-sg = Algoritmo ,
+ name-sg = algoritmo ,
+ Name-pl = Algoritmos ,
+ name-pl = algoritmos ,
+
+type = listing ,
+ gender = m ,
+ Name-sg = Listado ,
+ name-sg = listado ,
+ Name-pl = Listados ,
+ name-pl = listados ,
+
+type = exercise ,
+ gender = m ,
+ Name-sg = Ejercicio ,
+ name-sg = ejercicio ,
+ Name-pl = Ejercicios ,
+ name-pl = ejercicios ,
+
+type = solution ,
+ gender = f ,
+ Name-sg = Solución ,
+ name-sg = solución ,
+ Name-pl = Soluciones ,
+ name-pl = soluciones ,
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</dict-spanish>
+% \end{macrocode}
+%
+%
+% \PrintIndex
+%
+%
diff --git a/macros/latex/contrib/zref-clever/zref-clever.ins b/macros/latex/contrib/zref-clever/zref-clever.ins
new file mode 100644
index 0000000000..71259f4751
--- /dev/null
+++ b/macros/latex/contrib/zref-clever/zref-clever.ins
@@ -0,0 +1,99 @@
+% \iffalse meta-comment
+%
+% File: zref-clever.ins
+%
+% This file is part of the LaTeX package "zref-clever".
+%
+% Copyright (C) 2021 Gustavo Barros
+%
+% It may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License (LPPL), either version 1.3c of this
+% license or (at your option) any later version. The latest version
+% of this license is in the file:
+%
+% https://www.latex-project.org/lppl.txt
+%
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+%
+% This work is "maintained" (as per LPPL maintenance status) by
+% Gustavo Barros.
+%
+% This work consists of the files zref-clever.dtx,
+% zref-clever.ins,
+% zref-clever.tex,
+% zref-clever-code.tex,
+% and the derived files listed in MANIFEST.md.
+%
+% The released version of this package is available from CTAN.
+%
+% -----------------------------------------------------------------------
+%
+% The development version of the package can be found at
+%
+% https://github.com/gusbrs/zref-clever
+%
+% for those people who are interested.
+%
+% -----------------------------------------------------------------------
+%
+% \fi
+
+\input l3docstrip.tex
+
+\keepsilent
+
+\askforoverwritefalse
+
+\preamble
+
+This file was generated from file(s) of the LaTeX package "zref-clever".
+
+Copyright (C) 2021 Gustavo Barros
+
+It may be distributed and/or modified under the conditions of the
+LaTeX Project Public License (LPPL), either version 1.3c of this
+license or (at your option) any later version. The latest version
+of this license is in the file:
+
+ https://www.latex-project.org/lppl.txt
+
+and version 1.3 or later is part of all distributions of LaTeX
+version 2005/12/01 or later.
+
+
+This work is "maintained" (as per LPPL maintenance status) by
+ Gustavo Barros.
+
+This work consists of the files zref-clever.dtx,
+ zref-clever.ins,
+ zref-clever.tex,
+ zref-clever-code.tex,
+and the derived files listed in MANIFEST.md.
+
+The released version of this package is available from CTAN.
+
+-----------------------------------------------------------------------
+
+The development version of the package can be found at
+
+ https://github.com/gusbrs/zref-clever
+
+for those people who are interested.
+
+-----------------------------------------------------------------------
+
+\endpreamble
+
+\postamble
+\endpostamble
+
+\generate{\file{zref-clever.sty}{\from{zref-clever.dtx}{package}}}
+\generate{\file{zref-clever-english.dict}{\from{zref-clever.dtx}{dict-english}}}
+\generate{\file{zref-clever-german.dict}{\from{zref-clever.dtx}{dict-german}}}
+\generate{\file{zref-clever-french.dict}{\from{zref-clever.dtx}{dict-french}}}
+\generate{\file{zref-clever-portuguese.dict}{\from{zref-clever.dtx}{dict-portuguese}}}
+\generate{\file{zref-clever-spanish.dict}{\from{zref-clever.dtx}{dict-spanish}}}
+
+\endbatchfile
diff --git a/macros/latex/contrib/zref-clever/zref-clever.pdf b/macros/latex/contrib/zref-clever/zref-clever.pdf
new file mode 100644
index 0000000000..1b0c6f93f9
--- /dev/null
+++ b/macros/latex/contrib/zref-clever/zref-clever.pdf
Binary files differ
diff --git a/macros/latex/contrib/zref-clever/zref-clever.tex b/macros/latex/contrib/zref-clever/zref-clever.tex
new file mode 100644
index 0000000000..c2fa9f19b2
--- /dev/null
+++ b/macros/latex/contrib/zref-clever/zref-clever.tex
@@ -0,0 +1,2163 @@
+% \iffalse meta-comment
+%
+% File: zref-clever.tex
+%
+% This file is part of the LaTeX package "zref-clever".
+%
+% Copyright (C) 2021 Gustavo Barros
+%
+% It may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License (LPPL), either version 1.3c of this
+% license or (at your option) any later version. The latest version
+% of this license is in the file:
+%
+% https://www.latex-project.org/lppl.txt
+%
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+%
+% This work is "maintained" (as per LPPL maintenance status) by
+% Gustavo Barros.
+%
+% This work consists of the files zref-clever.dtx,
+% zref-clever.ins,
+% zref-clever.tex,
+% zref-clever-code.tex,
+% and the derived files listed in MANIFEST.md.
+%
+% The released version of this package is available from CTAN.
+%
+% -----------------------------------------------------------------------
+%
+% The development version of the package can be found at
+%
+% https://github.com/gusbrs/zref-clever
+%
+% for those people who are interested.
+%
+% -----------------------------------------------------------------------
+%
+% \fi
+
+\documentclass{l3doc}
+
+% The package itself *must* be loaded so that \GetFileInfo can pick up date
+% and version data. Naturally, we also use it.
+\usepackage[cap,check,titleref]{zref-clever}
+
+\usepackage[T1]{fontenc}
+
+\usepackage[sc]{mathpazo}
+\linespread{1.05}
+\usepackage[scale=.88]{tgheros} % sans
+\usepackage[varqu,scaled=1.03]{inconsolata} % tt
+
+\usepackage{listings}
+
+\usepackage{microtype}
+
+\hypersetup{hidelinks}
+
+\NewDocumentCommand\opt{m}{\texttt{#1}}
+
+\definecolor{reffmtbox}{gray}{0.15}
+\definecolor{reffmtback}{gray}{0.85}
+\NewDocumentCommand\reffmt{m}{%
+ \fcolorbox{reffmtbox}{reffmtback}{%
+ \rule[-0.2\baselineskip]{0pt}{0.8\baselineskip}\texttt{#1}}}
+
+\newlist{refformat}{itemize}{1}
+\setlist[refformat]{label={}, beginpenalty=500, midpenalty=500}
+
+\NewDocumentCommand\zctask{m}{%
+ \begin{description}
+ \item[Task] #1
+ \end{description}}
+
+\lstdefinestyle{code}{
+ language=[LaTeX]TeX,
+ moretexcs={
+ AddToHook,
+ define@key,
+ patchcmd,
+ eq@setnumber,
+ DeclareFloatingEnvironment,
+ newlist,
+ setlist,
+ zexternaldocument,
+ next@label,
+ next@label@pre,
+ @empty,
+ tag,
+ text,
+ lstset,
+ condition,
+ }
+}
+\lstdefinestyle{zrefclever}{
+ style=code,
+ moretexcs={
+ zcref,
+ zcpageref,
+ zlabel,
+ zcsetup,
+ zcLanguageSetup,
+ zcRefTypeSetup,
+ zcheck,
+ }
+}
+\lstset{
+ style=zrefclever,
+ basicstyle=\ttfamily\small,
+ columns=fullflexible,
+ keepspaces,
+ xleftmargin=\leftmargin,
+ xrightmargin=.5\leftmargin,
+}
+% Setup inspired by https://tex.stackexchange.com/a/4068. For how to use these
+% environments in a .dtx context see https://tex.stackexchange.com/a/31026.
+\newcounter{zchowto}
+\lstnewenvironment{zchowto}[1][]{%
+ \renewcommand{\lstlistingname}{How-to}%
+ \lstset{#1}%
+ \setcounter{lstlisting}{\value{zchowto}}%
+}{}
+\newcounter{zcworkaround}
+\lstnewenvironment{zcworkaround}[1][]{%
+ \renewcommand{\lstlistingname}{Work-around}%
+ \lstset{#1}%
+ \setcounter{lstlisting}{\value{zcworkaround}}%
+}{}
+\lstnewenvironment{zcexample}[1][]{%
+ \renewcommand{\lstlistingname}{Example}%
+ \lstset{#1}%
+}{}
+\ExplSyntaxOn
+\makeatletter
+\lst@AddToHook { PreInit }
+ {
+ \cs_if_exist:cT { c@ \lstenv@name }
+ { \exp_args:Nx \refstepcounter { \lstenv@name } }
+ }
+\makeatother
+\ExplSyntaxOff
+
+\zcRefTypeSetup{zchowto}{
+ Name-sg = {How-to},
+ name-sg = {how-to},
+ Name-pl = {How-tos},
+ name-pl = {how-tos},
+}
+\zcRefTypeSetup{zcworkaround}{
+ Name-sg = {Work-around},
+ name-sg = {work-around},
+ Name-pl = {Work-arounds},
+ name-pl = {work-arounds},
+}
+
+\begin{document}
+
+\GetFileInfo{zref-clever.sty}
+
+\title{%
+ The \pkg{zref-clever} package%
+ \thanks{This file describes \fileversion, released \filedate.}%
+}
+
+\author{%
+ Gustavo Barros%
+ \thanks{\url{https://github.com/gusbrs/zref-clever}}%
+}
+
+\date{\filedate}
+
+\maketitle
+
+\begin{abstract}
+ \pkg{zref-clever} provides an user interface for making \LaTeX{}
+ cross-references which automates some of their typical features, thus easing
+ their input in the document and improving the consistency of typeset
+ results. A reference made with \cs{zcref} includes a ``name'' according to
+ its ``type'' and lists of multiple labels can be automatically sorted and
+ compressed into ranges when due. The reference format is highly and easily
+ customizable, both globally and locally. \pkg{zref-clever} is based on
+ \pkg{zref}'s extensible referencing system.
+\end{abstract}
+
+\begin{center}
+ \small
+ \textbf{EXPERIMENTAL}
+
+ Please read \zcref{sec:warning} carefully.
+\end{center}
+
+\tableofcontents
+
+\section{Introduction}
+
+Cross-referencing is an area which lends itself quite naturally to automation.
+Not only for input convenience but also, and most importantly, for end results
+consistency. Indeed, the standard \LaTeX{} cross-referencing system -- with
+\cs{label}, \cs{ref}, and \cs{pageref} -- is already a form of automation, by
+relieving us from checking the number of the referenced object, and the page
+where it lies.
+
+But the plethora of existing features, packages and document classes which, in
+one way or another, extends this basic functionality is a clear indication of
+a demand for more automation. Just to name the most popular: \pkg{cleveref},
+\pkg{hyperref}, \pkg{titleref}, \pkg{nameref}, \pkg{varioref}, \pkg{fancyref},
+and the kernel's \cs{labelformat}.
+
+However, the standard cross-referencing system stores two, and only two,
+properties with the label: the printed representation of the counter last
+incremented with \cs{refstepcounter} and the page. Of course, out of the
+mentioned desire to automate more, the need arose to store more information
+about the label to support this: the title or caption of the referenced
+object; its counter or, even better, its ``type'', that is, whether it is a
+section, chapter, figure, etc.; its hyperlink anchor, and so on. Thus those
+two property ``fields'' of the standard label became quite a disputed real
+state. And the packages in this area of functionality were bound to step on
+each other's toes as a result.
+
+Out of this conundrum, Heiko Oberdiek eventually developed \pkg{zref}, which
+implements an extensible referencing system, making the labels store a
+property list of flexible length, so that new properties can be easily added
+and queried. However, even when \pkg{zref} can rightfully boast this powerful
+basic concept and is really quite featureful, with several different modules
+available, it is fair to say that, for the average user, the package may
+appear to be somewhat raw. Indeed, for someone who ``just wants to make a
+cross-reference'', the user interface of the \pkg{zref-user} module is akin to
+the standard \LaTeX{} cross-referencing system, and even requires some extra
+work if you want to have a hyperlinked reference. In other words, \pkg{zref}
+seems to have focused on infrastructure and on performing a number of
+specialized tasks with different modules, and a large part of the landscape of
+automation features available for the standard referencing system was not
+carried over to \pkg{zref}, neither by the \pkg{zref} itself nor by other
+packages.
+
+\pkg{zref-clever} tries to cover this gap, by bringing a number of existing
+features available for the standard referencing system to \pkg{zref}, and
+hopefully making \pkg{zref} more accessible, and interesting, to the average
+user. And the package's name makes it clear that the core of the envisaged
+feature set is that of \pkg{cleveref}, even though the attempt was less one of
+replicating functionality per se than that of having it as a successful point
+of reference, from where we could then try to tap into \pkg{zref}'s potential.
+Indeed, although there is a significant intersection, the features of
+\pkg{zref-clever} are neither a superset nor a subset of those of
+\pkg{cleveref}. There are things either of them can do that the other can't.
+There are also important differences in user interface design. In particular,
+\pkg{zref-clever} relies heavily on \texttt{key=value} interfaces both for
+general configuration and for centering in a single user command, \cs{zcref},
+as the main entrance for reference making, whose behavior can be modulated by
+local options.
+
+Considering that \pkg{zref} itself offers the \pkg{zref-titleref} module, and
+that the integration with \pkg{zref-check} allows \pkg{zref-clever} to make
+context sensitive references, akin to those of \pkg{varioref}, a significant
+part of the most prominent automation features available to the standard
+referencing system is thus brought to \pkg{zref}, working under a single
+consistent underlying infrastructure and user interface. Alas, there are
+limitations, of course (see \zcref{sec:limitations}). Still, all in all,
+hopefully \pkg{zref-clever} can be the missing piece for \pkg{zref} to fulfill
+the promise insinuated by the ``z'' in its name, and be your ``last ref''.
+
+
+\subsection{Warning}
+\zlabel{sec:warning}
+
+This package is in its early days, and should be considered experimental. By
+this I don't mean I expect it to be ``edgy'', indeed quite a lot of effort has
+been put into it so that this is not the case. However, during the initial
+development, I had to make a number of calls for which I felt I had
+insufficient information: in relation to features, packages, or classes I
+don't use much, or to languages I don't know well, user needs I found hard to
+anticipate etc. Hence, the package needs some time, and some use by more
+adventurous people, until it can settle down with more conviction. In the
+meantime, polishing the user interface and the infrastructure have a clear
+priority over backward compatibility. So, if you choose to use this package,
+you should be ready to accommodate to eventual upstream changes.
+
+
+\section{Loading the package}
+\zlabel{sec:loading-package}
+
+As usual:
+
+\begin{zcexample}[escapeinside=`']
+\usepackage`\oarg{options}'{zref-clever}
+\end{zcexample}
+
+
+\subsection{Dependencies}
+
+\pkg{zref-clever} requires \pkg{zref}, and \LaTeX{} kernel 2021-11-15, or
+newer. It also needs \pkg{l3keys2e} and \pkg{ifdraft}. Some packages are
+leveraged by \pkg{zref-clever} if they are present, but are not loaded by
+default or required by it, namely: \pkg{hyperref}, \pkg{zref-check}, and
+\pkg{zref}'s \pkg{zref-titleref}, \pkg{zref-hyperref}, and \pkg{zref-xr}
+modules.
+
+
+\section{User interface}
+\zlabel{sec:user-interface}
+
+\begin{function}{\zcref}
+ \begin{syntax}
+ \cs{zcref}\meta{*}\oarg{options}\marg{labels}
+ \end{syntax}
+\end{function}
+Typesets references to \meta{labels}, given as a comma separated list. When
+\pkg{hyperref} support is enabled, references will be hyperlinked to their
+respective anchors, according to options. The starred version of the command
+does the same as the plain one, just does not form links. The \meta{options}
+are (mostly) the same as those of the package, and can be given to local
+effect. The \meta{labels} argument is protected by \pkg{zref}'s
+\cs{zref@wrapper@babel}, so that it enjoys the same support for \pkg{babel}'s
+active characters as \pkg{zref} itself does.
+
+\begin{function}{\zcpageref}
+ \begin{syntax}
+ \cs{zcpageref}\meta{*}\oarg{options}\marg{labels}
+ \end{syntax}
+\end{function}
+Typesets page references to \meta{labels}, given as a comma separated list.
+It is equivalent to calling \cs{zcref} with the \opt{ref=page} option:
+\cs{zcref}\texttt{\meta{*}[}\meta{options}\texttt{,ref=page]}\marg{labels}.
+
+
+\begin{function}{\zcsetup}
+ \begin{syntax}
+ \cs{zcsetup}\marg{options}
+ \end{syntax}
+\end{function}
+Sets \pkg{zref-clever}'s general options (see \zcref{sec:options,
+ sec:reference-format}). The settings performed by \cs{zcsetup} are local,
+within the current group. But, of course, it can also be used to global
+effects if ungrouped, e.g.\ in the preamble.
+
+\begin{function}{\zcRefTypeSetup}
+ \begin{syntax}
+ \cs{zcRefTypeSetup}\marg{type}\marg{options}
+ \end{syntax}
+\end{function}
+Sets type-specific reference format options (see \zcref{sec:ref-format-opts}).
+Just as for \cs{zcsetup}, the settings performed by \cs{zcRefTypeSetup} are
+local, within the current group.
+
+\bigskip{}
+
+Besides these, user facing commands related to \zcref*[ref=title,
+ noname]{sec:internationalization} are presented in
+\zcref{sec:internationalization}. Note still that all user commands are
+defined with \cs{NewDocumentCommand}, which translates into the usual handling
+of arguments by it and/or processing by \pkg{l3keys}, particularly with regard
+to brace-stripping and space-trimming.
+
+Furthermore, \pkg{zref-clever} loads \pkg{zref}'s \pkg{zref-user} module by
+default. So you also have its user commands available out of the box, notably
+\cs{zlabel}, but also \cs{zref} and \cs{zpageref} themselves.
+
+
+
+\subsection{Options}
+\zlabel{sec:options}
+
+\pkg{zref-clever} is highly configurable, offering a lot of flexibility in
+typeset results of the references, but it also tries to keep these ``handles''
+as convenient and user friendly as possible. To this end, most of what one
+can do with \pkg{zref-clever} (pretty much all of it), can be achieved
+directly through the standard and familiar ``comma separated list of
+\texttt{key=value} options''.
+
+There are two main groups of options in \pkg{zref-clever}: ``general
+options'', which affect the overall behavior of the package, or the reference
+as a whole; and ``reference format options'', which control the detail of
+reference formatting, including type-specific and language-specific settings.
+
+This section covers the first group (for the second one, see
+\zcref{sec:ref-format-opts}). General options can be set globally either as
+package options at load-time (see \zcref{sec:loading-package}) or by means of
+\cs{zcsetup} in the preamble (see \zcref{sec:user-interface}). They can also
+be set locally with \cs{zcsetup} along the document or through the optional
+argument of \cs{zcref} (see \zcref{sec:user-interface}). Most general options
+can be used in any of these contexts, but that is not necessarily true for all
+cases, some restrictions may apply, as described in each option's
+documentation.
+
+\bigskip{}
+
+\DescribeOption{ref} %
+\DescribeOption{page} %
+The \opt{ref} option controls the label property to which \cs{zcref} refers
+to. It can receive \pkg{zref} properties, as long as they are declared, but
+notably \texttt{default}, \texttt{page}, \texttt{thecounter} and, if
+\pkg{zref-titleref} is loaded, \texttt{title}. The package's default is,
+well, \texttt{default}, which is our standard reference. \texttt{thecounter}
+is a property set by \pkg{zref-clever} and is similar to \pkg{zref}'s
+\texttt{default} property, except that it is not affected by the kernel's
+\cs{labelformat}.\footnote{Technical note: the \texttt{default} property
+ stores \cs{@currentlabel}, while the \texttt{thecounter} property stores
+ \cs{the}\cs{@currentcounter}. The later is exactly what \cs{refstepcounter}
+ uses to build \cs{@currentlabel}, except for the \cs{labelformat} prefix
+ and, hence, has the advantage of being unaffected by it. But the former is
+ \emph{more reliable} since \cs{@currentlabel} is expected to be correct
+ pretty much anywhere whereas, although \cs{refstepcounter} does set
+ \cs{@currentcounter}, it is not everywhere that uses \cs{refstepcounter} for
+ the purpose. In the cases where the references from these two do diverge,
+ \pkg{zref-clever} will likely misbehave (reference type, sorting and
+ compression inevitably depend on a correct \opt{currentcounter}), but using
+ \texttt{default} at least ensures that the reference itself is correct.
+ That said, if you do set \cs{labelformat} for some reason,
+ \texttt{thecounter} may be useful.} By default, reference formatting,
+sorting, and compression are done according to information inferred from the
+\emph{current counter} (see \opt{currentcounter} option below). Special
+treatment in these areas is provided for \texttt{page}, but not for any other
+properties. The \opt{page} option is a convenience alias for
+\texttt{ref=page}.
+
+\DescribeOption{typeset} %
+\DescribeOption{noname} %
+\DescribeOption{noref} %
+When \cs{zcref} typesets a set of references, each group of references of the
+same type can be, and by default are, preceded by the type's ``name'', and
+this is indeed an important feature of \pkg{zref-clever}. This is optional
+however, and the \opt{typeset} option controls this behavior. It can receive
+values \texttt{ref}, in which case it typesets only the reference(s),
+\texttt{name}, in which case it typesets only the name(s), or \texttt{both},
+in which case it typesets, well, both of them. Note that, when value
+\texttt{name} is used, the name is still typeset according to the set of
+references given to \cs{zcref}. For example, for multiple references, the
+plural form is used, capitalization options are honored, etc. Also
+hyperlinking behaves just \emph{as if} the references were present and,
+depending on the corresponding options, the name may be linked to the first
+reference of the type group. The \opt{noname} and \opt{noref} options are
+convenience aliases for \texttt{typeset=ref} and \texttt{typeset=name},
+respectively.
+
+\DescribeOption{sort} %
+\DescribeOption{nosort} %
+The \opt{sort} option controls whether the list of \meta{labels} received as
+argument by \cs{zcref} should be sorted or not. It is a boolean option, and
+defaults to \texttt{true}. The \opt{nosort} option is a convenience alias for
+\texttt{sort=false}.
+
+\DescribeOption{typesort} %
+\DescribeOption{notypesort} %
+Sorting references of the same type can be done with well defined logical
+criteria. They either have the same counter or their counters share a clear
+hierarchical relation (in the resetting behavior), such that a definite
+sorting rule can be inferred from the label's data. The same is not true for
+sorting of references of different types. Should ``tables'' come before or
+after ``figures''? The \pkg{typesort} option allows to specify the sorting
+priority of different reference types. It receives as value a comma separated
+list of reference types, specifying that their sorting is to be done in the
+order of that list. But \opt{typesort} does not need to receive \emph{all}
+possible reference types. The special value \texttt{\{\{othertypes\}\}} (yes,
+double braced, one for \pkg{l3keys}, so that the second can make the list) can
+be placed anywhere along the list, to specify the sort priority of any type
+not included explicitly. If \texttt{\{othertypes\}} is not present in the
+list, it is presumed to be at the end of it. Any unspecified types (that is,
+those falling implicitly or explicitly into the \texttt{\{othertypes\}}
+category) get sorted between themselves in the order of their first appearance
+in the label list given as argument to \cs{zcref}. I presume the common use
+cases will not need to specify \texttt{\{othertypes\}} at all but, for the
+sake of example, if you just really dislike equations, you could use
+\texttt{typesort=\{\{\{othertypes\}\}, equation\}}. \opt{typesort}'s default
+value is \texttt{\{part, chapter, section, paragraph\}}, which places the
+sectioning reference types first in the list, in their hierarchical order, and
+leaves everything else to the order of appearance of the labels. The
+\opt{notypesort} option behaves like \texttt{typesort=\{\{\{othertypes\}\}\}}
+would do, that is, it sorts all types in the order of the first appearance in
+the labels' list.
+
+\DescribeOption{comp} %
+\DescribeOption{nocomp} %
+\cs{zcref} can automatically compress a set of references of the same type
+into a range, when they occur in immediate sequence. The \opt{comp} controls
+whether this compression should take place or not. It is a boolean option,
+and defaults to \texttt{true}. The \opt{nocomp} option is a convenience alias
+for \texttt{comp=false}. Of course, for better compression results the
+\opt{sort} is recommended, but the two options are technically independent.
+
+\DescribeOption{range} %
+By default (that is, when the \opt{range} option is not given), \cs{zcref}
+typesets a complete list of references according to the \meta{labels} it
+received as argument, and only compresses some of them into ranges if the
+\opt{comp} option is enabled and if references of the same type occur in
+immediate sequence. The \opt{range} option makes \cs{zcref} behave
+differently. Sorting is implied by this option (the \opt{sort} option is
+disregarded) and, for each reference type group in \meta{labels}, \cs{zcref}
+builds a range from the first to the last reference in it, even if references
+in between do not occur in immediate sequence. \cs{zcref} is smart enough,
+though, to recognize when the first and last references of a type do happen to
+be contiguous, in which case it typesets a ``pair'', instead of a ``range''.
+It is a boolean option, and the package's default is \texttt{range=false}.
+The option given without a value is equivalent to \texttt{range=true} (in the
+\pkg{l3keys}' jargon, the \emph{option}'s default is \texttt{true}).
+
+\DescribeOption{cap} %
+\DescribeOption{nocap} %
+\DescribeOption{capfirst} %
+The \opt{cap} option controls whether the reference type names should be
+capitalized or not. It is a boolean option, and the package's default is
+\texttt{cap=false}. The option given without a value is equivalent to
+\texttt{cap=true}. The \opt{nocap} option is a convenience alias for
+\texttt{cap=false}. The \opt{capfirst} option ensures that the reference type
+name of the \emph{first} type block is capitalized, even when \opt{cap} is set
+to \texttt{false}.
+
+\DescribeOption{abbrev} %
+\DescribeOption{noabbrev} %
+\DescribeOption{noabbrevfirst} %
+The \opt{abbrev} option controls whether to use abbreviated reference type
+names when they are available. It is a boolean option, and the package's
+default is \texttt{abbrev=false}. The option given without a value is
+equivalent to \texttt{abbrev=true}. The \opt{noabbrev} option is a
+convenience alias for \texttt{abbrev=false}. The \opt{noabbrevfirst} ensures
+that the reference type name of the \emph{first} type block is never
+abbreviated, even when \opt{abbrev} is set to \texttt{true}.
+
+\DescribeOption{S} %
+\opt{S} for ``Sentence''. The \opt{S} option is a convenience alias for
+\texttt{capfirst=true, noabbrevfirst=true}, and is intended to be used in
+references made at the beginning of a sentence. It is highly recommended that
+you make a habit of using the \opt{S} option for beginning of sentence
+references. Even if you do happen to be currently using \texttt{cap=true,
+ abbrev=false}, proper semantic markup will ensure you get expected results
+even if you change your mind in that regard later on. For that reason, it was
+made short and mnemonic, it can't get any easier.
+
+\DescribeOption{hyperref} %
+The \opt{hyperref} option controls the use of \pkg{hyperref} by
+\pkg{zref-clever} and takes values \opt{auto}, \opt{true}, \opt{false}. The
+default value, \opt{auto}, makes \pkg{zref-clever} use \pkg{hyperref} if it is
+loaded, meaning that references made with \cs{zcref} get hyperlinked to the
+anchors of their respective \meta{labels}. \opt{true} does the same thing,
+but warns if \pkg{hyperref} is not loaded (\pkg{hyperref} is never loaded for
+you). In either of these cases, if \pkg{hyperref} is loaded, module
+\pkg{zref-hyperref} is also loaded by \pkg{zref-clever}. \opt{false} means
+not to use \pkg{hyperref} regardless of its availability. This is a preamble
+only option, but \cs{zcref} provides granular control of hyperlinking by means
+of its starred version.
+
+\DescribeOption{nameinlink} %
+The \opt{nameinlink} option controls whether the type name should be included
+in the reference hyperlink or not (provided there is a link, of course).
+Naturally, the name can only be included in the link of the \emph{first}
+reference of each type block. \opt{nameinlink} can receive values
+\texttt{true}, \texttt{false}, \texttt{single}, and \texttt{tsingle}. When
+the value is \texttt{true} the type name is always included in the hyperlink.
+When it is \texttt{false} the type name is never included in the link. When
+the value is \texttt{single}, the type name is included in the link only if
+\cs{zcref} is typesetting a single reference (not necessarily having received
+a single label as argument, as they may have been compressed), otherwise, the
+name is left out of the link. When the value is \texttt{tsingle}, the type
+name is included in the link for each type block with a single reference,
+otherwise, it isn't. An example: suppose you make a couple of references to
+something like \cs{zcref}\texttt{\{chap:chapter1\}} and
+\cs{zcref}\texttt{\{chap:chapter1, sec:section1, fig:figure1, fig:figure2\}}.
+The ``figure'' type name will only be included in the hyperlink if
+\opt{nameinlink} option is set to \texttt{true}. If it is set to
+\texttt{tsingle}, the first reference will include the name in the link for
+``chapter'', as expected, but also in the second reference the ``chapter'' and
+``section'' names will be included in their respective links, while that of
+``figure'' will not. If the option is set to \texttt{single}, only the name
+for ``chapter'' in the first reference will be included in the link, while in
+the second reference none of them will. The package's default is
+\texttt{nameinlink=tsingle}, and the option given without a value is
+equivalent to \texttt{nameinlink=true}.
+
+\DescribeOption{preposinlink} %
+The \opt{preposinlink} option controls whether the \opt{refpre} and
+\opt{refpos} reference format options (see \zcref{sec:ref-format-opts}) are
+included in the reference hyperlink or not. It is a boolean option. The
+package's default is \texttt{preposinlink=false}, and the option given without
+a value is equivalent to \texttt{preposinlink=true}.
+
+\DescribeOption{lang} %
+The \opt{lang} option controls the language used by \cs{zcref} when looking
+for language-specific reference format options (see
+\zcref{sec:ref-format-opts}). The default value, \texttt{current}, uses the
+current language, as defined by \pkg{babel} or \pkg{polyglossia} (or
+\texttt{english} if none of them is loaded). Value \texttt{main} uses the
+main document language, as defined by \pkg{babel} or \pkg{polyglossia} (or
+\texttt{english} if none of them is loaded). The \opt{lang} option also
+accepts that the language be specified directly by its name, as long as it's a
+language known by \pkg{zref-clever}. For more details on
+\zcref*[ref=title,noname]{sec:internationalization}, see
+\zcref{sec:internationalization}.
+
+\DescribeOption{d} %
+The \opt{d} option sets the declension case, and affects the type name used
+for typesetting the reference. Whether this option is operative, and which
+values it accepts, depends on the declared setup for each language. For
+details, see \zcref{sec:internationalization}.
+
+\DescribeOption{nudge} %
+\DescribeOption{nudgeif} %
+\DescribeOption{nonudge} %
+\DescribeOption{sg} %
+\DescribeOption{g} %
+This set of options revolving around \opt{nudge} aims to offer some guard
+against mischievous automation on the part of \pkg{zref-clever} by providing a
+number of ``nudges'' (compilation time messages) for cases in which you may
+wish to revise material \emph{surrounding} the reference -- an article, a
+preposition -- according to the reference typeset results. Useful mainly for
+languages which inflect the preceding article to gender and/or number, but may
+be used generally to fine-tune the language and style around the
+cross-references made with \cs{zcref}. The \opt{nudge} option is the main
+entrance to this feature and takes values \texttt{true}, \texttt{false},
+\texttt{ifdraft}, or \texttt{iffinal}. The first two, respectively, enable or
+disable the ``nudging'' unconditionally. With \texttt{ifdraft}, \opt{nudge}
+keeps quiet when option \texttt{draft} is given to \cs{documentclass}, while
+with \texttt{iffinal}, nudging is only enabled when option \texttt{final} is
+(explicitly) passed to \cs{documentclass}. The option given without a value
+is equivalent to \texttt{nudge=true} and the package's default is
+\texttt{nudge=false}. \opt{nonudge} is a convenience alias for
+\texttt{nudge=false}, and can be used to silence individual references. The
+\opt{nudgeif} option controls the events which may trigger a nudge. It takes
+a comma separated list of elements, and recognizes values \texttt{multitype},
+\texttt{comptosing}, \texttt{gender}, and \texttt{all}. The
+\texttt{multitype} nudge warns when the reference is composed by multiple type
+blocks (see \zcref{sec:ref-format-opts}). The \texttt{comptosing} nudge let's
+you know when multiple labels of the same type have been compressed to a
+singular type name form. It can be combined with the \opt{sg} option, which
+is the way to tell \cs{zcref} you know it's a singular and so not to nudge if
+a compression to singular occurs, but to nudge if the contrary occurs, that
+is, when a plural type name form is employed. The \texttt{gender} nudge must
+be combined with option \opt{g}, and depends on the language having support
+for it. In essence language dictionaries can store the gender of each type
+name (this is done for built-in dictionaries, but can also be done with
+\cs{zcLanguageSetup} for languages declared to support it). The \opt{g}
+option let's you specify the gender you expect for that particular reference
+and the nudge is triggered if there is a mismatch between \opt{g} and the
+gender for the type name in the dictionary. Both the \texttt{comptosing} and
+the \texttt{gender} nudges have a type block as its scope. See
+\zcref{sec:internationalization} for more details and intended use cases of
+the ``nudging'' feature.
+
+\DescribeOption{font} %
+The \opt{font} option can receive font styling commands to change the
+appearance of the whole reference list (see also the \opt{namefont} and
+\opt{reffont} reference format options in \zcref{sec:ref-format-opts}). It
+does not affect the content of the \opt{note}, however. The option is
+intended exclusively for commands that only change font attributes: style,
+family, shape, weight, size, color, etc. Anything else, particularly commands
+that may generate typeset output, is not supported. Given how package options
+are handled by \LaTeX{}, the fact that this option receives commands as value
+means this option \emph{can't} be set at load time, as a package option. If
+you want to set it globally, use \cs{zcsetup} instead.
+
+\DescribeOption{titleref} %
+The \opt{titleref} option receives no value and, when given, loads
+\pkg{zref}'s \pkg{zref-titleref} module. This is a preamble only option.
+
+\DescribeOption{note} %
+The \opt{note} option receives as value some text to be typeset at the end of
+the whole reference list. It is separated from it by \opt{notesep} (see
+\zcref{sec:ref-format-opts}).
+
+\DescribeOption{check} %
+Provides integration of \pkg{zref-clever} with the \pkg{zref-check} package.
+In the preamble, the \opt{check} option receives no value and, when given,
+loads \pkg{zref-check}. In the document body, \opt{check} requires a value,
+which works exactly like the optional argument of \cs{zcheck}, and can receive
+both checks and \cs{zcheck}'s options. And the checks are performed for each
+label in \marg{labels} received as argument by \cs{zcref}. See the User
+manual of \pkg{zref-check} for details. The checks done by the \opt{check}
+option in \cs{zcref} comprise the complete reference, including the \opt{note}
+(see \zcref{sec:ref-format-opts}). If \pkg{zref-check} was not loaded in the
+preamble, at begin document the option is made no-op and issues a warning.
+
+\DescribeOption{countertype} %
+The \opt{countertype} option allows to specify the ``reference type'' of each
+counter, which is stored as a label property when the label is set. This
+``reference type'' is what determines how a reference to this label will
+eventually be typeset when it is referred to (see
+\zcref{sec:reference-types}). A value like \texttt{countertype = \{foo =
+ bar\}} sets the \texttt{foo} counter to use the reference type \texttt{bar}.
+There's only need to specify the \opt{countertype} for counters whose name
+differs from that of their type, since \pkg{zref-clever} presumes the type has
+the same name as the counter, unless otherwise specified. Also, the default
+value of the option already sets appropriate types for basic \LaTeX{}
+counters, including those from the standard classes. Setting a counter type
+to an empty value removes any (explicit) type association for that counter, in
+practice, this means it then uses a type equal to its name. Since this option
+only affects how labels are set, it is not available in \cs{zcref}.
+
+\DescribeOption{\raisebox{-.2em}{\dbend}\ counterresetters} %
+\DescribeOption{counterresetby} %
+The sorting and compression of references done by \cs{zcref} requires that we
+know the counter associated with a particular label but also information on
+any counter whose stepping may trigger its resetting, or its ``enclosing
+counters''. This information is not easily retrievable from the counter
+itself but is (normally) stored with the counter that does the resetting. The
+\opt{counterresetters} option adds counter names, received as a comma
+separated list, to the list of counters \pkg{zref-clever} uses to search for
+``enclosing counters'' of the counter for which a label is being set.
+Unfortunately, not every counter gets reset through the standard machinery for
+this, including some \LaTeX{} kernel ones (e.g. the \texttt{enumerate}
+environment counters). For those, there is really no way to retrieve this
+information directly, so we have to just tell \pkg{zref-clever} about them.
+And that's what the \opt{counterresetby} option is made for. It receives a
+comma separated list of \texttt{key=value} pairs, in which \texttt{key} is the
+counter, and \texttt{value} is its ``enclosing counter'', that is, the counter
+whose stepping results in its resetting. This is not really an ``option'' in
+the sense of ``user choice'', it is more of a way to inform \pkg{zref-clever}
+of something it cannot know or automatically find in general. One cannot
+place arbitrary information there, or \pkg{zref-clever} can be thoroughly
+confused. The setting must correspond to the actual resetting behavior of the
+involved counters. \opt{counterresetby} has precedence over the search done
+in the \opt{counterresetters} list. The default value of
+\opt{counterresetters} includes the counters for sectioning commands of the
+standard classes which, in most cases, should be the relevant ones for
+cross-referencing purposes. The default value of \opt{counterresetby}
+includes the \texttt{enumerate} environment counters. So, hopefully, you
+don't need to ever bother with either of these options. But, if you do, they
+are here. Use them with caution though. Since these options only affect how
+labels are set, they are not available in \cs{zcref}.
+
+\DescribeOption{\raisebox{.4em}{\dbend}\ currentcounter} %
+\LaTeX{}'s \cs{refstepcounter} sets two variables which potentially affect the
+\cs{zlabel} set after it: \cs{@currentlabel} and \cs{@currentcounter}.
+Actually, traditionally, only the current label was thus stored, the current
+counter was added to \cs{refstepcounter} somewhat recently (with the
+2020-10-01 kernel release). But, since \pkg{zref-clever} relies heavily on
+the information of what the current counter is, it must set \pkg{zref} to
+store that information with the label, as it does. As long as the document
+element we are trying to refer to uses the standard machinery of
+\cs{refstepcounter} we are on solid ground and can retrieve the correct
+information. However, it is not always ensured that \cs{@currentcounter} is
+kept up to date. For example, packages which handle labels specially, for one
+reason or another, may or may not set \cs{@currentcounter} as required.
+Considering the addition of \cs{@currentcounter} to \cs{refstepcounter} itself
+is not that old, it is likely that in a good number of places a reliable
+\cs{@currentcounter} is not really in place. Therefore, it may happen we need
+to tell \pkg{zref-clever} what the current counter is in certain
+circumstances, and that's what \opt{currentcounter} does. The same as with
+the previous two options, this is not really an ``user choice'' kind of
+option, but a way to tell \pkg{zref-clever} a piece of information it has no
+means to retrieve automatically. The setting must correspond to the actual
+``current counter'', meaning here ``the counter underlying
+\cs{@currentlabel}'' in a given situation. Also, when using the
+\opt{currentcounter} option, make sure the setting is duly grouped because, if
+set, it has precedence over \cs{@currentcounter} and, contrary to the later,
+the former is not reset the next time \cs{refstepcounter} runs. Its default
+value is, quite naturally, \cs{@currentcounter}. Since this option only
+affects how labels are set, it is not available in \cs{zcref}.
+
+\DescribeOption{nocompat} %
+Some packages, document classes, or LaTeX features may require specific
+support to work with \pkg{zref-clever} (see \zcref{sec:limitations}).
+\pkg{zref-clever} tries to make things smoother by covering some of them.
+Depending on the case, this can take the form of some simple setup for
+\pkg{zref-clever}, or may involve the use of hooks to external environments or
+commands and, eventually, a patch or redefinition. By default, all the
+available compatibility modules are enabled. Should this be undesired or
+cause any problems in your environment, the option \opt{nocompat} can
+selectively or completely inhibit their loading. \opt{nocompat} receives a
+comma separated list of compatibility modules to disable (for the list of
+available modules and details about each of them, see
+\zcref{sec:comp-modules}). You can disable all modules by setting
+\opt{nocompat} without a value (or an empty one). This is a preamble only
+option.
+
+\section{Reference format}
+\zlabel{sec:reference-format}
+
+\subsection{Reference types}
+\zlabel{sec:reference-types}
+
+A ``reference type'' is the basic \pkg{zref-clever} setup unit for specifying
+how a cross-reference group of a certain kind is to be typeset. Though,
+usually, it will have the same name as the underlying \LaTeX{} \emph{counter},
+they are conceptually different. \pkg{zref-clever} sets up \emph{reference
+ types} and an association between each \emph{counter} and its \emph{type},
+it does not define the counters themselves, which are defined by your
+document. One \emph{reference type} can be associated with one or more
+\emph{counters}, and a \emph{counter} can be associated with different
+\emph{types} at different points in your document. But each label is stored
+with only one \emph{type}, as specified by the counter-type association at the
+moment it is set, and that determines how the reference to that label is
+typeset. References to different \emph{counters} of the same \emph{type} are
+grouped together, and treated alike by \cs{zcref}. A \emph{reference type}
+may be known to \pkg{zref-clever} when the \emph{counter} it is associated
+with is not actually defined, and this inconsequential. In practice, the
+contrary may also happen, a \emph{counter} may be defined but we have no
+\emph{type} for it, but this must be handled by \pkg{zref-clever} as an error
+(at least, if we try to refer to it), usually a ``missing name'' error.
+
+\pkg{zref-clever} provides default settings for the following reference types:
+\texttt{part}, \texttt{chapter}, \texttt{section}, \texttt{paragraph},
+\texttt{appendix}, \texttt{subappendix}, \texttt{page}, \texttt{line},
+\texttt{figure}, \texttt{table}, \texttt{item}, \texttt{footnote},
+\texttt{endnote}, \texttt{note}, \texttt{equation}, \texttt{theorem},
+\texttt{lemma}, \texttt{corollary}, \texttt{proposition}, \texttt{definition},
+\texttt{proof}, \texttt{result}, \texttt{remark}, \texttt{example},
+\texttt{algorithm}, \texttt{listing}, \texttt{exercise}, and
+\texttt{solution}. Therefore, if you are using a language for which
+\pkg{zref-clever} has built-in support (see \zcref{sec:internationalization}),
+these reference types are available for use out of the box.\footnote{There may
+ be slight availability differences depending on the language, but
+ \pkg{zref-clever} strives to keep this complete list available for the
+ languages it has built-in dictionaries.} And, in any case, it is always
+easy to setup custom reference types with \cs{zcRefTypeSetup} or
+\cs{zcLanguageSetup} (see \zcref{sec:user-interface, sec:reference-format,
+ sec:internationalization}).
+
+The association of a \emph{counter} to its \emph{type} is controlled by the
+\opt{countertype} option. As seen in its documentation, \pkg{zref-clever}
+presumes the \emph{type} to be the same as the \emph{counter} unless
+instructed otherwise by that option. This association, as determined by the
+local value of the option, affects how the \emph{label} is set, which stores
+the type among its properties. However, when it comes to typesetting, that is
+from the perspective of \cs{zcref}, only the \emph{type} matters. In other
+words, how the reference is supposed to be typeset is determined at the point
+the \emph{label} gets set. In sum, they may be namesakes (or not), but type
+is type and counter is counter.
+
+Indeed, a reference type can be associated with multiple counters because we
+may want to refer to different document elements, with different
+\emph{counters}, as a single \emph{type}, with a single name. One prominent
+case of this are sectioning commands. \cs{section}, \cs{subsection}, and
+\cs{subsubsection} have each their counter, but we'd like to refer to all of
+them by ``sections'' and group them together. The same for \cs{paragraph} and
+\cs{subparagraph}.
+
+There are also cases in which we may want to use different \emph{reference
+ types} to refer to document objects sharing the same \emph{counter}.
+Notably, the environments created with \LaTeX{}'s \cs{newtheorem} command and
+the \cs{appendix}.
+
+
+One more observation about ``reference types'' is due here. A \emph{type} is
+not really ``defined'' in the sense a variable or a function is. It is more
+of a ``string'' which \pkg{zref-clever} uses to look for a whole set of
+type-specific reference format options (see \zcref{sec:ref-format-opts}).
+Each of these options individually may be ``set'' or not, ``defined'' or not.
+And, depending on the setup and the relevant precedence rules for this, some
+of them may be required and some not. In practice, \pkg{zref-clever} uses the
+\emph{type} to look for these options when it needs one, and issues a
+compilation warning when it cannot find a suitable value.
+
+
+\subsection{Reference format options}
+\zlabel{sec:ref-format-opts}
+
+Formatting how the reference is to be typeset is, quite naturally, a big part
+of the user interface of \pkg{zref-clever}. In this area, we tried to balance
+``flexibility'' and ``user friendliness''. But the former does place a big
+toll overall, since there are indeed many places where tweaking may be
+desired, and the settings may depend on at least two important dimensions of
+variation: the reference type and the language. Combination of those
+necessarily makes for a large set of possibilities. Hence, the attempt here
+is to provide a rich set of ``handles'' for fine tuning the reference format
+but, at the same time, do not \emph{require} detailed setup by the users,
+unless they really want it.
+
+With that in mind, we have settled with an user interface for reference
+formatting which allows settings to be done in different scopes, with more or
+less overarching effects, and some precedence rules to regulate the relation
+of settings given in each of these scopes. There are four scopes in which
+reference formatting can be specified by the user, in the following precedence
+order: i) as \emph{general options}; ii) as \emph{type-specific options}; iii)
+as \emph{language-specific and type-specific translations}; and iv) as
+\emph{default translations} (that is, language-specific but not
+type-specific). Besides those, there's a fifth \emph{internal} scope, with
+the least priority of all, a ``fallback'', for the cases where it is
+meaningful to provide some value, even for an unknown language. The package
+itself places the default setup for reference formatting at low precedence
+levels, and the users can easily and conveniently override them as desired.
+
+``General options'' (i) can be given by the user in the optional argument of
+\cs{zcref}, but also set through \cs{zcsetup} or even, depending on the case,
+as package options at load-time (see \zcref{sec:options}).\footnote{The use of
+ \cs{zcsetup} for global reference format settings is recommended though.
+ Whether you can use load-time options or not depends on the values of the
+ options: due to how \LaTeX{} handles package options, if the values of the
+ options you are setting include \emph{commands} you can't set them at
+ load-time, and rather \emph{must} use \cs{zcsetup}.} ``Type-specific
+options'' (ii) are handled by \cs{zcRefTypeSetup} (see
+\zcref{sec:user-interface}). ``Language-specific translations'', be they
+``type-specific'' (iii) or ``default'' (iv) have their user interface in
+\cs{zcLanguageSetup}, and have their values populated by the package's
+built-in dictionaries (see \zcref{sec:internationalization}). Not all
+reference format specifications can be given in all of these scopes, though.
+Some of them can't be type-specific, others must be type-specific, so the set
+available in each scope depends on the pertinence of the case.
+\zcref{tab:reference-format} introduces the available reference format
+options, which will be discussed in more detail soon, and lists the scopes in
+which each is available.
+
+
+\begin{table}[htb]
+ \centering
+ \begin{tabular}{l>{\ttfamily}lcccc}
+ \toprule
+ & & General & Type & Type-specific & Default \\
+ & & options & options & translations & translations \\
+ & & (i) & (ii) & (iii) & (iv) \\
+
+ \midrule
+ Necessarily not & tpairsep & $\bullet$ & & & $\bullet$ \\
+ type-specific & tlistsep & $\bullet$ & & & $\bullet$ \\
+ & tlastsep & $\bullet$ & & & $\bullet$ \\
+ & notesep & $\bullet$ & & & $\bullet$ \\
+
+ \addlinespace
+ Possibly & namesep & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ \\
+ type-specific & pairsep & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ \\
+ & listsep & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ \\
+ & lastsep & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ \\
+ & rangesep & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ \\
+ & refpre & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ \\
+ & refpos & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ \\
+
+ \addlinespace
+ Necessarily & Name-sg & & $\bullet$ & $\bullet$ & \\
+ type-specific & name-sg & & $\bullet$ & $\bullet$ & \\
+ & Name-pl & & $\bullet$ & $\bullet$ & \\
+ & name-pl & & $\bullet$ & $\bullet$ & \\
+ & Name-sg-ab & & $\bullet$ & $\bullet$ & \\
+ & name-sg-ab & & $\bullet$ & $\bullet$ & \\
+ & Name-pl-ab & & $\bullet$ & $\bullet$ & \\
+ & name-pl-ab & & $\bullet$ & $\bullet$ & \\
+
+ \addlinespace
+ Font & namefont & $\bullet$ & $\bullet$ & & \\
+ options & reffont & $\bullet$ & $\bullet$ & & \\
+ \bottomrule
+ \end{tabular}
+ \caption{Reference format options and their scopes}
+ \zlabel{tab:reference-format}
+\end{table}
+
+
+Understanding the role of each of these reference format options is likely
+eased by some visual schemes of how \pkg{zref-clever} builds a reference based
+on the labels' data and the value of these options. Take a \texttt{ref} to be
+that which a standard \LaTeX{} \cs{ref} would typeset. A \pkg{zref-clever}
+``reference block'', or \texttt{ref-block}, is constructed as:
+
+\begin{refformat}
+\item \reffmt{ref-block} \(\equiv\)
+\item \reffmt{refpre} \reffmt{ref} \reffmt{refpos}
+\end{refformat}
+
+A \texttt{ref-block} is built for \emph{each} label given as argument to
+\cs{zcref}. When the \meta{labels} argument is comprised of multiple labels,
+each ``reference type group'', or \texttt{type-group} is potentially made from
+the combination of single reference blocks, ``reference block pairs'',
+``reference block lists'', or ``reference block ranges'', where each is
+respectively built as:
+
+\begin{refformat}
+\item \reffmt{type-group} is a combination of:
+\item \reffmt{ref-block}
+\item \reffmt{ref-block1} \reffmt{pairsep} \reffmt{ref-block2}
+\item \reffmt{ref-block1} \reffmt{listsep} \reffmt{ref-block2}
+ \reffmt{listsep} \reffmt{ref-block3} \dots{} \par \qquad
+ \dots{}\reffmt{ref-blockN-1} \reffmt{lastsep} \reffmt{ref-blockN}
+\item \reffmt{ref-block1} \reffmt{rangesep} \reffmt{ref-blockN}
+\end{refformat}
+
+To complete a ``type-block'', a \texttt{type-group} only needs to be
+accompanied by the ``type name'':
+
+\begin{refformat}
+\item \reffmt{type-block} \(\equiv\)
+\item \reffmt{type-name} \reffmt{namesep} \reffmt{type-group}
+\end{refformat}
+
+The \texttt{type-name} is determined not by one single reference format option
+but by the appropriate one among the \opt{[Nn]ame-} options according to the
+composition of \texttt{type-group} and the general options. The reference
+format name options are eight in total: \opt{Name-sg}, \opt{name-sg},
+\opt{Name-pl}, \opt{name-pl}, \opt{Name-sg-ab}, \opt{name-sg-ab},
+\opt{Name-pl-ab}, and \opt{name-pl-ab}. The initial uppercase ``\texttt{N}''
+signals the capitalized form of the type name. The \texttt{-sg} suffix stands
+for singular, while \texttt{-pl} for plural. The \texttt{-ab} is appended to
+the abbreviated type name form options. When setting up a type, not
+necessarily all forms need to be provided. \pkg{zref-clever} will always use
+the non-abbreviated form as a fallback to the abbreviated one, if the later is
+not available. Hence, if a reference type is not intended to be used with
+abbreviated names (the most common case), only the basic four forms are
+needed. Besides that, if you are using the \opt{cap} option, only the
+capitalized forms will ever be required by \cs{zcref}, so you can get away
+setting only \opt{Name-sg} and \opt{Name-pl}. You should not do the contrary
+though, and provide only the non-capitalized forms because, even if you are
+using the \opt{nocap} option, the capitalized forms will be still required for
+\opt{capfirst} and \opt{S} options to work. Whatever the case may be, you
+need not worry too much about being remiss in this area: if \cs{zcref} does
+lack a name form in any given reference, it will let you know with a
+compilation warning (and will typeset the usual missing reference sign:
+``\textbf{??}'').
+
+A complete reference typeset by \cs{zcref} may be comprised of multiple
+\texttt{type-block}s, in which case the ``type-block-group'' can also be made
+of single type blocks, ``type block pairs'' or ``type block lists'', where
+each is respectively built as:
+
+\begin{refformat}
+\item \reffmt{type-block-group} is one of:
+\item \reffmt{type-block}
+\item \reffmt{type-block1} \reffmt{tpairsep} \reffmt{type-block2}
+\item \reffmt{type-block1} \reffmt{tlistsep} \reffmt{type-block2}
+ \reffmt{tlistsep} \reffmt{type-block3} \dots{} \par \qquad \dots{}
+ \reffmt{type-blockN-1} \reffmt{tlastsep} \reffmt{type-blockN}
+\end{refformat}
+
+Finally, since \cs{zcref} can also receive an optional \opt{note}, its full
+typeset output is built as:
+
+\begin{refformat}
+\item A complete \reffmt{\cs{zcref}} reference:
+\item \reffmt{type-block-group} \reffmt{notesep} \reffmt{note}
+\end{refformat}
+
+Reference format options can yet be divided in two general categories: i)
+``string'' options, the ones which we have seen thus far, as ``building
+blocks'' of the reference; and ii) ``font'' options, which control font
+attributes of parts of the reference, namely \opt{namefont} and \opt{reffont}.
+These options set the font, respectively, for the \texttt{type-name} and for
+\texttt{ref} (to set the font for the whole reference, see the \opt{font}
+option in \zcref{sec:options}). ``String'' options is not really a strict
+denomination for the first category, but this set of options is intended
+exclusively for typesetting material: things you expect to see in the output
+of your references. The ``font'' options, on the other hand, are intended
+exclusively for commands that only change font attributes: style, family,
+shape, weight, size, color, etc. In either case, anything other than their
+intended uses is not supported.
+
+Finally, a comment about the internal ``fallback'' reference format values
+mentioned above. These ``last resort'' option values are required by
+\pkg{zref-clever} for a clear particular case: if the user loads either
+\pkg{babel} or \pkg{polyglossia}, or explicitly sets a language, with a
+language that \pkg{zref-clever} does not know and has no dictionary for, it
+cannot guess what language that is, and thus has to provide some reasonable
+``language agnostic'' default, at least for the options for which this makes
+sense (all the ``string'' options, except for the \texttt{[Nn]ame-} ones).
+Users do not need to have access to this scope, since they know the language
+of their document, or know the values they want for those options, and can set
+them as general options, type-specific options, or language options through
+the user interface provided for the purpose. But the ``fallback'' options are
+documented here so that you can recognize when you are getting these values
+and change them appropriately as desired. Though hopefully reasonable, they
+may not be what you want. The ``fallback'' option values are the following:
+
+\begin{zcexample}[escapeinside=`']
+tpairsep = {,`\textvisiblespace{}'} ,
+tlistsep = {,`\textvisiblespace{}'} ,
+tlastsep = {,`\textvisiblespace{}'} ,
+notesep = {`\textvisiblespace{}'} ,
+namesep = {\nobreakspace} ,
+pairsep = {,`\textvisiblespace{}'} ,
+listsep = {,`\textvisiblespace{}'} ,
+lastsep = {,`\textvisiblespace{}'} ,
+rangesep = {\textendash} ,
+refpre = {} ,
+refpos = {} ,
+\end{zcexample}
+
+
+\section{Internationalization}
+\zlabel{sec:internationalization}
+
+\pkg{zref-clever} provides internationalization facilities and integrates with
+\pkg{babel} and \pkg{polyglossia} to adapt to the languages in use by either
+of these language packages, or to a language specified directly by the user.
+This is primarily relevant for reference format options, particularly
+reference type \emph{names} (though not only, since most reference format
+options can have language-specific values, or ``translations'', see
+\zcref{sec:ref-format-opts}). But other features of the package also cater
+for language specific needs.
+
+As far as language selection is concerned, if the language is declared and
+\pkg{zref-clever} has a built-in ``dictionary'' for it, most use cases will
+likely be covered by the \opt{lang} option (see \zcref{sec:options}), and its
+values \texttt{current} and \texttt{main}. When the \opt{lang} option is set
+to \texttt{current} or \texttt{main}, \pkg{zref-check} will use, respectively,
+the \emph{current} or \emph{main} language of the document, as defined by
+\pkg{babel} or \pkg{polyglossia}.\footnote{Technically, \pkg{zref-clever} uses
+ \cs{languagename} and \cs{bbl@main@language} for \pkg{babel}, and
+ \cs{babelname} and \cs{mainbabelname} for \pkg{polyglossia}, which boils
+ down to \pkg{zref-clever} always using \emph{\pkg{babel} names} internally,
+ regardless of which language package is in use. Indeed, an acquainted user
+ will note that \zcref{tab:languages-and-aliases} contains only \pkg{babel}
+ language names.} Users can also set \opt{lang} to a specific language
+directly, in which case \pkg{babel} and \pkg{polyglossia} are disregarded.
+\pkg{zref-clever} provides a number of built-in ``dictionaries'', for the
+languages listed in \zcref{tab:languages-and-aliases}, which also includes the
+declared aliases to those languages.
+
+\pkg{zref-clever}'s ``dictionaries'' are loaded sparingly and lazily. A
+dictionary for a single language -- that specified by user options in the
+preamble, which by default is the current document language -- is loaded at
+\texttt{begindocument}. If any other dictionary is needed, it is loaded on
+the fly, if and when required. Of course, in either case, conditioned on
+availability. In sum, \pkg{zref-clever} loads as little as possible, but
+allows for convenient on the fly loading of dictionaries if the values are
+indeed required, without users having to worry about it at all.
+
+\begin{table}
+ \centering
+ \begin{tabular}{ll}
+ \toprule
+ Language & Aliases \\
+ \midrule
+ english & american \\
+ & australian \\
+ & british \\
+ & canadian \\
+ & newzealand \\
+ & UKenglish \\
+ & USenglish \\
+ french & acadian \\
+ & canadien \\
+ & francais \\
+ & frenchb \\
+ \bottomrule
+ \end{tabular}
+ \quad
+ \begin{tabular}{ll}
+ \toprule
+ Language & Aliases \\
+ \midrule
+ german & austrian \\
+ & germanb \\
+ & ngerman \\
+ & naustrian \\
+ & nswissgerman \\
+ & swissgerman \\
+ portuguese & brazilian \\
+ & brazil \\
+ & portuges \\
+ spanish & \\
+ & \\
+ \bottomrule
+ \end{tabular}
+ \caption{Declared languages and aliases}
+ \zlabel{tab:languages-and-aliases}
+\end{table}
+
+
+But if the built-in dictionaries do not cover your language, or if you'd like
+to adjust some of the default language-specific options, this can be done with
+\cs{zcDeclareLanguage}, \cs{zcDeclareLanguageAlias}, and
+\cs{zcLanguageSetup}.\footnote{Needless to say, if you'd like to contribute a
+ dictionary or improve an existing one, that is much welcome at
+ \url{https://github.com/gusbrs/zref-clever/issues}.}
+
+\begin{function}{\zcDeclareLanguage}
+ \begin{syntax}
+ \cs{zcDeclareLanguage}\oarg{options}\marg{language}
+ \end{syntax}
+\end{function}
+Declare a new language for use with \pkg{zref-clever}. If \meta{language} has
+already been declared, just warn. The \meta{options} argument receives the
+usual \texttt{key=value} list and recognizes three keys: \opt{declension},
+\opt{gender}, and \opt{allcaps}. \opt{declension} receives a coma separated
+list of valid declension cases for \meta{language}. The first element of the
+list is considered to be the default case, both for the \opt{d} option in
+\cs{zcref} and for the \opt{case} option in \cs{zcLanguageSetup}. Similarly,
+\opt{gender} receives a comma separated list of genders for \meta{language}.
+The elements in this list are those which are recognized as valid for the
+language for both the \opt{g} option in \cs{zcref} and the \opt{gender} option
+in \cs{zcLanguageSetup}. There is no default presumed in this case. Finally,
+\opt{allcaps} can be used with languages for which nouns must be always
+capitalized for grammatical reasons. For a language declared with the
+\opt{allcaps} option, the \opt{cap} reference option (see \zcref{sec:options})
+is disregarded, and \cs{zcref} always uses the capitalized type name forms.
+This means that dictionaries for languages with such a trait can be halved in
+size, and that user customization for them is simplified, only requiring the
+capitalized name forms. On the other hand, the non-capitalized \texttt{name-}
+reference format options are rendered no-op for the language in question.
+\zcref[S]{tab:language-options} presents an overview of the options in effect
+for the languages declared by \pkg{zref-clever}. \cs{zcDeclareLanguage} is
+preamble only.
+
+\begin{table}
+ \centering
+ \begin{tabular}{l>{\ttfamily}c>{\ttfamily}c>{\ttfamily}c}
+ \toprule
+ Language & declension & gender & allcaps \\
+ \midrule
+ english & -- & -- & -- \\
+ french & -- & f,m & -- \\
+ german & N,A,D,G & f,m,n & yes \\
+ portuguese & -- & f,m & -- \\
+ spanish & -- & f,m & -- \\
+ \bottomrule
+ \end{tabular}
+ \caption{Options for declared languages}
+ \zlabel{tab:language-options}
+\end{table}
+
+\begin{function}{\zcDeclareLanguageAlias}
+ \begin{syntax}
+ \cs{zcDeclareLanguageAlias}\marg{language alias}\marg{aliased language}
+ \end{syntax}
+\end{function}
+Declare \meta{language alias} to be an alias of \meta{aliased language}.
+\meta{aliased language} must be already known to \pkg{zref-clever}. Once set,
+the \meta{language alias} is treated by \pkg{zref-clever} as completely
+equivalent to the \meta{aliased language} for any language specification by
+the user. \cs{zcDeclareLanguageAlias} is preamble only.
+
+\begin{function}{\zcLanguageSetup}
+ \begin{syntax}
+ \cs{zcLanguageSetup}\marg{language}\marg{options}
+ \end{syntax}
+\end{function}
+Sets language-specific reference format options for \meta{language} (see
+\zcref{sec:ref-format-opts}), be they type-specific or not. \meta{language}
+must be already known to \pkg{zref-clever}. Besides reference format options,
+\cs{zcLanguageSetup} knows three other keys: \opt{type}, \opt{case}, and
+\opt{gender}. The first two work like a ``switch'' affecting the options
+\emph{following} it. For example, if \texttt{type=foo} is given in
+\meta{options} the options following it will be set as type-specific options
+for reference type \texttt{foo}. Similarly, after \texttt{case=X} (provided
+\texttt{X} is a valid declension case for \meta{language}), the following
+\texttt{[Nn]ame-} options will set values for the \texttt{X} declension case
+(other reference format options are not affected by \opt{case}). Before the
+first occurrence of either \opt{type} or \opt{case} default values are set.
+For \opt{case} this means the default declension case, which is the first
+element of the list provided to the \opt{declension} option in
+\cs{zcDeclareLanguage}. For \opt{type} this means ``default translations'',
+which are language-specific but not type-specific option values (see
+\zcref{sec:ref-format-opts}). An empty valued \texttt{type=} key can also
+``unset'' the type. The \opt{gender} key sets the gender of the current
+\texttt{type} (provided the value it receives is one of the declared genders
+for \meta{language}). \cs{zcLanguageSetup} is preamble only.
+
+A couple of examples to illustrate the syntax of \cs{zcLanguageSetup}:
+
+\begin{zcexample}
+\zcLanguageSetup{french}{
+ type = section ,
+ gender = f ,
+ Name-sg = Section ,
+ name-sg = section ,
+ Name-pl = Sections ,
+ name-pl = sections ,
+}
+\zcLanguageSetup{german}{
+ type = section ,
+ gender = m ,
+ case = N ,
+ Name-sg = Abschnitt ,
+ Name-pl = Abschnitte ,
+ case = A ,
+ Name-sg = Abschnitt ,
+ Name-pl = Abschnitte ,
+ case = D ,
+ Name-sg = Abschnitt ,
+ Name-pl = Abschnitten ,
+ case = G ,
+ Name-sg = Abschnitts ,
+ Name-pl = Abschnitte ,
+}
+\end{zcexample}
+
+\bigskip{}
+
+As already noted, \pkg{zref-clever} has some support for languages with
+declension. This means mainly the declension of \emph{nouns}, which is used
+for the reference type names. But some tools are also provided to support the
+user in getting better results for the text surrounding a reference,
+particularly for numbered and gendered articles, even if those don't have
+their typeset output automated.
+
+For reference type names, the declension cases for each language must be
+declared with \cs{zcDeclareLanguage}, and the name reference format options
+must be provided for each case, which is done for built-in dictionaries of
+languages which have noun declension, and can be done by the user with
+\cs{zcLanguageSetup}, as we've seen. \pkg{zref-clever} does not try to guess
+or infer the case though, you must tell it to \cs{zcref}. And this is done by
+means of the \opt{d} option (see \zcref{sec:options}). So you may write
+something like ``\texttt{nach den
+ \cs{zcref}[d=D]\{sec:section-1,sec:section-2\}}'' to get ``nach den
+Abschnitten 1 und 2''. Or ``\texttt{trotz des
+ \cs{zcref}[d=G]\{eq:theorem-1\}}'' to get ``trotz des Theorems 1''.
+
+Regarding the text surrounding the reference -- the inflected article, the
+passing preposition, etc.\ --, the issue is more delicate. \pkg{zref-clever}
+cannot and intends not to typeset those for you. But, depending on the
+language, it is true that the kind of automation provided by \pkg{zref-clever}
+may betray your best efforts to get a proper surrounding text. Multiple
+labels passed to \cs{zcref} may result in singular type names, either because
+the labels are of different types, or because they got compressed into a
+single reference. References comprised of multiple type blocks may have each
+a name with a different gender. Or, worse, \opt{tpairsep}, \opt{tpairsep},
+and \opt{tlastsep} may not provide a general enough way to separate different
+type blocks in your language altogether. You may change something in your
+document that causes a label to change its type, and hence the gender of the
+type name. A page reference to a couple of floats which were by chance on the
+same page and all of a sudden no longer are. And so on.
+
+In this area, the approach taken by \pkg{zref-clever} is to identify some
+typical situations in which your attention may be required in reviewing the
+surrounding text, and signal it at compilation time. Just like bad boxes, for
+example. This feature can be enabled by the \opt{nudge} option (which is
+opt-in, see \zcref{sec:options}). There are three ``nudges'' available for
+this purpose which trigger messages at different events: \opt{multitype},
+\opt{comptosing}, and \opt{gender}. \opt{multitype} nudges when a reference
+is comprised of multiple type blocks. \opt{comptosing} when multiple labels
+of the same type block have been compressed into a single one and, hence, the
+type name used is singular. Finally, \opt{gender} nudges when there is a
+mismatch between the gender specified in \cs{zcref} with the \opt{g} option
+and the gender of the type name, as stored in the dictionary or language
+settings, for each type block. Which nudges to use is configurable with the
+option \opt{nudgeif}. And, if you're sure of the results for a particular
+\cs{zcref} call, you can always silence the nudges locally with the
+\opt{nonudge} option.
+
+The main reason to watch for multiple type references with the \opt{multitype}
+nudge is that bundling together automatically a list of type blocks is less
+smooth an operation than it is for a single reference type. While it arguably
+works reasonably well for English, even there it is not always flawless, and
+depending on the language, results may range from ``poor style'' to outright
+wrong. A typical case would be of that of a language with inflected articles
+and a reference with multiple types of different genders or numbers. For
+example, in French, with a standard ``\texttt{au \cs{zcref}\{cha:chapter-3,
+ sec:section-3.1\}}'' we get ``au chapitre 3 et section 3.1'' which sounds
+ugly, at best. So we may be better off writing instead ``\texttt{au
+ \cs{zcref}\{cha:chapter-3\} et à la \cs{zcref}\{sec:section-3.1\}}''. Or
+something else, of course. But the general point is that, depending on
+circumstances and on the language, the results of automating the grouping of
+multiple reference types, as \pkg{zref-clever} is able to do, may leave things
+to be desired for. Hence it lets you know when one such case occurs, so that
+you can review it for best results.
+
+The case of the \opt{comptosing} and \opt{gender} nudges is more objective in
+nature, they respectively signal mismatches of number and gender. When a
+reference is made with \cs{zcref} to a single label we are sure the type name
+will be a singular form. However, when \cs{zcref} receives multiple labels of
+the same type, the type name will normally be a plural, but not necessarily
+so, since the labels may be compressed into a single one (see the \opt{comp}
+option in \zcref{sec:options}), in which case the singular is used. The
+compression of multiple labels into a single reference should be an exception
+for default references, but not so for \opt{page} references, where it is easy
+to conceive practical situations where it may occur. Suppose, for example,
+you have two contiguous floats in your document and make a page reference to
+both of them. Will they end up in the same page or not? Maybe we know what
+the current state is, but we cannot know what may happen as the document keeps
+being edited. As a consequence, we don't know whether that reference will end
+up having a plural or a singular type name. That given, the logic of the
+\opt{comptosing} nudge is the following. If we are giving multiple labels to
+\cs{zcref}, we can \emph{presume} a plural type name, but we get a nudge in
+case the compression of the labels results in a singular type name form. If
+one such compression did happen to one of your references, you can use a
+singular article and then tell \cs{zcref} you did so with option \opt{sg}.
+The effect of the \opt{sg} option is to inhibit the nudge when a compression
+to singular occurs, but to do it instead when the compression \emph{ceases} to
+occur, that is, if we get a plural type name again at some point.
+
+The \opt{gender} nudge aims to guard against one particular situation:
+possible changes of a reference's type. This does not occur by reason of any
+internal behavior of \pkg{zref-clever}, but it may be caused by changes in the
+document. You may wish to change one \texttt{theorem} into a
+\texttt{proposition} and, if you're writing in French or Portuguese, for
+example, that implies that the reference to it changes gender and the likely
+preceding article will no longer pass to the reference. The \opt{gender}
+nudge requires that the gender of each type name and of each reference be
+explicitly specified. For the type names, this is done for the built-in
+dictionaries of languages were this matters, and can be done with
+\cs{zcLanguageSetup} as well. For the references, that is the purpose of the
+\opt{g} option. When there is a mismatch between the two for any type block,
+the nudge is triggered. Of couse, this means that the gender markup has to be
+supplied in the document at each reference. And considering such type changes
+may not be frequent for you, or considered not particularly problematic,
+you'll have to balance if doing so is worth it. Still, the feature is
+available, and it's up to you.
+
+
+\section{How-tos}
+
+This section gathers some usage examples, or ``how-tos'', of cases which may
+require some \pkg{zref-clever} setup, or usage adjustments, and each item is
+set around a cross-reference ``task'' we'd like to perform with
+\pkg{zref-clever}.
+
+
+\subsection{Context sensitive references}
+
+\zctask{Make cross-references which are sensitive to the relative position
+ between the reference and the label being referred to, à la \pkg{varioref}.}
+
+\pkg{varioref}'s \cs{vref} provides for varied references for three different
+basic cases: when the reference and the label are on the same page, it
+typesets a plain reference; when the reference and the label are in contiguous
+pages (next, previous, or facing), it typesets the reference and a fixed
+string corresponding to the relative position; when the reference and the
+label are in different non-contiguous pages, it typesets a regular reference
+and a page reference. The same end result, but with a different user
+interface concept can be achieved through \pkg{zref-clever}'s integration with
+\pkg{zref-check}. For this, the later must be loaded, which can be most
+conveniently done with the \opt{check} option in the preamble. With that in
+place, the different cases could be covered by the following examples:
+
+\begin{zcexample}
+\zcref[check=thispage]{fig:1}
+\zcref[check=nextpage,note={on the following page}]{fig:1}
+\zcref[check=prevpage,note={on the preceding page}]{fig:1}
+\zcref[check=facing,note={on the facing page}]{fig:1}
+\zcref[check=pagegap]{fig:1} on \zcpageref{fig:1}
+\end{zcexample}
+
+And, similarly for the cases of \cs{vpageref}:
+
+\begin{zcexample}
+\zcref[noref,check=thispage,note={on this page}]{fig:1}
+\zcref[noref,check=nextpage,note={on the following page}]{fig:1}
+\zcref[noref,check=prevpage,note={on the preceding page}]{fig:1}
+\zcref[noref,check=facing,note={on the facing page}]{fig:1}
+\zcref[noref,check=pagegap]{fig:1} on \zcpageref{fig:1}
+\end{zcexample}
+
+Since \cs{zcref} can receive multiple labels, and make ranges out of them, it
+is not difficult to extend these examples to the functionality of
+\cs{vrefrange} and \cs{vpagerefrange}.
+
+Evidently, this does not fully automate the typeset results, but it does
+automate the checking that the reference context is the intended one. If the
+relation between the reference and the label does not correspond to the
+specified one, a compilation warning is issued (according to the options given
+to \pkg{zref-check}), so that the problem can be easily identified and
+corrected. See \pkg{zref-check}'s documentation for details, and further
+available checks.
+
+
+\subsection{\cs{newtheorem}}
+
+Since \LaTeX{}'s \cs{newtheorem} allows users to create arbitrary numbered
+environments, with respective arbitrary counters, the most \pkg{zref-clever}
+can do in this regard is to provide some ``typical'' built-in reference types
+to smooth user setup but, in the general case, some user setup may be indeed
+required. The examples below are equaly valid for \pkg{amsthm}'s
+\cs{newtheorem} since, even it provides features beyond those available in the
+kernel, its syntax and underlying relation with counters is pretty much the
+same. The same for \pkg{ntheorem}. For \pkg{thmtools}' \cs{declaretheorem},
+though some adjustments to the examples below may be required, the basic logic
+is the same (there is no integration with the \opt{Refname}, \opt{refname},
+and \opt{label} options, which are targeted to the standard reference system,
+but you don't actually need them to get things working conveniently).
+
+
+\subsubsection*{Simple case}
+
+\zctask{Setup up a new theorem environment created with \cs{newtheorem} to be
+ referred to with \cs{zcref}. The theorem environment does not share its
+ counter with other theorem environments, and one of \pkg{zref-clever}
+ built-in reference types is adequate for my needs.}
+
+Suppose you set a ``Lemma'' environment with:
+
+\begin{zcexample}
+\newtheorem{lemma}{Lemma}[section]
+\end{zcexample}
+
+In this case, since \pkg{zref-clever} provides a built-in \texttt{lemma} type
+(for supported languages) and presumes the reference type to be the same name
+as the counter, there is no need for setup, and things just work out of the
+box. So, you can go ahead with:
+
+\begin{zchowto}[caption={\cs{newtheorem}, simple case}]
+\documentclass{article}
+\usepackage{zref-clever}
+\newtheorem{lemma}{Lemma}[section]
+\begin{document}
+\section{Section 1}
+\begin{lemma}\zlabel{lemma-1}
+ A lemma.
+\end{lemma}
+\zcref{lemma-1}
+\end{document}
+\end{zchowto}
+
+If, however, you had chosen an environment name which did not happen to
+coincide with the built-in reference type, all you'd need to do is instruct
+\pkg{zref-clever} to associate the counter for your environment to the desired
+type with the \opt{countertype} option:
+
+\begin{zchowto}[caption={\cs{newtheorem}, simple case}]
+\documentclass{article}
+\usepackage{zref-clever}
+\zcsetup{countertype={lem=lemma}}
+\newtheorem{lem}{Lemma}[section]
+\begin{document}
+\section{Section 1}
+\begin{lem}\zlabel{lemma-1}
+ A lemma.
+\end{lem}
+\zcref{lemma-1}
+\end{document}
+\end{zchowto}
+
+
+\subsubsection*{Shared counter}
+
+\zctask{Setup up two new theorem environments created with \cs{newtheorem} to
+ be referred to with \cs{zcref}. The theorem environments share the same
+ counter, and the available \pkg{zref-clever} built-in reference types are
+ adequate for my needs.}
+
+In this case, we need to set the \opt{countertype} option in the appropriate
+contexts, so that the labels of each environment get set with the expected
+reference type. As we've seen (at \zcref{sec:user-interface}), \cs{zcsetup}
+has local effects, so it can be issued inside the respective environments for
+the purpose. Even better, we can leverage the kernel's new hook management
+system and just set it for all occurrences with
+\cs{AddToHook}\texttt{\{env/\meta{myenv}/begin\}}.
+
+\begin{zchowto}[caption={\cs{newtheorem}, shared counter}]
+\documentclass{article}
+\usepackage{zref-clever}
+\AddToHook{env/mytheorem/begin}{%
+ \zcsetup{countertype={mytheorem=theorem}}}
+\AddToHook{env/myproposition/begin}{%
+ \zcsetup{countertype={mytheorem=proposition}}}
+\newtheorem{mytheorem}{Theorem}[section]
+\newtheorem{myproposition}[mytheorem]{Proposition}
+\begin{document}
+\section{Section 1}
+\begin{mytheorem}\zlabel{theorem-1}
+ A theorem.
+\end{mytheorem}
+\begin{myproposition}\zlabel{proposition-1}
+ A proposition.
+\end{myproposition}
+\zcref{theorem-1, proposition-1}
+\end{document}
+\end{zchowto}
+
+
+\subsubsection*{Custom type}
+
+\zctask{Setup up a new theorem environment created with \cs{newtheorem} to be
+ referred to with \cs{zcref}. The theorem environment does not share its
+ counter with other theorem environments, but none of \pkg{zref-clever}
+ built-in reference types is adequate for my needs.}
+
+In this case, we need to provide \pkg{zref-clever} with settings pertaining to
+the custom reference type we'd like to use. Unless you need to typeset your
+cross-references in multiple languages, in which case you'd require
+\cs{zcLanguageSetup}, the most convenient way to setup a reference type is
+\cs{zcRefTypeSetup}. In most cases, what we really need to provide for a
+custom type are the ``type names'' and other reference format options can rely
+on default translations already provided by the package (assuming the language
+is supported).
+
+\begin{zchowto}[caption={\cs{newtheorem}, custom type}]
+\documentclass{article}
+\usepackage{zref-clever}
+\newtheorem{myconjecture}{Conjecture}[section]
+\zcRefTypeSetup{myconjecture}{
+ Name-sg = Conjecture ,
+ name-sg = conjecture ,
+ Name-pl = Conjectures ,
+ name-pl = conjectures ,
+}
+\begin{document}
+\section{Section 1}
+\begin{myconjecture}\zlabel{conjecture-1}
+ A conjecture.
+\end{myconjecture}
+\zcref{conjecture-1}
+\end{document}
+\end{zchowto}
+
+
+\subsection{\pkg{newfloat}}
+
+\zctask{Setup a new float environment created with \pkg{newfloat} to be
+ referred to with \cs{zcref}. None of \pkg{zref-clever} built-in reference
+ types is adequate for my needs.}
+
+The case here is pretty much the same as that for \cs{newtheorem} with a
+custom type. Hence, we need to setup a corresponding type, for which
+providing the ``type names'' should normally suffice. Note that, as far as
+\pkg{zref-clever} is concerned, there's nothing specific to the \pkg{newfloat}
+package in the setup, the same procedure can be used with \cls{memoir}'s
+\cs{newfloat} command or with the \pkg{float}, \pkg{floatrow}, and
+\pkg{trivfloat} packages.
+
+\begin{zchowto}[caption={\pkg{newfloat}}]
+\documentclass{article}
+\usepackage{newfloat}
+\DeclareFloatingEnvironment{diagram}
+\usepackage{zref-clever}
+\zcRefTypeSetup{diagram}{
+ Name-sg = Diagram ,
+ name-sg = diagram ,
+ Name-pl = Diagrams ,
+ name-pl = diagrams ,
+}
+\begin{document}
+\section{Section 1}
+\begin{diagram}
+ A diagram.
+ \caption{A diagram}
+ \zlabel{diagram-1}
+\end{diagram}
+\zcref{diagram-1}
+\end{document}
+\end{zchowto}
+
+
+\subsection{\pkg{amsmath}}
+
+\zctask{Make references to \pkg{amsmath} display math environments with
+ \cs{zcref}.}
+
+Given how \pkg{amsmath}'s display math environments work, they need to handle
+\cs{label} specially, and this support is quite hard-wired into the
+environments, but it is not extended to \cs{zlabel}. \pkg{zref-clever}'s
+\opt{amsmath} compatibility module provides that a \cs{label} used inside
+these environments set both a regular \cs{label} and a \cs{zlabel}, so that we
+can refer to the equations with both referencing systems. Note the use of
+\cs{zlabel} for \env{subequations} though. For more details, see the
+description of the \opt{amsmath} compatibility module at
+\zcref{sec:comp-modules}.
+
+\begin{zchowto}[caption={\pkg{amsmath}},label={how:amsmath}]
+\documentclass{article}
+\usepackage{amsmath}
+\usepackage{zref-clever}
+\usepackage{hyperref}
+\begin{document}
+\section{Section 1}
+\begin{equation}\label{eq:1}
+ A^{(1)}_l =\begin{cases} n!,&\text{if }l =1\\
+ 0,&\text{otherwise}.\end{cases}
+\end{equation}
+\begin{equation*} \tag{foo}\label{eq:2}
+ A^{(1)}_l =\begin{cases} n!,&\text{if }l =1\\
+ 0,&\text{otherwise}.\end{cases}
+\end{equation*}
+\begin{subequations}\zlabel{eq:3}
+ \begin{align}
+ A+B&=B+A\\
+ C&=D+E\label{eq:3b}\\
+ E&=F
+ \end{align}
+\end{subequations}
+\zcref{eq:1, eq:2, eq:3, eq:3b}
+\end{document}
+\end{zchowto}
+
+
+\subsection{\pkg{listings}}
+
+\zctask{Make references to a \env{lstlisting} environment from the
+ \pkg{listings} package with \cs{zcref}.}
+
+Being \env{lstlisting} a verbatim environment, setting labels inside it
+requires special treatment. \pkg{zref-clever}'s \opt{listings} compatibility
+module provides that a label given to the \opt{label} option gets set with
+both a regular \cs{label} and a \cs{zlabel}, so that we can refer to it with
+both referencing systems. Setting labels for specific lines of the
+environment can be done with \cs{zlabel} directly, subject to the same
+escaping as for the standard \cs{label}. For more details, see the
+description of the \opt{listings} compatibility module at
+\zcref{sec:comp-modules}.
+
+\begin{zchowto}[caption={\pkg{listings}},label={how:listings},escapeinside=`']
+\documentclass{article}
+\usepackage{listings}
+\usepackage{zref-clever}
+\usepackage{hyperref}
+\begin{document}
+\section{Section 1}
+\lstset{escapeinside={(*@}{@*)}, numbers=left, numberstyle=\tiny}
+\begin{lstlisting}[caption={Useless code}, label=lst:1]
+ for i:=maxint to 0 do
+ begin
+ { do nothing }(*@\zlabel{ln:1.1}@*)
+ end;
+\end{lstlisting}
+\zcref{lst:1, ln:1.1}
+\end{document}
+\end{zchowto}
+
+
+\subsection{\pkg{enumitem}}
+
+\zctask{Setup a custom enumerate environment created with \pkg{enumitem} to be
+ referred to with \cs{zcref}.}
+
+Since the \texttt{enumerate} environment's counters are reset at each nesting
+level, but not with the standard machinery, we have to inform
+\pkg{zref-clever} of this resetting behavior with the \opt{counterresetby}
+option. Also, given the naming of the underlying counters is tied with the
+environment's name and the level's number, we cannot really rely on an
+implicit counter-type association, and have to set it explicitly with the
+\opt{countertype} option.
+
+\begin{zchowto}[caption={\pkg{enumitem}}]
+\documentclass{article}
+\usepackage{zref-clever}
+\zcsetup{
+ countertype = {
+ myenumeratei = item ,
+ myenumerateii = item ,
+ myenumerateiii = item ,
+ myenumerateiv = item ,
+ } ,
+ counterresetby = {
+ myenumerateii = myenumeratei ,
+ myenumerateiii = myenumerateii ,
+ myenumerateiv = myenumerateiii ,
+ }
+}
+\usepackage{enumitem}
+\newlist{myenumerate}{enumerate}{4}
+\setlist[myenumerate,1]{label=(\arabic*)}
+\setlist[myenumerate,2]{label=(\Roman*)}
+\setlist[myenumerate,3]{label=(\Alph*)}
+\setlist[myenumerate,4]{label=(\roman*)}
+\begin{document}
+\begin{myenumerate}
+\item An item.\zlabel{item-1}
+ \begin{myenumerate}
+ \item An item.\zlabel{item-2}
+ \begin{myenumerate}
+ \item An item.\zlabel{item-3}
+ \begin{myenumerate}
+ \item An item.\zlabel{item-4}
+ \end{myenumerate}
+ \end{myenumerate}
+ \end{myenumerate}
+\end{myenumerate}
+\zcref{item-1, item-2, item-3, item-4}
+\end{document}
+\end{zchowto}
+
+
+\subsection{\pkg{zref-xr}}
+
+\zctask{Make references to labels set in an external document with
+ \cs{zcref}.}
+
+\pkg{zref} itself offers this functionality with module \pkg{zref-xr}, and
+\pkg{zref-clever} is prepared to make use of it. Just a couple of details
+have to be taken care of, for it to work as intended: i) \pkg{zref-clever}
+must be loaded in both the main document and the external document, so that
+the imported labels also contain the properties required by \pkg{zref-clever};
+ii) since \cs{zexternaldocument} defines any properties it finds in the labels
+from the external document when it imports them, it must be called after
+\pkg{zref-clever} is loaded, otherwise the later will find its own internal
+properties already defined when it does get loaded, and will justifiably
+complain. Note as well that the starred version of \cs{zexternaldocument*},
+which imports the standard labels from the external document, is not
+sufficient for \pkg{zref-clever}, since the imported labels will not contain
+all the required properties.
+
+Assuming here \file{documentA.tex} as the main file and \file{documentB.tex}
+as the external one, and also assuming we just want to refer in ``\texttt{A}''
+to the labels from ``\texttt{B}'', and not the contrary, a minimum setup would
+be the following.
+
+
+\begin{zchowto}[caption={\pkg{zref-xr}},escapeinside=`']
+`\hspace*{-1em}\file{documentA.tex}:\vspace{1ex}'
+\documentclass{article}
+\usepackage{zref-clever}
+\usepackage{zref-xr}
+\zexternaldocument[B-]{documentB}
+\usepackage{hyperref}
+\begin{document}
+\section{Section A1}
+\zlabel{sec:section-a1}
+\zcref{sec:section-a1, B-sec:section-b1}
+\end{document}
+`\vspace{-1ex}'
+`\hspace*{-1em}\file{documentB.tex}:\vspace{1ex}'
+\documentclass{article}
+\usepackage{zref-clever}
+\usepackage{hyperref}
+\begin{document}
+\section{Section B1}
+\zlabel{sec:section-b1}
+\end{document}
+\end{zchowto}
+
+\section{Compatibility}
+\zlabel{sec:compatibility}
+
+\subsection{Limitations}
+\zlabel{sec:limitations}
+
+Being based on \pkg{zref} entails one quite sizable advantage for
+\pkg{zref-clever}: the extensible referencing system of the former allows
+\pkg{zref-clever} to store and retrieve the information it needs to work
+without having to redefine some core \LaTeX{} commands. This alone makes for
+reduced compatibility problems and less load order issues than the average
+package in this functionality area. On the other hand, being based on
+\pkg{zref} also does impair the supported scope of \pkg{zref-clever}. Not
+because of any particular limitation of either, but because any class or
+package which implements some special handling for reference labels
+universally does so aiming at the standard referencing system, and whether
+specific support for \pkg{zref} is included, or whether things work by
+spillover of the particular technique employed, is not guaranteed.
+
+The limitation here is less one of \pkg{zref-clever} than that of a potencial
+lack of support for \pkg{zref} itself. Broadly speaking, what
+\pkg{zref-clever} does is setup \pkg{zref} so that its \cs{zref@newlabel}s
+contains the information we need using \pkg{zref}'s API. Once the \cs{zlabel}
+is set correctly, there is little in the way of \pkg{zref-clever}, it can just
+extract the label's information, again using \pkg{zref}'s API, and do its job.
+Therefore, the problems that may arise are really in \emph{label setting}.
+
+For \cs{zlabel} to be able to set a label with everything \pkg{zref-clever}
+needs, some conditions must be fulfilled, most of which are pretty much the
+same as that of a regular label, but not only. As far as my experience goes,
+the following label setting requirements can be potentially problematic and
+are not necessarily granted for \cs{zlabel}:
+
+\begin{enumerate}
+\item One must be able to call \cs{zlabel}, directly or indirectly, at the
+ appropriate scope/location so as to set the label.
+\item When \cs{zlabel} is set, it must see a correct value of
+ \cs{@currentcounter}.
+\end{enumerate}
+
+As to the first, it is not everywhere we technically can set a (z)label. On
+verbatim-like environments it depends on how they are defined and whether they
+provide a proper place or option to do so. But other places may be
+problematic too, for example, \pkg{amsmath} display math environments also
+handle \cs{label} specially and the same work is not done for \cs{zlabel}.
+
+Regarding the second, a correctly set \cs{@currentcounter} is critical for the
+task of \pkg{zref-clever}: the reference type will depend on that and,
+consequently, sorting and compression as well, counter resetting behavior
+information is also retrieved based on it, and so on. Since the 2020-10-01
+\LaTeX{} release, \cs{@currentcounter} is set by \cs{refstepcounter} alongside
+\cs{@currentlabel} and, since the 2021-11-15 release, the support for
+\cs{@currentcounter} has been further extended in the kernel. Hence, as long
+as kernel features are involved, or as long as \cs{refstepcounter} is the tool
+used for the purpose of reference setting, \cs{zlabel} will tend to have all
+information within its grasp at label setting time. But that's not always the
+case. For this reason, \pkg{zref-clever} has the option \opt{currentcounter}
+which at least allows for some viable work-arounds when the value of
+\cs{@currentcounter} cannot be relied upon. Whether we have a proper opening
+to set it, depends on the case. Still, \cs{refstepcounter} is ubiquitous
+enough a tool that we can count on \cs{@currentcounter} most of the time.
+
+All in all, most things work, but some things don't. And if the later will
+eventually work depends essentially on whether support for \pkg{zref} is
+provided by the relevant packages and classes or not. Or, failing that,
+whether \pkg{zref-clever} is able to provide some specific support when a
+reasonable way to do so is within reach.
+
+
+\subsection{Compatibility modules}
+\zlabel{sec:comp-modules}
+
+This section gives a description of each compatibility module provided by
+\pkg{zref-clever}. These modules intend to smooth the interaction of \LaTeX{}
+features, document classes, and packages with \pkg{zref-clever} and
+\pkg{zref}, and they can be selectively or completely disabled with the option
+\opt{nocompat} (see \zcref{sec:options}). This set is not to be confused with
+``the list of packages or classes supported by \pkg{zref-clever}''. In most
+circumstances, things should just work out of the box, and need no specific
+handling. These are just the ones for which some special treatment was
+required. Of course, this effort is bound to be incomplete (see
+\zcref{sec:limitations}).
+
+The purpose of outlining to some extend what the compatibility modules do is
+twofold. First, some of them require usage adjustments for label setting,
+which must be somehow conveyed in this documentation. Second, the kind and
+degree of intervention in external code varies significantly for each module,
+and since this is an area of potential friction, a minimum of information for
+the users to judge whether they want to leave these modules enabled or not is
+due. For this reason, this is also a little technical, but for full details,
+see the code documentation.
+
+\bigskip{}
+
+\DescribeOption{appendix} %
+The \cs{appendix} command provided by many document classes is normally used
+to change the behavior of the sectioning commands after that point. Usually,
+depending on the class, the changes that interest us involve using \cs{@Alph}
+for numbering and \cs{appendixname} for chapter's names. In sum, we'd like to
+refer to the appendix sectioning commands as ``appendices'' rather than
+``chapters'' or ``sections''. Since the sectioning commands are the same as
+before \cs{appendix}, and so are their underlying counters, we must configure
+the counter type of the sectioning counters to \texttt{appendix}. And this is
+what this compatibility module does, and it uses a \pkg{ltcmdhooks} hook on
+\cs{appendix} for the purpose. Hence, this module applies to any document
+class or package which provides that command.
+
+\DescribeOption{appendices} %
+This module implements support for the \env{appendices} and
+\env{subappendices} environments provided by the \pkg{appendix} package, and
+also by \cls{memoir}. The task is the same as for the \texttt{appendix}
+module: set proper counter types for the sectioning counters. This module
+employs environment hooks to \env{appendices} and \env{subappendices} and a
+command hook to \cs{appendix} for the purpose.
+
+\DescribeOption{memoir} %
+The \cls{memoir} class implements several features with one or another
+implication for cross-referencing, usually bearing just the standard
+referencing system in mind, and related mainly to captions, subfloats, and
+notes. This compatibility module tries to adjust \pkg{zref-clever} to these
+features with support for the following: i) set counter types for counters
+\texttt{subfigure}, \texttt{subtable}, and \texttt{poemline} (used in the
+\env{verse} environment); ii) configure resetting behavior
+(\opt{counterresetby} option) for \texttt{subfigure} and \texttt{subtable}
+counters; iii) provide that the \meta{label} arguments to environments
+\env{sidecaption} and \env{sidecontcaption} and commands \cs{bitwonumcaption},
+\cs{bionenumcaption}, and \cs{bicaption} \emph{also} set a \cs{zlabel} of the
+same name; iv) provide the \pkg{zref} property ``\texttt{subcaption}'' so that
+we can refer to, for example, \texttt{\cs{zcref}[ref=subcaption]\{subcap-1\}}
+to emulate the functionality of \cls{memoir}'s \cs{subcaptionref}; v) provide
+that \cs{footnote}, \cs{verbfootnote}, \cs{sidefootnote}, and \cs{pagenote}
+get a proper \opt{currentcounter} set; and v) set counter types for counters
+\texttt{sidefootnote} and \texttt{pagenote}. Naturally, the sheer number of
+features that required some specific support implies that some gymnastics were
+needed here. But the most sensitive changes are: i) a local redefinition of
+\cs{label} inside the environments \env{sidecaption} and \env{sidecontcaption}
+and the commands \cs{bitwonumcaption}, \cs{bionenumcaption}, and
+\cs{bicaption}; and ii) the use of \pkg{ltcmdhooks} command hooks on
+\cs{bitwonumcaption}, \cs{bionenumcaption}, \cs{bicaption},
+\cs{@memsubcaption}, \cs{@makefntext}, and \cs{@makesidefntext}.
+
+\DescribeOption{KOMA} %
+The \cls{KOMA-Script} document classes are much more strict than \cls{memoir}
+in using standard mechanisms for cross-reference related features, so that
+very little adjustment is needed here. Only the environments
+\env{captionbeside} and \env{captionofbeside} require special treatment. And,
+though they do use \cs{refstepcounter} under the hood, since they are
+environments, we don't get to see reference variables outside them.
+\cs{@currentlabel} is smuggled out of the group, but not \cs{@currentcounter},
+so we must arrange for the later to have a correct value outside the caption
+environments too. Environment hooks are used for the purpose, essentially
+setting \cs{@currentcounter} to \cs{@captype}, which would be the value the
+captioning infrastructure would set for it.
+
+\DescribeOption{amsmath} %
+\pkg{amsmath}'s display math environments have their contents processed twice,
+once for measuring and the second does the final typesetting. Hence,
+\pkg{amsmath} needs to handle \cs{label} specially inside these environments,
+otherwise we'd have duplicate labels all around, and indeed it does redefine
+\cs{label} locally inside them. Alas, the same treatment is not granted to
+\cs{zlabel}. However, \cs{label} is set basically to \emph{store} the value
+of the argument inside the environments, and its global meaning is kept in
+\cs{ltx@label} which is called at the appropriate time to actually set the
+label. So, what \pkg{zref-clever} does is redefine \cs{ltx@label} to set
+\texttt{both} a regular \cs{label} and a \cs{zlabel} for the same \meta{label}
+(which does not generate a duplicate label problem since the referencing
+systems are independent). Therefore, you must use \cs{label} (not
+\cs{zlabel}) inside \pkg{amsmath}'s display math environments, and this
+compatibility module arranges that you can also refer to that label with
+\pkg{zref} and, thus, with \cs{zcref} as well. The following environments are
+subject to this usage restriction: \env{equation}, \env{align}, \env{alignat},
+\env{flalign}, \env{xalignat}, \env{gather}, \env{multline}, and their
+respective starred versions. In particular, the same is not the case for the
+\env{subequations} environment, inside which \cs{zlabel} works as usual (to
+refer to the main equation number, that is, right after
+\texttt{\cs{begin}\{subequations\}}). See the \zcref{how:amsmath} for an
+usage example. The module also ensures proper \opt{currentcounter} values are
+in place for the display math environments, for which it uses environment
+hooks, and sets the font of equation references to \cs{upshape}, following
+\pkg{amsmath}'s \cs{eqref}. Note, however, that \pkg{zref-clever} is not the
+only package to redefine \cs{ltx@label}, and compatibility problems may arise
+if this module is used with such packages or with document classes that do the
+same. In case of trouble, you can load \pkg{zref-clever} with option
+\texttt{nocompat=amsmath} and either use the standard referencing system's
+facilities to refer to \pkg{amsmath}'s equations or check the code
+documentation for the technique used for this (which is pretty standard) and
+adapt it to your case. Given that any trouble that may arise here is one of
+the proper ``timing'' of the redefinition, it should not be particularly
+complicated to make such adjustments.
+
+\DescribeOption{mathtools} %
+\pkg{mathtools} has a feature to show the numbers only for those equations
+actually referenced (with \cs{eqref} or \cs{refeq}), which is enabled by the
+\opt{showonlyrefs} option. This compatibility module adds support for this
+feature, such that equation references made with \cs{zcref} also get marked as
+``referenced'' for \pkg{mathtools}, when the option is active, of course. The
+module uses a couple of \pkg{mathtools} functions, but does not need to
+redefine or hook into anything, everything is handled on \pkg{zref-clever}'s
+side.
+
+\DescribeOption{breqn} %
+This compatibility module only sets proper \opt{currentcounter} values for the
+environments \env{dgroup}, \env{dmath}, \env{dseries}, and \env{darray}, and
+uses environment hooks for the purpose. Note that these environments offer a
+\opt{label} option for label setting, but implements it in a way that is
+somewhat tricky to grab for our purposes, so we don't do it. However,
+\pkg{breqn}'s documentation says the following about the use of \cs{label}
+inside its environments: \textquote{Use of the normal \cs{label} command
+ instead of the \opt{label} option works, I think, most of the time
+ (untested)}. My light testing suggests the same is true for \cs{zlabel},
+which can then be used directly in these environments. But the ``second
+class'' status for this use is the one granted by \pkg{breqn}, there's not
+much we can do here. If you have any trouble with this, you may wish to check
+\zcref{wkrnd:breqn}.
+
+\DescribeOption{listings} %
+Being \env{lstlisting}s environments what they are, one cannot simply place a
+label inside them without special treatment. \pkg{listings} arranges to this
+by providing a \opt{label} option for setting a label for the whole
+environment, and a properly escaped label command inside the environment can
+be used to refer to the line number. While the later can also be used to set
+a \cs{zlabel} to make line number references, the \opt{label} option is
+catered to the standard labels exclusively. Hence, this compatibility module
+uses the same label name -- which luckily and atypically is stored in a
+variable -- and sets a \cs{zlabel} as well. This is done by using
+\pkg{listings}' \texttt{PreInit} hook, se we don't have to redefine or tamper
+with anything for the purpose. Besides this, the module also sets appropriate
+\opt{countertype}, \opt{counterresetby} and \opt{currentcounter} values for
+the \pkg{listings}' counters: \texttt{lstlisting} and \texttt{lstnumber}. See
+the \zcref{how:listings} for an usage example.
+
+\DescribeOption{enumitem} %
+\LaTeX{}'s \env{enumerate} environment requires some special treatment from
+\pkg{zref-clever}, since its resetting behavior is not stored in the standard
+way, and the counters' names, given they are numbered by level, do not map to
+the reference type naturally. This is done by default for the up to four
+levels of nested \env{enumerate} environments the kernel offers.
+\pkg{enumitem}, though, allows one to increase this maximum list depth for
+\env{enumerate} and, if this is done, setup for these deeper nesting levels
+have also to be taken care of, and that's what this compatibility module does.
+All settings here are internal to \pkg{zref-clever}, no hooks or redefinitions
+are needed, we just check the existing pertinent counters at
+\texttt{begindocument}, and supply settings for them. Of course, this means
+that only \pkg{enumitem}'s settings done in the preamble will be visible to
+the module and provided for.
+
+\DescribeOption{subcaption} %
+This compatibility module sets appropriate \opt{countertype} and
+\opt{counterresetby} for the \texttt{subfigure} and \texttt{subtable}
+counters, and provides the \pkg{zref} property ``\texttt{subref}'' so that we
+can refer to, for example, \texttt{\cs{zcref}[ref=subref]\{\meta{label}\}} to
+emulate the functionality of \cls{subcaption}'s \cs{subref}. The later
+feature uses the \cs{caption@subtypehook} provided by \pkg{caption} to locally
+add the \texttt{subref} property to \pkg{zref}'s main property list.
+
+\DescribeOption{subfig} %
+This module just sets appropriate \opt{countertype} and \opt{counterresetby}
+for the \texttt{subfigure} and \texttt{subtable} counters.
+
+
+\subsection{Work-arounds}
+
+\marginpar{\raggedleft\raisebox{-1.5ex}{\dbend}}As should be clear by now, the
+use of \pkg{zref}'s \cs{zlabel} and thus of \pkg{zref-clever} may occasionally
+require some adjustments, since it does not enjoy the universal support the
+standard referencing system does. The compatibility modules presented in
+\zcref{sec:comp-modules} go a long way in ensuring the user has to worry very
+little about it, but they cannot hopefully go all the way. Not only because
+this kind of support will never be exhaustive, but also since, sometimes,
+given the way certain features are implemented by packages or document
+classes, there may not be a reasonable way to provide this support, from our
+side. But, still, most of the time, it is still ``viable'' to get there, if
+one really wishes to do so. So, this section keeps track of some known
+recipes, which I don't think belong in \pkg{zref-clever} itself, but which you
+may choose to use. Note that this list is intended to spare users from having
+to reinvent the wheel every time someone needs something of the sort, but from
+\pkg{zref-clever}'s perspective, their status is ``not supported''.
+
+
+\subsection*{\pkg{breqn}}
+
+As mentioned in \opt{breqn}'s compatibility module (\zcref{sec:comp-modules}),
+\pkg{breqn}'s math environments \env{dgroup}, \env{dmath}, \env{dseries}, and
+\env{darray} offer a \opt{label} option (plus \opt{labelprefix}) for the
+purpose of label setting. Setting a \cs{zlabel} alongside with a regular
+\cs{label} based on that option requires redefining some of \pkg{breqn}
+internals. Also, \pkg{breqn} does not use \cs{refstepcounter} to increment
+the equation counters and, as a result, fails to set \pkg{hyperref} anchors
+for the equations (thus affecting standard labels too). The example below
+also provides to that.\footnote{The later work-around thanks to Heiko
+ Oberdiek, at \url{https://tex.stackexchange.com/a/241150}.}
+
+
+\begin{zcworkaround}[caption={\pkg{breqn}},label={wkrnd:breqn}]
+\documentclass{article}
+\usepackage{zref-clever}
+\usepackage{breqn}
+\makeatletter
+\define@key{breqn}{label}{%
+ \edef\next@label{%
+ \noexpand\label{\next@label@pre#1}%
+ \noexpand\zlabel{\next@label@pre#1}}%
+ \let\next@label@pre\@empty}
+\makeatother
+\usepackage{hyperref}
+\usepackage{etoolbox}
+\makeatletter
+\patchcmd\eq@setnumber{\stepcounter}{\refstepcounter}{}{%
+ \errmessage{Patching \noexpand\eq@setnumber failed}}
+\makeatother
+\begin{document}
+\section{Section 1}
+\begin{dmath}[label={eq:1}]
+ f(x)=\frac{1}{x} \condition{for $x\neq 0$}
+\end{dmath}
+\begin{dmath}[labelprefix={eq:},label={2}]
+ H_2^2 = x_1^2 + x_1 x_2 + x_2^2 - q_1 - q_2
+\end{dmath}
+\zcref{eq:1, eq:2}
+\end{document}
+\end{zcworkaround}
+
+Of course, you can always adapt things to your needs and, e.g., make the
+\opt{label} option set just \cs{zlabel} instead of both labels, or create a
+separate \opt{zlabel} option.
+
+
+\section{Acknowledgments}
+
+\pkg{zref-clever} would not be possible without other people's previous work
+and help.
+
+Heiko Oberdiek's \pkg{zref}, now maintained by the Oberdiek Package Support
+Group, is the underlying infrastructure of this package. The potential of its
+basic concept and the solid implementation were certainly among the reasons
+I've chosen to venture into these waters, to start with. And I believe they
+will remain one of the main assets of \pkg{zref-clever} as it matures.
+
+The name of the package makes no secret that a major inspiration for the kind
+of ``feel'' I strove to achieve has been Toby Cubitt's \pkg{cleveref}.
+Indeed, I have been an user of \pkg{cleveref} for several years, and a happy
+one at that. But the role \pkg{cleveref} played in the development of
+\pkg{zref-clever} extends beyond the visible influence in the design of user
+facing functionality. Some technical solutions and, specially, the handling
+of support for other packages were a valuable reference. Hence, the
+accumulated experience of \pkg{cleveref} allowed for \pkg{zref-clever} to
+start on a more solid foundation than would otherwise be the case.
+
+The long term efforts of the \LaTeX3 \cs{Team} around \pkg{expl3} and
+\pkg{xparse} have also left their marks in this package. By implementing
+powerful tools and smoothing several regular programming tasks, they have
+certainly reduced my entry barrier to \LaTeX{} programming and enabled me to
+develop this package with a significantly reduced effort. And, given the
+constraints of my abilities, the result is no doubt much better than it would
+be in their absence.
+
+Besides these more general acknowledgments, a number of people have
+contributed to \pkg{zref-clever}, whether they are aware of it or not.
+Suggestions, ideas, solutions to problems, bug reports or even encouragement
+were generously provided by: Ulrike Fischer, Frank Mittelbach, Phelype
+Oleinik, Jonathan P.\ Spratte, Enrico Gregorio, Steven B.\ Segletes,
+\texttt{@samcarter}, Alan Munn, Florent Rougon, and David Carlisle.
+
+If I have inadvertently left anyone off the list I apologize, and please let
+me know, so that I can correct the oversight.
+
+Thank you all very much!
+
+
+\section{Change history}
+
+A change log with relevant changes for each version, eventual upgrade
+instructions, and upcoming changes, is maintained in the package's repository,
+at \url{https://github.com/gusbrs/zref-clever/blob/main/CHANGELOG.md}. An
+archive of historical versions of the package is also kept at
+\url{https://github.com/gusbrs/zref-clever/releases}.
+
+\end{document}
diff --git a/support/TeX4ht/source/ChangeLog b/support/TeX4ht/source/ChangeLog
index 1a0fda7884..61d53293b0 100644
--- a/support/TeX4ht/source/ChangeLog
+++ b/support/TeX4ht/source/ChangeLog
@@ -1,3 +1,12 @@
+2021-11-23 Michal Hoftich <michal.h21@gmail.com>
+
+ * tex4ht-4ht.tex (tcolorbox.4ht): add destinations for \label to Tcolorbox
+ environments.
+ https://tex.stackexchange.com/a/623697/2891
+ * tex4ht-4ht.tex (latex.4ht): protect redefinitions of \( and \), so they
+ work correctly in sectioning commands with MathML.
+ https://github.com/michal-h21/make4ht/issues/52#issuecomment-976835368
+
2021-11-19 Michal Hoftich <michal.h21@gmail.com>
* tex4ht-mathjax.tex (mathjax-latex-4ht.4ht): use LaTeX 3 commands in
diff --git a/support/TeX4ht/source/tex4ht-4ht.tex b/support/TeX4ht/source/tex4ht-4ht.tex
index b929a45582..7336248518 100644
--- a/support/TeX4ht/source/tex4ht-4ht.tex
+++ b/support/TeX4ht/source/tex4ht-4ht.tex
@@ -1,4 +1,4 @@
-% $Id: tex4ht-4ht.tex 1009 2021-11-05 17:09:29Z michal_h21 $
+% $Id: tex4ht-4ht.tex 1014 2021-11-23 16:46:25Z michal_h21 $
% tex tex4ht-4ht or ht tex tex4ht-4ht
%
% Copyright 2009-2021 TeX Users Group
@@ -7487,8 +7487,8 @@ $$
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%55
\<latex,sty math del\><<<
- \def\({\leavevmode\st:math}
- \def\){\ed:math}
+ \protected\def\({\leavevmode\st:math}
+ \protected\def\){\ed:math}
\NewConfigure{()}[2]{\def\st:math{#1}\def\ed:math{#2}}
\def\[{\st:Math}
\def\]{\ed:Math}
@@ -7524,9 +7524,13 @@ $$
>>>
\<protect (...) math\><<<
-\pend:def\({\bgroup\let\a:mth|=\empty
- \let\b:mth|=\empty \let\c:mth|=\empty }%
-\append:def\){\egroup}%
+\let\orig:smath\(
+\let\orig:emath\)
+\protected\def\:tempa{\bgroup\let\a:mth\empty
+ \let\b:mth\empty \let\c:mth\empty\orig:smath}
+\let\(\:tempa
+\protected\def\:tempa{\orig:emath\egroup}
+\let\)\:tempa
>>>
\<protect [...] math\><<<
@@ -26728,7 +26732,7 @@ We need to use dvips driver with XeLaTeX
%%%%%%%%%%%%%%%%%%%%%%%
\<tcolorbox.4ht\><<<
% tcolorbox.4ht (|version), generated from |jobname.tex
-% Copyright 2020 TeX Users Group
+% Copyright 2020-2021 TeX Users Group
|<TeX4ht license text|>
% use custom counter that increments for every \tcolorbox
@@ -26748,6 +26752,7 @@ We need to use dvips driver with XeLaTeX
\a:tcolorbox%
% save label, if it is set
\ifdefined\tcolorbox:label:key%
+ \AnchorLabel% save cross-ref destination
\label{\tcolorbox:label:key}%
\fi%
% open title
diff --git a/support/latexmk/CHANGES b/support/latexmk/CHANGES
index bfccc07d41..224d0b5b64 100644
--- a/support/latexmk/CHANGES
+++ b/support/latexmk/CHANGES
@@ -779,7 +779,13 @@ From v. 4.74 to 4.74b
Turn back on default to report rc files read.
Add options -rc-report, -rc-report-, -dir_report, -dir_report-.
-From v. 4.74 to 4.74b
+From v. 4.74b to 4.75
For biber, add any dependency on configuration file.
When -time option used, report running times for all rules
+From v. 4.75 to 4.76
+ In fdb_latexmk file, sort generated file list by name.
+ If nothing is done in a rerun, don't do the unnecessary rewrite of fdb_latexmk file.
+ Improve some diagnostics.
+ Add /etc to list of locations for system rc files (with Unix-like OSs).
+
diff --git a/support/latexmk/INSTALL b/support/latexmk/INSTALL
index e4783d9cb8..32e5c5d4ef 100644
--- a/support/latexmk/INSTALL
+++ b/support/latexmk/INSTALL
@@ -1,6 +1,6 @@
INSTALLING latexmk
==================
- (Version 4.75, 21 Sep. 2021)
+ (Version 4.76, 20 Nov. 2021)
John Collins
Physics Department
diff --git a/support/latexmk/README b/support/latexmk/README
index 28d22b3f36..471564ac8a 100644
--- a/support/latexmk/README
+++ b/support/latexmk/README
@@ -1,4 +1,4 @@
-Latexmk, version 4.75, 21 Sep 2021
+Latexmk, version 4.76, 20 Nov 2021
---------------------------------
Latexmk completely automates the process of generating a LaTeX
@@ -64,7 +64,7 @@ NOTES:-
John Collins
---------------------------- "latexmk -h" ----------------------------
-Latexmk 4.75: Automatic LaTeX document generation routine
+Latexmk 4.76: Automatic LaTeX document generation routine
Usage: latexmk [latexmk_options] [filename ...]
diff --git a/support/latexmk/example_rcfiles/texinfo-latexmkrc b/support/latexmk/example_rcfiles/texinfo-latexmkrc
index 3a21a3c15d..0f84451485 100644
--- a/support/latexmk/example_rcfiles/texinfo-latexmkrc
+++ b/support/latexmk/example_rcfiles/texinfo-latexmkrc
@@ -1,5 +1,5 @@
# Modifications 2015 Sep 9-10, John Collins
-# Copyright 2014 Vincent Belaïche <vincent.b.1@hotmail.fr>
+# Copyright 2014 Vincent Belaïche <vincent.b.1@hotmail.fr>
# With the settings here, latexmk can be used to process texinfo files
# (typical extension .texi) to pdf files, including the making of
diff --git a/support/latexmk/latexmk.1 b/support/latexmk/latexmk.1
index 70c5614d40..50a39b39cb 100644
--- a/support/latexmk/latexmk.1
+++ b/support/latexmk/latexmk.1
@@ -1,4 +1,4 @@
-.TH LATEXMK 1 "21 September 2021" ""
+.TH LATEXMK 1 "20 November 2021" ""
.SH NAME
latexmk \- generate LaTeX document
.SH SYNOPSIS
@@ -1487,7 +1487,7 @@ are met.
The first is that \fIlatexmk\fR's \fI$allow_switch\fR configuration
variable is set to a non-zero value as it is by default. If this
variable is zero, a mismatch of filetypes in the compilation results
-in an erro.
+in an error.
The second condition for \fIlatexmk\fR to be able to handle a change
of output type is that no explicit requests for .dvi or .ps output
@@ -1524,21 +1524,22 @@ be configured and how.
read at startup in the following order:
.PP
1) The system RC file, if it exists.
- On a UNIX system, \fIlatexmk\fR searches for following places for its
-system RC file, in the following order, and reads the first it finds:
- "/opt/local/share/latexmk/LatexMk",
- "/usr/local/share/latexmk/LatexMk",
- "/usr/local/lib/latexmk/LatexMk".
- On a MS-Windows system it looks for "C:\\latexmk\\LatexMk".
+ On a UNIX system, \fIlatexmk\fR searches the following directories for a
+ system RC file, which may be named either "LatexMk" or "latexmkrc". The
+ directories are searched in the following order, and \fIlatexmk\fR uses
+ the first such file it finds (if any):
+ "/etc",
+ "/opt/local/share/latexmk",
+ "/usr/local/share/latexmk",
+ "/usr/local/lib/latexmk".
+ On a MS-Windows system it looks just in "C:\\latexmk".
On a cygwin system (i.e., a MS-Windows system in which Perl is
-that of cygwin), \fIlatexmk\fR reads the first it finds of
- "/cygdrive/c/latexmk/LatexMk",
- "/opt/local/share/latexmk/LatexMk",
- "/usr/local/share/latexmk/LatexMk",
- "/usr/local/lib/latexmk/LatexMk".
-
-In addition, it then tries the same set of locations, but with the
-file name replaced "LatexMk" replaced by "latexmkrc".
+that of cygwin), \fIlatexmk\fR looks in the directories
+ "/cygdrive/c/latexmk",
+ "/etc",
+ "/opt/local/share/latexmk",
+ "/usr/local/share/latexmk",
+ "/usr/local/lib/latexmk".
If the environment variable LATEXMKRCSYS is set, its value is used as
the name of the system RC file, instead of any of the above.
@@ -1716,7 +1717,7 @@ character, with suitable characters being those appropriate to UNIX
and MS-Windows, i.e., ':', '/' and '\\'. Note that if after
initialization, \fI$out_dir\fR is set, but \fI$aux_dir\fR is not set
(i.e., it is blank), then \fIlatexmk\fR sets \fI$aux_dir\fR to the
-same value \fI$out_dir\fR.
+same value \fI$out_dir\fR.
.TP
.B %Z
Name of directory for output files (see the configuration
@@ -1991,7 +1992,7 @@ The report has to be done per file, because of possible directory changes
for each file. In the simplest cases, the result is the same as originally
specified. In general, e.g., with an absolute directory specified, the
normalization helps performance and cleans up output to the screen. It also
-avoids situations where a file in the current directory is refered to by
+avoids situations where a file in the current directory is referred to by
different names, e.g., "file.aux" and "./file.aux", which can be annoying.
@@ -2133,7 +2134,7 @@ This operation is somewhat dangerous, and can have unintended
consequences, since the files to be deleted are determined from a file
created by *latex, which can contain erroneous
information. Therefore this variable is turned off by default, and
-then files to be deleted are restricted to those explictly specified
+then files to be deleted are restricted to those explicitly specified
by patterns configured in the variables \fIclean_ext\fR,
\fIclean_full_ext\fR, and \fI@generated_exts\fR, together with those
very standard cases that are hardwired into \fIlatexmk\fR (e.g., .log
@@ -2175,7 +2176,7 @@ equal to \fI$out_dir\fR. A normal situation is therefore that \fI$aux_dir\fR
equals \fI$out_dir\fR, which is the only case supported by
TeXLive, unlike MiKTeX.)
-The filenames specfied for a clean-up operation can refer not only to
+The filenames specified for a clean-up operation can refer not only to
regular files but also to directories. Directories are only deleted
if they are empty. An example of an application is to pythontex, which
creates files in a particular directory. You can arrange to remove
@@ -2200,7 +2201,7 @@ relative to the directory specified by \fI$out_dir\fR.
These variables specify commands that are executed at certain points
of compilations. One motivation for
-their existance is to allow very useful convenient visual indications of
+their existence is to allow very useful convenient visual indications of
compilation status even when the window receiving the screen output of
the compilation is hidden. This is particularly useful in
preview-continuous mode.
@@ -2581,7 +2582,7 @@ This creates a rule for files with extension \fI.eps\fR about lines to
ignore. The left-hand side is a \fIPerl\fR idiom for setting an item
in a hash. Note that the file extension is specified without a
period. The value, on the right-hand side, is a string containing a
-regular expresssion. (See documentation on \fIPerl\fR for how they
+regular expression. (See documentation on \fIPerl\fR for how they
are to be specified in general.) This particular regular expression
specifies that lines beginning with "%%CreationDate: " are to be
ignored in deciding whether a file of the given extension \fI.eps\fR
@@ -3543,8 +3544,8 @@ the cases I have tested.
\fBNote 2:\fR One case in which the quotes are important is when the
files are in a subdirectory and your operating system is Microsoft
Windows. Then the separator character for directory components can be
-either a forward slash '/' or Microsoft's more usual backward slash
-\'\\'. Forward slashes are generated by \fIlatexmk\fR, to maintain its
+either a forward slash '/' or Microsoft's more usual backward
+slash '\\'. Forward slashes are generated by \fIlatexmk\fR, to maintain its
sanity from software like MiKTeX that mixes both directory
separators; but their correct use normally requires quoted filenames.
(See a log file from a run of MiKTeX (at least in v. 2.9) for an
@@ -3995,7 +3996,7 @@ e-mail addresses are not written in their standard form to avoid being
harvested too easily.)
.SH AUTHOR
Current version, by John Collins
-(Version 4.75).
+(Version 4.76).
Report bugs etc to his e-mail (jcc8 at psu.edu).
Released version can be obtained from CTAN:
diff --git a/support/latexmk/latexmk.pdf b/support/latexmk/latexmk.pdf
index 5541a10daf..3f5563b53d 100644
--- a/support/latexmk/latexmk.pdf
+++ b/support/latexmk/latexmk.pdf
Binary files differ
diff --git a/support/latexmk/latexmk.pl b/support/latexmk/latexmk.pl
index b00aeba4a0..3836525c45 100755
--- a/support/latexmk/latexmk.pl
+++ b/support/latexmk/latexmk.pl
@@ -29,6 +29,15 @@ use warnings;
##
## Modification log from 14 Apr 2021 onwards in detail
##
+## 20 Nov 2021 John Collins Add /etc to list of locations for system rc files
+## 4 Nov 2021 John Collins Improve diagnostics when there's a mismatch of
+## destination file of rule between .fdb_latexmk
+## file and expectation.
+## 2 Nov 2021 John Collins Sort generated-file section by filename; it's
+## already done in file data secton.
+## Only write fdb_latexmk file if nothing has been
+## done. (Addition of $runs_total variable.)
+## V. 4.76.
## 23 Sep 2021 John Collins Option -time: times for all rules reported now
## 18 Sep 2021 John Collins For biber: parse blg file for config file use
## V. 4.75.
@@ -99,8 +108,8 @@ use warnings;
$my_name = 'latexmk';
$My_name = 'Latexmk';
-$version_num = '4.75';
-$version_details = "$My_name, John Collins, 21 September 2021";
+$version_num = '4.76';
+$version_details = "$My_name, John Collins, 20 November 2021";
use Config;
use File::Basename;
@@ -777,8 +786,6 @@ elsif ( $^O eq "cygwin" ) {
# NT executables.
$tmpdir = $ENV{TMPDIR} || $ENV{TEMP} || '.';
- # Which rc files did I read?
- @rc_files_read = ();
## List of possibilities for the system-wide initialization file.
## The first one found (if any) is used.
## We could stay with MSWin files here, since cygwin perl understands them
@@ -790,10 +797,11 @@ elsif ( $^O eq "cygwin" ) {
@rc_system_files = ();
foreach ( 'LatexMk', 'latexmkrc' ) {
push @rc_system_files,
- ( "/cygdrive/c/latexmk/$_",
- "/opt/local/share/latexmk/$_",
- "/usr/local/share/latexmk/$_",
- "/usr/local/lib/latexmk/$_" );
+ ( "/cygdrive/c/latexmk/$_",
+ "/etc/$_",
+ "/opt/local/share/latexmk/$_",
+ "/usr/local/share/latexmk/$_",
+ "/usr/local/lib/latexmk/$_" );
}
$search_path_separator = ';'; # Separator of elements in search_path
# This is tricky. The search_path_separator depends on the kind
@@ -842,14 +850,11 @@ else {
## List of possibilities for the system-wide initialization file.
## The first one found (if any) is used.
- ## Normally on a UNIX it will be in a subdirectory of /opt/local/share or
- ## /usr/local/share, depending on the local conventions.
- ## But /usr/local/lib/latexmk is put in the list for
- ## compatibility with older versions of latexmk.
@rc_system_files = ();
foreach ( 'LatexMk', 'latexmkrc' ) {
push @rc_system_files,
- ( "/opt/local/share/latexmk/$_",
+ ( "/etc/$_",
+ "/opt/local/share/latexmk/$_",
"/usr/local/share/latexmk/$_",
"/usr/local/lib/latexmk/$_" );
}
@@ -1527,8 +1532,10 @@ elsif ($HOME ne '') {
#==================================================
-# Options that are to be obeyed before rc files are read:
+# Which rc files did I read?
+@rc_files_read = ();
+# Options that are to be obeyed before rc files are read:
foreach $_ ( @ARGV )
{
if (/^-{1,2}norc$/ ) {
@@ -1561,7 +1568,7 @@ sub read_first_rc_file_in_list {
if ( $auto_rc_use ) {
# System rc file:
if (exists $ENV{LATEXMKRCSYS} ) {
- push @rc_system_files, $ENV{LATEXMKRCSYS};
+ unshift @rc_system_files, $ENV{LATEXMKRCSYS};
if ( !-e $ENV{LATEXMKRCSYS} ) {
warn "$My_name: you've specified a system rc file `$ENV{LATEXMKRCSYS}`\n",
" in environment variable LATEXMKRCSYS, but the file doesn't exist.\n",
@@ -2616,7 +2623,8 @@ if ($show_time) { show_timing();}
sub show_timing {
my $processing_time = processing_time() - $processing_time1;
- print @timings, "Accumulated processing time = $processing_time\n";
+ print @timings, "Accumulated processing time = $processing_time\n";
+ print "Number of rules run = ", 1+$#timings, "\n";
@timings = ();
$processing_time1 = processing_time();
}
@@ -6054,60 +6062,64 @@ LINE:
#************************************************************
sub rdb_read_set_rule {
+ # Makes some settings for rule from data as read from .fdb_latexmk.
# Rule context assumed. Implicit passing of $dest, $run_time, $check_time,
- # $in_name used as local variables in calling routine rdb_read;
+ # $in_name used as local variables in calling routine rdb_read.
+ #
if ($$Ptest_kind == 3) { $$Ptest_kind = 1; }
$$Prun_time = $run_time;
$$Pcheck_time = $check_time;
- # Deal with possibility that destination in fdb_latexmk has different name
- # than the default one. The only case that concerns us is where
- # the extension is changed (by \pdfoutput, e.g., in tex file). But
- # it is possible out and aux directories have been chosen differently,
- # and the user choice there MUST OVERRIDE the value in the fdb_latexmk file.
- if ($dest ne $$Pdest) {
- if (! $possible_primaries{$rule} ) {
- warn "$My_name: In reading rule '$rule' in '$in_name',\n",
- " name of destination file is not current one; I'll flag rule as out of date.\n";
- $$Pout_of_date = 10;
- }
- elsif ( ! rdb_is_active($rule) ) {
- warn "$My_name: In reading rule '$rule' in '$in_name',\n",
- " rule is not currently active.\n";
- # No fixup now. Causes to be analyzed:
- # Change of requested files: no action needed.
- # Obeying of metacommand: not implemented yet.
- }
- else {
- # Get here if rule is active and primary and destination is different
- warn "$My_name: In reading rule '$rule' in '$in_name',\n",
- " destination has different name than configured...\n";
- my ($oldbase, $oldpath, $oldext) = fileparseA( $dest );
- my ($newbase, $newpath, $newext) = fileparseA( $$Pdest );
- if ($oldext ne $newext) {
- if ( ! exists $allowed_output_ext{$oldext} ) {
- warn " Old extension '$oldext' not allowed.\n";
- $$Pout_of_date = 10;
- }
- else {
- warn " ===== CHANGING output type from '$newext' to '$oldext' in '$rule'\n";
- my $switch_error = switch_output( $rule, $oldext, $newext );
- if ($switch_error) {
- warn " I could not accommodate the changed output extension.\n",
- " That is either because the configuration does not allow it\n",
- " or because there is a conflict with implicit or explicit requested filetypes.\n",
- " (Typically that is about .dvi and/or .ps filetypes.)\n",
- "===> There may be subsequent warnings, which may or may not be ignorable.\n",
- "===> If necessary, clean out generated files and try again\n";
- }
- }
- }
- if ( ($oldbase ne $newbase) || ($oldpath ne $newpath) ) {
- # There are further issues (e.g., change of out_dir).
- # Need rerun to correct:
- $$Pout_of_date = 10;
- }
+ # Deal with possibility that destination file in fdb_latexmk from
+ # run differs from what is currently set. Often that just reflects a
+ # difference between the end result of the last run and what the user
+ # has requested for this run.
+ # 1. Diagnostics are given, in case that matters.
+ # 2. Generally it's only needed to keep the current destination, and to
+ # flag the rule as out-of-date.
+ # 3. But special treatmen is needed when the rule is a primary rule and
+ # only the extension of the destination file has changed.
+ if ($dest eq $$Pdest) { return; }
+ if ( ! rdb_is_active($rule) ) {
+ # A common cause: Change of requested files.
+ # No other causes known.
+ # So just do nothing.
+ return;
+ }
+ # Arrive here if rule is active and previous dest differs from current.
+ my ($oldbase, $oldpath, $oldext) = fileparseA( $dest );
+ my ($newbase, $newpath, $newext) = fileparseA( $$Pdest );
+ if ( ($oldext ne $newext)
+ && $possible_primaries{$rule}
+ && exists( $allowed_output_ext{$oldext} )
+ && ( $oldpath.$oldbase eq $newpath.$newbase )
+ )
+ {
+ # Change only in extension: A common cause: use of \pdfoutput in tex
+ # file, with conflict with requested compilation type. The old
+ # extension wins.
+ warn "$My_name: change in extension of output file from '$oldext' on previous run\n",
+ " to '$newext' for this run.\n",
+ " So I'll CHANGE the output type from '$newext' to '$oldext',\n",
+ " and make any necessary fixups.\n";
+ my $switch_error = switch_output( $rule, $oldext, $newext );
+ if ($switch_error) {
+ warn " I could not accommodate the changed output extension.\n",
+ " That is either because the configuration does not allow it\n",
+ " or because there is a conflict with implicit or explicit requested filetypes.\n",
+ " (Typically that is about .dvi and/or .ps filetypes.)\n",
+ "===> There may be subsequent warnings, which may or may not be ignorable.\n",
+ "===> If necessary, clean out generated files and try again\n";
}
+ return;
}
+ # All special cases now dealt with.
+ warn "$My_name: In reading file '$in_name' for state of files and rules on\n",
+ " previous run, I found that rule '$rule' had a destination file\n",
+ " $dest\n",
+ " that differs from the current destination file\n",
+ " $$Pdest\n",
+ " I'll use the current destination, and flag the rule as out of date.\n";
+ $$Pout_of_date = 10;
} #END rdb_read_set_rule
#************************************************************
@@ -6148,7 +6160,7 @@ sub rdb_write {
sub { print $out_handle " \"$file\" $$Ptime $$Psize $$Pmd5 \"$$Pfrom_rule\"\n"; }
);
print $out_handle " (generated)\n";
- foreach (keys %$PHdest) {
+ foreach (sort keys %$PHdest) {
print $out_handle " \"$_\"\n";
}
}
@@ -7317,6 +7329,7 @@ sub rdb_make {
local $failure = 0; # General accumulated error flag
local $missing_dvi_pdf = ''; # Did primary run fail to make its output file?
local $runs = 0;
+ local $runs_total = 0;
local $too_many_passes = 0;
local %rules_applied = ();
local $switched_primary_output = 0;
@@ -7405,7 +7418,9 @@ sub rdb_make {
} #End PASS
rdb_for_some( [@unusual_one_time], \&rdb_make1 );
- rdb_write( $fdb_name );
+
+ if ($runs_total > 0) { rdb_write( $fdb_name ); }
+ else { print "Nothing to do\n"; }
if ($#primary_warning_summary > -1) {
# N.B. $mult_defined, $bad_reference, $bad_character, $bad_citation also available here.
@@ -7596,6 +7611,7 @@ sub rdb_make1 {
$rules_applied{$rule} = 1;
$runs++;
+ $runs_total++;
$pass{$rule}++;
if ($bibtex_not_run > 0) {
diff --git a/support/latexmk/latexmk.txt b/support/latexmk/latexmk.txt
index 77a3898d21..53a9000985 100644
--- a/support/latexmk/latexmk.txt
+++ b/support/latexmk/latexmk.txt
@@ -61,7 +61,7 @@ DESCRIPTION
- 21 September 2021 1
+ 20 November 2021 1
@@ -127,7 +127,7 @@ LATEXMK OPTIONS AND ARGUMENTS ON COMMAND LINE
- 21 September 2021 2
+ 20 November 2021 2
@@ -193,7 +193,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 21 September 2021 3
+ 20 November 2021 3
@@ -259,7 +259,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 21 September 2021 4
+ 20 November 2021 4
@@ -325,7 +325,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 21 September 2021 5
+ 20 November 2021 5
@@ -391,7 +391,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 21 September 2021 6
+ 20 November 2021 6
@@ -457,7 +457,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 21 September 2021 7
+ 20 November 2021 7
@@ -523,7 +523,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 21 September 2021 8
+ 20 November 2021 8
@@ -589,7 +589,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 21 September 2021 9
+ 20 November 2021 9
@@ -655,7 +655,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 21 September 2021 10
+ 20 November 2021 10
@@ -721,7 +721,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 21 September 2021 11
+ 20 November 2021 11
@@ -787,7 +787,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 21 September 2021 12
+ 20 November 2021 12
@@ -853,7 +853,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 21 September 2021 13
+ 20 November 2021 13
@@ -919,7 +919,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 21 September 2021 14
+ 20 November 2021 14
@@ -985,7 +985,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 21 September 2021 15
+ 20 November 2021 15
@@ -1051,7 +1051,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 21 September 2021 16
+ 20 November 2021 16
@@ -1117,7 +1117,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 21 September 2021 17
+ 20 November 2021 17
@@ -1183,7 +1183,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 21 September 2021 18
+ 20 November 2021 18
@@ -1249,7 +1249,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 21 September 2021 19
+ 20 November 2021 19
@@ -1315,7 +1315,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 21 September 2021 20
+ 20 November 2021 20
@@ -1381,7 +1381,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 21 September 2021 21
+ 20 November 2021 21
@@ -1447,7 +1447,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 21 September 2021 22
+ 20 November 2021 22
@@ -1513,7 +1513,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 21 September 2021 23
+ 20 November 2021 23
@@ -1579,7 +1579,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 21 September 2021 24
+ 20 November 2021 24
@@ -1645,7 +1645,7 @@ DEALING WITH ERRORS, PROBLEMS, ETC
- 21 September 2021 25
+ 20 November 2021 25
@@ -1711,7 +1711,7 @@ ALLOWING FOR CHANGE OF OUTPUT FILE TYPE
- 21 September 2021 26
+ 20 November 2021 26
@@ -1751,7 +1751,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
The first is that latexmk's $allow_switch configuration variable is set
to a non-zero value as it is by default. If this variable is zero, a
- mismatch of filetypes in the compilation results in an erro.
+ mismatch of filetypes in the compilation results in an error.
The second condition for latexmk to be able to handle a change of out-
put type is that no explicit requests for .dvi or .ps output files are
@@ -1777,7 +1777,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 21 September 2021 27
+ 20 November 2021 27
@@ -1798,52 +1798,52 @@ CONFIGURATION/INITIALIZATION (RC) FILES
startup in the following order:
1) The system RC file, if it exists.
- On a UNIX system, latexmk searches for following places for its sys-
- tem RC file, in the following order, and reads the first it finds:
- "/opt/local/share/latexmk/LatexMk",
- "/usr/local/share/latexmk/LatexMk",
- "/usr/local/lib/latexmk/LatexMk".
- On a MS-Windows system it looks for "C:\latexmk\LatexMk".
+ On a UNIX system, latexmk searches the following directories for a
+ system RC file, which may be named either "LatexMk" or "latexmkrc".
+ The
+ directories are searched in the following order, and latexmk uses
+ the first such file it finds (if any):
+ "/etc",
+ "/opt/local/share/latexmk",
+ "/usr/local/share/latexmk",
+ "/usr/local/lib/latexmk".
+ On a MS-Windows system it looks just in "C:\latexmk".
On a cygwin system (i.e., a MS-Windows system in which Perl is that
- of cygwin), latexmk reads the first it finds of
- "/cygdrive/c/latexmk/LatexMk",
- "/opt/local/share/latexmk/LatexMk",
- "/usr/local/share/latexmk/LatexMk",
- "/usr/local/lib/latexmk/LatexMk".
-
- In addition, it then tries the same set of locations, but with the file
- name replaced "LatexMk" replaced by "latexmkrc".
-
- If the environment variable LATEXMKRCSYS is set, its value is used as
+ of cygwin), latexmk looks in the directories
+ "/cygdrive/c/latexmk",
+ "/etc",
+ "/opt/local/share/latexmk",
+ "/usr/local/share/latexmk",
+ "/usr/local/lib/latexmk".
+
+ If the environment variable LATEXMKRCSYS is set, its value is used as
the name of the system RC file, instead of any of the above.
2) The user's RC file, if it exists. This can be in one of two places.
- The traditional one is ".latexmkrc" in the user's home directory. The
- other possibility is "latexmk/latexmkrc" in the user's XDG configura-
- tion home directory. The actual file read is the first of "$XDG_CON-
- FIG_HOME/latexmk/latexmkrc" or "$HOME/.latexmkrc" which exists. (See
+ The traditional one is ".latexmkrc" in the user's home directory. The
+ other possibility is "latexmk/latexmkrc" in the user's XDG configura-
+ tion home directory. The actual file read is the first of "$XDG_CON-
+ FIG_HOME/latexmk/latexmkrc" or "$HOME/.latexmkrc" which exists. (See
https://specifications.freedesktop.org/basedir-spec/basedir-spec-lat-
est.html for details on the XDG Base Directory Specification.)
- Here $HOME is the user's home directory. [Latexmk determines the
- user's home directory as follows: It is the value of the environment
- variable HOME, if this variable exists, which normally is the case on
- UNIX-like systems (including Linux and OS-X). Otherwise the environ-
- ment variable USERPROFILE is used, if it exists, which normally is the
+ Here $HOME is the user's home directory. [Latexmk determines the
+ user's home directory as follows: It is the value of the environment
+ variable HOME, if this variable exists, which normally is the case on
+ UNIX-like systems (including Linux and OS-X). Otherwise the environ-
+ ment variable USERPROFILE is used, if it exists, which normally is the
case on MS-Windows systems. Otherwise a blank string is used instead of
$HOME, in which case latexmk does not look for an RC file in it.]
- $XDG_CONFIG_HOME is the value of the environment variable XDG_CON-
- FIG_HOME if it exists. If this environment variable does not exist,
- but $HOME is non-blank, then $XDG_CONFIG_HOME is set to the default
- value of $HOME/.config. Otherwise $XDG_CONFIG_HOME is blank, and la-
+ $XDG_CONFIG_HOME is the value of the environment variable XDG_CON-
+ FIG_HOME if it exists. If this environment variable does not exist,
+ but $HOME is non-blank, then $XDG_CONFIG_HOME is set to the default
+ value of $HOME/.config. Otherwise $XDG_CONFIG_HOME is blank, and la-
texmk does not look for an RC file under it.
-
-
- 21 September 2021 28
+ 20 November 2021 28
@@ -1852,35 +1852,35 @@ CONFIGURATION/INITIALIZATION (RC) FILES
LATEXMK(1) General Commands Manual LATEXMK(1)
- 3) The RC file in the current working directory. This file can be
- named either "latexmkrc" or ".latexmkrc", and the first of these to be
+ 3) The RC file in the current working directory. This file can be
+ named either "latexmkrc" or ".latexmkrc", and the first of these to be
found is used, if any.
4) Any RC file(s) specified on the command line with the -r option.
Each RC file is a sequence of Perl commands. Naturally, a user can use
- this in creative ways. But for most purposes, one simply uses a se-
+ this in creative ways. But for most purposes, one simply uses a se-
quence of assignment statements that override some of the built-in set-
- tings of Latexmk. Straightforward cases can be handled without knowl-
- edge of the Perl language by using the examples in this document as
+ tings of Latexmk. Straightforward cases can be handled without knowl-
+ edge of the Perl language by using the examples in this document as
templates. Comment lines are introduced by the "#" character.
- Note that command line options are obeyed in the order in which they
+ Note that command line options are obeyed in the order in which they
are written; thus any RC file specified on the command line with the -r
- option can override previous options but can be itself overridden by
- later options on the command line. There is also the -e option, which
+ option can override previous options but can be itself overridden by
+ later options on the command line. There is also the -e option, which
allows initialization code to be specified in latexmk's command line.
For possible examples of code for in an RC file, see the directory ex-
- ample_rcfiles in the distribution of latexmk (e.g., at http://mir-
+ ample_rcfiles in the distribution of latexmk (e.g., at http://mir-
ror.ctan.org/support/latexmk/example_rcfiles).
HOW TO SET VARIABLES IN INITIALIZATION FILES
- The important variables that can be configured are described in the
- section "List of configuration variables usable in initialization
- files". (See the earlier section "Configuration/Initialization (rc)
- Files" for the files where the configurations are done.) Syntax for
+ The important variables that can be configured are described in the
+ section "List of configuration variables usable in initialization
+ files". (See the earlier section "Configuration/Initialization (rc)
+ Files" for the files where the configurations are done.) Syntax for
setting these variables is of the following forms:
$bibtex = 'bibtex %O %S';
@@ -1893,23 +1893,23 @@ HOW TO SET VARIABLES IN INITIALIZATION FILES
@default_files = ('paper', 'paper1');
- for the setting of an array of strings. It is possible to append an
+ for the setting of an array of strings. It is possible to append an
item to an array variable as follows:
push @default_files, 'paper2';
- Note that simple "scalar" variables have names that begin with a $
+ Note that simple "scalar" variables have names that begin with a $
character and array variables have names that begin with a @ character.
Each statement ends with a semicolon.
- Strings should be enclosed in single quotes. (You could use double
- quotes, as in many programming languages. But then the Perl program-
- ming language brings into play some special rules for interpolating
- variables into strings. People not fluent in Perl will want to avoid
+ Strings should be enclosed in single quotes. (You could use double
+ quotes, as in many programming languages. But then the Perl program-
+ ming language brings into play some special rules for interpolating
+ variables into strings. People not fluent in Perl will want to avoid
- 21 September 2021 29
+ 20 November 2021 29
@@ -1920,33 +1920,33 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
these complications.)
- You can do much more complicated things, but for this you will need to
+ You can do much more complicated things, but for this you will need to
consult a manual for the Perl programming language.
FORMAT OF COMMAND SPECIFICATIONS
- Some of the variables set the commands that latexmk uses for carrying
- out its work, for example to generate a .dvi file from a .tex file or
- to view a postscript file. This section describes some important fea-
+ Some of the variables set the commands that latexmk uses for carrying
+ out its work, for example to generate a .dvi file from a .tex file or
+ to view a postscript file. This section describes some important fea-
tures of how the commands are specified. (Note that some of the possi-
- bilities listed here do not apply to the $kpsewhich variable; see its
+ bilities listed here do not apply to the $kpsewhich variable; see its
documentation.)
Placeholders: Supposed you wanted latexmk to use the command elatex in
- place of the regular latex command, and suppose moreover that you
- wanted to give it the option "--shell-escape". You could do this by
+ place of the regular latex command, and suppose moreover that you
+ wanted to give it the option "--shell-escape". You could do this by
the following setting:
$latex = 'elatex --shell-escape %O %S';
- The two items starting with the % character are placeholders. These
- are substituted by appropriate values before the command is run. Thus
- %S will be replaced by the source file that elatex will be applied to,
- and %O will be replaced by any options that latexmk has decided to use
+ The two items starting with the % character are placeholders. These
+ are substituted by appropriate values before the command is run. Thus
+ %S will be replaced by the source file that elatex will be applied to,
+ and %O will be replaced by any options that latexmk has decided to use
for this command. (E.g., if you used the -silent option in the invoca-
- tion of latexmk, it results in the replacement of %O by "-interac-
+ tion of latexmk, it results in the replacement of %O by "-interac-
tion=batchmode".)
The available placeholders are:
@@ -1955,27 +1955,27 @@ FORMAT OF COMMAND SPECIFICATIONS
the setting of a jobname by the -jobname option or the $jobname
configuration value.
- %B base of filename for current command. E.g., if a postscript
- file document.ps is being made from the dvi file document.dvi,
+ %B base of filename for current command. E.g., if a postscript
+ file document.ps is being made from the dvi file document.dvi,
then the basename is document.
- %D destination file (e.g., the name of the postscript file when
+ %D destination file (e.g., the name of the postscript file when
converting a dvi file to postscript).
%O options
- %P If the variable $pre_tex_code is non-empty, then %P is substi-
- tuted by the contents of $pre_tex_code followed by \in-
- put{SOURCE}, where SOURCE stands for the name of the source
+ %P If the variable $pre_tex_code is non-empty, then %P is substi-
+ tuted by the contents of $pre_tex_code followed by \in-
+ put{SOURCE}, where SOURCE stands for the name of the source
file. Appropriate quoting is done. This enables TeX code to be
- passed to one of the *latex engines to be executed before the
+ passed to one of the *latex engines to be executed before the
source file is read.
- If the variable $pre_tex_code is the empty string, then %P is
+ If the variable $pre_tex_code is the empty string, then %P is
- 21 September 2021 30
+ 20 November 2021 30
@@ -1988,60 +1988,60 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
%R root filename. This is the base name for the main tex file.
- By default this is the basename of the main tex file. However
- the value can be changed by the use of the -jobname option or
+ By default this is the basename of the main tex file. However
+ the value can be changed by the use of the -jobname option or
the $jobname configuration variable.
- %S source file (e.g., the name of the dvi file when converting a
+ %S source file (e.g., the name of the dvi file when converting a
.dvi file to ps).
%T The name of the primary tex file.
- %U If the variable $pre_tex_code is non-empty, then its value is
- substituted for %U (appropriately quoted). Otherwise it is re-
+ %U If the variable $pre_tex_code is non-empty, then its value is
+ substituted for %U (appropriately quoted). Otherwise it is re-
placed by a null string.
%Y Name of directory for auxiliary output files (see the configura-
tion variable $aux_dir). A directory separation character ('/')
is appended if $aux_dir is non-empty and does not end in a suit-
able character, with suitable characters being those appropriate
- to UNIX and MS-Windows, i.e., ':', '/' and '\'. Note that if
- after initialization, $out_dir is set, but $aux_dir is not set
- (i.e., it is blank), then latexmk sets $aux_dir to the same
+ to UNIX and MS-Windows, i.e., ':', '/' and '\'. Note that if
+ after initialization, $out_dir is set, but $aux_dir is not set
+ (i.e., it is blank), then latexmk sets $aux_dir to the same
value $out_dir.
- %Z Name of directory for output files (see the configuration vari-
- able $out_dir). A directory separation character ('/') is ap-
- pended if $out_dir is non-empty and does not end in a suitable
- character, with suitable characters being those appropriate to
+ %Z Name of directory for output files (see the configuration vari-
+ able $out_dir). A directory separation character ('/') is ap-
+ pended if $out_dir is non-empty and does not end in a suitable
+ character, with suitable characters being those appropriate to
UNIX and MS-Windows, i.e., ':', '/' and '\'.
- If for some reason you need a literal % character in your string not
+ If for some reason you need a literal % character in your string not
subject to the above rules, use "%%".
- Appropriate quoting will be applied to the filename substitutions, so
- you mustn't supply them yourself even if the names of your files have
+ Appropriate quoting will be applied to the filename substitutions, so
+ you mustn't supply them yourself even if the names of your files have
spaces in them. (But if your TeX filenames have spaces in them, beware
- that some older versions of the TeX program cannot correctly handle
- filenames containing spaces.) In case latexmk's quoting does not work
- correctly on your system, you can turn it off -- see the documentation
+ that some older versions of the TeX program cannot correctly handle
+ filenames containing spaces.) In case latexmk's quoting does not work
+ correctly on your system, you can turn it off -- see the documentation
for the variable $quote_filenames.
- See the default values in the section "List of configuration variables
+ See the default values in the section "List of configuration variables
usable in initialization files" for what is normally the most appropri-
ate usage.
If you omit to supply any placeholders whatever in the specification of
- a command, latexmk will supply what its author thinks are appropriate
+ a command, latexmk will supply what its author thinks are appropriate
defaults. This gives compatibility with configuration files for previ-
ous versions of latexmk, which didn't use placeholders.
- "Detaching" a command: Normally when latexmk runs a command, it waits
+ "Detaching" a command: Normally when latexmk runs a command, it waits
for the command to run to completion. This is appropriate for commands
- 21 September 2021 31
+ 20 November 2021 31
@@ -2051,24 +2051,24 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
like latex, of course. But for previewers, the command should normally
- run detached, so that latexmk gets the previewer running and then re-
- turns to its next task (or exits if there is nothing else to do). To
- achieve this effect of detaching a command, you need to precede the
+ run detached, so that latexmk gets the previewer running and then re-
+ turns to its next task (or exits if there is nothing else to do). To
+ achieve this effect of detaching a command, you need to precede the
command name with "start ", as in
$dvi_previewer = 'start xdvi %O %S';
- This will be translated to whatever is appropriate for your operating
+ This will be translated to whatever is appropriate for your operating
system.
Notes: (1) In some circumstances, latexmk will always run a command de-
- tached. This is the case for a previewer in preview continuous mode,
- since otherwise previewing continuously makes no sense. (2) This pre-
- cludes the possibility of running a command named start. (3) If the
- word start occurs more than once at the beginning of the command
- string, that is equivalent to having just one. (4) Under cygwin, some
- complications happen, since cygwin amounts to a complicated merging of
- UNIX and MS-Windows. See the source code for how I've handled the
+ tached. This is the case for a previewer in preview continuous mode,
+ since otherwise previewing continuously makes no sense. (2) This pre-
+ cludes the possibility of running a command named start. (3) If the
+ word start occurs more than once at the beginning of the command
+ string, that is equivalent to having just one. (4) Under cygwin, some
+ complications happen, since cygwin amounts to a complicated merging of
+ UNIX and MS-Windows. See the source code for how I've handled the
problem.
Command names containing spaces: Under MS-Windows it is common that the
@@ -2080,26 +2080,26 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
%S';
$pdf_previewer = 'start "c:/Program Files/SumatraPDF/Suma-
traPDF.exe" %O %S';
- $pdf_previewer = 'start "c:/Program Files/SumatraPDF (x86)/Suma-
+ $pdf_previewer = 'start "c:/Program Files/SumatraPDF (x86)/Suma-
traPDF.exe" %O %S';
- (Note about the above example: Under MS-Windows forward slashes are
+ (Note about the above example: Under MS-Windows forward slashes are
equivalent to backslashes in a filename under almost all circumstances,
- provided that the filename is inside double quotes. It is easier to
+ provided that the filename is inside double quotes. It is easier to
use forward slashes in examples like the one above, since then one does
- not have to worry about the rules for dealing with forward slashes in
+ not have to worry about the rules for dealing with forward slashes in
strings in the Perl language.)
- Command names under Cygwin: If latexmk is executed by Cygwin's Perl,
+ Command names under Cygwin: If latexmk is executed by Cygwin's Perl,
be particularly certain that pathnames in commands have forward slashes
- not the usual backslashes for the separator of pathname components.
- See the above examples. Backslashes often get misinterpreted by the
+ not the usual backslashes for the separator of pathname components.
+ See the above examples. Backslashes often get misinterpreted by the
Unix shell used by Cygwin's Perl to execute external commands. Forward
slashes don't suffer from this problem, and (when quoted, as above) are
equally acceptable to MS-Windows.
- Using MS-Windows file associations: A useful trick under modern ver-
+ Using MS-Windows file associations: A useful trick under modern ver-
sions of MS-Windows (e.g., WinXP) is to use just the command 'start' by
itself:
@@ -2107,7 +2107,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 21 September 2021 32
+ 20 November 2021 32
@@ -2117,9 +2117,9 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
Under MS-Windows, this will cause to be run whatever program the system
- has associated with dvi files. (The same applies for a postscript
+ has associated with dvi files. (The same applies for a postscript
viewer and a pdf viewer.) But note that this trick is not always suit-
- able for the pdf previwer, if your system has acroread for the default
+ able for the pdf previwer, if your system has acroread for the default
pdf viewer. As explained elsewhere, acroread under MS-Windows does not
work well with latex and latexmk, because acroread locks the pdf file.
@@ -2128,18 +2128,18 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$lpr = 'NONE lpr';
- This typically is used when an appropriate command does not exist on
+ This typically is used when an appropriate command does not exist on
your system. The string after the "NONE" is effectively a comment.
Options to commands: Setting the name of a command can be used not only
for changing the name of the command called, but also to add options to
- command. Suppose you want latexmk to use latex with source specials
- enabled. Then you might use the following line in an initialization
+ command. Suppose you want latexmk to use latex with source specials
+ enabled. Then you might use the following line in an initialization
file:
$latex = 'latex --src-specials %O %S';
- Running a subroutine instead of an external command: Use a specifica-
+ Running a subroutine instead of an external command: Use a specifica-
tion starting with "internal", as in
$latex = 'internal mylatex %O %S';
@@ -2149,31 +2149,31 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
return system 'latex', @args;
}
- For some of the more exotic possibilities that then become available,
- see the section "ADVANCED CONFIGURATION: Some extra resources and ad-
- vanced tricks". Also see some of the examples in the directory exam-
+ For some of the more exotic possibilities that then become available,
+ see the section "ADVANCED CONFIGURATION: Some extra resources and ad-
+ vanced tricks". Also see some of the examples in the directory exam-
ple_rcfiles in the latexmk distribution.
- Advanced tricks: Normally one specifies a single command for the com-
- mands invoked by latexmk. Naturally, if there is some complicated ad-
- ditional processing you need to do in your special situation, you can
+ Advanced tricks: Normally one specifies a single command for the com-
+ mands invoked by latexmk. Naturally, if there is some complicated ad-
+ ditional processing you need to do in your special situation, you can
write a script (or batch file) to do the processing, and then configure
latexmk to use your script in place of the standard program.
- You can also use a Perl subroutine instead of a script -- see above.
+ You can also use a Perl subroutine instead of a script -- see above.
This is generally the most flexible and portable solution.
It is also possible to configure latexmk to run multiple commands. For
- example, if when running pdflatex to generate a pdf file from a tex
+ example, if when running pdflatex to generate a pdf file from a tex
file you need to run another program after pdflatex to perform some ex-
tra processing, you could do something like:
- $pdflatex = 'pdflatex --shell-escape %O %S; pst2pdf_for_latexmk
+ $pdflatex = 'pdflatex --shell-escape %O %S; pst2pdf_for_latexmk
%B';
- 21 September 2021 33
+ 20 November 2021 33
@@ -2182,8 +2182,8 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- This definition assumes you are using a UNIX-like system (which in-
- cludes Linux and OS-X), so that the two commands to be run are sepa-
+ This definition assumes you are using a UNIX-like system (which in-
+ cludes Linux and OS-X), so that the two commands to be run are sepa-
rated by the semicolon in the middle of the string.
If you are using MS-Windows, you would replace the above line by
@@ -2191,36 +2191,36 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$pdflatex = 'cmd /c pdflatex --shell-escape %O %S'
. '&& pst2pdf_for_latexmk %B';
- Here, the UNIX command separator ; is replaced by &&. In addition,
+ Here, the UNIX command separator ; is replaced by &&. In addition,
there is a problem that some versions of Perl on MS-Windows do not obey
- the command separator; this problem is overcome by explicitly invoking
+ the command separator; this problem is overcome by explicitly invoking
the MS-Windows command-line processor cmd.exe.
LIST OF CONFIGURATION VARIABLES USABLE IN INITIALIZATION FILES
- In this section are specified the variables whose values can be ad-
- justed to configure latexmk. (See the earlier section "Configura-
- tion/Initialization (rc) Files" for the files where the configurations
+ In this section are specified the variables whose values can be ad-
+ justed to configure latexmk. (See the earlier section "Configura-
+ tion/Initialization (rc) Files" for the files where the configurations
are done.)
Default values are indicated in brackets. Note that for variables that
- are boolean in character, concerning whether latexmk does or does not
- behave in a certain way, a non-zero value, normally 1, indicates true,
- i.e., the behavior occurs, while a zero value indicates a false value,
+ are boolean in character, concerning whether latexmk does or does not
+ behave in a certain way, a non-zero value, normally 1, indicates true,
+ i.e., the behavior occurs, while a zero value indicates a false value,
i.e., the behavior does not occur.
$allow_switch [1]
- This controls what happens when the output extension of latex,
- pdflatex, lualatex or xelatex differs from what is expected.
+ This controls what happens when the output extension of latex,
+ pdflatex, lualatex or xelatex differs from what is expected.
(The possible extensions are .dvi, .pdf, .xdv.) This can happen
- with the use of the \pdfoutput macro in a document compiled un-
- der latex or pdflatex, or with the use of the \outputmode macro
+ with the use of the \pdfoutput macro in a document compiled un-
+ der latex or pdflatex, or with the use of the \outputmode macro
under lualatex. It can also happen with certain kinds of incor-
rect configuration.
- In such a case, latexmk can appropriately adjust its network of
+ In such a case, latexmk can appropriately adjust its network of
rules. The adjustment is made if $allow_switch is on, and if no
request for a dvi or ps file has been made.
@@ -2228,18 +2228,18 @@ LIST OF CONFIGURATION VARIABLES USABLE IN INITIALIZATION FILES
$always_view_file_via_temporary [0]
- Whether .ps and .pdf files are initially to be made in a tempo-
- rary directory and then moved to the final location. (This ap-
+ Whether .ps and .pdf files are initially to be made in a tempo-
+ rary directory and then moved to the final location. (This ap-
plies to dvips, dvipdf, and ps2pdf operations, and the filtering
operators on .dvi and .ps files. It does not apply to pdflatex,
- unfortunately, since pdflatex provides no way of specifying a
+ unfortunately, since pdflatex provides no way of specifying a
chosen name for the output file.)
This use of a temporary file solves a problem that the making of
- 21 September 2021 34
+ 20 November 2021 34
@@ -2254,58 +2254,58 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
which can cause havoc.
See the $pvc_view_file_via_temporary variable for a setting that
- applies only if preview-continuous mode (-pvc option) is used.
+ applies only if preview-continuous mode (-pvc option) is used.
See $tmpdir for the setting of the directory where the temporary
file is created.
$analyze_input_log_always [1]
- After a run of latex (etc), always analyze .log for input files
- in the <...> and (...) constructions. Otherwise, only do the
+ After a run of latex (etc), always analyze .log for input files
+ in the <...> and (...) constructions. Otherwise, only do the
analysis when fls file doesn't exist or is out of date.
- Under normal circumstances, the data in the fls file is reli-
+ Under normal circumstances, the data in the fls file is reli-
able, and the test of the log file gets lots of false positives;
- usually $analyze_input_log_always is best set to zero. But the
- test of the log file is needed at least in the following situa-
- tion: When a user needs to persuade latexmk that a certain file
- is a source file, and latexmk doesn't otherwise find it. Then
- the user can write code that causes a line with (...) to be
- written to log file. One important case is for lualatex, which
- doesn't always generate lines in the .fls file for input lua
- files. (The situation with lualatex is HIGHLY version depen-
- dent, e.g., there was a big change between TeXLive 2016 and
+ usually $analyze_input_log_always is best set to zero. But the
+ test of the log file is needed at least in the following situa-
+ tion: When a user needs to persuade latexmk that a certain file
+ is a source file, and latexmk doesn't otherwise find it. Then
+ the user can write code that causes a line with (...) to be
+ written to log file. One important case is for lualatex, which
+ doesn't always generate lines in the .fls file for input lua
+ files. (The situation with lualatex is HIGHLY version depen-
+ dent, e.g., there was a big change between TeXLive 2016 and
TeXLive 2017.)
- To keep backward compatibility with older versions of latexmk,
+ To keep backward compatibility with older versions of latexmk,
the default is to set $analyze_input_log_always to 1.
$auto_rc_use [1]
- Whether to automatically read the standard initialization (rc)
+ Whether to automatically read the standard initialization (rc)
files, which are the system RC file, the user's RC file, and the
RC file in the current directory. The command line option -norc
- can be used to turn this setting off. Each RC file could also
- turn this setting off, i.e., it could set $auto_rc_use to zero
+ can be used to turn this setting off. Each RC file could also
+ turn this setting off, i.e., it could set $auto_rc_use to zero
to prevent automatic reading of the later RC files.
- This variable does not affect the reading of RC files specified
+ This variable does not affect the reading of RC files specified
on the command line by the -r option.
$aux_dir [""]
The directory in which auxiliary files (aux, log, etc) are to be
- written by a run of *latex. If this variable is not set, but
- $out_dir is set, then $aux_dir is set to $out_dir, which is the
+ written by a run of *latex. If this variable is not set, but
+ $out_dir is set, then $aux_dir is set to $out_dir, which is the
directory to which general output files are to be written.
- Important note: The effect of $aux_dir, if different from
+ Important note: The effect of $aux_dir, if different from
$out_dir, is achieved by giving *latex the -aux-directory. Cur-
- rently (Dec. 2011 and later) this only works on the MiKTeX
+ rently (Dec. 2011 and later) this only works on the MiKTeX
- 21 September 2021 35
+ 20 November 2021 35
@@ -2319,33 +2319,33 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
See also the documentation of $out_dir for some complications on
what directory names are suitable.
- If you also use the -cd option, and $out_dir (or $aux_dir) con-
- tains a relative path, then the path is interpreted relative to
+ If you also use the -cd option, and $out_dir (or $aux_dir) con-
+ tains a relative path, then the path is interpreted relative to
the document directory.
$aux_out_dir_report [0]
- For each .tex file processed, list the settings for aux and out
- directories, after they have been normalized from the settings
+ For each .tex file processed, list the settings for aux and out
+ directories, after they have been normalized from the settings
specified during initialization.
This report gives a reminder of where to look for output.
- The report has to be done per file, because of possible direc-
- tory changes for each file. In the simplest cases, the result
- is the same as originally specified. In general, e.g., with an
- absolute directory specified, the normalization helps perfor-
- mance and cleans up output to the screen. It also avoids situa-
- tions where a file in the current directory is refered to by
+ The report has to be done per file, because of possible direc-
+ tory changes for each file. In the simplest cases, the result
+ is the same as originally specified. In general, e.g., with an
+ absolute directory specified, the normalization helps perfor-
+ mance and cleans up output to the screen. It also avoids situa-
+ tions where a file in the current directory is referred to by
different names, e.g., "file.aux" and "./file.aux", which can be
annoying.
$banner [0]
- If nonzero, the banner message is printed across each page when
- converting the dvi file to postscript. Without modifying the
- variable $banner_message, this is equivalent to specifying the
+ If nonzero, the banner message is printed across each page when
+ converting the dvi file to postscript. Without modifying the
+ variable $banner_message, this is equivalent to specifying the
-d option.
Note that if $banner is nonzero, the $postscript_mode is assumed
@@ -2354,7 +2354,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$banner_intensity [0.95]
Equivalent to the -bi option, this is a decimal number between 0
- and 1 that specifies how dark to print the banner message. 0 is
+ and 1 that specifies how dark to print the banner message. 0 is
black, 1 is white. The default is just right if your toner car-
tridge isn't running too low.
@@ -2363,15 +2363,15 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
dvi file to postscript. This is equivalent to the -bm option.
$banner_scale [220.0]
- A decimal number that specifies how large the banner message
- will be printed. Experimentation is necessary to get the right
- scale for your message, as a rule of thumb the scale should be
- about equal to 1100 divided by the number of characters in the
- message. The Default is just right for 5 character messages.
+ A decimal number that specifies how large the banner message
+ will be printed. Experimentation is necessary to get the right
+ scale for your message, as a rule of thumb the scale should be
+ about equal to 1100 divided by the number of characters in the
+ message. The Default is just right for 5 character messages.
- 21 September 2021 36
+ 20 November 2021 36
@@ -2383,11 +2383,11 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
This is equivalent to the -bs option.
@BIBINPUTS
- This is an array variable, now mostly obsolete, that specifies
- directories where latexmk should look for .bib files. By de-
- fault it is set from the BIBINPUTS environment variable of the
- operating system. If that environment variable is not set, a
- single element list consisting of the current directory is set.
+ This is an array variable, now mostly obsolete, that specifies
+ directories where latexmk should look for .bib files. By de-
+ fault it is set from the BIBINPUTS environment variable of the
+ operating system. If that environment variable is not set, a
+ single element list consisting of the current directory is set.
The format of the directory names depends on your operating sys-
tem, of course. Examples for setting this variable are:
@@ -2397,47 +2397,47 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
@BIBINPUTS = ( ".", "//server/bibfiles" );
@BIBINPUTS = ( ".", "/usr/local/texmf/bibtex/bib" );
- Note that under MS Windows, either a forward slash "/" or a
- backward slash "\" can be used to separate pathname components,
- so the first two and the second two examples are equivalent.
- Each backward slash should be doubled to avoid running afoul of
+ Note that under MS Windows, either a forward slash "/" or a
+ backward slash "\" can be used to separate pathname components,
+ so the first two and the second two examples are equivalent.
+ Each backward slash should be doubled to avoid running afoul of
Perl's rules for writing strings.
Important note: This variable is now mostly obsolete in the cur-
rent version of latexmk, since it has a better method of search-
- ing for files using the kpsewhich command. However, if your
- system is an unusual one without the kpsewhich command, you may
+ ing for files using the kpsewhich command. However, if your
+ system is an unusual one without the kpsewhich command, you may
need to set the variable @BIBINPUTS.
$biber ["biber %O %S"]
The biber processing program.
$biber_silent_switch ["--onlylog"]
- Switch(es) for the biber processing program when silent mode is
+ Switch(es) for the biber processing program when silent mode is
on.
$bibtex ["bibtex %O %S"]
The BibTeX processing program.
$bibtex_fudge [1]
- When using bibtex, whether to change directory to $aux_dir be-
+ When using bibtex, whether to change directory to $aux_dir be-
fore running bibtex.
The need arises as follows:
- a. With bibtex before about 2019, if the filename given to it
+ a. With bibtex before about 2019, if the filename given to it
contains a path component, there was a bug that bibtex would not
- find extra aux files, as produced by the \include command in
+ find extra aux files, as produced by the \include command in
TeX.
- b. With all moderately recent versions of bibtex, bibtex may
+ b. With all moderately recent versions of bibtex, bibtex may
refuse to write its bbl and blg files, for security reasons, for
certain cases of the path component of the filename given to it.
- 21 September 2021 37
+ 20 November 2021 37
@@ -2446,8 +2446,8 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- However, there are also rare cases where the change-directory
- method prevents bibtex from finding certain bib or bst files.
+ However, there are also rare cases where the change-directory
+ method prevents bibtex from finding certain bib or bst files.
Then $bibtex_fudge needs to be set to 0.
@@ -2457,53 +2457,53 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$bibtex_use [1]
Under what conditions to run bibtex or biber. When latexmk dis-
- covers from the log file that one (or more) bibtex/biber-gener-
- ated bibliographies are used, it can run bibtex or biber when-
- ever it appears necessary to regenerate the bbl file(s) from
- their source bib database file(s). But sometimes, the bib
+ covers from the log file that one (or more) bibtex/biber-gener-
+ ated bibliographies are used, it can run bibtex or biber when-
+ ever it appears necessary to regenerate the bbl file(s) from
+ their source bib database file(s). But sometimes, the bib
file(s) are not available (e.g., for a document obtained from an
external archive), but the bbl files are provided. In that case
- use of bibtex or biber will result in incorrect overwriting of
- the precious bbl files. The variable $bibtex_use controls
- whether this happens, and also controls whether or not .bbl
+ use of bibtex or biber will result in incorrect overwriting of
+ the precious bbl files. The variable $bibtex_use controls
+ whether this happens, and also controls whether or not .bbl
files are deleted in a cleanup operation.
The possible values of $bibtex_use are:
- 0: never use BibTeX or biber; never delete .bbl files in a
+ 0: never use BibTeX or biber; never delete .bbl files in a
cleanup.
- 1: only use bibtex or biber if the bib files exist; never
+ 1: only use bibtex or biber if the bib files exist; never
delete .bbl files in a cleanup.
- 1.5: only use bibtex or biber if the bib files exist; condi-
- tionally delete .bbl files in a cleanup (i.e., delete them only
+ 1.5: only use bibtex or biber if the bib files exist; condi-
+ tionally delete .bbl files in a cleanup (i.e., delete them only
when the bib files all exist).
2: run bibtex or biber whenever it appears necessary to update
- the bbl files, without testing for the existence of the bib
+ the bbl files, without testing for the existence of the bib
files; always delete .bbl files in a cleanup.
- Note that the value 1.5 does not work properly if the document
+ Note that the value 1.5 does not work properly if the document
uses biber instead of bibtex. (There's a long story why not.)
$cleanup_includes_cusdep_generated [0]
- If nonzero, specifies that cleanup also deletes files that are
+ If nonzero, specifies that cleanup also deletes files that are
generated by custom dependencies. (When doing a clean up, e.g.,
by use of the -C option, custom dependencies are those listed in
the .fdb_latexmk file from a previous run.)
$cleanup_includes_generated [0]
- If nonzero, specifies that cleanup also deletes files that are
+ If nonzero, specifies that cleanup also deletes files that are
detected in the fls file (or failing that, in log file) as being
- generated. It will also include files made from these first
+ generated. It will also include files made from these first
generation generated files.
- This operation is somewhat dangerous, and can have unintended
- consequences, since the files to be deleted are determined from
- a file created by *latex, which can contain erroneous informa-
+ This operation is somewhat dangerous, and can have unintended
+ consequences, since the files to be deleted are determined from
+ a file created by *latex, which can contain erroneous informa-
tion. Therefore this variable is turned off by default, and then
- 21 September 2021 38
+ 20 November 2021 38
@@ -2512,26 +2512,26 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- files to be deleted are restricted to those explictly specified
- by patterns configured in the variables clean_ext,
- clean_full_ext, and @generated_exts, together with those very
- standard cases that are hardwired into latexmk (e.g., .log
+ files to be deleted are restricted to those explicitly specified
+ by patterns configured in the variables clean_ext,
+ clean_full_ext, and @generated_exts, together with those very
+ standard cases that are hardwired into latexmk (e.g., .log
files).
$cleanup_mode [0]
- If nonzero, specifies cleanup mode: 1 for full cleanup, 2 for
- cleanup except for .dvi, .ps and .pdf files, 3 for cleanup ex-
- cept for dep and aux files. (There is also extra cleaning as
+ If nonzero, specifies cleanup mode: 1 for full cleanup, 2 for
+ cleanup except for .dvi, .ps and .pdf files, 3 for cleanup ex-
+ cept for dep and aux files. (There is also extra cleaning as
specified by the $clean_ext, $clean_full_ext and @generated_exts
variables.)
- This variable is equivalent to specifying one of the -c or -C
- options. But there should be no need to set this variable from
+ This variable is equivalent to specifying one of the -c or -C
+ options. But there should be no need to set this variable from
an RC file.
$clean_ext [""]
- Extra extensions of files for latexmk to remove when any of the
- clean-up options (-c or -C) is selected. The value of this
+ Extra extensions of files for latexmk to remove when any of the
+ clean-up options (-c or -C) is selected. The value of this
variable is a string containing the extensions separated by spa-
ces.
@@ -2543,23 +2543,23 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
files-%R/*";
in an initialization file will imply that when a clean-up opera-
- tion is specified, not only is the standard set of files
- deleted, but also files of the form FOO.out, FOO-blx.bib, FOO-
- figures*.log, and pythontex-files-FOO/*, where FOO stands for
+ tion is specified, not only is the standard set of files
+ deleted, but also files of the form FOO.out, FOO-blx.bib, FOO-
+ figures*.log, and pythontex-files-FOO/*, where FOO stands for
the basename of the file being processed (as in FOO.tex).
- The files to be deleted are relative to the directory specified
- by $aux_dir. (Note that if $out_dir but not $aux_dir is set,
- then in its initialization, latexmk sets $aux_dir equal to
- $out_dir. A normal situation is therefore that $aux_dir equals
- $out_dir, which is the only case supported by TeXLive, unlike
+ The files to be deleted are relative to the directory specified
+ by $aux_dir. (Note that if $out_dir but not $aux_dir is set,
+ then in its initialization, latexmk sets $aux_dir equal to
+ $out_dir. A normal situation is therefore that $aux_dir equals
+ $out_dir, which is the only case supported by TeXLive, unlike
MiKTeX.)
- The filenames specfied for a clean-up operation can refer not
- only to regular files but also to directories. Directories are
+ The filenames specified for a clean-up operation can refer not
+ only to regular files but also to directories. Directories are
only deleted if they are empty. An example of an application is
- to pythontex, which creates files in a particular directory.
- You can arrange to remove both the files and the directory by
+ to pythontex, which creates files in a particular directory.
+ You can arrange to remove both the files and the directory by
setting
$clean_ext = "pythontex-files-%R pythontex-files-%R";
@@ -2569,7 +2569,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 21 September 2021 39
+ 20 November 2021 39
@@ -2579,63 +2579,63 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$clean_full_ext [""]
- Extra extensions of files for latexmk to remove when the -C op-
- tion is selected, i.e., extensions of files to remove when the
+ Extra extensions of files for latexmk to remove when the -C op-
+ tion is selected, i.e., extensions of files to remove when the
.dvi, etc files are to be cleaned-up.
More general patterns are allowed, as for $clean_ext.
- The files specified by $clean_full_ext to be deleted are rela-
+ The files specified by $clean_full_ext to be deleted are rela-
tive to the directory specified by $out_dir.
$compiling_cmd [""], $failure_cmd [""], $warning_cmd [""], $success_cmd
[""]
- These variables specify commands that are executed at certain
- points of compilations. One motivation for their existance is
- to allow very useful convenient visual indications of compila-
- tion status even when the window receiving the screen output of
- the compilation is hidden. This is particularly useful in pre-
+ These variables specify commands that are executed at certain
+ points of compilations. One motivation for their existence is
+ to allow very useful convenient visual indications of compila-
+ tion status even when the window receiving the screen output of
+ the compilation is hidden. This is particularly useful in pre-
view-continuous mode.
- The commands are executed at the following points: $compil-
- ing_cmd at the start of compilation, $success_cmd at the end of
- a completely successful compilation, $failure_cmd at the end of
+ The commands are executed at the following points: $compil-
+ ing_cmd at the start of compilation, $success_cmd at the end of
+ a completely successful compilation, $failure_cmd at the end of
an unsuccessful compilation, $warning_cmd at the of an otherwise
successful compilation that gives warnings about undefined cita-
tions or references or about multiply defined references. If any
- of above variables is undefined or blank (the default situa-
+ of above variables is undefined or blank (the default situa-
tion), then the corresponding command is not executed.
- However, when $warning_cmd is not set, then in the case of a
- compilation with warnings about references or citations, but
- with no other error, one or other of $success_cmd or $fail-
- ure_cmd is used (if it is set) according to the setting of
+ However, when $warning_cmd is not set, then in the case of a
+ compilation with warnings about references or citations, but
+ with no other error, one or other of $success_cmd or $fail-
+ ure_cmd is used (if it is set) according to the setting of
$warnings_as_errors.
An example of a simple setting of these variables is as follows
- $compiling_cmd = "xdotool search --name \"%D\" set_window
+ $compiling_cmd = "xdotool search --name \"%D\" set_window
--name \"%D compiling\"";
- $success_cmd = "xdotool search --name \"%D\" set_window
+ $success_cmd = "xdotool search --name \"%D\" set_window
--name \"%D OK\"";
$warning_cmd = "xdotool search --name \"%D\" ".
"set_window --name \"%D CITE/REF ISSUE\"";
- $failure_cmd = "xdotool search --name \"%D\" set_window
+ $failure_cmd = "xdotool search --name \"%D\" set_window
--name \"%D FAILURE\"";
- These assume that the program xdotool is installed, that the
- previewer is using an X-Window system for display, and that the
- title of the window contains the name of the displayed file, as
- it normally does. When the commands are executed, the place-
- holder string %D is replaced by the name of the destination
+ These assume that the program xdotool is installed, that the
+ previewer is using an X-Window system for display, and that the
+ title of the window contains the name of the displayed file, as
+ it normally does. When the commands are executed, the place-
+ holder string %D is replaced by the name of the destination
file, which is the previewed file. The above commands result in
- an appropriate string being appended to the filename in the
+ an appropriate string being appended to the filename in the
- 21 September 2021 40
+ 20 November 2021 40
@@ -2646,21 +2646,21 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
window title: " compiling", " OK", or " FAILURE".
- Other placeholders that can be used are %S, %T, and %R, with %S
- and %T normally being identical. These can be useful for a com-
- mand changing the title of the edit window. The visual indica-
- tion in a window title can useful, since the user does not have
- to keep shifting attention to the (possibly hidden) compilation
+ Other placeholders that can be used are %S, %T, and %R, with %S
+ and %T normally being identical. These can be useful for a com-
+ mand changing the title of the edit window. The visual indica-
+ tion in a window title can useful, since the user does not have
+ to keep shifting attention to the (possibly hidden) compilation
window to know the status of the compilation.
- More complicated situations can best be handled by defining a
- Perl subroutine to invoke the necessary commands, and using the
- "internal" keyword in the definitions to get the subroutine to
+ More complicated situations can best be handled by defining a
+ Perl subroutine to invoke the necessary commands, and using the
+ "internal" keyword in the definitions to get the subroutine to
be invoked. (See the section "Format of Command Specifications"
for how to do this.)
- Naturally, the above settings that invoke the xdotool program
- are only applicable when the X-Window system is used for the
+ Naturally, the above settings that invoke the xdotool program
+ are only applicable when the X-Window system is used for the
relevant window(s). For other cases, you will have to find what
software solutions are available.
@@ -2669,15 +2669,15 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
Custom dependency list -- see section on "Custom Dependencies".
@default_excluded_files [()]
- When latexmk is invoked with no files specified on the command
+ When latexmk is invoked with no files specified on the command
line, then, by default, it will process all files in the current
directory with the extension .tex. (In general, it will process
the files specified in the @default_files variable.)
But sometimes you want to exclude particular files from this de-
- fault list. In that case you can specify the excluded files in
+ fault list. In that case you can specify the excluded files in
the array @default_excluded_files. For example if you wanted to
- process all .tex files with the exception of common.tex, which
+ process all .tex files with the exception of common.tex, which
is a not a standard alone LaTeX file but a file input by some or
all of the others, you could do
@@ -2687,21 +2687,21 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
If you have a variable or large number of files to be processed,
this method saves you from having to list them in detail in @de-
- fault_files and having to update the list every time you change
+ fault_files and having to update the list every time you change
the set of files to be processed.
- Notes: 1. This variable has no effect except when no files are
+ Notes: 1. This variable has no effect except when no files are
specified on the latexmk command line. 2. Wildcards are allowed
in @default_excluded_files.
@default_files [("*.tex")]
Default list of files to be processed.
- If no filenames are specified on the command line, latexmk
+ If no filenames are specified on the command line, latexmk
- 21 September 2021 41
+ 20 November 2021 41
@@ -2710,15 +2710,15 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- processes all tex files specified in the @default_files vari-
- able, which by default is set to all tex files ("*.tex") in the
- current directory. This is a convenience: just run latexmk and
- it will process an appropriate set of files. But sometimes you
+ processes all tex files specified in the @default_files vari-
+ able, which by default is set to all tex files ("*.tex") in the
+ current directory. This is a convenience: just run latexmk and
+ it will process an appropriate set of files. But sometimes you
want only some of these files to be processed. In this case you
- can list the files to be processed by setting @default_files in
- an initialization file (e.g., the file "latexmkrc" in the cur-
- rent directory). Then if no files are specified on the command
- line then the files you specify by setting @default_files are
+ can list the files to be processed by setting @default_files in
+ an initialization file (e.g., the file "latexmkrc" in the cur-
+ rent directory). Then if no files are specified on the command
+ line then the files you specify by setting @default_files are
processed.
Three examples:
@@ -2729,45 +2729,45 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
@default_files = ("*.tex", "*.dtx");
- Note that more than file may be given, and that the default ex-
+ Note that more than file may be given, and that the default ex-
tension is ".tex". Wild cards are allowed. The parentheses are
because @default_files is an array variable, i.e., a sequence of
filename specifications is possible.
- If you want latexmk to process all .tex files with a few excep-
+ If you want latexmk to process all .tex files with a few excep-
tions, see the @default_excluded_files array variable.
$dependents_phony [0]
- If a list of dependencies is output, this variable determines
- whether to include a phony target for each source file. If you
- use the dependents list in a Makefile, the dummy rules work
- around errors make gives if you remove header files without up-
+ If a list of dependencies is output, this variable determines
+ whether to include a phony target for each source file. If you
+ use the dependents list in a Makefile, the dummy rules work
+ around errors make gives if you remove header files without up-
dating the Makefile to match.
$dependents_list [0]
- Whether to display a list(s) of dependencies at the end of a
+ Whether to display a list(s) of dependencies at the end of a
run.
$deps_file ["-"]
- Name of file to receive list(s) of dependencies at the end of a
- run, to be used if $dependesnt_list is set. If the filename is
- "-", then the dependency list is set to stdout (i.e., normally
+ Name of file to receive list(s) of dependencies at the end of a
+ run, to be used if $dependesnt_list is set. If the filename is
+ "-", then the dependency list is set to stdout (i.e., normally
the screen).
$do_cd [0]
- Whether to change working directory to the directory specified
- for the main source file before processing it. The default be-
- havior is not to do this, which is the same as the behavior of
- *latex programs. This variable is set by the -cd and -cd- op-
+ Whether to change working directory to the directory specified
+ for the main source file before processing it. The default be-
+ havior is not to do this, which is the same as the behavior of
+ *latex programs. This variable is set by the -cd and -cd- op-
tions on latexmk's command line.
$dvi_filter [empty]
- The dvi file filter to be run on the newly produced dvi file
+ The dvi file filter to be run on the newly produced dvi file
- 21 September 2021 42
+ 20 November 2021 42
@@ -2776,64 +2776,64 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- before other processing. Equivalent to specifying the -dF op-
+ before other processing. Equivalent to specifying the -dF op-
tion.
$dvi_mode [See below for default]
- If nonzero, generate a dvi version of the document. Equivalent
+ If nonzero, generate a dvi version of the document. Equivalent
to the -dvi option.
- The variable $dvi_mode defaults to 0, but if no explicit re-
- quests are made for other types of file (postscript, pdf), then
- $dvi_mode will be set to 1. In addition, if a request for a
- file for which a .dvi file is a prerequisite, then $dvi_mode
+ The variable $dvi_mode defaults to 0, but if no explicit re-
+ quests are made for other types of file (postscript, pdf), then
+ $dvi_mode will be set to 1. In addition, if a request for a
+ file for which a .dvi file is a prerequisite, then $dvi_mode
will be set to 1.
$dvi_previewer ["start xdvi %O %S" under UNIX]
- The command to invoke a dvi-previewer. [Under MS-Windows the
- default is "start"; then latexmk arranges to use the MS-Windows
- start program, which will cause to be run whatever command the
+ The command to invoke a dvi-previewer. [Under MS-Windows the
+ default is "start"; then latexmk arranges to use the MS-Windows
+ start program, which will cause to be run whatever command the
system has associated with .dvi files.]
- Important note: Normally you will want to have a previewer run
+ Important note: Normally you will want to have a previewer run
detached, so that latexmk doesn't wait for the previewer to ter-
- minate before continuing its work. So normally you should pre-
- fix the command by "start ", which flags to latexmk that it
- should do the detaching of the previewer itself (by whatever
- method is appropriate to the operating system). But sometimes
+ minate before continuing its work. So normally you should pre-
+ fix the command by "start ", which flags to latexmk that it
+ should do the detaching of the previewer itself (by whatever
+ method is appropriate to the operating system). But sometimes
letting latexmk do the detaching is not appropriate (for a vari-
- ety of non-trivial reasons), so you should put the "start " bit
+ ety of non-trivial reasons), so you should put the "start " bit
in yourself, whenever it is needed.
$dvi_previewer_landscape ["start xdvi %O %S"]
The command to invoke a dvi-previewer in landscape mode. [Under
- MS-Windows the default is "start"; then latexmk arranges to use
- the MS-Windows start program, which will cause to be run what-
+ MS-Windows the default is "start"; then latexmk arranges to use
+ the MS-Windows start program, which will cause to be run what-
ever command the system has associated with .dvi files.]
$dvipdf ["dvipdf -dALLOWPSTRANSPARENCY %O %S %D"]
- Command to convert .dvi to .pdf file. A common reconfiguration
- is to use the dvipdfm command, which needs its arguments in a
+ Command to convert .dvi to .pdf file. A common reconfiguration
+ is to use the dvipdfm command, which needs its arguments in a
different order:
$dvipdf = "dvipdfm %O -o %D %S";
- WARNING: The default dvipdf script generates pdf files with
+ WARNING: The default dvipdf script generates pdf files with
bitmapped fonts, which do not look good when viewed by acroread.
- That script should be modified to give dvips the options "-P
+ That script should be modified to give dvips the options "-P
pdf" to ensure that type 1 fonts are used in the pdf file.
$dvipdf_silent_switch ["-q"]
Switch(es) for dvipdf program when silent mode is on.
- N.B. The standard dvipdf program runs silently, so adding the
- silent switch has no effect, but is actually innocuous. But if
- an alternative program is used, e.g., dvipdfmx, then the silent
- switch has an effect. The default setting is correct for
+ N.B. The standard dvipdf program runs silently, so adding the
+ silent switch has no effect, but is actually innocuous. But if
+ an alternative program is used, e.g., dvipdfmx, then the silent
+ switch has an effect. The default setting is correct for
- 21 September 2021 43
+ 20 November 2021 43
@@ -2845,61 +2845,61 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
dvipdfm and dvipdfmx.
$dvips ["dvips %O -o %D %S"]
- The program to used as a filter to convert a .dvi file to a .ps
- file. If pdf is going to be generated from pdf, then the value
- of the $dvips_pdf_switch variable -- see below -- will be in-
+ The program to used as a filter to convert a .dvi file to a .ps
+ file. If pdf is going to be generated from pdf, then the value
+ of the $dvips_pdf_switch variable -- see below -- will be in-
cluded in the options substituted for "%O".
$dvips_landscape ["dvips -tlandscape %O -o %D %S"]
- The program to used as a filter to convert a .dvi file to a .ps
+ The program to used as a filter to convert a .dvi file to a .ps
file in landscape mode.
$dvips_pdf_switch ["-P pdf"]
- Switch(es) for dvips program when pdf file is to be generated
+ Switch(es) for dvips program when pdf file is to be generated
from .ps file.
$dvips_silent_switch ["-q"]
Switch(es) for dvips program when silent mode is on.
$dvi_update_command [""]
- When the dvi previewer is set to be updated by running a com-
- mand, this is the command that is run. See the information for
+ When the dvi previewer is set to be updated by running a com-
+ mand, this is the command that is run. See the information for
the variable $dvi_update_method for further information, and see
- information on the variable $pdf_update_method for an example
+ information on the variable $pdf_update_method for an example
for the analogous case of a pdf previewer.
$dvi_update_method [2 under UNIX, 1 under MS-Windows]
- How the dvi viewer updates its display when the dvi file has
- changed. The values here apply equally to the $pdf_up-
+ How the dvi viewer updates its display when the dvi file has
+ changed. The values here apply equally to the $pdf_up-
date_method and to the $ps_update_method variables.
0 => update is automatic,
1=> manual update by user, which may only mean a mouse click
on the viewer's window or may mean a more serious action.
- 2 => Send the signal, whose number is in the variable
- $dvi_update_signal. The default value under UNIX is suitable
+ 2 => Send the signal, whose number is in the variable
+ $dvi_update_signal. The default value under UNIX is suitable
for xdvi.
- 3 => Viewer cannot do an update, because it locks the file.
+ 3 => Viewer cannot do an update, because it locks the file.
(As with acroread under MS-Windows.)
- 4 => run a command to do the update. The command is speci-
+ 4 => run a command to do the update. The command is speci-
fied by the variable $dvi_update_command.
- See information on the variable $pdf_update_method for an exam-
+ See information on the variable $pdf_update_method for an exam-
ple of updating by command.
- $dvi_update_signal [Under UNIX: SIGUSR1, which is a system-dependent
+ $dvi_update_signal [Under UNIX: SIGUSR1, which is a system-dependent
value]
- The number of the signal that is sent to the dvi viewer when it
- is updated by sending a signal -- see the information on the
- variable $dvi_update_method. The default value is the one ap-
+ The number of the signal that is sent to the dvi viewer when it
+ is updated by sending a signal -- see the information on the
+ variable $dvi_update_method. The default value is the one ap-
propriate for xdvi on a UNIX system.
$emulate_aux [0]
Whether to emulate the use of aux_dir when $aux_dir and $out_dir
- are different, rather than using the -aux-directory option for
+ are different, rather than using the -aux-directory option for
- 21 September 2021 44
+ 20 November 2021 44
@@ -2911,15 +2911,15 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
the *latex programs. (MiKTeX supports -aux-directory, but
TeXLive doesn't.)
- If you use a version of *latex that doesn't support -aux-direc-
- tory, e.g., TeXLive, latexmk will automatically switch aux_dir
+ If you use a version of *latex that doesn't support -aux-direc-
+ tory, e.g., TeXLive, latexmk will automatically switch aux_dir
emulation on after the first run of *latex, because it will find
the .log file in the wrong place.
- Aux_directory emulation means that when *latex is invoked, the
- output directory provided to *latex is set to be the aux_dir.
- After that, any files that need to be in the output directory
- will be moved there. (These are the files with extensions .dvi,
+ Aux_directory emulation means that when *latex is invoked, the
+ output directory provided to *latex is set to be the aux_dir.
+ After that, any files that need to be in the output directory
+ will be moved there. (These are the files with extensions .dvi,
.ps, .pdf, .fls, .synctex, .synctex.gz.)
@@ -2927,45 +2927,45 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
See the documentation for $compiling_cmd.
$fdb_ext ["fdb_latexmk"]
- The extension of the file which latexmk generates to contain a
- database of information on source files. You will not normally
+ The extension of the file which latexmk generates to contain a
+ database of information on source files. You will not normally
need to change this.
- $filetime_causality_threshold [5]; $filetime_offset_report_threshold
+ $filetime_causality_threshold [5]; $filetime_offset_report_threshold
[30]. (Units of seconds.)
These variables control how latexmk deals with the following is-
- sue, which can affect the use of files that are on a remote
+ sue, which can affect the use of files that are on a remote
filesystem (network share) instead of being on a file system lo-
cal to the computer running latexmk. Almost users will not have
- to worry about these settings, and can ignore the following ex-
+ to worry about these settings, and can ignore the following ex-
planation.
- In almost all situations, latexmk does not need to use the time
- stamps of the files it works with. However, there are a couple
- of situations when it needs to know whether a certain file was
- created in the current run of a program (e.g., *latex) or is a
+ In almost all situations, latexmk does not need to use the time
+ stamps of the files it works with. However, there are a couple
+ of situations when it needs to know whether a certain file was
+ created in the current run of a program (e.g., *latex) or is a
leftover file from a previous run. It does this by comparing the
- modification time of the file with the system time just before
- the program was started. If the modification time is earlier
- than when the program was started, the file is a leftover file,
+ modification time of the file with the system time just before
+ the program was started. If the modification time is earlier
+ than when the program was started, the file is a leftover file,
which latexmk treats as if it were not created. If the filetime
- is at least the program start time, then it can be assumed that
+ is at least the program start time, then it can be assumed that
the file was created in the current run.
- Unfortunately, this test can fail if the file is on a remote
- system, since its system time is not necessarily synchronized
- with that of the local system; the timestamps on the remote
- files are set by the remote system, not the local system. Gen-
- erally, modern operating systems regularly synchronize their
- time with a server, so the non-synchronization is mostly small
+ Unfortunately, this test can fail if the file is on a remote
+ system, since its system time is not necessarily synchronized
+ with that of the local system; the timestamps on the remote
+ files are set by the remote system, not the local system. Gen-
+ erally, modern operating systems regularly synchronize their
+ time with a server, so the non-synchronization is mostly small
(a second or so, or a few seconds). But even a small difference
can mess up latexmk's test.
- 21 September 2021 45
+ 20 November 2021 45
@@ -2975,63 +2975,63 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
Latexmk measures the time difference between the time on the two
- systems and compensates for this. But the measurement (in a
+ systems and compensates for this. But the measurement (in a
system-independent way) is only accurate to a second or two. So
- latexmk allows for a threshold on the difference between file
- and system time before it concludes that a file is a leftover
- file from a previous run. The configuration variable $file-
- time_causality_theshhold, which in units of seconds, specifies
+ latexmk allows for a threshold on the difference between file
+ and system time before it concludes that a file is a leftover
+ file from a previous run. The configuration variable $file-
+ time_causality_theshhold, which in units of seconds, specifies
this threshold. Luckily high precision is not needed. The pre-
- vious run is normally the previous run in a human run-edit-run
- cycle, and is at least many seconds back. A few seconds is
- therefore appropriate for the threshold, $filetime_causal-
- ity_theshhold; it should be non-negative always, and should be
+ vious run is normally the previous run in a human run-edit-run
+ cycle, and is at least many seconds back. A few seconds is
+ therefore appropriate for the threshold, $filetime_causal-
+ ity_theshhold; it should be non-negative always, and should be
bigger than 2 if a remote filesystem or network share is used.
- If the difference in system times on the two systems is large,
- it normally indicates that at least one of the systems is mis-
- configured. The variable $filetime_offset_report_threshold
- specifies the smallest size of the difference (or offset) in
- seconds between the times of the local and remote system beyond
- which the offset is reported. This is reported at the point in
- the latexmk's progress that it measures the offset. The report
+ If the difference in system times on the two systems is large,
+ it normally indicates that at least one of the systems is mis-
+ configured. The variable $filetime_offset_report_threshold
+ specifies the smallest size of the difference (or offset) in
+ seconds between the times of the local and remote system beyond
+ which the offset is reported. This is reported at the point in
+ the latexmk's progress that it measures the offset. The report
is made if silent mode is used and diagnostic mode is not on.
$force_mode [0]
- If nonzero, continue processing past minor latex errors includ-
+ If nonzero, continue processing past minor latex errors includ-
ing unrecognized cross references. Equivalent to specifying the
-f option.
- @generated_exts [( aux , bbl , idx , ind , lof , lot , out , toc ,
+ @generated_exts [( aux , bbl , idx , ind , lof , lot , out , toc ,
$fdb_ext )]
- This contains a list of extensions for files that are generated
- during a LaTeX run and that are read in by LaTeX in later runs,
+ This contains a list of extensions for files that are generated
+ during a LaTeX run and that are read in by LaTeX in later runs,
either directly or indirectly.
- This list specifies files known to be generated by *latex. It
- is used in two ways: (a) The specified files are deleted in a
- cleanup operation (with the -c, -C, -CA, -g and -gg options),
- and (b) It affects the determination of whether a rerun of *la-
+ This list specifies files known to be generated by *latex. It
+ is used in two ways: (a) The specified files are deleted in a
+ cleanup operation (with the -c, -C, -CA, -g and -gg options),
+ and (b) It affects the determination of whether a rerun of *la-
tex is needed after a run that gives an error.
(Concerning item (b): Normally, a change of a source file during
a run should provoke a rerun. This includes a file generated by
- LaTeX, e.g., an aux file, that is read in on subsequent runs.
- But after a run that results in an error, a new run should not
- occur until the user has made a change in the files. But the
- user may have corrected an error in a source .tex file during
+ LaTeX, e.g., an aux file, that is read in on subsequent runs.
+ But after a run that results in an error, a new run should not
+ occur until the user has made a change in the files. But the
+ user may have corrected an error in a source .tex file during
the run. So latexmk needs to distinguish user-generated and au-
- tomatically generated files; it determines the automatically
- generated files as those with extensions in the list in @gener-
+ tomatically generated files; it determines the automatically
+ generated files as those with extensions in the list in @gener-
ated_exts.)
- A convenient way to add an extra extension to the list, without
- losing the already defined ones is to use a push command in the
+ A convenient way to add an extra extension to the list, without
+ losing the already defined ones is to use a push command in the
- 21 September 2021 46
+ 20 November 2021 46
@@ -3045,25 +3045,25 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
push @generated_exts, "end";
adds the extension "end" to the list of predefined generated ex-
- tensions. (This extension is used by the RevTeX package, for
+ tensions. (This extension is used by the RevTeX package, for
example.)
$go_mode [0]
- If nonzero, process files regardless of timestamps, and is then
+ If nonzero, process files regardless of timestamps, and is then
equivalent to the -g option.
%hash_calc_ignore_pattern
!!!This variable is for experts only!!!
- The general rule latexmk uses for determining when an extra run
- of some program is needed is that one of the source files has
- changed. But consider for example a latex package that causes
- an encapsulated postscript file (an "eps" file) to be made that
- is to be read in on the next run. The file contains a comment
- line giving its creation date and time. On the next run the
- time changes, latex sees that the eps file has changed, and
- therefore reruns latex. This causes an infinite loop, that is
- only terminated because latexmk has a limit on the number of
+ The general rule latexmk uses for determining when an extra run
+ of some program is needed is that one of the source files has
+ changed. But consider for example a latex package that causes
+ an encapsulated postscript file (an "eps" file) to be made that
+ is to be read in on the next run. The file contains a comment
+ line giving its creation date and time. On the next run the
+ time changes, latex sees that the eps file has changed, and
+ therefore reruns latex. This causes an infinite loop, that is
+ only terminated because latexmk has a limit on the number of
runs to guard against pathological situations.
But the changing line has no real effect, since it is a comment.
@@ -3072,23 +3072,23 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$hash_calc_ignore_pattern{'eps'} = '^%%CreationDate: ';
This creates a rule for files with extension .eps about lines to
- ignore. The left-hand side is a Perl idiom for setting an item
- in a hash. Note that the file extension is specified without a
+ ignore. The left-hand side is a Perl idiom for setting an item
+ in a hash. Note that the file extension is specified without a
period. The value, on the right-hand side, is a string contain-
- ing a regular expresssion. (See documentation on Perl for how
- they are to be specified in general.) This particular regular
- expression specifies that lines beginning with "%%CreationDate:
- " are to be ignored in deciding whether a file of the given ex-
+ ing a regular expression. (See documentation on Perl for how
+ they are to be specified in general.) This particular regular
+ expression specifies that lines beginning with "%%CreationDate:
+ " are to be ignored in deciding whether a file of the given ex-
tension .eps has changed.
- There is only one regular expression available for each exten-
- sion. If you need more one pattern to specify lines to ignore,
- then you need to combine the patterns into a single regular ex-
- pression. The simplest method is separate the different simple
- patterns by a vertical bar character (indicating "alternation"
+ There is only one regular expression available for each exten-
+ sion. If you need more one pattern to specify lines to ignore,
+ then you need to combine the patterns into a single regular ex-
+ pression. The simplest method is separate the different simple
+ patterns by a vertical bar character (indicating "alternation"
in the jargon of regular expressions). For example,
- $hash_calc_ignore_pattern{'eps'} = '^%%CreationDate: |^%%Ti-
+ $hash_calc_ignore_pattern{'eps'} = '^%%CreationDate: |^%%Ti-
tle: ';
causes lines starting with either "^%%CreationDate: " or "^%%Ti-
@@ -3097,7 +3097,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 21 September 2021 47
+ 20 November 2021 47
@@ -3106,9 +3106,9 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- It may happen that a pattern to be ignored is specified in, for
- example, in a system or user initialization file, and you wish
- to remove this in a file that is read later. To do this, you
+ It may happen that a pattern to be ignored is specified in, for
+ example, in a system or user initialization file, and you wish
+ to remove this in a file that is read later. To do this, you
use Perl's delete function, e.g.,
delete $hash_calc_ignore_pattern{'eps'};
@@ -3116,54 +3116,54 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$jobname [""]
- This specifies the jobname, i.e., the basename that is used for
- generated files (.aux, .log, .dvi, .ps, .pdf, etc). If this
- variable is a null string, then the basename is the basename of
- the main tex file. (At present, the string in $jobname should
+ This specifies the jobname, i.e., the basename that is used for
+ generated files (.aux, .log, .dvi, .ps, .pdf, etc). If this
+ variable is a null string, then the basename is the basename of
+ the main tex file. (At present, the string in $jobname should
not contain spaces.)
- The placeholder '%A' is permitted. This will be substituted by
+ The placeholder '%A' is permitted. This will be substituted by
the basename of the TeX file. The primary purpose is when a va-
- riety of tex files are to be processed, and you want to use a
- different jobname for each but one that is distinct for each.
- Thus if you wanted to compare compilations of a set of files on
+ riety of tex files are to be processed, and you want to use a
+ different jobname for each but one that is distinct for each.
+ Thus if you wanted to compare compilations of a set of files on
different operating systems, with distinct filenames for all the
cases, you could set
$jobname = "%A-$^O";
- in an initialization file. (Here $^O is a variable provided by
+ in an initialization file. (Here $^O is a variable provided by
perl that contains perl's name for the operating system.)
- Suppose you had .tex files test1.tex and test2.tex. Then when
+ Suppose you had .tex files test1.tex and test2.tex. Then when
you run
latexmk -pdf *.tex
- both files will be compiled. The .aux, .log, and .pdf files
- will have basenames test1-MSWin32 ante test2-MSWin32 on a MS-
+ both files will be compiled. The .aux, .log, and .pdf files
+ will have basenames test1-MSWin32 ante test2-MSWin32 on a MS-
Windows system, test1-darwin and test2-darwin on an OS-X system,
and a variety of similar cases on linux systems.
$kpsewhich ["kpsewhich %S"]
- The program called to locate a source file when the name alone
- is not sufficient. Most filenames used by latexmk have suffi-
+ The program called to locate a source file when the name alone
+ is not sufficient. Most filenames used by latexmk have suffi-
cient path information to be found directly. But sometimes, no-
tably when a .bib or a .bst file is found from the log file of a
- bibtex or biber run, only the base name of the file is known,
+ bibtex or biber run, only the base name of the file is known,
but not its path. The program specified by $kpsewhich is used to
find it.
- (For advanced users: Because of the different way in which la-
+ (For advanced users: Because of the different way in which la-
texmk uses the command specified in $kpsewhich, some of the pos-
sibilities listed in the FORMAT OF COMMAND SPECIFICATIONS do not
- apply. The internal and start keywords are not available. A
+ apply. The internal and start keywords are not available. A
simple command specification with possible options and then "%S"
- 21 September 2021 48
+ 20 November 2021 48
@@ -3172,34 +3172,34 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- is all that is guaranteed to work. Note that for other com-
+ is all that is guaranteed to work. Note that for other com-
mands, "%S" is substituted by a single source file. In contrast,
for $kpsewhich, "%S" may be substituted by a long list of space-
- separated filenames, each of which is quoted. The result on
+ separated filenames, each of which is quoted. The result on
STDOUT of running the command is then piped to latexmk.)
- See also the @BIBINPUTS variable for another way that latexmk
+ See also the @BIBINPUTS variable for another way that latexmk
also uses to try to locate files; it applies only in the case of
.bib files.
$kpsewhich_show [0]
- Whether to show diagnostics about invocations of kpsewhich: the
- command line use to invoke it and the results. These diagnos-
- tics are shown if $kpsewhich_show is non-zero or if diagnostics
- mode is on. (But in the second case, lots of other diagnostics
- are also shown.) Without these diagnostics there is nothing
- visible in latexmk's screen output about invocations of kpse-
+ Whether to show diagnostics about invocations of kpsewhich: the
+ command line use to invoke it and the results. These diagnos-
+ tics are shown if $kpsewhich_show is non-zero or if diagnostics
+ mode is on. (But in the second case, lots of other diagnostics
+ are also shown.) Without these diagnostics there is nothing
+ visible in latexmk's screen output about invocations of kpse-
which.
$landscape_mode [0]
If nonzero, run in landscape mode, using the landscape mode pre-
- viewers and dvi to postscript converters. Equivalent to the -l
+ viewers and dvi to postscript converters. Equivalent to the -l
option. Normally not needed with current previewers.
$latex ["latex %O %S"]
- Specifies the command line for the LaTeX processing program.
- Note that as with other programs, you can use this variable not
- just to change the name of the program used, but also specify
+ Specifies the command line for the LaTeX processing program.
+ Note that as with other programs, you can use this variable not
+ just to change the name of the program used, but also specify
options to the program. E.g.,
$latex = "latex --src-specials %O %S";
@@ -3209,27 +3209,27 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
%latex_input_extensions
- This variable specifies the extensions tried by latexmk when it
- finds that a LaTeX run resulted in an error that a file has not
- been found, and the file is given without an extension. This
- typically happens when LaTeX commands of the form \input{file}
- or \includegraphics{figure}, when the relevant source file does
+ This variable specifies the extensions tried by latexmk when it
+ finds that a LaTeX run resulted in an error that a file has not
+ been found, and the file is given without an extension. This
+ typically happens when LaTeX commands of the form \input{file}
+ or \includegraphics{figure}, when the relevant source file does
not exist.
- In this situation, latexmk searches for custom dependencies to
- make the missing file(s), but restricts it to the extensions
- specified by the variable %latex_input_extensions. The default
+ In this situation, latexmk searches for custom dependencies to
+ make the missing file(s), but restricts it to the extensions
+ specified by the variable %latex_input_extensions. The default
extensions are 'tex' and 'eps'.
- (For Perl experts: %latex_input_extensions is a hash whose keys
- are the extensions. The values are irrelevant.) Two subrou-
- tines are provided for manipulating this and the related vari-
- able %pdflatex_input_extensions, add_input_ext and remove_in-
- put_ext. They are used as in the following examples are
+ (For Perl experts: %latex_input_extensions is a hash whose keys
+ are the extensions. The values are irrelevant.) Two subrou-
+ tines are provided for manipulating this and the related vari-
+ able %pdflatex_input_extensions, add_input_ext and remove_in-
+ put_ext. They are used as in the following examples are
- 21 September 2021 49
+ 20 November 2021 49
@@ -3246,19 +3246,19 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
add_input_ext( 'latex', 'asdf' );
- add the extension 'asdf to latex_input_extensions. (Naturally
+ add the extension 'asdf to latex_input_extensions. (Naturally
with such an extension, you should have made an appropriate cus-
tom dependency for latexmk, and should also have done the appro-
- priate programming in the LaTeX source file to enable the file
- to be read. The standard extensions are handled by LaTeX and
+ priate programming in the LaTeX source file to enable the file
+ to be read. The standard extensions are handled by LaTeX and
its graphics/graphicx packages.)
$latex_silent_switch ["-interaction=batchmode"]
- Switch(es) for the LaTeX processing program when silent mode is
+ Switch(es) for the LaTeX processing program when silent mode is
on.
- If you use MikTeX, you may prefer the results if you configure
- the options to include -c-style-errors, e.g., by the following
+ If you use MikTeX, you may prefer the results if you configure
+ the options to include -c-style-errors, e.g., by the following
line in an initialization file
$latex_silent_switch = "-interaction=batchmode -c-style-er-
@@ -3268,19 +3268,19 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$lpr ["lpr %O %S" under UNIX/Linux, "NONE lpr" under MS-Windows]
The command to print postscript files.
- Under MS-Windows (unlike UNIX/Linux), there is no standard pro-
+ Under MS-Windows (unlike UNIX/Linux), there is no standard pro-
gram for printing files. But there are ways you can do it. For
example, if you have gsview installed, you could use it with the
option "/p":
$lpr = '"c:/Program Files/Ghostgum/gsview/gsview32.exe" /p';
- If gsview is installed in a different directory, you will need
- to make the appropriate change. Note the combination of single
- and double quotes around the name. The single quotes specify
- that this is a string to be assigned to the configuration vari-
- able $lpr. The double quotes are part of the string passed to
- the operating system to get the command obeyed; this is neces-
+ If gsview is installed in a different directory, you will need
+ to make the appropriate change. Note the combination of single
+ and double quotes around the name. The single quotes specify
+ that this is a string to be assigned to the configuration vari-
+ able $lpr. The double quotes are part of the string passed to
+ the operating system to get the command obeyed; this is neces-
sary because one part of the command name ("Program Files") con-
tains a space which would otherwise be misinterpreted.
@@ -3290,12 +3290,12 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$lpr_pdf ["NONE lpr_pdf"]
The printing program to print pdf files.
- Under MS-Windows you could set this to use gsview, if it is in-
+ Under MS-Windows you could set this to use gsview, if it is in-
stalled, e.g.,
- 21 September 2021 50
+ 20 November 2021 50
@@ -3306,15 +3306,15 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$lpr = '"c:/Program Files/Ghostgum/gsview/gsview32.exe" /p';
- If gsview is installed in a different directory, you will need
- to make the appropriate change. Note the double quotes around
+ If gsview is installed in a different directory, you will need
+ to make the appropriate change. Note the double quotes around
the name: this is necessary because one part of the command name
("Program Files") contains a space which would otherwise be mis-
interpreted.
$lualatex ["lualatex %O %S"]
Specifies the command line for the LaTeX processing program that
- is to be used when the lualatex program is called for (e.g., by
+ is to be used when the lualatex program is called for (e.g., by
the option -lualatex.
To do a coordinated setting of all of $latex, $pdflatex, $luala-
@@ -3322,26 +3322,26 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
%lualatex_input_extensions
- This variable specifies the extensions tried by latexmk when it
- finds that a lualatex run resulted in an error that a file has
- not been found, and the file is given without an extension.
- This typically happens when LaTeX commands of the form \in-
- put{file} or \includegraphics{figure}, when the relevant source
+ This variable specifies the extensions tried by latexmk when it
+ finds that a lualatex run resulted in an error that a file has
+ not been found, and the file is given without an extension.
+ This typically happens when LaTeX commands of the form \in-
+ put{file} or \includegraphics{figure}, when the relevant source
file does not exist.
- In this situation, latexmk searches for custom dependencies to
- make the missing file(s), but restricts it to the extensions
- specified by the variable %pdflatex_input_extensions. The de-
+ In this situation, latexmk searches for custom dependencies to
+ make the missing file(s), but restricts it to the extensions
+ specified by the variable %pdflatex_input_extensions. The de-
fault extensions are 'tex', 'pdf', 'jpg, and 'png'.
See details of the %latex_input_extensions for other information
that equally applies to %lualatex_input_extensions.
$lualatex_silent_switch ["-interaction=batchmode"]
- Switch(es) for the lualatex program (specified in the variable
+ Switch(es) for the lualatex program (specified in the variable
$lualatex) when silent mode is on.
- See details of the $latex_silent_switch for other information
+ See details of the $latex_silent_switch for other information
that equally applies to $lualatex_silent_switch.
$make ["make"]
@@ -3351,9 +3351,9 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
The index processing program.
$makeindex_fudge [0]
- When using makeindex, whether to change directory to $aux_dir
- before running makeindex. Set to 1 if $aux_dir is not an ex-
- plicit subdirectory of current directory, otherwise makeindex
+ When using makeindex, whether to change directory to $aux_dir
+ before running makeindex. Set to 1 if $aux_dir is not an ex-
+ plicit subdirectory of current directory, otherwise makeindex
will refuse to write its output and log files, for security rea-
sons.
@@ -3361,7 +3361,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 21 September 2021 51
+ 20 November 2021 51
@@ -3371,63 +3371,63 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$makeindex_silent_switch ["-q"]
- Switch(es) for the index processing program when silent mode is
+ Switch(es) for the index processing program when silent mode is
on.
$max_repeat [5]
- The maximum number of times latexmk will run *latex before de-
- ciding that there may be an infinite loop and that it needs to
- bail out, rather than rerunning *latex again to resolve cross-
+ The maximum number of times latexmk will run *latex before de-
+ ciding that there may be an infinite loop and that it needs to
+ bail out, rather than rerunning *latex again to resolve cross-
references, etc. The default value covers all normal cases.
(Note that the "etc" covers a lot of cases where one run of *la-
tex generates files to be read in on a later run.)
$MSWin_back_slash [1]
- This configuration variable only has an effect when latexmk is
- running under MS-Windows. With the default value of 1 for this
- variable, when a command is executed under MS-Windows, latexmk
- substitutes "\" for the separator character between components
- of a directory name. Internally, latexmk uses "/" for the di-
- rectory separator character, which is the character used by
+ This configuration variable only has an effect when latexmk is
+ running under MS-Windows. With the default value of 1 for this
+ variable, when a command is executed under MS-Windows, latexmk
+ substitutes "\" for the separator character between components
+ of a directory name. Internally, latexmk uses "/" for the di-
+ rectory separator character, which is the character used by
Unix-like systems.
- For almost all programs and for almost all filenames under MS-
- Windows, both "\" and "/" are acceptable as the directory sepa-
- rator character, provided at least that filenames are properly
+ For almost all programs and for almost all filenames under MS-
+ Windows, both "\" and "/" are acceptable as the directory sepa-
+ rator character, provided at least that filenames are properly
quoted. But it is possible that programs exist that only accept
- "\" on the command line, since that is the standard directory
- separator for MS-Windows. So for safety latexmk makes the sub-
+ "\" on the command line, since that is the standard directory
+ separator for MS-Windows. So for safety latexmk makes the sub-
stitution from "/" to "\", by default.
- However there are also programs on MS-Windows for which a back
+ However there are also programs on MS-Windows for which a back
slash "\" is interpreted differently than as a directory separa-
- tor; for these the directory separator should be "/". Programs
- with this behavior include all the *latex programs in the
- TeXLive implementation (but not the MiKTeX implementation).
- Hence if you use TeXLive on MS-Windows, then $MSWin_back_slash
+ tor; for these the directory separator should be "/". Programs
+ with this behavior include all the *latex programs in the
+ TeXLive implementation (but not the MiKTeX implementation).
+ Hence if you use TeXLive on MS-Windows, then $MSWin_back_slash
should be set to zero.
$new_viewer_always [0]
- This variable applies to latexmk only in continuous-preview
+ This variable applies to latexmk only in continuous-preview
mode. If $new_viewer_always is 0, latexmk will check for a pre-
- viously running previewer on the same file, and if one is run-
- ning will not start a new one. If $new_viewer_always is non-
- zero, this check will be skipped, and latexmk will behave as if
+ viously running previewer on the same file, and if one is run-
+ ning will not start a new one. If $new_viewer_always is non-
+ zero, this check will be skipped, and latexmk will behave as if
no viewer is running.
$out_dir [""]
- If non-blank, this variable specifies the directory in which
+ If non-blank, this variable specifies the directory in which
output files are to be written by a run of *latex. See also the
variable $aux_dir.
- The effect of this variable (when non-blank) is achieved by us-
- ing the -output-directory option of *latex. This exists in the
+ The effect of this variable (when non-blank) is achieved by us-
+ ing the -output-directory option of *latex. This exists in the
- 21 September 2021 52
+ 20 November 2021 52
@@ -3436,49 +3436,49 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- usual current (Dec. 2011 and later) implementations of TeX,
- i.e., MiKTeX and TeXLive. But it may not be present in other
+ usual current (Dec. 2011 and later) implementations of TeX,
+ i.e., MiKTeX and TeXLive. But it may not be present in other
versions.
- If you also use the -cd option, and $out_dir (or $aux_dir) con-
- tains a relative path, then the path is interpreted relative to
+ If you also use the -cd option, and $out_dir (or $aux_dir) con-
+ tains a relative path, then the path is interpreted relative to
the document directory.
- Commonly, the directory specified for output files is a subdi-
+ Commonly, the directory specified for output files is a subdi-
rectory of the current working directory. However, if you spec-
- ify some other directory, e.g., "/tmp/foo" or "../output", be
- aware that this could cause problems, e.g., with makeindex or
- bibtex. This is because modern versions of these programs, by
- default, will refuse to work when they find that they are asked
- to write to a file in a directory that appears not to be the
+ ify some other directory, e.g., "/tmp/foo" or "../output", be
+ aware that this could cause problems, e.g., with makeindex or
+ bibtex. This is because modern versions of these programs, by
+ default, will refuse to work when they find that they are asked
+ to write to a file in a directory that appears not to be the
current working directory or one of its subdirectories. This is
- part of security measures by the whole TeX system that try to
+ part of security measures by the whole TeX system that try to
prevent malicious or errant TeX documents from incorrectly mess-
ing with a user's files. If for $out_dir or $aux_dir you really
- do need to specify an absolute pathname (e.g., "/tmp/foo") or a
+ do need to specify an absolute pathname (e.g., "/tmp/foo") or a
path (e.g., "../output") that includes a higher-level directory,
- and you need to use makeindex or bibtex, then you need to dis-
- able the security measures (and assume any risks). One way of
+ and you need to use makeindex or bibtex, then you need to dis-
+ able the security measures (and assume any risks). One way of
doing this is to temporarily set an operating system environment
- variable openout_any to "a" (as in "all"), to override the de-
+ variable openout_any to "a" (as in "all"), to override the de-
fault "paranoid" setting.
$pdf_mode [0]
- If zero, do NOT generate a pdf version of the document. If
- equal to 1, generate a pdf version of the document using pdfla-
- tex, using the command specified by the $pdflatex variable. If
- equal to 2, generate a pdf version of the document from the ps
- file, by using the command specified by the $ps2pdf variable.
- If equal to 3, generate a pdf version of the document from the
- dvi file, by using the command specified by the $dvipdf vari-
+ If zero, do NOT generate a pdf version of the document. If
+ equal to 1, generate a pdf version of the document using pdfla-
+ tex, using the command specified by the $pdflatex variable. If
+ equal to 2, generate a pdf version of the document from the ps
+ file, by using the command specified by the $ps2pdf variable.
+ If equal to 3, generate a pdf version of the document from the
+ dvi file, by using the command specified by the $dvipdf vari-
able. If equal to 4, generate a pdf version of the document us-
ing lualatex, using the command specified by the $lualatex vari-
- able. If equal to 5, generate a pdf version (and an xdv ver-
- sion) of the document using xelatex, using the commands speci-
+ able. If equal to 5, generate a pdf version (and an xdv ver-
+ sion) of the document using xelatex, using the commands speci-
fied by the $xelatex and xdvipdfmx variables.
- In $pdf_mode=2, it is ensured that .dvi and .ps files are also
- made. In $pdf_mode=3, it is ensured that a .dvi file is also
+ In $pdf_mode=2, it is ensured that .dvi and .ps files are also
+ made. In $pdf_mode=3, it is ensured that a .dvi file is also
made. But this may be overridden by the document.
$pdflatex ["pdflatex %O %S"]
@@ -3493,7 +3493,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 21 September 2021 53
+ 20 November 2021 53
@@ -3502,64 +3502,64 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- (In some earlier versions of latexmk, you needed to use an as-
- signment to $pdflatex to allow the use of lualatex or xelatex
+ (In some earlier versions of latexmk, you needed to use an as-
+ signment to $pdflatex to allow the use of lualatex or xelatex
instead of pdflatex. There are now separate configuration vari-
- ables for the use of lualatex or xelatex. See $lualatex and
+ ables for the use of lualatex or xelatex. See $lualatex and
$xelatex.)
To do a coordinated setting of all of $latex, $pdflatex, $luala-
tex, and $xelatex, see the section "Advanced Configuration".
%pdflatex_input_extensions
- This variable specifies the extensions tried by latexmk when it
- finds that a pdflatex run resulted in an error that a file has
- not been found, and the file is given without an extension.
- This typically happens when LaTeX commands of the form \in-
- put{file} or \includegraphics{figure}, when the relevant source
+ This variable specifies the extensions tried by latexmk when it
+ finds that a pdflatex run resulted in an error that a file has
+ not been found, and the file is given without an extension.
+ This typically happens when LaTeX commands of the form \in-
+ put{file} or \includegraphics{figure}, when the relevant source
file does not exist.
- In this situation, latexmk searches for custom dependencies to
- make the missing file(s), but restricts it to the extensions
- specified by the variable %pdflatex_input_extensions. The de-
+ In this situation, latexmk searches for custom dependencies to
+ make the missing file(s), but restricts it to the extensions
+ specified by the variable %pdflatex_input_extensions. The de-
fault extensions are 'tex', 'pdf', 'jpg, and 'png'.
See details of the %latex_input_extensions for other information
that equally applies to %pdflatex_input_extensions.
$pdflatex_silent_switch ["-interaction=batchmode"]
- Switch(es) for the pdflatex program (specified in the variable
+ Switch(es) for the pdflatex program (specified in the variable
$pdflatex) when silent mode is on.
- See details of the $latex_silent_switch for other information
+ See details of the $latex_silent_switch for other information
that equally applies to $pdflatex_silent_switch.
$pdf_previewer ["start acroread %O %S"]
The command to invoke a pdf-previewer.
- On MS-Windows, the default is changed to "cmd /c start """; un-
- der more recent versions of Windows, this will cause to be run
+ On MS-Windows, the default is changed to "cmd /c start """; un-
+ der more recent versions of Windows, this will cause to be run
whatever command the system has associated with .pdf files. But
- this may be undesirable if this association is to acroread --
+ this may be undesirable if this association is to acroread --
see the notes in the explanation of the -pvc option.]
- On OS-X the default is changed to "open %S", which results in
- OS-X starting up (and detaching) the viewer associated with the
- file. By default, for pdf files this association is to OS-X's
+ On OS-X the default is changed to "open %S", which results in
+ OS-X starting up (and detaching) the viewer associated with the
+ file. By default, for pdf files this association is to OS-X's
preview, which is quite satisfactory.
- WARNING: Problem under MS-Windows: if acroread is used as the
- pdf previewer, and it is actually viewing a pdf file, the pdf
- file cannot be updated. Thus makes acroread a bad choice of
- previewer if you use latexmk's previous-continuous mode (option
+ WARNING: Problem under MS-Windows: if acroread is used as the
+ pdf previewer, and it is actually viewing a pdf file, the pdf
+ file cannot be updated. Thus makes acroread a bad choice of
+ previewer if you use latexmk's previous-continuous mode (option
-pvc) under MS-windows. This problem does not occur if, for ex-
ample, SumatraPDF or gsview is used to view pdf files.
- Important note: Normally you will want to have a previewer run
+ Important note: Normally you will want to have a previewer run
- 21 September 2021 54
+ 20 November 2021 54
@@ -3569,26 +3569,26 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
detached, so that latexmk doesn't wait for the previewer to ter-
- minate before continuing its work. So normally you should pre-
- fix the command by "start ", which flags to latexmk that it
- should do the detaching of the previewer itself (by whatever
- method is appropriate to the operating system). But sometimes
+ minate before continuing its work. So normally you should pre-
+ fix the command by "start ", which flags to latexmk that it
+ should do the detaching of the previewer itself (by whatever
+ method is appropriate to the operating system). But sometimes
letting latexmk do the detaching is not appropriate (for a vari-
- ety of non-trivial reasons), so you should put the "start " bit
+ ety of non-trivial reasons), so you should put the "start " bit
in yourself, whenever it is needed.
$pdf_update_command [""]
- When the pdf previewer is set to be updated by running a com-
- mand, this is the command that is run. See the information for
+ When the pdf previewer is set to be updated by running a com-
+ mand, this is the command that is run. See the information for
the variable $pdf_update_method.
$pdf_update_method [1 under UNIX, 3 under MS-Windows]
- How the pdf viewer updates its display when the pdf file has
- changed. See the information on the variable $dvi_update_method
+ How the pdf viewer updates its display when the pdf file has
+ changed. See the information on the variable $dvi_update_method
for the codes. (Note that information needs be changed slightly
- so that for the value 4, to run a command to do the update, the
- command is specified by the variable $pdf_update_command, and
- for the value 2, to specify update by signal, the signal is
+ so that for the value 4, to run a command to do the update, the
+ command is specified by the variable $pdf_update_command, and
+ for the value 2, to specify update by signal, the signal is
specified by $pdf_update_signal.)
Note that acroread under MS-Windows (but not UNIX) locks the pdf
@@ -3601,31 +3601,31 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$pdf_update_method = 4;
$pdf_update_command = "xpdf -remote %R -reload";
- The first setting arranges for the xpdf program to be used in
- its "remote server mode", with the server name specified as the
- rootname of the TeX file. The second setting arranges for up-
- dating to be done in response to a command, and the third set-
+ The first setting arranges for the xpdf program to be used in
+ its "remote server mode", with the server name specified as the
+ rootname of the TeX file. The second setting arranges for up-
+ dating to be done in response to a command, and the third set-
ting sets the update command.
- $pdf_update_signal [Under UNIX: SIGHUP, which is a system-dependent
+ $pdf_update_signal [Under UNIX: SIGHUP, which is a system-dependent
value]
- The number of the signal that is sent to the pdf viewer when it
- is updated by sending a signal -- see the information on the
- variable $pdf_update_method. The default value is the one ap-
+ The number of the signal that is sent to the pdf viewer when it
+ is updated by sending a signal -- see the information on the
+ variable $pdf_update_method. The default value is the one ap-
propriate for gv on a UNIX system.
$pid_position[1 under UNIX, -1 under MS-Windows]
- The variable $pid_position is used to specify which word in
- lines of the output from $pscmd corresponds to the process ID.
- The first word in the line is numbered 0. The default value of
+ The variable $pid_position is used to specify which word in
+ lines of the output from $pscmd corresponds to the process ID.
+ The first word in the line is numbered 0. The default value of
1 (2nd word in line) is correct for Solaris 2.6, Linux, and OS-X
with their default settings of $pscmd.
- Setting the variable to -1 is used to indicate that $pscmd is
+ Setting the variable to -1 is used to indicate that $pscmd is
- 21 September 2021 55
+ 20 November 2021 55
@@ -3637,23 +3637,23 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
not to be used.
$postscript_mode [0]
- If nonzero, generate a postscript version of the document.
+ If nonzero, generate a postscript version of the document.
Equivalent to the -ps option.
- If some other request is made for which a postscript file is
+ If some other request is made for which a postscript file is
needed, then $postscript_mode will be set to 1.
$pre_tex_code ['']
- Sets TeX code to be executed before inputting the source file.
- This works if the relevant one of $latex, etc contains a suit-
+ Sets TeX code to be executed before inputting the source file.
+ This works if the relevant one of $latex, etc contains a suit-
able command line with a %P or %U substitution. For example you
could do
$latex = 'latex %O %P';
$pre_tex_code = '\AtBeginDocument{An initial message\par}';
- To set all of $latex, $pdflatex, $lualatex, and $xelatex you
+ To set all of $latex, $pdflatex, $lualatex, and $xelatex you
could use the subroutine alt_tex_cmds:
&alt_tex_cmds;
@@ -3662,36 +3662,36 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$preview_continuous_mode [0]
- If nonzero, run a previewer to view the document, and continue
+ If nonzero, run a previewer to view the document, and continue
running latexmk to keep .dvi up-to-date. Equivalent to the -pvc
- option. Which previewer is run depends on the other settings,
+ option. Which previewer is run depends on the other settings,
see the command line options -view=, and the variable $view.
$preview_mode [0]
If nonzero, run a previewer to preview the document. Equivalent
- to the -pv option. Which previewer is run depends on the other
- settings, see the command line options -view=, and the variable
+ to the -pv option. Which previewer is run depends on the other
+ settings, see the command line options -view=, and the variable
$view.
$printout_mode [0]
- If nonzero, print the document using the command specified in
+ If nonzero, print the document using the command specified in
the $lpr variable. Equivalent to the -p option. This is recom-
- mended not to be set from an RC file, otherwise you could waste
+ mended not to be set from an RC file, otherwise you could waste
lots of paper.
$print_type = ["auto"]
- Type of file to printout: possibilities are "auto", "dvi",
+ Type of file to printout: possibilities are "auto", "dvi",
"none", "pdf", or "ps". See the option -print= for the meaning
of the "auto" value.
$pscmd Command used to get all the processes currently run by the user.
- The -pvc option uses the command specified by the variable
- $pscmd to determine if there is an already running previewer,
- and to find the process ID (needed if latexmk needs to signal
+ The -pvc option uses the command specified by the variable
+ $pscmd to determine if there is an already running previewer,
+ and to find the process ID (needed if latexmk needs to signal
- 21 September 2021 56
+ 20 November 2021 56
@@ -3703,12 +3703,12 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
the previewer about file changes).
Each line of the output of this command is assumed to correspond
- to one process. See the $pid_position variable for how the
+ to one process. See the $pid_position variable for how the
process number is determined.
- The default for pscmd is "NONE" under MS-Windows and cygwin
- (i.e., the command is not used), "ps -ww -u $ENV{USER}" under
- OS-X, and "ps -f -u $ENV{USER}" under other operating systems
+ The default for pscmd is "NONE" under MS-Windows and cygwin
+ (i.e., the command is not used), "ps -ww -u $ENV{USER}" under
+ OS-X, and "ps -f -u $ENV{USER}" under other operating systems
(including Linux). In these specifications "$ENV{USER}" is sub-
stituted by the username.
@@ -3717,47 +3717,47 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$ps_filter [empty]
The postscript file filter to be run on the newly produced post-
- script file before other processing. Equivalent to specifying
+ script file before other processing. Equivalent to specifying
the -pF option.
$ps_previewer ["start gv %O %S", but start %O %S under MS-Windows]
- The command to invoke a ps-previewer. (The default under MS-
+ The command to invoke a ps-previewer. (The default under MS-
Windows will cause to be run whatever command the system has as-
sociated with .ps files.)
- Note that gv could be used with the -watch option updates its
- display whenever the postscript file changes, whereas ghostview
- does not. However, different versions of gv have slightly dif-
- ferent ways of writing this option. You can configure this
+ Note that gv could be used with the -watch option updates its
+ display whenever the postscript file changes, whereas ghostview
+ does not. However, different versions of gv have slightly dif-
+ ferent ways of writing this option. You can configure this
variable appropriately.
WARNING: Linux systems may have installed one (or more) versions
- of gv under different names, e.g., ggv, kghostview, etc, but
+ of gv under different names, e.g., ggv, kghostview, etc, but
perhaps not one actually called gv.
- Important note: Normally you will want to have a previewer run
+ Important note: Normally you will want to have a previewer run
detached, so that latexmk doesn't wait for the previewer to ter-
- minate before continuing its work. So normally you should pre-
- fix the command by "start ", which flags to latexmk that it
- should do the detaching of the previewer itself (by whatever
- method is appropriate to the operating system). But sometimes
+ minate before continuing its work. So normally you should pre-
+ fix the command by "start ", which flags to latexmk that it
+ should do the detaching of the previewer itself (by whatever
+ method is appropriate to the operating system). But sometimes
letting latexmk do the detaching is not appropriate (for a vari-
- ety of non-trivial reasons), so you should put the "start " bit
+ ety of non-trivial reasons), so you should put the "start " bit
in yourself, whenever it is needed.
- $ps_previewer_landscape ["start gv -swap %O %S", but start %O %S under
+ $ps_previewer_landscape ["start gv -swap %O %S", but start %O %S under
MS-Windows]
The command to invoke a ps-previewer in landscape mode.
$ps_update_command [""]
- When the postscript previewer is set to be updated by running a
- command, this is the command that is run. See the information
+ When the postscript previewer is set to be updated by running a
+ command, this is the command that is run. See the information
for the variable $ps_update_method.
- 21 September 2021 57
+ 20 November 2021 57
@@ -3767,24 +3767,24 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$ps_update_method [0 under UNIX, 1 under MS-Windows]
- How the postscript viewer updates its display when the .ps file
- has changed. See the information on the variable $dvi_up-
- date_method for the codes. (Note that information needs be
+ How the postscript viewer updates its display when the .ps file
+ has changed. See the information on the variable $dvi_up-
+ date_method for the codes. (Note that information needs be
changed slightly so that for the value 4, to run a command to do
- the update, the command is specified by the variable $ps_up-
- date_command, and for the value 2, to specify update by signal,
+ the update, the command is specified by the variable $ps_up-
+ date_command, and for the value 2, to specify update by signal,
the signal is specified by $ps_update_signal.)
- $ps_update_signal [Under UNIX: SIGHUP, which is a system-dependent
+ $ps_update_signal [Under UNIX: SIGHUP, which is a system-dependent
value]
- The number of the signal that is sent to the pdf viewer when it
- is updated by sending a signal -- see $ps_update_method. The
+ The number of the signal that is sent to the pdf viewer when it
+ is updated by sending a signal -- see $ps_update_method. The
default value is the one appropriate for gv on a UNIX system.
$pvc_timeout [0]
- If this variable is nonzero, there will be a timeout in pvc
- mode after a period of inactivity. Inactivity means a period
- when latexmk has detected no file changes and hence has not
+ If this variable is nonzero, there will be a timeout in pvc
+ mode after a period of inactivity. Inactivity means a period
+ when latexmk has detected no file changes and hence has not
taken any actions like compiling the document. The period of in-
activity is in the variable $pvc_timeout_mins.
@@ -3800,30 +3800,30 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$quote_filenames [1]
This specifies whether substitutions for placeholders in command
specifications (as in $pdflatex) are surrounded by double
- quotes. If this variable is 1 (or any other value Perl regards
+ quotes. If this variable is 1 (or any other value Perl regards
as true), then quoting is done. Otherwise quoting is omitted.
- The quoting method used by latexmk is tested to work correctly
- under UNIX systems (including Linux and Mac OS-X) and under MS-
- Windows. It allows the use of filenames containing special
- characters, notably spaces. (But note that many versions of
- *latex cannot correctly deal with TeX files whose names contain
- spaces. Latexmk's quoting only ensures that such filenames are
- correctly treated by the operating system in passing arguments
+ The quoting method used by latexmk is tested to work correctly
+ under UNIX systems (including Linux and Mac OS-X) and under MS-
+ Windows. It allows the use of filenames containing special
+ characters, notably spaces. (But note that many versions of
+ *latex cannot correctly deal with TeX files whose names contain
+ spaces. Latexmk's quoting only ensures that such filenames are
+ correctly treated by the operating system in passing arguments
to programs.)
$rc_report [1]
- After initialization, whether to give a list of the RC files
+ After initialization, whether to give a list of the RC files
read.
$recorder [1]
Whether to use the -recorder option to (latex Use of this option
- results in a file of extension .fls containing a list of the
- files that these programs have read and written. Latexmk will
+ results in a file of extension .fls containing a list of the
+ files that these programs have read and written. Latexmk will
- 21 September 2021 58
+ 20 November 2021 58
@@ -3832,64 +3832,64 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- then use this file to improve its detection of source files and
+ then use this file to improve its detection of source files and
generated files after a run of *latex.
- It is generally recommended to use this option (or to configure
- the $recorder variable to be on.) But it only works if *latex
- supports the -recorder option, which is true for most current
+ It is generally recommended to use this option (or to configure
+ the $recorder variable to be on.) But it only works if *latex
+ supports the -recorder option, which is true for most current
implementations
- Note about the name of the .fls file: Most implementations of
- *latex produce an .fls file with the same basename as the main
+ Note about the name of the .fls file: Most implementations of
+ *latex produce an .fls file with the same basename as the main
document's LaTeX, e.g., for Document.tex, the .fls file is Docu-
- ment.fls. However, some implementations instead produce files
+ ment.fls. However, some implementations instead produce files
named for the program, i.e., latex.fls or pdflatex.fls. In this
- second case, latexmk copies the latex.fls or pdflatex.fls to a
- file with the basename of the main LaTeX document, e.g., Docu-
+ second case, latexmk copies the latex.fls or pdflatex.fls to a
+ file with the basename of the main LaTeX document, e.g., Docu-
ment.fls.
$search_path_separator [See below for default]
The character separating paths in the environment variables TEX-
- INPUTS, BIBINPUTS, and BSTINPUTS. This variable is mainly used
- by latexmk when the -outdir, -output-directory, -auxdir, and/or
- -aux-directory options are used. In that case latexmk needs to
+ INPUTS, BIBINPUTS, and BSTINPUTS. This variable is mainly used
+ by latexmk when the -outdir, -output-directory, -auxdir, and/or
+ -aux-directory options are used. In that case latexmk needs to
communicate appropriately modified search paths to bibtex,
dvipdf, dvips, and *latex.
- [Comment to technically savvy readers: *latex doesn't actually
- need the modified search path. But, surprisingly, dvipdf and
- dvips do, because sometimes graphics files get generated in the
+ [Comment to technically savvy readers: *latex doesn't actually
+ need the modified search path. But, surprisingly, dvipdf and
+ dvips do, because sometimes graphics files get generated in the
output or aux directories.]
- The default under MSWin and Cygwin is ';' and under UNIX-like
- operating systems (including Linux and OS-X) is ':'. Normally
- the defaults give correct behavior. But there can be difficul-
- ties if your operating system is of one kind, but some of your
- software is running under an emulator for the other kind of op-
- erating system; in that case you'll need to find out what is
- needed, and set $search_path_separator explicitly. (The same
- goes, of course, for unusual operating systems that are not in
+ The default under MSWin and Cygwin is ';' and under UNIX-like
+ operating systems (including Linux and OS-X) is ':'. Normally
+ the defaults give correct behavior. But there can be difficul-
+ ties if your operating system is of one kind, but some of your
+ software is running under an emulator for the other kind of op-
+ erating system; in that case you'll need to find out what is
+ needed, and set $search_path_separator explicitly. (The same
+ goes, of course, for unusual operating systems that are not in
the MSWin, Linux, OS-X, Unix collection.)
$show_time [0]
Whether to show CPU time used.
$silence_logfile_warnings [0]
- Whether after a run of *latex to summarize warnings in the log
- file about undefined citations and references. Setting $si-
+ Whether after a run of *latex to summarize warnings in the log
+ file about undefined citations and references. Setting $si-
lence_logfile_warnings=0 gives the summary of warnings (provided
- silent mode isn't also set), and this is useful to locate unde-
- fined citations and references without searching through the
- much more verbose log file or the screen output of *latex. But
- the summary can also be excessively annoying. The default is
- not to give these warnings. The command line options -si-
- lence_logfile_warning_list and -silence_logfile_warning_list-
+ silent mode isn't also set), and this is useful to locate unde-
+ fined citations and references without searching through the
+ much more verbose log file or the screen output of *latex. But
+ the summary can also be excessively annoying. The default is
+ not to give these warnings. The command line options -si-
+ lence_logfile_warning_list and -silence_logfile_warning_list-
also set this variable.
- 21 September 2021 59
+ 20 November 2021 59
@@ -3898,29 +3898,29 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- Note that multiple occurrences for the same undefined object on
+ Note that multiple occurrences for the same undefined object on
the same page and same line will be compressed to a single warn-
ing.
$silent [0]
- Whether to run silently. Setting $silent to 1 has the same ef-
+ Whether to run silently. Setting $silent to 1 has the same ef-
fect as the -quiet of -silent options on the command line.
$sleep_time [2]
- The time to sleep (in seconds) between checking for source file
+ The time to sleep (in seconds) between checking for source file
changes when running with the -pvc option. This is subject to a
- minimum of one second delay, except that zero delay is also al-
+ minimum of one second delay, except that zero delay is also al-
lowed.
- A value of exactly 0 gives no delay, and typically results in
+ A value of exactly 0 gives no delay, and typically results in
100% CPU usage, which may not be desirable.
$texfile_search [""]
- This is an obsolete variable, replaced by the @default_files
+ This is an obsolete variable, replaced by the @default_files
variable.
- For backward compatibility, if you choose to set $tex-
- file_search, it is a string of space-separated filenames, and
+ For backward compatibility, if you choose to set $tex-
+ file_search, it is a string of space-separated filenames, and
then latexmk replaces @default_files with the filenames in $tex-
file_search to which is added "*.tex".
@@ -3928,34 +3928,34 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
See the documentation for $compiling_cmd.
$tmpdir [See below for default]
- Directory to store temporary files that latexmk may generate
+ Directory to store temporary files that latexmk may generate
while running.
- The default under MSWindows (including cygwin), is to set $tm-
- pdir to the value of the first of whichever of the system envi-
- ronment variables TMPDIR or TEMP exists, otherwise to the cur-
- rent directory. Under other operating systems (expected to be
- UNIX/Linux, including OS-X), the default is the value of the
- system environment variable TMPDIR if it exists, otherwise
+ The default under MSWindows (including cygwin), is to set $tm-
+ pdir to the value of the first of whichever of the system envi-
+ ronment variables TMPDIR or TEMP exists, otherwise to the cur-
+ rent directory. Under other operating systems (expected to be
+ UNIX/Linux, including OS-X), the default is the value of the
+ system environment variable TMPDIR if it exists, otherwise
"/tmp".
$use_make_for_missing_files [0]
Whether to use make to try and make files that are missing after
- a run of *latex, and for which a custom dependency has not been
- found. This is generally useful only when latexmk is used as
- part of a bigger project which is built by using the make pro-
+ a run of *latex, and for which a custom dependency has not been
+ found. This is generally useful only when latexmk is used as
+ part of a bigger project which is built by using the make pro-
gram.
Note that once a missing file has been made, no further calls to
- make will be made on a subsequent run of latexmk to update the
- file. Handling this problem is the job of a suitably defined
- Makefile. See the section "USING latexmk WITH make" for how to
- do this. The intent of calling make from latexmk is merely to
+ make will be made on a subsequent run of latexmk to update the
+ file. Handling this problem is the job of a suitably defined
+ Makefile. See the section "USING latexmk WITH make" for how to
+ do this. The intent of calling make from latexmk is merely to
detect dependencies.
- 21 September 2021 60
+ 20 November 2021 60
@@ -3965,63 +3965,63 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
$view ["default"]
- Which kind of file is to be previewed if a previewer is used.
- The possible values are "default", "dvi", "ps", "pdf". The
+ Which kind of file is to be previewed if a previewer is used.
+ The possible values are "default", "dvi", "ps", "pdf". The
value of "default" means that the "highest" of the kinds of file
generated is to be used (among .dvi, .ps and .pdf).
$warnings_as_errors [0]
- Normally latexmk copies the behavior of latex in treating unde-
- fined references and citations and multiply defined references
- as conditions that give a warning but not an error. The vari-
+ Normally latexmk copies the behavior of latex in treating unde-
+ fined references and citations and multiply defined references
+ as conditions that give a warning but not an error. The vari-
able $warnings_as_errors controls whether this behavior is modi-
fied.
- When the variable is non-zero, latexmk at the end of its run
- will return a non-zero status code to the operating system if
- any of the files processed gives a warning about problems with
+ When the variable is non-zero, latexmk at the end of its run
+ will return a non-zero status code to the operating system if
+ any of the files processed gives a warning about problems with
citations or references (i.e., undefined citations or references
or multiply defined references). This is after latexmk has com-
- pleted all the runs it needs to try and resolve references and
- citations. Thus $warnings_as_errors being nonzero causes la-
+ pleted all the runs it needs to try and resolve references and
+ citations. Thus $warnings_as_errors being nonzero causes la-
texmk to treat such warnings as errors, but only when they occur
on the last run of *latex and only after processing is complete.
- A non-zero value $warnings_as_errors can be set by the command-
+ A non-zero value $warnings_as_errors can be set by the command-
line option -Werror.
The default behavior is normally satisfactory in the usual edit-
- compile-edit cycle. But, for example, latexmk can also be used
- as part of a build process for some bigger project, e.g., for
- creating documentation in the build of a software application.
- Then it is often sensible to treat citation and reference warn-
- ings as errors that require the overall build process to be
+ compile-edit cycle. But, for example, latexmk can also be used
+ as part of a build process for some bigger project, e.g., for
+ creating documentation in the build of a software application.
+ Then it is often sensible to treat citation and reference warn-
+ ings as errors that require the overall build process to be
aborted. Of course, since multiple runs of *latex are generally
- needed to resolve references and citations, what matters is not
+ needed to resolve references and citations, what matters is not
the warnings on the first run, but the warnings on the last run;
latexmk takes this into account appropriately.
- In addition, when preview-continuous mode is used, a non-zero
- value for $warnings_as_errors changes the use of the commands
- $failure_cmd, $warning_cmd, and $success_cmd after a complia-
+ In addition, when preview-continuous mode is used, a non-zero
+ value for $warnings_as_errors changes the use of the commands
+ $failure_cmd, $warning_cmd, and $success_cmd after a complia-
tion. If there are citation or reference warnings, but no other
- errors, the behavior is as follows. If $warning_cmd is set, it
- is used. If it is not set, then then if $warnings_as_errors is
- non-zero and $failure_cmd is set, then $failure_cmd. Otherwise
- $success_cmd is used, if it is set. (The foregoing explanation
+ errors, the behavior is as follows. If $warning_cmd is set, it
+ is used. If it is not set, then then if $warnings_as_errors is
+ non-zero and $failure_cmd is set, then $failure_cmd. Otherwise
+ $success_cmd is used, if it is set. (The foregoing explanation
is rather complicated, because latexmk has to deal with the case
that one or more of the commands isn't set.)
$xdvipdfmx ["xdvipdfmx -E -o %D %O %S"]
- The program to make a pdf file from an xdv file (used in con-
+ The program to make a pdf file from an xdv file (used in con-
junction with xelatex when $pdf_mode=5).
- 21 September 2021 61
+ 20 November 2021 61
@@ -4034,17 +4034,17 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
Switch(es) for the xdvipdfmx program when silent mode is on.
$xelatex ["xelatex %O %S"]
- Specifies the command line for the LaTeX processing program of
- when the xelatex program is called for. See the documentation
- of the -xelatex option for some special properties of latexmk's
+ Specifies the command line for the LaTeX processing program of
+ when the xelatex program is called for. See the documentation
+ of the -xelatex option for some special properties of latexmk's
use of xelatex.
- Note about xelatex: latexmk uses xelatex to make an .xdv rather
- than .pdf file, with the .pdf file being created in a separate
+ Note about xelatex: latexmk uses xelatex to make an .xdv rather
+ than .pdf file, with the .pdf file being created in a separate
step. This is enforced by the use of the -no-pdf option. If %O
- is part of the command for invoking xelatex, then latexmk will
+ is part of the command for invoking xelatex, then latexmk will
insert the -no-pdf option automatically, otherwise you must pro-
- vide the option yourself. See the documentation for the -pdfxe
+ vide the option yourself. See the documentation for the -pdfxe
option for why latexmk makes a .xdv file rather than a .pdf file
when xelatex is used.
@@ -4053,33 +4053,33 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
%xelatex_input_extensions
- This variable specifies the extensions tried by latexmk when it
- finds that an xelatex run resulted in an error that a file has
- not been found, and the file is given without an extension.
- This typically happens when LaTeX commands of the form \in-
- put{file} or \includegraphics{figure}, when the relevant source
+ This variable specifies the extensions tried by latexmk when it
+ finds that an xelatex run resulted in an error that a file has
+ not been found, and the file is given without an extension.
+ This typically happens when LaTeX commands of the form \in-
+ put{file} or \includegraphics{figure}, when the relevant source
file does not exist.
- In this situation, latexmk searches for custom dependencies to
- make the missing file(s), but restricts it to the extensions
- specified by the variable %xelatex_input_extensions. The de-
+ In this situation, latexmk searches for custom dependencies to
+ make the missing file(s), but restricts it to the extensions
+ specified by the variable %xelatex_input_extensions. The de-
fault extensions are 'tex', 'pdf', 'jpg, and 'png'.
See details of the %latex_input_extensions for other information
that equally applies to %xelatex_input_extensions.
$xelatex_silent_switch ["-interaction=batchmode"]
- Switch(es) for the xelatex program (specified in the variable
+ Switch(es) for the xelatex program (specified in the variable
$xelatex) when silent mode is on.
- See details of the $latex_silent_switch for other information
+ See details of the $latex_silent_switch for other information
that equally applies to $xelatex_silent_switch.
CUSTOM DEPENDENCIES
- In any RC file a set of custom dependencies can be set up to convert a
+ In any RC file a set of custom dependencies can be set up to convert a
file with one extension to a file with another. An example use of this
would be to allow latexmk to convert a .fig file to .eps to be included
in the .tex file.
@@ -4087,7 +4087,7 @@ CUSTOM DEPENDENCIES
- 21 September 2021 62
+ 20 November 2021 62
@@ -4098,9 +4098,9 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
Defining a custom dependency:
The old method of configuring latexmk to use a custom dependency was to
- directly manipulate the @cus_dep_list array that contains information
- defining the custom dependencies. (See the section "Old Method of
- Defining Custom Dependencies" for details.) This method still works,
+ directly manipulate the @cus_dep_list array that contains information
+ defining the custom dependencies. (See the section "Old Method of
+ Defining Custom Dependencies" for details.) This method still works,
but is no longer preferred.
A better method is to use the subroutines that allow convenient manipu-
@@ -4113,47 +4113,47 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
The arguments are as follows:
from extension:
- The extension of the file we are converting from (e.g. "fig").
+ The extension of the file we are converting from (e.g. "fig").
It is specified without a period.
to extension:
The extension of the file we are converting to (e.g. "eps"). It
is specified without a period.
- must: If non-zero, the file from which we are converting must exist,
- if it doesn't exist latexmk will give an error message and exit
+ must: If non-zero, the file from which we are converting must exist,
+ if it doesn't exist latexmk will give an error message and exit
unless the -f option is specified. If must is zero and the file
- we are converting from doesn't exist, then no action is taken.
+ we are converting from doesn't exist, then no action is taken.
Generally, the appropriate value of must is zero.
function:
- The name of the subroutine that latexmk should call to perform
- the file conversion. The first argument to the subroutine is
+ The name of the subroutine that latexmk should call to perform
+ the file conversion. The first argument to the subroutine is
the base name of the file to be converted without any extension.
- The subroutines are declared in the syntax of Perl. The func-
- tion should return 0 if it was successful and a nonzero number
+ The subroutines are declared in the syntax of Perl. The func-
+ tion should return 0 if it was successful and a nonzero number
if it failed.
- Naturally add_cus_dep adds a custom dependency with the specified from
- and to extensions. If a custom dependency has been previously defined
- (e.g., in an rcfile that was read earlier), then it is replaced by the
+ Naturally add_cus_dep adds a custom dependency with the specified from
+ and to extensions. If a custom dependency has been previously defined
+ (e.g., in an rcfile that was read earlier), then it is replaced by the
new one.
- The subroutine remove_cus_dep removes the specified custom dependency.
+ The subroutine remove_cus_dep removes the specified custom dependency.
The subroutine show_cus_dep causes a list of the currently defined cus-
tom dependencies to be sent to the screen output.
How custom dependencies are used:
An instance of a custom dependency rule is created whenever latexmk de-
- tects that a run of *latex needs to read a file, like a graphics file,
- whose extension is the to-extension of a custom dependency. Then la-
- texmk examines whether a file exists with the same name, but with the
+ tects that a run of *latex needs to read a file, like a graphics file,
+ whose extension is the to-extension of a custom dependency. Then la-
+ texmk examines whether a file exists with the same name, but with the
- 21 September 2021 63
+ 20 November 2021 63
@@ -4162,45 +4162,45 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- corresponding from-extension, as specified in the custom-dependency.
- If it does, then a corresponding instance of the custom dependency is
- created, after which the rule is invoked whenever the destination file
+ corresponding from-extension, as specified in the custom-dependency.
+ If it does, then a corresponding instance of the custom dependency is
+ created, after which the rule is invoked whenever the destination file
(the one with the to-extension) is out-of-date with respect to the cor-
responding source file.
- To make the new destination file, the Perl subroutine specified in the
+ To make the new destination file, the Perl subroutine specified in the
rule is invoked, with an argument that is the base name of the files in
- question. Simple cases just involve a subroutine invoking an external
- program; this can be done by following the templates below, even by
- those without knowledge of the Perl programming language. Of course,
+ question. Simple cases just involve a subroutine invoking an external
+ program; this can be done by following the templates below, even by
+ those without knowledge of the Perl programming language. Of course,
experts could do something much more elaborate.
- One item in the specification of each custom-dependency rule, labeled
- "must" above, specifies how the rule should be applied when the source
+ One item in the specification of each custom-dependency rule, labeled
+ "must" above, specifies how the rule should be applied when the source
file fails to exist.
- When latex reports that an input file (e.g., a graphics file) does not
+ When latex reports that an input file (e.g., a graphics file) does not
exist, latexmk tries to find a source file and a custom dependency that
can be used to make it. If it succeeds, then it creates an instance of
- the custom dependency and invokes it to make the missing file, after
+ the custom dependency and invokes it to make the missing file, after
which the next pass of latex etc will be able to read the newly created
file.
- Note for advanced usage: The operating system's environment variable
+ Note for advanced usage: The operating system's environment variable
TEXINPUTS can be used to specify a search path for finding files by la-
- tex etc. Correspondingly, when a missing file is reported, latexmk
- looks in the directories specified in TEXINPUTS as well as in the cur-
- rent directory, to find a source file from which an instance of a cus-
+ tex etc. Correspondingly, when a missing file is reported, latexmk
+ looks in the directories specified in TEXINPUTS as well as in the cur-
+ rent directory, to find a source file from which an instance of a cus-
tom dependency can be used to make the missing file.
Function to implement custom dependency, traditional method:
- The function that implements a custom dependency gets the information
+ The function that implements a custom dependency gets the information
on the files to be processed in two ways. The first is through its one
- argument; the argument contains the base name of the source and desti-
+ argument; the argument contains the base name of the source and desti-
nation files. The second way is described later.
- A simple and typical example of code in an initialization rcfile using
+ A simple and typical example of code in an initialization rcfile using
the first method is:
add_cus_dep( 'fig', 'eps', 0, 'fig2eps' );
@@ -4208,18 +4208,18 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
system( "fig2dev -Leps \"$_[0].fig\" \"$_[0].eps\"" );
}
- The first line adds a custom dependency that converts a file with ex-
+ The first line adds a custom dependency that converts a file with ex-
tension "fig", as created by the xfig program, to an encapsulated post-
- script file, with extension "eps". The remaining lines define a sub-
- routine that carries out the conversion. If a rule for converting
- "fig" to "eps" files already exists (e.g., from a previously read-in
- initialization file), the latexmk will delete this rule before making
+ script file, with extension "eps". The remaining lines define a sub-
+ routine that carries out the conversion. If a rule for converting
+ "fig" to "eps" files already exists (e.g., from a previously read-in
+ initialization file), the latexmk will delete this rule before making
the new one.
- 21 September 2021 64
+ 20 November 2021 64
@@ -4228,25 +4228,25 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- Suppose latexmk is using this rule to convert a file "figure.fig" to
- "figure.eps". Then it will invoke the fig2eps subroutine defined in
- the above code with a single argument "figure", which is the basename
- of each of the files (possibly with a path component). This argument
- is referred to by Perl as $_[0]. In the example above, the subroutine
+ Suppose latexmk is using this rule to convert a file "figure.fig" to
+ "figure.eps". Then it will invoke the fig2eps subroutine defined in
+ the above code with a single argument "figure", which is the basename
+ of each of the files (possibly with a path component). This argument
+ is referred to by Perl as $_[0]. In the example above, the subroutine
uses the Perl command system to invoke the program fig2dev. The double
quotes around the string are a Perl idiom that signify that each string
- of the form of a variable name, $_[0] in this case, is to be substi-
+ of the form of a variable name, $_[0] in this case, is to be substi-
tuted by its value.
- If the return value of the subroutine is non-zero, then latexmk will
- assume an error occurred during the execution of the subroutine. In
- the above example, no explicit return value is given, and instead the
- return value is the value returned by the last (and only) statement,
+ If the return value of the subroutine is non-zero, then latexmk will
+ assume an error occurred during the execution of the subroutine. In
+ the above example, no explicit return value is given, and instead the
+ return value is the value returned by the last (and only) statement,
i.e., the invocation of system, which returns the value 0 on success.
- If you use pdflatex, lualatex or xelatex instead of latex, then you
- will probably prefer to convert your graphics files to pdf format, in
- which case you would replace the above code in an initialization file
+ If you use pdflatex, lualatex or xelatex instead of latex, then you
+ will probably prefer to convert your graphics files to pdf format, in
+ which case you would replace the above code in an initialization file
by
add_cus_dep( 'fig', 'pdf, 0, 'fig2pdf' );
@@ -4254,30 +4254,30 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
system( "fig2dev -Lpdf \"$_[0].fig\" \"$_[0].pdf\"" );
}
- Note 1: In the command lines given in the system commands in the above
- examples, double quotes have been inserted around the file names (im-
- plemented by '\"' in the Perl language). They immunize the running of
- the program against special characters in filenames. Very often these
- quotes are not necessary, i.e., they can be omitted. But it is nor-
- mally safer to keep them in. Even though the rules for quoting vary
- between operating systems, command shells and individual pieces of
+ Note 1: In the command lines given in the system commands in the above
+ examples, double quotes have been inserted around the file names (im-
+ plemented by '\"' in the Perl language). They immunize the running of
+ the program against special characters in filenames. Very often these
+ quotes are not necessary, i.e., they can be omitted. But it is nor-
+ mally safer to keep them in. Even though the rules for quoting vary
+ between operating systems, command shells and individual pieces of
software, the quotes in the above examples do not cause problems in the
cases I have tested.
- Note 2: One case in which the quotes are important is when the files
- are in a subdirectory and your operating system is Microsoft Windows.
- Then the separator character for directory components can be either a
- forward slash '/' or Microsoft's more usual backward slash '\'. For-
- ward slashes are generated by latexmk, to maintain its sanity from
- software like MiKTeX that mixes both directory separators; but their
+ Note 2: One case in which the quotes are important is when the files
+ are in a subdirectory and your operating system is Microsoft Windows.
+ Then the separator character for directory components can be either a
+ forward slash '/' or Microsoft's more usual backward slash '\'. For-
+ ward slashes are generated by latexmk, to maintain its sanity from
+ software like MiKTeX that mixes both directory separators; but their
correct use normally requires quoted filenames. (See a log file from a
- run of MiKTeX (at least in v. 2.9) for an example of the use of both
+ run of MiKTeX (at least in v. 2.9) for an example of the use of both
directory separators.)
- Note 3: The subroutines implementing custom dependencies in the exam-
- ples given just have a single line invoking an external program.
- That's the usual situation. But since the subroutines are in the Perl
- language, you can implement much more complicated processing if you
+ Note 3: The subroutines implementing custom dependencies in the exam-
+ ples given just have a single line invoking an external program.
+ That's the usual situation. But since the subroutines are in the Perl
+ language, you can implement much more complicated processing if you
need it.
@@ -4285,7 +4285,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 21 September 2021 65
+ 20 November 2021 65
@@ -4295,19 +4295,19 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
Removing custom dependencies, and when you might need to do this:
- If you have some general custom dependencies defined in the system or
- user initialization file, you may find that for a particular project
- they are undesirable. So you might want to delete the unneeded ones.
- A situation where this would be desirable is where there are multiple
- custom dependencies with the same from-extension or the same to-exten-
- sion. In that case, latexmk might choose a different one from the one
+ If you have some general custom dependencies defined in the system or
+ user initialization file, you may find that for a particular project
+ they are undesirable. So you might want to delete the unneeded ones.
+ A situation where this would be desirable is where there are multiple
+ custom dependencies with the same from-extension or the same to-exten-
+ sion. In that case, latexmk might choose a different one from the one
you want for a specific project. As an example, to remove any "fig" to
"eps" rule you would use:
remove_cus_dep( 'fig', 'eps' );
- If you have complicated sets of custom dependencies, you may want to
- get a listing of the custom dependencies. This is done by using the
+ If you have complicated sets of custom dependencies, you may want to
+ get a listing of the custom dependencies. This is done by using the
line
show_cus_dep();
@@ -4318,29 +4318,29 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
Function implementing custom dependency, alternative methods:
So far the examples for functions to implement custom dependencies have
used the argument of the function to specify the base name of converted
- file. This method has been available since very old versions of la-
+ file. This method has been available since very old versions of la-
texmk, and many examples can be found, e.g., on the web.
- However in later versions of latexmk the internal structure of the im-
+ However in later versions of latexmk the internal structure of the im-
plementation of its "rules" for the steps of processing, including cus-
tom dependencies, became much more powerful. The function implementing
a custom dependency is executed within a special context where a number
- of extra variables and subroutines are defined. Publicly documented
- ones, intended to be long-term stable, are listed below, under the
+ of extra variables and subroutines are defined. Publicly documented
+ ones, intended to be long-term stable, are listed below, under the
heading "Variables and subroutines for processing a rule".
- Examples of their use is given in the following examples, concerning
+ Examples of their use is given in the following examples, concerning
multiple index files and glossaries.
- The only index-file conversion built-in to latexmk is from an ".idx"
- file written on one run of *latex to an ".ind" file to be read in on a
- subsequent run. But with the index.sty package, for example, you can
- create extra indexes with extensions that you configure. Latexmk does
+ The only index-file conversion built-in to latexmk is from an ".idx"
+ file written on one run of *latex to an ".ind" file to be read in on a
+ subsequent run. But with the index.sty package, for example, you can
+ create extra indexes with extensions that you configure. Latexmk does
not know how to deduce the extensions from the information it has. But
- you can easily write a custom dependency. For example if your latex
+ you can easily write a custom dependency. For example if your latex
file uses the command "\newindex{special}{ndx}{nnd}{Special index}" you
- will need to get latexmk to convert files with the extension .ndx to
- .nnd. The most elementary method is to define a custom dependency as
+ will need to get latexmk to convert files with the extension .ndx to
+ .nnd. The most elementary method is to define a custom dependency as
follows:
add_cus_dep( 'ndx', 'nnd', 0, 'ndx2nnd' );
@@ -4351,7 +4351,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 21 September 2021 66
+ 20 November 2021 66
@@ -4360,14 +4360,14 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- Notice the added line compared with earlier examples. The extra line
+ Notice the added line compared with earlier examples. The extra line
gets the extensions "ndx" and "nnd" added to the list of extensions for
generated files; then the extra index files will be deleted by clean-up
operations
- But if you have yet more indexes with yet different extensions, e.g.,
- "adx" and "and", then you will need a separate function for each pair
- of extensions. This is quite annoying. You can use the Run_subst
+ But if you have yet more indexes with yet different extensions, e.g.,
+ "adx" and "and", then you will need a separate function for each pair
+ of extensions. This is quite annoying. You can use the Run_subst
function to simplify the definitions to use a single function:
add_cus_dep( 'ndx', 'nnd', 0, 'dx2nd' );
@@ -4386,38 +4386,38 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
}
push @generated_exts, 'ndx', 'nnd', 'adx', 'and';
- This last example uses the command specification in $makeindex, and so
- any customization you have made for the standard index also applies to
+ This last example uses the command specification in $makeindex, and so
+ any customization you have made for the standard index also applies to
your extra indexes.
Similar techniques can be applied for glossaries.
Those of you with experience with Makefiles, may get concerned that the
- .ndx file is written during a run of *latex and is always later than
+ .ndx file is written during a run of *latex and is always later than
the .nnd last read in. Thus the .nnd appears to be perpetually out-of-
- date. This situation, of circular dependencies, is endemic to latex,
- and is one of the issues that latexmk is programmed to overcome. It
- examines the contents of the files (by use of a checksum), and only
+ date. This situation, of circular dependencies, is endemic to latex,
+ and is one of the issues that latexmk is programmed to overcome. It
+ examines the contents of the files (by use of a checksum), and only
does a remake when the file contents have actually changed.
- Of course if you choose to write random data to the .nnd (or the .aux
- file, etc) that changes on each new run, then you will have a problem.
+ Of course if you choose to write random data to the .nnd (or the .aux
+ file, etc) that changes on each new run, then you will have a problem.
For real experts: See the %hash_calc_ignore_pattern if you have to deal
with such problems.
Old Method of Defining Custom Dependencies:
- In much older versions of latexmk, the only method of defining custom
- dependencies was to directly manipulate the table of custom dependen-
+ In much older versions of latexmk, the only method of defining custom
+ dependencies was to directly manipulate the table of custom dependen-
cies. This is contained in the @cus_dep_list array. It is an array of
- strings, and each string in the array has four items in it, each sepa-
- rated by a space, the from-extension, the to-extension, the "must"
- item, and the name of the subroutine for the custom dependency. These
+ strings, and each string in the array has four items in it, each sepa-
+ rated by a space, the from-extension, the to-extension, the "must"
+ item, and the name of the subroutine for the custom dependency. These
were all defined above.
- 21 September 2021 67
+ 20 November 2021 67
@@ -4427,7 +4427,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
An example of the old method of defining custom dependencies is as fol-
- lows. It is the code in an RC file to ensure automatic conversion of
+ lows. It is the code in an RC file to ensure automatic conversion of
.fig files to .eps files:
push @cus_dep_list, "fig eps 0 fig2eps";
@@ -4435,21 +4435,21 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
return system( "fig2dev -Lps \"$_[0].fig\" \"$_[0].eps\"" );
}
- This method still works, and is almost equivalent to the code given
- earlier that used the add_cus_dep subroutine. However, the old method
- doesn't delete any previous custom-dependency for the same conversion.
+ This method still works, and is almost equivalent to the code given
+ earlier that used the add_cus_dep subroutine. However, the old method
+ doesn't delete any previous custom-dependency for the same conversion.
So the new method is preferable.
ADVANCED CONFIGURATION: Some extra resources and advanced tricks
- For most purposes, simple configuration for latexmk along the lines of
- the examples given is sufficient. But sometimes you need something
- harder. In this section, I indicate some extra possibilities. Gener-
- ally to use these, you need to be fluent in the Perl language, since
+ For most purposes, simple configuration for latexmk along the lines of
+ the examples given is sufficient. But sometimes you need something
+ harder. In this section, I indicate some extra possibilities. Gener-
+ ally to use these, you need to be fluent in the Perl language, since
this is what is used in the rc files.
- See also the section DEALING WITH ERRORS, PROBLEMS, ETC. See also the
+ See also the section DEALING WITH ERRORS, PROBLEMS, ETC. See also the
examples in the directory example_rcfiles in the latexmk distributions.
Even if none of the examples apply to your case, they may give you use-
ful ideas
@@ -4458,13 +4458,13 @@ ADVANCED CONFIGURATION: Some extra resources and advanced tricks
Utility subroutines
ensure_path( var, values ...)
- The first parameter is the name of one of the system's environ-
- ment variables for search paths. The remaining parameters are
- values that should be in the variable. For each of the value
- parameters, if it isn't already in the variable, then it is
+ The first parameter is the name of one of the system's environ-
+ ment variables for search paths. The remaining parameters are
+ values that should be in the variable. For each of the value
+ parameters, if it isn't already in the variable, then it is
prepended to the variable; in that case the environment variable
- is created if it doesn't already exist. For separating values,
- the character appropriate the the operating system is used --
+ is created if it doesn't already exist. For separating values,
+ the character appropriate the the operating system is used --
see the configuration variable $search_path_separator.
Example:
@@ -4472,18 +4472,18 @@ ADVANCED CONFIGURATION: Some extra resources and advanced tricks
ensure_path( 'TEXINPUTS', './custom_cls_sty_files//' );
(In this example, the trailing '//' is documented by TeX systems
- to mean that *latex search for files in the specified directory
+ to mean that *latex search for files in the specified directory
and in all subdirectories.)
- Technically ensure_path works by setting Perl's variable
- $ENV{var}, where var is the name of the target variable. The
- changed value is then passed as an environment variable to any
+ Technically ensure_path works by setting Perl's variable
+ $ENV{var}, where var is the name of the target variable. The
+ changed value is then passed as an environment variable to any
invoked programs.
- 21 September 2021 68
+ 20 November 2021 68
@@ -4494,22 +4494,22 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
Variables and subroutines for processing a rule
A step in the processing is called a rule. One possibility to implement
- the processing of a rule is by a Perl subroutine. This is always the
- case for custom dependencies. Also, for any other rule, you can use a
- subroutine by prefixing the command specification by the word "inter-
+ the processing of a rule is by a Perl subroutine. This is always the
+ case for custom dependencies. Also, for any other rule, you can use a
+ subroutine by prefixing the command specification by the word "inter-
nal" -- see the section FORMAT OF COMMAND SPECIFICATIONS.
- When you use a subroutine for processing a rule, all the possibilities
+ When you use a subroutine for processing a rule, all the possibilities
of Perl programming are available, of course. In addition, some of la-
- texmk's internal variables and subroutines are available. The ones
- listed below are intended to be available to (advanced) users, and
+ texmk's internal variables and subroutines are available. The ones
+ listed below are intended to be available to (advanced) users, and
their specifications will generally have stability under upgrades. Gen-
- erally, the variables should be treated as read-only: Changing their
- values can have bad consequences, since it is liable to mess up the
+ erally, the variables should be treated as read-only: Changing their
+ values can have bad consequences, since it is liable to mess up the
consistency of what latexmk is doing.
- $rule This variable has the name of the rule, as known to latexmk.
- Note that the exact contents of this variable for a given rule
+ $rule This variable has the name of the rule, as known to latexmk.
+ Note that the exact contents of this variable for a given rule
may be dependent on the version of latexmk
$$Psource
@@ -4517,31 +4517,31 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
dollar signs.
$$Pdest
- This gives the name of the main output file if any. Note the
+ This gives the name of the main output file if any. Note the
double dollar signs.
rdb_ensure_file( $rule, file )
- This a subroutine that ensures that the given file is among the
+ This a subroutine that ensures that the given file is among the
source files for the specified rule. It is typically used when,
- during the processing of a rule, it is known that a particular
- extra file is among the dependencies that latexmk should know,
+ during the processing of a rule, it is known that a particular
+ extra file is among the dependencies that latexmk should know,
but its default methods don't find the dependency. Almost always
- the first argument is the name of the rule currently being pro-
+ the first argument is the name of the rule currently being pro-
cessed, so it is then appropriate to specify it by $rule.
- For examples of its use, see some of the files in the directory
- example_rcfiles of latexmk's distribution. Currently the cases
- that use this subroutine are bib2gls-latexmkrc, exceltex_la-
- texmkrc and texinfo-latexmkrc. These illustrate typical cases
- where latexmk's normal processing fails to detect certain extra
+ For examples of its use, see some of the files in the directory
+ example_rcfiles of latexmk's distribution. Currently the cases
+ that use this subroutine are bib2gls-latexmkrc, exceltex_la-
+ texmkrc and texinfo-latexmkrc. These illustrate typical cases
+ where latexmk's normal processing fails to detect certain extra
source files.
rdb_remove_files( $rule, file, ... )
- This subroutine removes one or more files from the dependency
+ This subroutine removes one or more files from the dependency
list for the given rule.
rdb_list_source( $rule )
- This subroutine returns the list of source files (i.e., the de-
+ This subroutine returns the list of source files (i.e., the de-
pendency list) for the given rule.
rdb_set_source( $rule, file, ... )
@@ -4549,7 +4549,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 21 September 2021 69
+ 20 November 2021 69
@@ -4559,63 +4559,63 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
rdb_set_source( $rule, @files )
- This subroutine sets the dependency list for the given rule to
+ This subroutine sets the dependency list for the given rule to
be the specified files. Files that are already in the list have
- unchanged information. Files that were not in the list are
+ unchanged information. Files that were not in the list are
added to it. Files in the previous dependency list that are not
in the newly specified list of files are removed from the depen-
dency list.
Run_subst( command_spec )
This subroutine runs the command specified by command_spec. The
- specification is a string in the format listed in the section
- "Format of Command Specifications". An important action of the
+ specification is a string in the format listed in the section
+ "Format of Command Specifications". An important action of the
Run_subst is to make substitutions of placeholders, e.g., %S and
- %D for source and destination files; these get substituted be-
+ %D for source and destination files; these get substituted be-
fore the command is run. In addition, the command after substi-
- tution is printed to the screen unless latexmk is running in
+ tution is printed to the screen unless latexmk is running in
silent mode.
Coordinated Setting of Commands for *latex
- To set all of $latex, $pdflatex, $lualatex, and $xelatex to a common
- pattern, you can use one of the following subroutines, std_tex_cmds,
+ To set all of $latex, $pdflatex, $lualatex, and $xelatex to a common
+ pattern, you can use one of the following subroutines, std_tex_cmds,
alt_tex_cmds, and set_tex_cmds.
They work as follows
&std_tex_cmds;
- This results in $latex = 'latex %O %S', and similarly for $pdflatex,
- $lualatex, and $xelatex. Note the ampersand in the invocation; this
+ This results in $latex = 'latex %O %S', and similarly for $pdflatex,
+ $lualatex, and $xelatex. Note the ampersand in the invocation; this
indicates to Perl that a subroutine is being called.
&alt_tex_cmds;
- This results in $latex = 'latex %O %P', and similarly for $pdflatex,
- $lualatex, and $xelatex. Note the ampersand in the invocation; this
+ This results in $latex = 'latex %O %P', and similarly for $pdflatex,
+ $lualatex, and $xelatex. Note the ampersand in the invocation; this
indicates to Perl that a subroutine is being called.
set_tex_cmds( CMD_SPEC );
- Here CMD_SPEC is the command line without the program name. This re-
- sults in $latex = 'CMD_SPEC', and similarly for $pdflatex, $lualatex,
+ Here CMD_SPEC is the command line without the program name. This re-
+ sults in $latex = 'CMD_SPEC', and similarly for $pdflatex, $lualatex,
and $xelatex. An example would be
set_tex_cmds( '--interaction=batchmode %O %S' );
Advanced configuration: Using latexmk with make
- This section is targeted only at advanced users who use the make pro-
+ This section is targeted only at advanced users who use the make pro-
gram for complex projects, as for software development, with the depen-
dencies specified by a Makefile.
- Now the basic task of latexmk is to run the appropriate programs to
- make a viewable version of a LaTeX document. However, the usual make
+ Now the basic task of latexmk is to run the appropriate programs to
+ make a viewable version of a LaTeX document. However, the usual make
- 21 September 2021 70
+ 20 November 2021 70
@@ -4624,32 +4624,32 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- program is not suited to this purpose for at least two reasons. First
+ program is not suited to this purpose for at least two reasons. First
is that the use of LaTeX involves circular dependencies (e.g., via .aux
files), and these cannot be handled by the standard make program. Sec-
- ond is that in a large document the set of source files can change
- quite frequently, particularly with included graphics files; in this
- situation keeping a Makefile manually updated is inappropriate and er-
+ ond is that in a large document the set of source files can change
+ quite frequently, particularly with included graphics files; in this
+ situation keeping a Makefile manually updated is inappropriate and er-
ror-prone, especially when the dependencies can be determined automati-
cally. Latexmk solves both of these problems robustly.
- Thus for many standard LaTeX documents latexmk can be used by itself
- without the make program. In a complex project it simply needs to be
- suitably configured. A standard configuration would be to define cus-
- tom dependencies to make graphics files from their source files (e.g.,
- as created by the xfig program). Custom dependencies are latexmk's
+ Thus for many standard LaTeX documents latexmk can be used by itself
+ without the make program. In a complex project it simply needs to be
+ suitably configured. A standard configuration would be to define cus-
+ tom dependencies to make graphics files from their source files (e.g.,
+ as created by the xfig program). Custom dependencies are latexmk's
equivalent of pattern rules in Makefiles.
- Nevertheless there are projects for which a Makefile is appropriate,
+ Nevertheless there are projects for which a Makefile is appropriate,
and it is useful to know how to use latexmk from a Makefile. A typical
example would be to generate documentation for a software project. Po-
- tentially the interaction with the rest of the rules in the Makefile
+ tentially the interaction with the rest of the rules in the Makefile
could be quite complicated, for example if some of the source files for
a LaTeX document are generated by the project's software.
In this section, I give a couple of examples of how latexmk can be use-
- fully invoked from a Makefile. The examples use specific features of
- current versions of GNU make, which is the default on both linux and
+ fully invoked from a Makefile. The examples use specific features of
+ current versions of GNU make, which is the default on both linux and
OS-X systems. They may need modifications for other versions of make.
The simplest method is simply to delegate all the relevant tasks to la-
@@ -4661,27 +4661,27 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
%.pdf : %.tex FORCE_MAKE
latexmk -pdf -dvi- -ps- $<
- (Note: the last line must be introduced by a tab for the Makefile to
- function correctly!) Naturally, if making try.pdf from its associated
- LaTeX file try.tex were the only task to be performed, a direct use of
- latexmk without a Makefile would normally be better. The benefit of
- using a Makefile for a LaTeX document would be in a larger project,
+ (Note: the last line must be introduced by a tab for the Makefile to
+ function correctly!) Naturally, if making try.pdf from its associated
+ LaTeX file try.tex were the only task to be performed, a direct use of
+ latexmk without a Makefile would normally be better. The benefit of
+ using a Makefile for a LaTeX document would be in a larger project,
where lines such as the above would be only be a small part of a larger
Makefile.
The above example has a pattern rule for making a .pdf file from a .tex
- file, and it is defined to use latexmk in the obvious way. There is a
+ file, and it is defined to use latexmk in the obvious way. There is a
conventional default target named "all", with a prerequisite of
- try.pdf. So when make is invoked, by default it makes try.pdf. The
- only complication is that there may be many source files beyond
+ try.pdf. So when make is invoked, by default it makes try.pdf. The
+ only complication is that there may be many source files beyond
try.tex, but these aren't specified in the Makefile, so changes in them
- will not by themselves cause latexmk to be invoked. Instead, the pat-
- tern rule is equipped with a "phony" prerequisite FORCE_MAKE; this has
- the effect of causing the rule to be always out-of-date, so that
+ will not by themselves cause latexmk to be invoked. Instead, the pat-
+ tern rule is equipped with a "phony" prerequisite FORCE_MAKE; this has
+ the effect of causing the rule to be always out-of-date, so that
- 21 September 2021 71
+ 20 November 2021 71
@@ -4690,16 +4690,16 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
LATEXMK(1) General Commands Manual LATEXMK(1)
- latexmk is always run. It is latexmk that decides whether any action
- is needed, e.g., a rerun of pdflatex. Effectively the Makefile dele-
+ latexmk is always run. It is latexmk that decides whether any action
+ is needed, e.g., a rerun of pdflatex. Effectively the Makefile dele-
gates all decisions to latexmk, while make has no knowledge of the list
- of source files except for primary LaTeX file for the document. If
- there are, for example, graphics files to be made, these must be made
+ of source files except for primary LaTeX file for the document. If
+ there are, for example, graphics files to be made, these must be made
by custom dependencies configured in latexmk.
- But something better is needed in more complicated situations, for ex-
+ But something better is needed in more complicated situations, for ex-
ample, when the making of graphics files needs to be specified by rules
- in the Makefile. To do this, one can use a Makefile like the follow-
+ in the Makefile. To do this, one can use a Makefile like the follow-
ing:
TARGETS = document1.pdf document2.pdf
@@ -4718,36 +4718,36 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
%.pdf : %.fig
fig2dev -Lpdf $< $@
- (Again, the lines containing the commands for the rules should be
+ (Again, the lines containing the commands for the rules should be
started with tabs.) This example was inspired by how GNU automake han-
dles automatic dependency tracking of C source files.
- After each run of latexmk, dependency information is put in a file in
- the .deps subdirectory. The Makefile causes these dependency files to
+ After each run of latexmk, dependency information is put in a file in
+ the .deps subdirectory. The Makefile causes these dependency files to
be read by make, which now has the full dependency information for each
- target .pdf file. To make things less trivial it is specificed that
- two files document1.pdf and document2.pdf are the targets. The depen-
+ target .pdf file. To make things less trivial it is specificed that
+ two files document1.pdf and document2.pdf are the targets. The depen-
dency files are .deps/document1.pdfP and .deps/document2.pdfP.
- There is now no need for the phony prerequisite for the rule to make
+ There is now no need for the phony prerequisite for the rule to make
.pdf files from .tex files. But I have added a rule to make .pdf files
- from .fig files produced by the xfig program; these are commonly used
- for graphics insertions in LaTeX documents. Latexmk is arranged to
+ from .fig files produced by the xfig program; these are commonly used
+ for graphics insertions in LaTeX documents. Latexmk is arranged to
output a dependency file after each run. It is given the -recorder op-
- tion, which improves its detection of files generated during a run of
- pdflatex; such files should not be in the dependency list. The -e op-
- tions are used to turn off all custom dependencies, and to document
- this. Instead the -use-make is used to delegate the making of missing
+ tion, which improves its detection of files generated during a run of
+ pdflatex; such files should not be in the dependency list. The -e op-
+ tions are used to turn off all custom dependencies, and to document
+ this. Instead the -use-make is used to delegate the making of missing
files to make itself.
- Suppose in the LaTeX file there is a command \includegraphics{graph},
- and an xfig file "graph.fig" exists. On a first run, pdflatex reports
- a missing file, named "graph". Latexmk succeeds in making "graph.pdf"
+ Suppose in the LaTeX file there is a command \includegraphics{graph},
+ and an xfig file "graph.fig" exists. On a first run, pdflatex reports
+ a missing file, named "graph". Latexmk succeeds in making "graph.pdf"
by calling "make graph.pdf", and after completion of its work, it lists
- 21 September 2021 72
+ 20 November 2021 72
@@ -4757,10 +4757,10 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
"fig.pdf" among the dependents of the file latexmk is making. Then let
- "fig.fig" be updated, and then let make be run. Make first remakes
+ "fig.fig" be updated, and then let make be run. Make first remakes
"fig.pdf", and only then reruns latexmk.
- Thus we now have a method by which all the subsidiary processing is
+ Thus we now have a method by which all the subsidiary processing is
delegated to make.
@@ -4769,35 +4769,35 @@ SEE ALSO
BUGS
Sometimes a viewer (gv) tries to read an updated .ps or .pdf file after
- its creation is started but before the file is complete. Work around:
+ its creation is started but before the file is complete. Work around:
manually refresh (or reopen) display. Or use one of the other preview-
ers and update methods.
- (The following isn't really a bug, but concerns features of preview-
- ers.) Preview continuous mode only works perfectly with certain pre-
- viewers: Xdvi on UNIX/Linux works for dvi files. Gv on UNIX/Linux
- works for both postscript and pdf. Ghostview on UNIX/Linux needs a
- manual update (reopen); it views postscript and pdf. Gsview under MS-
- Windows works for both postscript and pdf, but only reads the updated
- file when its screen is refreshed. Acroread under UNIX/Linux views
- pdf, but the file needs to be closed and reopened to view an updated
- version. Under MS-Windows, acroread locks its input file and so the
- pdf file cannot be updated. (Remedy: configure latexmk to use suma-
+ (The following isn't really a bug, but concerns features of preview-
+ ers.) Preview continuous mode only works perfectly with certain pre-
+ viewers: Xdvi on UNIX/Linux works for dvi files. Gv on UNIX/Linux
+ works for both postscript and pdf. Ghostview on UNIX/Linux needs a
+ manual update (reopen); it views postscript and pdf. Gsview under MS-
+ Windows works for both postscript and pdf, but only reads the updated
+ file when its screen is refreshed. Acroread under UNIX/Linux views
+ pdf, but the file needs to be closed and reopened to view an updated
+ version. Under MS-Windows, acroread locks its input file and so the
+ pdf file cannot be updated. (Remedy: configure latexmk to use suma-
trapdf instead.)
THANKS TO
- Authors of previous versions. Many users with their feedback, and es-
+ Authors of previous versions. Many users with their feedback, and es-
pecially David Coppit (username david at node coppit.org) who made many
- useful suggestions that contributed to version 3, and Herbert Schulz.
- (Please note that the e-mail addresses are not written in their stan-
+ useful suggestions that contributed to version 3, and Herbert Schulz.
+ (Please note that the e-mail addresses are not written in their stan-
dard form to avoid being harvested too easily.)
AUTHOR
- Current version, by John Collins (Version 4.75). Report bugs etc to
+ Current version, by John Collins (Version 4.76). Report bugs etc to
his e-mail (jcc8 at psu.edu).
- Released version can be obtained from CTAN:
- <http://www.ctan.org/pkg/latexmk/>, and from the author's website
+ Released version can be obtained from CTAN:
+ <http://www.ctan.org/pkg/latexmk/>, and from the author's website
<http://www.personal.psu.edu/jcc8/latexmk/>.
Modifications and enhancements by Evan McLean (Version 2.0)
Original script called "go" by David J. Musliner (RCS Version 3.2)
@@ -4813,7 +4813,7 @@ AUTHOR
- 21 September 2021 73
+ 20 November 2021 73
@@ -4879,6 +4879,6 @@ LATEXMK(1) General Commands Manual LATEXMK(1)
- 21 September 2021 74
+ 20 November 2021 74
diff --git a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
index d1a91369f3..d5853ff4a0 100644
--- a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+++ b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
@@ -1,8 +1,5 @@
$mirrors = {
'Africa' => {
- 'Algeria' => {
- 'http://ctan.epst-tlemcen.dz/tex-archive/' => 1,
- },
'Morocco' => {
'https://mirror.marwan.ma/ctan/' => 1,
},
@@ -36,7 +33,6 @@ $mirrors = {
'https://mirror.unpad.ac.id/ctan/' => 1,
},
'Iran' => {
- 'http://ctan.yazd.ac.ir/' => 1,
'https://ctan.asis.ai/' => 1,
'https://ctan.um.ac.ir/' => 1,
'https://mirror.bardia.tech/ctan/' => 1,
@@ -185,6 +181,7 @@ $mirrors = {
'https://mirrors.ucr.ac.cr/CTAN/' => 1,
},
'USA' => {
+ 'http://mirrors.ibiblio.org/pub/mirrors/CTAN/' => 1,
'https://ctan.math.illinois.edu/' => 1,
'https://ctan.math.utah.edu/ctan/tex-archive/' => 1,
'https://ctan.math.washington.edu/tex-archive/' => 1,
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
index e77c0eac39..6662ee086b 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
@@ -26,7 +26,7 @@ depend container_split_src_files/1
depend frozen/0
depend minrelease/2016
depend release/2021
-depend revision/61122
+depend revision/61135
name 00texlive.image
category TLCore
@@ -4481,7 +4481,7 @@ depend setting_available_architectures:aarch64-linux amd64-freebsd amd64-netbsd
name 00texlive.installer
category TLCore
-revision 61116
+revision 61124
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
@@ -35243,7 +35243,7 @@ catalogue-version 1.5
name bib2gls
category Package
-revision 60978
+revision 61134
shortdesc Command line application to convert .bib files to glossaries-extra.sty resource files
longdesc This Java command line application may be used to extract
longdesc glossary information stored in a .bib file and convert it into
@@ -35260,11 +35260,11 @@ longdesc convertgls2bib can be used to convert existing .tex files
longdesc containing definitions (\newglossaryentry etc.) to the .bib
longdesc format required by bib2gls.
depend bib2gls.ARCH
-containersize 1167924
-containerchecksum 7740200fd954a4fb1b8949defa8432e1d3fe39a7c3a28a8050955581363e0e69e0f6a79f9eb648c827f919e7fe482f0c4e2b9005f82fce2f9a020f74f5f6729a
-doccontainersize 5354516
-doccontainerchecksum 1d43a25c8dad764eb215bb980e3d4fed2c2a7504327f13ce2bc60c11ba63a7782ef29c56bdf3091c6feeb8ab7256e2f8d3fdcdf1422aa6004d39ef956daababc
-docfiles size=1921
+containersize 1184680
+containerchecksum 00fc6245cc46f70c379aac828002ce6ec5a84a3d09125d987af086da35f6dbb7e0439e4ebddef48d011e90fa87f67d0f447c70f60985955f5d7de5170d7f4a77
+doccontainersize 5409716
+doccontainerchecksum ce3e00941d2c67ed581bcc3c90da84ec6d864106c16fe77795eb8e7c8a637ab1bf5745c766f2dfaca9aec4c475f751daa3be35f3394f3c5edff0b1efb06fa7a9
+docfiles size=1936
texmf-dist/doc/man/man1/bib2gls.1
texmf-dist/doc/man/man1/bib2gls.man1.pdf
texmf-dist/doc/man/man1/convertgls2bib.1
@@ -35339,9 +35339,9 @@ docfiles size=1921
texmf-dist/doc/support/bib2gls/examples/unaryoperators.bib
texmf-dist/doc/support/bib2gls/examples/usergroups.bib
texmf-dist/doc/support/bib2gls/examples/vegetables.bib
-srccontainersize 1216772
-srccontainerchecksum 997f7c88b465cf7230934f444f92a6eff7c6aae783d461368b89ba386cf14a26cb2bd465551e8231ac23165be72e3da14def942b97ed44049d13e68554ac0a85
-srcfiles size=708
+srccontainersize 1233540
+srccontainerchecksum aa19fd66c5d3782a4d0d4de2f1dcf2d0d5aab6fbe421f54cc59554f10b37f99ba693716b266e8d216f33223aeef27ec40addf85baeaac1441fb999772c6c2579
+srcfiles size=720
texmf-dist/source/support/bib2gls/src/bib2gls-begin.tex
texmf-dist/source/support/bib2gls/src/bib2gls-cite.bib
texmf-dist/source/support/bib2gls/src/bib2gls-src.zip
@@ -35352,7 +35352,7 @@ srcfiles size=708
texmf-dist/source/support/bib2gls/src/convertgls2bib.pod
texmf-dist/source/support/bib2gls/src/gls2bib-src.zip
texmf-dist/source/support/bib2gls/src/texparser-src.zip
-runfiles size=328
+runfiles size=332
texmf-dist/scripts/bib2gls/bib2gls.jar
texmf-dist/scripts/bib2gls/bib2gls.sh
texmf-dist/scripts/bib2gls/convertgls2bib.jar
@@ -35365,7 +35365,7 @@ catalogue-contact-repository https://github.com/nlct/bib2gls
catalogue-ctan /support/bib2gls
catalogue-license gpl3+
catalogue-topics bibtex-util glossary
-catalogue-version 2.8
+catalogue-version 2.9
name bib2gls.aarch64-linux
category Package
@@ -77983,7 +77983,7 @@ catalogue-topics context
name context-transliterator
category ConTeXt
-revision 47085
+revision 61127
shortdesc Transliterate text from 'other' alphabets
relocated 1
longdesc The package will read text in one alphabet, and provide a
@@ -77991,26 +77991,20 @@ longdesc transliterated version in another; this is useful for readers
longdesc who cannot read the original alphabet. The package can make
longdesc allowance for hyphenation.
depend context
-containersize 70668
-containerchecksum d41cd0ebcb99670bd48f8becde633c21401dd9044bbf93618a031da10c59bb8f6d4d6bbc68eecac75965b26f5052f797609d67d791cd7a281f72cd062d3d7388
-doccontainersize 186784
-doccontainerchecksum 4dd501af23511dc81853ddd48ace2aa572c553aea0ba09cf2895b8bd05c4bdf08a6f5e254eab88d4098d441f1d410c0161b1e8b24e3ebf88a38bf364e90b8539
-docfiles size=55
- RELOC/doc/context/third/transliterator/COPYING
+containersize 19012
+containerchecksum f919d3f9e6ab25932cfaeadfc07f86ebdbe00d84dc21236e4775930fc3866cee69cf9a25d373e13655f4396a3c395ea6ea103a28ffb4f00a4e95b7ceaec155c9
+doccontainersize 192808
+doccontainerchecksum 8473c1ca7b48009055f5c33031ec60f80d84dc43396789b0c0c7e6d65bcf014a237088dca07211beae4bfb80377f55cf12a9f379995cff50f52143fc4bc81295
+docfiles size=56
RELOC/doc/context/third/transliterator/VERSION
RELOC/doc/context/third/transliterator/transliterator.pdf details="Package documentation"
RELOC/doc/context/third/transliterator/transliterator.tex
-runfiles size=112
+runfiles size=32
+ RELOC/scripts/context/lua/third/transliterator/mtx-t-transliterate.lua
RELOC/tex/context/interface/third/t-transliterator.xml
- RELOC/tex/context/third/transliterator/t-transliterator.ctl
- RELOC/tex/context/third/transliterator/t-transliterator.log
RELOC/tex/context/third/transliterator/t-transliterator.mkii
RELOC/tex/context/third/transliterator/t-transliterator.mkiv
- RELOC/tex/context/third/transliterator/t-transliterator.mkiv.prep
- RELOC/tex/context/third/transliterator/t-transliterator.pdf
- RELOC/tex/context/third/transliterator/t-transliterator.run
RELOC/tex/context/third/transliterator/t-transliterator.tex
- RELOC/tex/context/third/transliterator/t-transliterator.tuc
RELOC/tex/context/third/transliterator/trans_tables_bg.lua
RELOC/tex/context/third/transliterator/trans_tables_glag.lua
RELOC/tex/context/third/transliterator/trans_tables_gr.lua
@@ -78018,11 +78012,7 @@ runfiles size=112
RELOC/tex/context/third/transliterator/trans_tables_scntfc.lua
RELOC/tex/context/third/transliterator/trans_tables_sr.lua
RELOC/tex/context/third/transliterator/trans_tables_trsc.lua
- RELOC/tex/context/third/transliterator/transliterator.ctl
- RELOC/tex/context/third/transliterator/transliterator.log
RELOC/tex/context/third/transliterator/transliterator.lua
- RELOC/tex/context/third/transliterator/transliterator.run
- RELOC/tex/context/third/transliterator/transliterator.tuc
catalogue-ctan /macros/context/contrib/context-transliterator
catalogue-license bsd
catalogue-topics enc-juggle
@@ -99432,21 +99422,21 @@ catalogue-topics notes editorial
name easybook
category Package
-revision 61120
+revision 61129
shortdesc Typeset Chinese theses or books
relocated 1
longdesc Easybook is a minimalist style template based on the ctexbook
longdesc book document class.
-containersize 17660
-containerchecksum 951eab5aa90ecf5f4259a673e46d344b08ad927ce6c324cc4c01ec367aba34dc9190ec7257412c2b025f426c29c309a33976fca81a1923189bed2a8f317668ad
-doccontainersize 600644
-doccontainerchecksum 373bb1c72724de75e377e49208d79b291e906c15d3f3114d360cf4f9cc4cc87b0768570d68cd94cb39450cb2d4264551c6b971b317cd7fb625650a30a8f34dfa
-docfiles size=163
+containersize 17656
+containerchecksum a4ed7c187ad62f1a38867da2012c1079cd6443317e0eb3ba2ee4317f2f8accdce806cc8160c5174c0db952053d9922ed563ce7f5b63c5960c0bf390bc2d1c884
+doccontainersize 603256
+doccontainerchecksum dd4c8d676373ad2925d4b07bd68bb4f2fdf2ab42ee8e14eacdde2de063a12fc6302e83db7ef5789153077b5d1b9ae03f10c438c3e12647895492a1da7da968fc
+docfiles size=164
RELOC/doc/latex/easybook/README.md details="Readme"
RELOC/doc/latex/easybook/easybook.pdf details="Package documentation" language="zh"
RELOC/doc/latex/easybook/easybook.tex
-srccontainersize 17700
-srccontainerchecksum 7bf4d41dc4d0e33f7d88504675a0cec4f8ad754efb27b7f597ffb893035c0fe841efcb7487073e76f47e026b9261e6266d857b6b56abf95c589b9426c5325a5c
+srccontainersize 17704
+srccontainerchecksum 8a717213f244b3d93bd24c45c16769c36e6d923e479ec0ff5412e0bb51568b85597ed1d87c45cdd19e4ac6981d7cd9cdbf94c71d4db3c2db3431f3a4f922439b
srcfiles size=21
RELOC/source/latex/easybook/easybook.dtx
RELOC/source/latex/easybook/easybook.ins
@@ -99459,7 +99449,7 @@ catalogue-contact-repository https://gitee.com/texl3/easybook
catalogue-ctan /macros/latex/contrib/easybook
catalogue-license lppl1.3c
catalogue-topics book-pub class chinese expl3
-catalogue-version 1.40U
+catalogue-version 1.40V
name easyfig
category Package
@@ -115186,7 +115176,7 @@ catalogue-version 1.0
name fcolumn
category Package
-revision 57428
+revision 61130
shortdesc Typesetting financial tables
relocated 1
longdesc In financial reports, text and currency amounts are regularly
@@ -115194,16 +115184,16 @@ longdesc put in one table, e.g., a year balance or a profit-and-loss
longdesc overview. This package provides the settings for automatically
longdesc typesetting such columns, including the sum line (preceded by a
longdesc rule of the correct width) using the specifier "f".
-containersize 4376
-containerchecksum 9bd1bff80e03a080f2d3778c89c19478691cc119361229cd66b776e24260ddadc30ba37fadd5a82c631c14b369a2045960123f5b1f169ec699d9ad627ded3256
-doccontainersize 319588
-doccontainerchecksum fac7e6eae8c6c3d1c6b05eefcca881f08334ef32a10946227f0244c74460f3a66926e6735342dfbf4da80228a0271b10aed8b42fcf66eb72ae41ff74c9f72af4
+containersize 4396
+containerchecksum 5d17c65e0cc6f3fd74857e681fd6ce4bb6f3ad0767d162e3b88c48cd51bbe3f61d4ab7974b40435b909bbbf3bcbfe0ccb709fb3da64756cad5a152a14e8d47b4
+doccontainersize 318992
+doccontainerchecksum a6951a47758b10603ee69d4bc65b45dfdb0b29ad9986939bd89f74a6fbffa877d7af258ee64e70c7070a71640250701d7e7054a07fac60fd8c72e08a361d1d9e
docfiles size=80
RELOC/doc/latex/fcolumn/README details="Readme"
RELOC/doc/latex/fcolumn/fcolumn.pdf details="Package documentation"
RELOC/doc/latex/fcolumn/makefile
-srccontainersize 21252
-srccontainerchecksum a343431efc38bb19ec033e0791c7b5712324c2dc92837b9d620b6a35d8a6fcec24faf04cb71edfaaf34d8355ad2f40c7ab51b21f4b3ebe1e4e84cef0c2af6487
+srccontainersize 21360
+srccontainerchecksum 738bfbcf9a6689ff1fab74d6fe1235285fe1241cf7fde91d51071be5cf7fc2a5bb2181d3ad842389b0343c57f430470bba5779ecef8aeba8ac1d525c78cb9d09
srcfiles size=18
RELOC/source/latex/fcolumn/fcolumn.dtx
RELOC/source/latex/fcolumn/fcolumn.ins
@@ -115212,7 +115202,7 @@ runfiles size=4
catalogue-ctan /macros/latex/contrib/fcolumn
catalogue-license lppl1.3
catalogue-topics table
-catalogue-version 1.3
+catalogue-version 1.4
name fdsymbol
category Package
@@ -130762,7 +130752,7 @@ catalogue-version 1.0
name glossaries-extra
category Package
-revision 60962
+revision 61131
shortdesc An extension to the glossaries package
relocated 1
longdesc This package provides improvements and extra features to the
@@ -130771,11 +130761,11 @@ longdesc behaviour is changed by glossaries-extra.sty. See the user
longdesc manual glossaries-extra-manual.pdf for further details.
longdesc glossaries-extra.sty requires the glossaries package and,
longdesc naturally, all packages required by glossaries.sty.
-containersize 64540
-containerchecksum e7ede987a4c068492ad9706d5418180149bad0fdec1e552af07a013de6ab6c0d138a21b6f5e8330ed47b2d7fab01249fa5cea601c95d4bf01ac1c6999a8913f5
-doccontainersize 5352592
-doccontainerchecksum f7c4dea68e5f4c429e36fd829ad1bac691124705dbaf3ee325e526f9ec1c49e743cf1b50d51a0208a6de2481088b304dccb93491d3e74eef932d377de67dbb4b
-docfiles size=2018
+containersize 71640
+containerchecksum 232620a42a6209e01afba4b141068e7edf08791df73db7f093d3dc11116c1007e9b529bde74a93c4657f257ec2d8e7467a417ca4e4fd4e0e44c0b329915d0390
+doccontainersize 5645716
+doccontainerchecksum aff1287df1446ffe31cd079b52764a17b4cf92e72c6dda7d25463a470f59f1f9a56ae48efdebe54eb52cf1cc40bb05858f01abf2bbda01393de1b88de5fd1aad
+docfiles size=2162
RELOC/doc/latex/glossaries-extra/CHANGES
RELOC/doc/latex/glossaries-extra/README details="Readme"
RELOC/doc/latex/glossaries-extra/glossaries-extra-code.pdf
@@ -130834,6 +130824,8 @@ docfiles size=2018
RELOC/doc/latex/glossaries-extra/sample-mixedsort.tex
RELOC/doc/latex/glossaries-extra/sample-mixture.pdf
RELOC/doc/latex/glossaries-extra/sample-mixture.tex
+ RELOC/doc/latex/glossaries-extra/sample-multientry.pdf
+ RELOC/doc/latex/glossaries-extra/sample-multientry.tex
RELOC/doc/latex/glossaries-extra/sample-name-font.pdf
RELOC/doc/latex/glossaries-extra/sample-name-font.tex
RELOC/doc/latex/glossaries-extra/sample-nested.pdf
@@ -130880,12 +130872,12 @@ docfiles size=2018
RELOC/doc/latex/glossaries-extra/sample-unitentrycount.tex
RELOC/doc/latex/glossaries-extra/sample.pdf
RELOC/doc/latex/glossaries-extra/sample.tex
-srccontainersize 118628
-srccontainerchecksum 7f42eb012bd419c775ec5f665120c043a3a225bded3bd2fb7b60efb9c4c58948ff36e2c3de208efc18fe94453152818f14073e94e27f20ee091b67b36e4a45cc
-srcfiles size=276
+srccontainersize 131080
+srccontainerchecksum a08cc6e47c863ff751cc2fae417dc8f0e76a488a4bd31ddaea7c08fa9357033c610b5132ca3bd670a256894d2edaf53120178cba37ff61cdd08c28fbc75f726c
+srcfiles size=308
RELOC/source/latex/glossaries-extra/glossaries-extra.dtx
RELOC/source/latex/glossaries-extra/glossaries-extra.ins
-runfiles size=168
+runfiles size=185
RELOC/bibtex/bib/glossaries-extra/example-glossaries-acronym-desc.bib
RELOC/bibtex/bib/glossaries-extra/example-glossaries-acronym.bib
RELOC/bibtex/bib/glossaries-extra/example-glossaries-acronyms-lang.bib
@@ -130914,7 +130906,7 @@ catalogue-contact-bugs https://www.dickimaw-books.com/bugtracker.php?category=gl
catalogue-ctan /macros/latex/contrib/glossaries-extra
catalogue-license lppl1.3
catalogue-topics glossary acronym
-catalogue-version 1.47
+catalogue-version 1.48
name glossaries-finnish
category Package
@@ -186739,25 +186731,25 @@ catalogue-version 0.6
name luamplib
category Package
-revision 60521
+revision 61133
shortdesc Use LuaTeX's built-in MetaPost interpreter
relocated 1
longdesc The package enables the user to specify MetaPost diagrams
longdesc (which may include colour specifications from the color or
longdesc xcolor packages) into a document, using LuaTeX's built-in
longdesc MetaPost library. The facility is only available in PDF mode.
-containersize 11892
-containerchecksum 134d378f0dfa1e8c080712a61e4978c4a7d1ccbf99ad171397e238747045a06ba2e2c71d1abde5e975968912c8ce459071717aac6cad2005aa9aa1c7b765dea0
-doccontainersize 153712
-doccontainerchecksum 0ccde00e067a5c7bb9c5e4ecbec68c1bbaa046ced76afe91f0212924225080f75bdc349f33db638d15d1b3814a9c63aa603ae69649b7cff2854ebf5616d50381
+containersize 11932
+containerchecksum b713b37d4bb2a7c527105de476b66ff9ff7f940e1ebd675016f7b94ab72da8a2e2f110284f4893fce8858ef90d063fa4997cb93c6b3121802e2999efa0b7ffdc
+doccontainersize 153880
+doccontainerchecksum cddb68e0e74f07732acf873aa15346b3e6a95a157f0b9574b101215d6afcdeb7a9863ff16a72fb6d54b77ff86fb527b317570cf65161270b8366887148b1f90b
docfiles size=43
RELOC/doc/luatex/luamplib/NEWS
RELOC/doc/luatex/luamplib/README details="Readme"
RELOC/doc/luatex/luamplib/luamplib.pdf details="Package documentation"
RELOC/doc/luatex/luamplib/test-luamplib-latex.tex
RELOC/doc/luatex/luamplib/test-luamplib-plain.tex
-srccontainersize 26832
-srccontainerchecksum 66cdaeb11b9e288c5e5d6ba28a434b0ed3077437ea3084391a951728782cb848f906abbc6da826f2087a17ca7d6c1dc0deb11d8bfbd4af1e7402315309f8069e
+srccontainersize 26888
+srccontainerchecksum b1e1e1b5c5ea54cee1056d80360cb6f1a7a40ad3efe85417e10eff90370fd1b1fc671e9330cde65150213cf3ad9aef927c5bb96a9f5025b2bedb90dce3406e81
srcfiles size=24
RELOC/source/luatex/luamplib/Makefile
RELOC/source/luatex/luamplib/luamplib.dtx
@@ -186769,7 +186761,7 @@ catalogue-contact-repository https://github.com/lualatex/luamplib
catalogue-ctan /macros/luatex/generic/luamplib
catalogue-license gpl2
catalogue-topics mp-use graphics-in-tex luatex
-catalogue-version 2.21.0
+catalogue-version 2.21.1
name luaotfload
category Package
@@ -193892,17 +193884,17 @@ catalogue-version 0.5
name mcf2graph
category Package
-revision 60729
+revision 61128
shortdesc Draw chemical structure diagrams with Metafont/MetaPost
relocated 1
longdesc The Molecular Coding Format (MCF) is a linear notation for
longdesc describing chemical structure diagrams. This package converts
longdesc MCF to graphic files using Metafont / MetaPost.
-containersize 25420
-containerchecksum 4d9c92f1a2a76e85bf9bf6be0ab052f8707011b20b14d3536f5f554d896d184d7984c0aac578a88478661d6a274ddcaf8c77d2473117cd61dd1fce15548884bd
-doccontainersize 915672
-doccontainerchecksum e5d1d7bc1f2752edb9340d212180bdb2b88815ab189624ec024f148b4b946aaceb4da19debb0220f6bfa480c3fa7f6d9d414dbfe17224e0a291fbfcb65888c74
-docfiles size=279
+containersize 25604
+containerchecksum 8c4f849c2fd076992810c39d706aae1aa5c5a257d84597569984626a48eb6495ef85c213514e5b2d258806f056cbcc20558caaead69b67a3284a8c5251e73fc9
+doccontainersize 921864
+doccontainerchecksum 6bfb23e192a2737558a31d2c11622ffa43d6d9fdb28402239f9fa77c546c3d59c9be2eb64dbfa9d78d70700ca99bcb3d1ebf3e5d727f99648faeab94d6f15b4b
+docfiles size=282
RELOC/doc/metapost/mcf2graph/CHANGELOG
RELOC/doc/metapost/mcf2graph/README details="Readme"
RELOC/doc/metapost/mcf2graph/mcf_data_base.mcf
@@ -193920,7 +193912,7 @@ runfiles size=30
catalogue-ctan /graphics/mcf2graph
catalogue-license mit
catalogue-topics graphics graphics-mpost chemistry
-catalogue-version 4.73
+catalogue-version 4.74
name mcite
category Package
@@ -224206,32 +224198,33 @@ catalogue-version 1.39
name numspell
category Package
-revision 56912
+revision 61132
shortdesc Spelling cardinal and ordinal numbers
relocated 1
longdesc This package supports the spelling of cardinal and ordinal
longdesc numbers. Supported languages are English, French, German,
-longdesc Hungarian, and Italian. The package requires xstring and
+longdesc Hungarian, Italian, and Latin. The package requires xstring and
longdesc iflang.
-containersize 8856
-containerchecksum e3731b00f027319e67ece82e727fde32be4fd80ba508b173f54f89edab3fdf5a98148ea925f68039adec2c09fa7d2284d1809d5a95aebd0e0d364f1b8b82b698
-doccontainersize 226176
-doccontainerchecksum 368b5af91cf3d8142bd243d42a6f3f939a2172aa4837487b78de51caa5ff5801123af307c14aa7b66a32fa791268503bc7ed6ed1cc7ddbaf59c84a57914d615c
-docfiles size=60
+containersize 13784
+containerchecksum 4db8e16d137f47681f754cb2bc1b9b6fb404676f57c5696ef044287a3f0052603978997e597a2b8b13393d59e6531298daa127d72a381770cadef1a29944948b
+doccontainersize 269676
+doccontainerchecksum 8bcc1bcca230a7829a106c66904feb70de818dde2d6c4c7be3a5df3078482bba001a35db85b1c548fdb5aada0018cf6f0dee936641ae5959ebb84dfe953b6b9f
+docfiles size=73
RELOC/doc/latex/numspell/README details="Readme"
RELOC/doc/latex/numspell/numspell.pdf details="Package documentation"
RELOC/doc/latex/numspell/numspell.tex
-runfiles size=25
+runfiles size=34
RELOC/tex/latex/numspell/numspell-english.sty
RELOC/tex/latex/numspell/numspell-french.sty
RELOC/tex/latex/numspell/numspell-german.sty
RELOC/tex/latex/numspell/numspell-italian.sty
+ RELOC/tex/latex/numspell/numspell-latin.sty
RELOC/tex/latex/numspell/numspell-magyar.sty
RELOC/tex/latex/numspell/numspell.sty
catalogue-ctan /macros/latex/contrib/numspell
catalogue-license lppl1.3
catalogue-topics numbers multilingual english french german hungarian italian
-catalogue-version 1.4
+catalogue-version 1.5
name nunito
category Package
@@ -286937,7 +286930,7 @@ binfiles arch=x86_64-solaris size=1
name tex4ht
category Package
-revision 61097
+revision 61135
shortdesc Convert (La)TeX to HTML/XML
longdesc A converter from TeX and LaTeX to SGML-based formats such as
longdesc (X)HTML, MathML, OpenDocument, and Docbook, providing a
@@ -286958,10 +286951,10 @@ longdesc files from them is nontrivial, and generally done with the
longdesc Makefile in development, from which the TeX4ht package in TeX
longdesc Live is updated.
depend tex4ht.ARCH
-containersize 920796
-containerchecksum aa07c83554ed4c0bb397c813c75ebe2e0dd495d36d254ffe5c05ceb31c764e648a8e7db4cf1adac475416cdf09b74bb43875b88e9163f8070e7b7d9bf3fc59f7
+containersize 920856
+containerchecksum bf79cac346df436d9ba3581f45aa3dbc427a852121ec3ca45e34d7dba4108a93dd053b166faf9d141a602a279cee4ac4a966f1395b99d5086893f8a998f4456e
doccontainersize 136384
-doccontainerchecksum 23672166e22cdf9071b26101e19ff14374a06895d6b18597f73262e65b09cfbe8b0f9eddb388d2f6100e71e1f2b642af8109aec3427743170f23a419831c0b09
+doccontainerchecksum 7c8b31d7d225dfa43527c74ac293897f1119d76b5eb7fdae3da53b646563622f0a16680feee61ff6925789d035bd8481514d07d0c0be0af96fe22103b58ad3ab
docfiles size=260
texmf-dist/doc/generic/tex4ht/Makefile
texmf-dist/doc/generic/tex4ht/README details="Readme"
@@ -287033,8 +287026,8 @@ docfiles size=260
texmf-dist/doc/generic/tex4ht/mn56.html
texmf-dist/doc/generic/tex4ht/mn5x.png
texmf-dist/doc/generic/tex4ht/mn6x.png
-srccontainersize 1225152
-srccontainerchecksum 362a7d118529a4724b0badec8b19d7f42323a92ec48300ff77101599871c53e67f6c0448c5591ac63b8a06dcba10c5e4959d8b169b6f5973be03cf72edc44e99
+srccontainersize 1223560
+srccontainerchecksum fc3575ea53c6499ab30bdaad195a78e802a24595d54eb9a0ee7f7d14032d9fbb95587e862d186ac2cadde02ebe84d8d33fd9822d207560890735a71008221699
srcfiles size=3722
texmf-dist/source/generic/tex4ht/ChangeLog
texmf-dist/source/generic/tex4ht/Makefile
@@ -296864,7 +296857,7 @@ docfiles size=376
name texlive-scripts
category TLCore
-revision 61116
+revision 61124
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.
@@ -296872,10 +296865,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 108296
-containerchecksum 3751e24fba746dbbff949ce7e2fc9882164ad498d7b6abf435adf483ae693fcc5d4d268f853faa9961e24f4b4b05000d31575a51ab73ed7e7da775c005361cd1
-doccontainersize 401120
-doccontainerchecksum 711c1aabeac81fff22cafa6d747533df466a04b18376830e1f0439c90b53348503de3b6c9e9cc9f46991fff46cd88fb2c6b96e8e32d02a98f959e5fe87d72a56
+containersize 108284
+containerchecksum 43bc1870e1a6323a94f1893b92de61143215875c437347570dd9c68b2f2b99e3d5fe2e00ee43a6509d57af021521eb69c19dd6246304c9696a70121fed83b0f9
+doccontainersize 401116
+doccontainerchecksum 608b3099eb6492fad30eb0521a5c73e267d8251060d98aaed9e8a74304df54319b959621aa5adbf2afcad60d925d3091f0d6143b126b7bd72f609da38dde8937
docfiles size=497
doc.html
texmf-dist/doc/man/man1/fmtutil-sys.1
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
index e4a5be58bb..39b3d1783c 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
@@ -1 +1 @@
-2d2cba8d36df1bcc189ac1b1c3061168 texlive.tlpdb
+5c6b23228562f7767aa88db739f57f73 texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
index 6177bf0b9e..141da7068a 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
@@ -1 +1 @@
-f8ddf189781b6770f8d010cf45b8255132052b91f7c5268075d2f4c5088df475517cff9a09ab2a56cf1418320e3aded448d05e2de15213e0ae8307049183b19b texlive.tlpdb
+9f83187ccb9f26414a6f4554fa678a3bf69fa076a52f91effe7c94886dee1f7157e84cfff0d9c51bec2d7196ee8a749c99ae6a802f5e5e5e2a9f0b89d434caed texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
index d53ac393c7..7886d8e00c 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-----
-iQEcBAEBCgAGBQJhnDtvAAoJEEzhh34ZQ4xwWkgH/jiZyroOvGwlXv6Sj1s85+PK
-P8p1t9R5eoVjUrj9R8g9/MCPKxuw6dYeH3k+1ERt12zpYF8Vs9WEJtfSpOqcEPUb
-CyuO9SPKUxP7pvy6JOqS5Go9D5ziKpKWZ1Nr2J7xex+ypv8uQ3CYszAYbdPJ7Nd2
-6IHYO7lcuPpmb15taqMwE0YshDGcZBO0A+5EgXYMFoP2JKX+6wEMMlrJ9V9Yrk0i
-bCg5BKQpnEg29xHo4g+wPiv84Ux8DcMDZ6lv3TKcMAflwtzoMNfIf24DDYleb/3Q
-ssfGWj89fKJ2vGjeNCawjTWNhnpwGMxtx0YOW1A5Psvp930Gn1fxqSjqPVv9qRI=
-=BYo3
+iQEcBAEBCgAGBQJhnY1DAAoJEEzhh34ZQ4xw1Z4IAIAuCUAKAWXu742+S+okpHsc
+ob8PIFhxPhdMujzVMOaRNvRRjlNFMxFgAQjfOwTFLuPPSLfytVoiaAAQiuaM7gAo
+4Kodm4vmYFOSg1VsUSmYxfjMxEUkEnBVf+ye2ThCrXxtHTS16lMC/8954RT9jACk
+iub5n78J2iGlwCt8MO6ywehaZvVHgVQ1ctdSN9WwhV53jjWqtGsq/vzEfJNxd/io
+6MYpQIC6dNlOOZqFTZVGnwJGYrHtLZ+5s1DPD6cSuyTH6YxGE0jCt/HvNcjjQ7F9
+81WUSPD3dC4i2ieBc7paa5qhcNoW9dU82xJQx6EBuWTolWGBOiyP79xJNDtYj68=
+=pcin
-----END PGP SIGNATURE-----
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
index 1a9d922b5c..e7caaf61d6 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
Binary files differ
diff --git a/systems/win32/miktex/tm/packages/next/pr.ini b/systems/win32/miktex/tm/packages/next/pr.ini
index 51da3e9cc9..fb3d480cfb 100644
--- a/systems/win32/miktex/tm/packages/next/pr.ini
+++ b/systems/win32/miktex/tm/packages/next/pr.ini
@@ -1,13 +1,13 @@
[repository]
-date=1637702222
+date=1637788571
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=551a482d4acc9aaa076697244fc2d67c
+lstdigest=041bfb4cb6306069db2b46f30b402304
numpkg=5065
relstate=next
-version=7997
+version=7998
;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows.
;;;;-----BEGIN MIKTEX SIGNATURE-----
-;;;; signature/miktex: n8iLWeOr2vivrYpFPS8Yl8EdDshaI1yahfrnpshdcxcrBXUk11/GXCVDI+aC/7CwvcD2Vo9a3EN9BM83wnyPM7aKSmKp9D8Yj1A6CaVOqSbOLHBdAgjEVMY6+yQi+LW53efrgGh5DmEAOZGap4QcK9fIsp9wwgWuZ0u37CdI28StjWU5pMK0qzdGGRMhfIyMCMXU61UJDEkXrJdVJNNQSBjgX5PwIxht7HDAA7poJulr6VzmLB4bYHLCorZnujFb3MHslz1YE6OA68q7vCSVUYXdgsv5VhfSti1ILkZndzmz1kZun47cIOV0w5F/wKVNibcMJTucVUiZJZIT6AiYOQ==
+;;;; signature/miktex: cclCaWILQdb2vB5uKV9J2gkitM+MUrPPSp3Vlq259qbCpimRWKlGHbJJPekHT5um4qhVGMcRwVr2tAqa10Cn5W9aCbM6wSbzKlt6ddEqQEJ7XUr3AMRPd4Yz21gIVToqme0fEcwaJfzHQ9rP7cJSCH7PAsiW3u/o1SP3UfEHLDYN4/5wsT8Lkv6pscAb1CVKfezKkgkQJo3hGdi49lTQBs/+nmP0QQsOw0Uj0CX9wRMY4ADMOajiFyiz4tatQnsi6+9T1wf8jPYq3pLfYCpkkEJqSkdZT7NLRpyYbjOHzz0hkyHr3rn9/9qIweyzPdJVMG8jD3NqA+v9LxBhE1xMpQ==
;;;;-----END MIKTEX SIGNATURE-----
diff --git a/systems/win32/miktex/tm/packages/pr.ini b/systems/win32/miktex/tm/packages/pr.ini
index 7107862118..770a1c12e4 100644
--- a/systems/win32/miktex/tm/packages/pr.ini
+++ b/systems/win32/miktex/tm/packages/pr.ini
@@ -1,13 +1,13 @@
[repository]
-date=1637701915
+date=1637788308
lastupd=apa7 apa7__doc apa7__source easybook easybook__doc easybook__source ekdosis ekdosis__doc ekdosis__source expkv-cs expkv-cs__doc expkv-cs__source fcolumn fcolumn__doc fcolumn__source graphics-def graphics-def__doc kpfonts-otf kpfonts-otf__doc kpfonts-otf__source
-lstdigest=f4ef21067f3c6f4cddd4176f61f7f8f6
+lstdigest=48e9a3b99046efba9d0c2a4296f84ae3
numpkg=5063
relstate=stable
-version=7997
+version=7998
;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows.
;;;;-----BEGIN MIKTEX SIGNATURE-----
-;;;; signature/miktex: h/vvYuz0u2QTZl8YhBCiY5qs5nNKKkty+u3rzDdFWYhaHPeKwFZZ87xsNL/kXTWJKc5YJ9GNcVESNn+0X2gVjvG91dJKENta5d44CozNmfQFsz9CiWEqGV0WdmcImBzecbgLPtBR0pPMd4U6OSpRew/9T+hc/1HTMcOh69slv9tSVOEzG6MSBzNzuP/uWPvlYtYxDEi5OD5l8NlW2vVm6Dlc0uIsputDMGXTyy2aovPj5etIoxAAQICR4B4spOg9I1auHdaizvJMCRlH9NTxFWglb4PEfbNM6EuOYD94/OgLrlb0u9hD9Wwl+ZTnSVZ+kqPjRVhx+ObOGK5Zviz5fQ==
+;;;; signature/miktex: KoaoEqWCyb6V5ED3t6Eaj+2OhBun8wAcDKFd2T1+yii26TBdaegKo0IiAAPgOH3dKis4UoOwiRA7/QTdkLrsCWvsOBpliETSA83//XsXo9GEejlNty+O3Lyk1jWMSGfGmyVS0txRTi9fyVrFXUS8VqAAX7YMLqLIeosF4FIpi0ISGk2tmr+dMrLYF4RNjLoD0fPaZa6OglSwSxqMsAAuPBxA/zFiyE7/w5k5u0AsSJP9aOB3Ch0qADI3EyGyUNIraY65CwNgvCWThwTia72desLie7NVgDwuy2cc6on03KOtcNf9K5Pv4/lH50UojV8Le5uaBQCcDEkNcVlrzpXO5Q==
;;;;-----END MIKTEX SIGNATURE-----
diff --git a/timestamp b/timestamp
index 2d5d0b9a96..297309648d 100644
--- a/timestamp
+++ b/timestamp
@@ -2,4 +2,4 @@
# The source CTAN of this site's material:
dante.ctan.org
# The year-month-day-hour-minute of this site's material:
-2021-11-24-02-02
+2021-11-25-02-02