summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FILES.byname117
-rw-r--r--FILES.byname.gzbin2674470 -> 2674644 bytes
-rw-r--r--FILES.last07days295
-rw-r--r--biblio/ctan-bibdata/ctan.bib32
-rw-r--r--fonts/cascadiamono-otf/README.md45
-rw-r--r--fonts/cascadiamono-otf/doc/cascadiamono-otf-doc.pdfbin0 -> 93858 bytes
-rw-r--r--fonts/cascadiamono-otf/doc/cascadiamono-otf-doc.tex155
-rw-r--r--fonts/cascadiamono-otf/tex/CascadiaMono-Light.fontspec8
-rw-r--r--fonts/cascadiamono-otf/tex/CascadiaMono.fontspec8
-rw-r--r--macros/latex/contrib/easybook/README.md2
-rw-r--r--macros/latex/contrib/easybook/easybook.dtx13
-rw-r--r--macros/latex/contrib/easybook/easybook.pdfbin638418 -> 638421 bytes
-rw-r--r--macros/latex/contrib/easybook/easybook.tex4
-rw-r--r--macros/latex/contrib/fontscale/CHANGELOG.md7
-rw-r--r--macros/latex/contrib/fontscale/beery.cls2
-rw-r--r--macros/latex/contrib/fontscale/fontscale-table-classic.tex2
-rw-r--r--macros/latex/contrib/fontscale/fontscale-table-font-steps.tex2
-rw-r--r--macros/latex/contrib/fontscale/fontscale-table-musical.tex2
-rw-r--r--macros/latex/contrib/fontscale/fontscale.pdfbin105444 -> 106313 bytes
-rw-r--r--macros/latex/contrib/fontscale/fontscale.sty264
-rw-r--r--macros/latex/contrib/fontscale/fontscale.tex26
-rw-r--r--macros/latex/contrib/zugferd/DEMO-rechnung-zugferd.tex95
-rw-r--r--macros/latex/contrib/zugferd/DEPENDS.txt7
-rw-r--r--macros/latex/contrib/zugferd/README.md27
-rw-r--r--macros/latex/contrib/zugferd/zugferd-invoice.sty193
-rw-r--r--macros/latex/contrib/zugferd/zugferd.dtx2285
-rw-r--r--macros/latex/contrib/zugferd/zugferd.ins19
-rw-r--r--macros/latex/contrib/zugferd/zugferd.pdfbin0 -> 245735 bytes
-rw-r--r--support/TeX4ht/source/ChangeLog5
-rw-r--r--support/TeX4ht/source/tex4ht-mathjax.tex8
-rw-r--r--systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl8
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb108
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.md52
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha5122
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc16
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.xzbin2595764 -> 2594580 bytes
-rw-r--r--timestamp2
37 files changed, 3287 insertions, 474 deletions
diff --git a/FILES.byname b/FILES.byname
index 638ed4fcad..e32e17a699 100644
--- a/FILES.byname
+++ b/FILES.byname
@@ -2147,12 +2147,12 @@
2024/09/01 | 1837 | biblio/citation-style-language/README.md
2024/09/01 | 12878 | biblio/citation-style-language/vancouver.csl
2024/09/01 | 4574628 | biblio/citation-style-language.zip
-2024/09/10 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
+2024/09/11 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
2022/10/08 | 127 | biblio/ctan-bibdata/biblatex-ctan/ctan.cbx
-2024/09/10 | 2887237 | biblio/ctan-bibdata/ctan.bib
-2024/09/10 | 3708800 | biblio/ctan-bibdata/ctan.pdf
+2024/09/11 | 2887871 | biblio/ctan-bibdata/ctan.bib
+2024/09/11 | 3708800 | biblio/ctan-bibdata/ctan.pdf
2023/01/16 | 1489 | biblio/ctan-bibdata/README
-2024/09/10 | 4125487 | biblio/ctan-bibdata.zip
+2024/09/11 | 4125649 | biblio/ctan-bibdata.zip
2023/02/23 | 3126 | biblio/pbibtex/pbibtex-base/cpp.awk
2023/02/23 | 1009 | biblio/pbibtex/pbibtex-base/generate.sh
2023/02/23 | 22362 | biblio/pbibtex/pbibtex-base/jabbrv.bst
@@ -5514,7 +5514,7 @@
1990/10/02 | 5440 | dviware/vutex/vaxvms.hlp
1990/10/02 | 812 | dviware/vutex/vaxvms.ins
1990/10/02 | 127576 | dviware/vutex/vutex.web
-2024/09/10 | 80671 | FILES.last07days
+2024/09/11 | 355493 | 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
@@ -18208,6 +18208,12 @@
2023/09/26 | 1700 | fonts/cascadia-code/vf/CascadiaCode-SemiLight-tlf-t1.vf
2023/09/26 | 536 | fonts/cascadia-code/vf/CascadiaCode-SemiLight-tlf-ts1.vf
2023/10/08 | 7498272 | fonts/cascadia-code.zip
+2024/09/11 | 93858 | fonts/cascadiamono-otf/doc/cascadiamono-otf-doc.pdf
+2024/09/11 | 4748 | fonts/cascadiamono-otf/doc/cascadiamono-otf-doc.tex
+2024/09/11 | 1642 | fonts/cascadiamono-otf/README.md
+2024/09/11 | 235 | fonts/cascadiamono-otf/tex/CascadiaMono.fontspec
+2024/09/11 | 260 | fonts/cascadiamono-otf/tex/CascadiaMono-Light.fontspec
+2024/09/11 | 93370 | fonts/cascadiamono-otf.zip
2017/10/30 | 1108 | fonts/ccicons/ccicons.afm
2017/10/30 | 11576 | fonts/ccicons/ccicons.dtx
2017/10/30 | 1613 | fonts/ccicons/ccicons.ins
@@ -233330,12 +233336,12 @@
2008/02/10 | 19110 | macros/latex/contrib/ean13isbn/License.txt
2021/01/24 | 422 | macros/latex/contrib/ean13isbn/README
2021/01/24 | 322624 | macros/latex/contrib/ean13isbn.zip
-2024/09/06 | 90865 | macros/latex/contrib/easybook/easybook.dtx
+2024/09/11 | 90861 | macros/latex/contrib/easybook/easybook.dtx
2024/01/04 | 2081 | macros/latex/contrib/easybook/easybook.ins
-2024/09/06 | 638418 | macros/latex/contrib/easybook/easybook.pdf
-2024/09/06 | 109291 | macros/latex/contrib/easybook/easybook.tex
-2024/09/06 | 913 | macros/latex/contrib/easybook/README.md
-2024/09/06 | 691358 | macros/latex/contrib/easybook.zip
+2024/09/11 | 638421 | macros/latex/contrib/easybook/easybook.pdf
+2024/09/11 | 109291 | macros/latex/contrib/easybook/easybook.tex
+2024/09/11 | 913 | macros/latex/contrib/easybook/README.md
+2024/09/11 | 691356 | 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
@@ -236280,16 +236286,16 @@
2020/07/21 | 126590 | macros/latex/contrib/fontaxes/fontaxes.pdf
2014/03/23 | 1645 | macros/latex/contrib/fontaxes/README
2020/07/22 | 137019 | macros/latex/contrib/fontaxes.zip
-2024/09/06 | 7742 | macros/latex/contrib/fontscale/beery.cls
-2024/09/06 | 4968 | macros/latex/contrib/fontscale/CHANGELOG.md
-2024/09/06 | 105444 | macros/latex/contrib/fontscale/fontscale.pdf
-2024/09/06 | 41696 | macros/latex/contrib/fontscale/fontscale.sty
-2024/09/06 | 1089 | macros/latex/contrib/fontscale/fontscale-table-classic.tex
-2024/09/06 | 837 | macros/latex/contrib/fontscale/fontscale-table-font-steps.tex
-2024/09/06 | 962 | macros/latex/contrib/fontscale/fontscale-table-musical.tex
-2024/09/06 | 22124 | macros/latex/contrib/fontscale/fontscale.tex
+2024/09/10 | 7742 | macros/latex/contrib/fontscale/beery.cls
+2024/09/10 | 5159 | macros/latex/contrib/fontscale/CHANGELOG.md
+2024/09/10 | 106313 | macros/latex/contrib/fontscale/fontscale.pdf
+2024/09/10 | 41852 | macros/latex/contrib/fontscale/fontscale.sty
+2024/09/10 | 1089 | macros/latex/contrib/fontscale/fontscale-table-classic.tex
+2024/09/10 | 837 | macros/latex/contrib/fontscale/fontscale-table-font-steps.tex
+2024/09/10 | 962 | macros/latex/contrib/fontscale/fontscale-table-musical.tex
+2024/09/10 | 22117 | macros/latex/contrib/fontscale/fontscale.tex
2024/05/21 | 260 | macros/latex/contrib/fontscale/README.txt
-2024/09/07 | 120441 | macros/latex/contrib/fontscale.zip
+2024/09/11 | 121468 | macros/latex/contrib/fontscale.zip
2021/08/04 | 75970 | macros/latex/contrib/fontsize/fontsize.dtx
2021/08/04 | 384305 | macros/latex/contrib/fontsize/fontsize.pdf
2021/08/04 | 1511 | macros/latex/contrib/fontsize/README
@@ -259417,6 +259423,14 @@
2023/09/14 | 707422 | macros/latex/contrib/zref.zip
2023/09/14 | 198236 | macros/latex/contrib/zref/zref.dtx
2023/09/14 | 699604 | macros/latex/contrib/zref/zref.pdf
+2024/09/11 | 2785 | macros/latex/contrib/zugferd/DEMO-rechnung-zugferd.tex
+2024/09/11 | 313 | macros/latex/contrib/zugferd/DEPENDS.txt
+2024/09/11 | 1229 | macros/latex/contrib/zugferd/README.md
+2024/09/11 | 215731 | macros/latex/contrib/zugferd.zip
+2024/09/11 | 83936 | macros/latex/contrib/zugferd/zugferd.dtx
+2024/09/11 | 245 | macros/latex/contrib/zugferd/zugferd.ins
+2024/09/11 | 7401 | macros/latex/contrib/zugferd/zugferd-invoice.sty
+2024/09/11 | 245735 | macros/latex/contrib/zugferd/zugferd.pdf
2008/02/10 | 19110 | macros/latex/contrib/zwgetfdate/doc/latex/zwgetfdate/License.txt
2008/06/15 | 248047 | macros/latex/contrib/zwgetfdate/doc/latex/zwgetfdate/zwgetfdate.pdf
2008/06/15 | 3902 | macros/latex/contrib/zwgetfdate/doc/latex/zwgetfdate/zwgetfdate.tex
@@ -303071,7 +303085,7 @@
2021/05/03 | 629 | support/TeX4ht/doc/README
2020/08/24 | 358454 | support/TeX4ht/doc/TeX4ht-doc.tex
2021/05/11 | 262 | support/TeX4ht/README
-2024/09/09 | 259300 | support/TeX4ht/source/ChangeLog
+2024/09/10 | 259521 | 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
@@ -303129,7 +303143,7 @@
2021/05/03 | 22748 | support/TeX4ht/source/tex4ht-jsmath.tex
2021/05/03 | 104631 | support/TeX4ht/source/tex4ht-jsml.tex
2021/05/03 | 90707 | support/TeX4ht/source/tex4ht-jsml-xtpipes.tex
-2024/07/28 | 9026 | support/TeX4ht/source/tex4ht-mathjax.tex
+2024/09/10 | 9450 | support/TeX4ht/source/tex4ht-mathjax.tex
2021/05/03 | 102444 | support/TeX4ht/source/tex4ht-mathltx.tex
2024/09/04 | 167230 | support/TeX4ht/source/tex4ht-mathml.tex
2021/05/03 | 8860 | support/TeX4ht/source/tex4ht-mathplayer.tex
@@ -309257,9 +309271,9 @@
2024/08/07 | 2076 | systems/texlive/tlnet/archive/collection-fontsextra.r71982.tar.xz
2020/03/04 | 560 | systems/texlive/tlnet/archive/collection-fontsrecommended.r54074.tar.xz
2021/12/03 | 536 | systems/texlive/tlnet/archive/collection-fontutils.r61207.tar.xz
-2024/04/07 | 576 | systems/texlive/tlnet/archive/collection-formatsextra.r70875.tar.xz
+2024/09/11 | 572 | systems/texlive/tlnet/archive/collection-formatsextra.r72250.tar.xz
2024/04/30 | 640 | systems/texlive/tlnet/archive/collection-games.r71129.tar.xz
-2024/08/25 | 620 | systems/texlive/tlnet/archive/collection-humanities.r72101.tar.xz
+2024/09/11 | 620 | systems/texlive/tlnet/archive/collection-humanities.r72250.tar.xz
2023/12/14 | 484 | systems/texlive/tlnet/archive/collection-langarabic.r69111.tar.xz
2024/08/30 | 568 | systems/texlive/tlnet/archive/collection-langchinese.r72136.tar.xz
2023/02/14 | 588 | systems/texlive/tlnet/archive/collection-langcjk.r65824.tar.xz
@@ -309835,8 +309849,8 @@
2022/08/11 | 360976 | systems/texlive/tlnet/archive/customdice.doc.r64089.tar.xz
2022/08/11 | 2616 | systems/texlive/tlnet/archive/customdice.r64089.tar.xz
2022/08/11 | 7408 | systems/texlive/tlnet/archive/customdice.source.r64089.tar.xz
-2024/09/02 | 1726568 | systems/texlive/tlnet/archive/customenvs.doc.r72159.tar.xz
-2024/09/02 | 16384 | systems/texlive/tlnet/archive/customenvs.r72159.tar.xz
+2024/09/11 | 1749204 | systems/texlive/tlnet/archive/customenvs.doc.r72249.tar.xz
+2024/09/11 | 17188 | systems/texlive/tlnet/archive/customenvs.r72249.tar.xz
2021/10/31 | 334216 | systems/texlive/tlnet/archive/cutwin.doc.r60901.tar.xz
2021/10/31 | 2836 | systems/texlive/tlnet/archive/cutwin.r60901.tar.xz
2021/10/31 | 9416 | systems/texlive/tlnet/archive/cutwin.source.r60901.tar.xz
@@ -310786,9 +310800,8 @@
2019/02/28 | 2680 | systems/texlive/tlnet/archive/edfnotes.source.r21540.tar.xz
2020/09/01 | 138132 | systems/texlive/tlnet/archive/edichokey.doc.r56223.tar.xz
2020/09/01 | 1868 | systems/texlive/tlnet/archive/edichokey.r56223.tar.xz
-2022/01/24 | 89884 | systems/texlive/tlnet/archive/edmac.doc.r61719.tar.xz
-2022/01/24 | 13172 | systems/texlive/tlnet/archive/edmac.r61719.tar.xz
-2022/01/24 | 952 | systems/texlive/tlnet/archive/edmac.source.r61719.tar.xz
+2024/09/11 | 90968 | systems/texlive/tlnet/archive/edmac.doc.r72250.tar.xz
+2024/09/11 | 13196 | systems/texlive/tlnet/archive/edmac.r72250.tar.xz
2019/02/28 | 300996 | systems/texlive/tlnet/archive/edmargin.doc.r27599.tar.xz
2019/02/28 | 4676 | systems/texlive/tlnet/archive/edmargin.r27599.tar.xz
2019/02/28 | 14440 | systems/texlive/tlnet/archive/edmargin.source.r27599.tar.xz
@@ -313407,9 +313420,9 @@
2024/08/08 | 2945668 | systems/texlive/tlnet/archive/l3experimental.doc.r71991.tar.xz
2024/08/08 | 22084 | systems/texlive/tlnet/archive/l3experimental.r71991.tar.xz
2024/08/08 | 75420 | systems/texlive/tlnet/archive/l3experimental.source.r71991.tar.xz
-2024/08/31 | 12023796 | systems/texlive/tlnet/archive/l3kernel-dev.doc.r72147.tar.xz
-2024/08/31 | 180192 | systems/texlive/tlnet/archive/l3kernel-dev.r72147.tar.xz
-2024/08/31 | 622756 | systems/texlive/tlnet/archive/l3kernel-dev.source.r72147.tar.xz
+2024/09/11 | 12069664 | systems/texlive/tlnet/archive/l3kernel-dev.doc.r72248.tar.xz
+2024/09/11 | 180236 | systems/texlive/tlnet/archive/l3kernel-dev.r72248.tar.xz
+2024/09/11 | 623060 | systems/texlive/tlnet/archive/l3kernel-dev.source.r72248.tar.xz
2024/09/10 | 12024268 | systems/texlive/tlnet/archive/l3kernel.doc.r72241.tar.xz
2024/09/10 | 180392 | systems/texlive/tlnet/archive/l3kernel.r72241.tar.xz
2024/09/10 | 623020 | systems/texlive/tlnet/archive/l3kernel.source.r72241.tar.xz
@@ -318862,13 +318875,13 @@
2024/03/01 | 90916 | systems/texlive/tlnet/archive/tex4ht.amd64-freebsd.r70276.tar.xz
2024/03/01 | 88408 | systems/texlive/tlnet/archive/tex4ht.amd64-netbsd.r70286.tar.xz
2024/03/08 | 70304 | systems/texlive/tlnet/archive/tex4ht.armhf-linux.r70489.tar.xz
-2024/09/10 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r72244.tar.xz
+2024/09/11 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r72251.tar.xz
2024/03/01 | 90856 | systems/texlive/tlnet/archive/tex4ht.i386-freebsd.r70276.tar.xz
2024/03/01 | 91840 | systems/texlive/tlnet/archive/tex4ht.i386-linux.r70276.tar.xz
2024/03/01 | 76840 | systems/texlive/tlnet/archive/tex4ht.i386-netbsd.r70286.tar.xz
2024/03/01 | 86840 | systems/texlive/tlnet/archive/tex4ht.i386-solaris.r70276.tar.xz
-2024/09/10 | 1136520 | systems/texlive/tlnet/archive/tex4ht.r72244.tar.xz
-2024/09/10 | 1495784 | systems/texlive/tlnet/archive/tex4ht.source.r72244.tar.xz
+2024/09/11 | 1136480 | systems/texlive/tlnet/archive/tex4ht.r72251.tar.xz
+2024/09/11 | 1501216 | systems/texlive/tlnet/archive/tex4ht.source.r72251.tar.xz
2024/03/01 | 185964 | systems/texlive/tlnet/archive/tex4ht.universal-darwin.r70274.tar.xz
2024/03/01 | 61988 | systems/texlive/tlnet/archive/tex4ht.windows.r70269.tar.xz
2024/03/11 | 57948 | systems/texlive/tlnet/archive/tex4ht.x86_64-cygwin.r70560.tar.xz
@@ -319146,7 +319159,7 @@
2022/09/13 | 600 | systems/texlive/tlnet/archive/texlive-scripts.amd64-freebsd.r64356.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.amd64-netbsd.r64356.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.armhf-linux.r64356.tar.xz
-2024/09/10 | 436800 | systems/texlive/tlnet/archive/texlive-scripts.doc.r72245.tar.xz
+2024/09/11 | 436736 | systems/texlive/tlnet/archive/texlive-scripts.doc.r72252.tar.xz
2024/07/09 | 908 | systems/texlive/tlnet/archive/texlive-scripts-extra.aarch64-linux.r71749.tar.xz
2024/07/09 | 920 | systems/texlive/tlnet/archive/texlive-scripts-extra.amd64-freebsd.r71749.tar.xz
2024/07/09 | 908 | systems/texlive/tlnet/archive/texlive-scripts-extra.amd64-netbsd.r71749.tar.xz
@@ -319168,7 +319181,7 @@
2022/09/13 | 592 | systems/texlive/tlnet/archive/texlive-scripts.i386-linux.r64356.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.i386-netbsd.r64356.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.i386-solaris.r64356.tar.xz
-2024/09/10 | 114464 | systems/texlive/tlnet/archive/texlive-scripts.r72245.tar.xz
+2024/09/11 | 114424 | systems/texlive/tlnet/archive/texlive-scripts.r72252.tar.xz
2022/09/13 | 580 | systems/texlive/tlnet/archive/texlive-scripts.universal-darwin.r64356.tar.xz
2024/05/10 | 60592 | systems/texlive/tlnet/archive/texlive-scripts.windows.r71215.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.x86_64-cygwin.r64356.tar.xz
@@ -321123,16 +321136,16 @@
2020/07/18 | 47816 | systems/texlive/tlnet/archive/zztex.doc.r55862.tar.xz
2020/07/18 | 101724 | systems/texlive/tlnet/archive/zztex.r55862.tar.xz
2024/07/20 | 125851 | systems/texlive/tlnet/install-tl
-2024/09/10 | 5753696 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2024/09/10 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2024/09/10 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2024/09/11 | 5752780 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2024/09/11 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2024/09/11 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2024/04/13 | 5743 | systems/texlive/tlnet/install-tl-windows.bat
-2024/09/10 | 27717819 | systems/texlive/tlnet/install-tl-windows.exe
-2024/09/10 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2024/09/10 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2024/09/10 | 34425908 | systems/texlive/tlnet/install-tl.zip
-2024/09/10 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2024/09/10 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2024/09/11 | 27716952 | systems/texlive/tlnet/install-tl-windows.exe
+2024/09/11 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2024/09/11 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2024/09/11 | 34425883 | systems/texlive/tlnet/install-tl.zip
+2024/09/11 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2024/09/11 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc
2024/03/13 | 1229 | systems/texlive/tlnet/README.md
2024/03/13 | 0 | systems/texlive/tlnet/TEXLIVE_2024
2024/01/02 | 9011 | systems/texlive/tlnet/tlpkg/gpg/pubring.gpg
@@ -321142,7 +321155,7 @@
2024/01/02 | 1280 | systems/texlive/tlnet/tlpkg/gpg/trustdb.gpg
2024/07/29 | 50743 | systems/texlive/tlnet/tlpkg/installer/config.guess
2010/11/11 | 11651 | systems/texlive/tlnet/tlpkg/installer/COPYING.MinGW-runtime.txt
-2024/09/10 | 7595 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+2024/09/11 | 7498 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2024/07/03 | 228633 | 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
@@ -321184,12 +321197,12 @@
2023/02/21 | 20371 | systems/texlive/tlnet/tlpkg/TeXLive/TLCrypto.pm
2024/05/02 | 5898 | systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm
2023/04/08 | 28167 | systems/texlive/tlnet/tlpkg/TeXLive/TLPaper.pm
-2024/09/10 | 19596728 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
-2024/09/10 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2024/09/11 | 19596673 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2024/09/11 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
2024/06/22 | 87725 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm
-2024/09/10 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
-2024/09/10 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2024/09/10 | 2594964 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2024/09/11 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2024/09/11 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2024/09/11 | 2595764 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
2023/02/20 | 58928 | systems/texlive/tlnet/tlpkg/TeXLive/TLPOBJ.pm
2023/06/11 | 42749 | systems/texlive/tlnet/tlpkg/TeXLive/TLPSRC.pm
2023/02/21 | 16138 | systems/texlive/tlnet/tlpkg/TeXLive/TLTREE.pm
@@ -332869,7 +332882,7 @@
2014/07/05 | 611 | systems/win32/yandy/README
2014/07/05 | 1004628 | systems/win32/yandy/yandy-src.tar.xz
2014/07/05 | 1012416 | systems/win32/yandy.zip
-2024/09/11 | 186 | timestamp
+2024/09/12 | 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 dcf7b842aa..d1fc23c2a6 100644
--- a/FILES.byname.gz
+++ b/FILES.byname.gz
Binary files differ
diff --git a/FILES.last07days b/FILES.last07days
index 10680b1d82..42ccec7118 100644
--- a/FILES.last07days
+++ b/FILES.last07days
@@ -1,5 +1,60 @@
+2024/09/11 | 93858 | fonts/cascadiamono-otf/doc/cascadiamono-otf-doc.pdf
+2024/09/11 | 93370 | fonts/cascadiamono-otf.zip
+2024/09/11 | 913 | macros/latex/contrib/easybook/README.md
+2024/09/11 | 90968 | systems/texlive/tlnet/archive/edmac.doc.r72250.tar.xz
+2024/09/11 | 90861 | macros/latex/contrib/easybook/easybook.dtx
+2024/09/11 | 83936 | macros/latex/contrib/zugferd/zugferd.dtx
+2024/09/11 | 7498 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+2024/09/11 | 7401 | macros/latex/contrib/zugferd/zugferd-invoice.sty
+2024/09/11 | 691356 | macros/latex/contrib/easybook.zip
+2024/09/11 | 638421 | macros/latex/contrib/easybook/easybook.pdf
+2024/09/11 | 623060 | systems/texlive/tlnet/archive/l3kernel-dev.source.r72248.tar.xz
+2024/09/11 | 620 | systems/texlive/tlnet/archive/collection-humanities.r72250.tar.xz
+2024/09/11 | 5752780 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2024/09/11 | 572 | systems/texlive/tlnet/archive/collection-formatsextra.r72250.tar.xz
+2024/09/11 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2024/09/11 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2024/09/11 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2024/09/11 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2024/09/11 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2024/09/11 | 4748 | fonts/cascadiamono-otf/doc/cascadiamono-otf-doc.tex
+2024/09/11 | 436736 | systems/texlive/tlnet/archive/texlive-scripts.doc.r72252.tar.xz
+2024/09/11 | 4125649 | biblio/ctan-bibdata.zip
+2024/09/11 | 3708800 | biblio/ctan-bibdata/ctan.pdf
+2024/09/11 | 34425883 | systems/texlive/tlnet/install-tl.zip
+2024/09/11 | 313 | macros/latex/contrib/zugferd/DEPENDS.txt
+2024/09/11 | 2887871 | biblio/ctan-bibdata/ctan.bib
+2024/09/11 | 2785 | macros/latex/contrib/zugferd/DEMO-rechnung-zugferd.tex
+2024/09/11 | 27716952 | systems/texlive/tlnet/install-tl-windows.exe
+2024/09/11 | 260 | fonts/cascadiamono-otf/tex/CascadiaMono-Light.fontspec
+2024/09/11 | 2595764 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2024/09/11 | 245 | macros/latex/contrib/zugferd/zugferd.ins
+2024/09/11 | 245735 | macros/latex/contrib/zugferd/zugferd.pdf
+2024/09/11 | 235 | fonts/cascadiamono-otf/tex/CascadiaMono.fontspec
+2024/09/11 | 215731 | macros/latex/contrib/zugferd.zip
+2024/09/11 | 19596673 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2024/09/11 | 180236 | systems/texlive/tlnet/archive/l3kernel-dev.r72248.tar.xz
+2024/09/11 | 1749204 | systems/texlive/tlnet/archive/customenvs.doc.r72249.tar.xz
+2024/09/11 | 17188 | systems/texlive/tlnet/archive/customenvs.r72249.tar.xz
+2024/09/11 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
+2024/09/11 | 1642 | fonts/cascadiamono-otf/README.md
+2024/09/11 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2024/09/11 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2024/09/11 | 1501216 | systems/texlive/tlnet/archive/tex4ht.source.r72251.tar.xz
+2024/09/11 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2024/09/11 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2024/09/11 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r72251.tar.xz
+2024/09/11 | 13196 | systems/texlive/tlnet/archive/edmac.r72250.tar.xz
+2024/09/11 | 1229 | macros/latex/contrib/zugferd/README.md
+2024/09/11 | 121468 | macros/latex/contrib/fontscale.zip
+2024/09/11 | 12069664 | systems/texlive/tlnet/archive/l3kernel-dev.doc.r72248.tar.xz
+2024/09/11 | 114424 | systems/texlive/tlnet/archive/texlive-scripts.r72252.tar.xz
+2024/09/11 | 1136480 | systems/texlive/tlnet/archive/tex4ht.r72251.tar.xz
+2024/09/11 | 109291 | macros/latex/contrib/easybook/easybook.tex
2024/09/10 | 9999 | macros/latex-dev/required/l3kernel/l3news10.tex
+2024/09/10 | 962 | macros/latex/contrib/fontscale/fontscale-table-musical.tex
2024/09/10 | 9465 | macros/latex-dev/required/l3kernel/l3news08.tex
+2024/09/10 | 9450 | support/TeX4ht/source/tex4ht-mathjax.tex
2024/09/10 | 9445 | macros/latex-dev/required/l3kernel/l3fp-assign.dtx
2024/09/10 | 91989 | macros/latex-dev/required/l3kernel/l3skip.dtx
2024/09/10 | 90578 | macros/latex-dev/required/l3kernel/l3int.dtx
@@ -10,15 +65,16 @@
2024/09/10 | 84789 | macros/latex-dev/required/l3kernel/l3fp-basics.dtx
2024/09/10 | 84020 | systems/texlive/tlnet/archive/luatexja.source.r72242.tar.xz
2024/09/10 | 83835 | macros/latex-dev/required/l3kernel/l3msg.dtx
+2024/09/10 | 837 | macros/latex/contrib/fontscale/fontscale-table-font-steps.tex
2024/09/10 | 83399 | macros/latex-dev/required/l3kernel/l3clist.dtx
2024/09/10 | 83152 | macros/latex-dev/required/l3kernel/l3prefixes.pdf
2024/09/10 | 82490 | macros/latex-dev/required/l3kernel/l3str.dtx
2024/09/10 | 80271 | macros/latex-dev/required/l3kernel/l3names.dtx
2024/09/10 | 7831 | macros/latex-dev/required/l3kernel/l3fp-functions.dtx
+2024/09/10 | 7742 | macros/latex/contrib/fontscale/beery.cls
2024/09/10 | 76535 | macros/latex-dev/required/l3kernel/l3fp.dtx
2024/09/10 | 76370 | macros/latex-dev/required/l3kernel/l3text-case.dtx
2024/09/10 | 7614217 | macros/latex-dev/required/l3kernel/source3.pdf
-2024/09/10 | 7595 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2024/09/10 | 73845 | macros/latex-dev/required/l3kernel/l3fp-trig.dtx
2024/09/10 | 71792 | macros/latex-dev/required/l3kernel/expl3.dtx
2024/09/10 | 70830 | macros/latex-dev/required/l3kernel/l3prg.dtx
@@ -35,7 +91,6 @@
2024/09/10 | 61182 | macros/latex-dev/required/l3kernel/CHANGELOG.md
2024/09/10 | 610528 | macros/latex-dev/required/l3kernel/expl3.pdf
2024/09/10 | 583240 | systems/texlive/tlnet/archive/joinbox.doc.r72239.tar.xz
-2024/09/10 | 5753696 | systems/texlive/tlnet/install-tl-unx.tar.gz
2024/09/10 | 5678472 | systems/texlive/tlnet/archive/pgf-periodictable.doc.r72236.tar.xz
2024/09/10 | 565497 | macros/latex-dev/required/l3kernel/l3doc.pdf
2024/09/10 | 555201 | macros/latex/contrib/quizztex/doc/quizztex-doc-fr.pdf
@@ -43,6 +98,7 @@
2024/09/10 | 5429 | macros/latex-dev/required/l3kernel/l3news04.tex
2024/09/10 | 536675 | macros/latex/contrib/keytheorems.zip
2024/09/10 | 516812 | systems/texlive/tlnet/archive/pgf-periodictable.r72236.tar.xz
+2024/09/10 | 5159 | macros/latex/contrib/fontscale/CHANGELOG.md
2024/09/10 | 51157 | macros/latex-dev/required/l3kernel/l3prefixes.csv
2024/09/10 | 51091 | macros/latex-dev/required/l3kernel/l3fp-extended.dtx
2024/09/10 | 4977 | macros/latex-dev/required/l3kernel/l3news07.tex
@@ -50,30 +106,22 @@
2024/09/10 | 49321 | macros/latex-dev/required/l3kernel/l3fp-expo.dtx
2024/09/10 | 4911 | macros/latex-dev/required/l3kernel/l3fp-types.dtx
2024/09/10 | 49000 | macros/latex-dev/required/l3kernel/l3text.dtx
-2024/09/10 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
2024/09/10 | 4890 | macros/latex-dev/required/l3kernel/l3news.tex
-2024/09/10 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2024/09/10 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc
-2024/09/10 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2024/09/10 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2024/09/10 | 48009 | macros/latex/contrib/panneauxroute/doc/PanneauxRoute-doc.tex
2024/09/10 | 47237 | macros/latex-dev/required/l3kernel/l3fp-aux.dtx
2024/09/10 | 4716 | macros/latex-dev/required/l3kernel/l3news05.tex
2024/09/10 | 4570 | macros/latex-dev/required/l3kernel/l3legacy.dtx
2024/09/10 | 4540 | systems/texlive/tlnet/archive/spelatex.r72240.tar.xz
-2024/09/10 | 436800 | systems/texlive/tlnet/archive/texlive-scripts.doc.r72245.tar.xz
2024/09/10 | 43211 | macros/latex-dev/required/l3kernel/l3sys.dtx
2024/09/10 | 41859 | macros/latex-dev/required/l3kernel/l3debug.dtx
+2024/09/10 | 41852 | macros/latex/contrib/fontscale/fontscale.sty
2024/09/10 | 41683 | macros/latex/contrib/quizztex/tex/quizztex.sty
-2024/09/10 | 4125487 | biblio/ctan-bibdata.zip
2024/09/10 | 40727 | macros/latex-dev/required/l3kernel/l3sort.dtx
2024/09/10 | 396223 | macros/latex-dev/required/l3kernel/l3news.pdf
2024/09/10 | 3784 | systems/texlive/tlnet/archive/joinbox.r72239.tar.xz
-2024/09/10 | 3708800 | biblio/ctan-bibdata/ctan.pdf
2024/09/10 | 35929 | macros/latex-dev/required/l3kernel/l3unicode.dtx
2024/09/10 | 35262 | macros/latex-dev/required/l3kernel/l3quark.dtx
2024/09/10 | 34447 | macros/latex-dev/required/l3kernel/l3cctab.dtx
-2024/09/10 | 34425908 | systems/texlive/tlnet/install-tl.zip
2024/09/10 | 3269168 | systems/texlive/tlnet/archive/luatexja.doc.r72242.tar.xz
2024/09/10 | 31533 | macros/latex-dev/required/l3kernel/l3intarray.dtx
2024/09/10 | 31020 | macros/latex-dev/required/l3kernel/l3kernel-functions.dtx
@@ -81,13 +129,11 @@
2024/09/10 | 305484 | macros/latex-dev/required/l3kernel/l3regex.dtx
2024/09/10 | 302112 | systems/texlive/tlnet/archive/fourier.doc.r72243.tar.xz
2024/09/10 | 296515 | macros/latex-dev/required/l3kernel/l3styleguide.pdf
-2024/09/10 | 2887237 | biblio/ctan-bibdata/ctan.bib
2024/09/10 | 2821 | macros/latex-dev/required/l3kernel/l3prefixes.tex
2024/09/10 | 2775 | macros/latex/contrib/panneauxroute/tex/Interdiction/PanneauRouteB14_80.pdf
-2024/09/10 | 27717819 | systems/texlive/tlnet/install-tl-windows.exe
2024/09/10 | 274932 | systems/texlive/tlnet/archive/fourier.r72243.tar.xz
2024/09/10 | 26784 | macros/latex-dev/required/l3kernel/l3pdf.dtx
-2024/09/10 | 2594964 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2024/09/10 | 259521 | support/TeX4ht/source/ChangeLog
2024/09/10 | 25573 | macros/latex-dev/required/l3kernel/source3body.tex
2024/09/10 | 250161 | macros/latex-dev/required/l3kernel/l3news09.pdf
2024/09/10 | 24949 | macros/latex-dev/required/l3kernel/l3deprecation.dtx
@@ -100,12 +146,12 @@
2024/09/10 | 23200 | systems/texlive/tlnet/archive/spelatex.source.r72240.tar.xz
2024/09/10 | 231345 | macros/latex-dev/required/l3kernel/l3syntax-changes.pdf
2024/09/10 | 2282 | macros/latex-dev/required/l3kernel/source3.tex
+2024/09/10 | 22117 | macros/latex/contrib/fontscale/fontscale.tex
2024/09/10 | 217172 | systems/texlive/tlnet/archive/circledtext.doc.r72238.tar.xz
2024/09/10 | 205020 | macros/latex-dev/required/l3kernel/l3news12.pdf
2024/09/10 | 20460 | macros/latex-dev/required/l3kernel/l3text-purify.dtx
2024/09/10 | 20310 | macros/latex-dev/required/l3kernel/l3fp-symbolic.dtx
2024/09/10 | 19637 | macros/latex-dev/required/l3kernel/l3fp-convert.dtx
-2024/09/10 | 19596728 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
2024/09/10 | 19547 | macros/latex-dev/required/l3kernel/l3bitset.dtx
2024/09/10 | 1949 | macros/latex-dev/required/l3kernel/interface3.tex
2024/09/10 | 192532 | systems/texlive/tlnet/archive/luatexja.r72242.tar.xz
@@ -116,31 +162,24 @@
2024/09/10 | 174896 | macros/plain/contrib/edmac.zip
2024/09/10 | 172812 | systems/texlive/tlnet/archive/bmstu-iu8.doc.r72237.tar.xz
2024/09/10 | 170102 | macros/latex-dev/required/l3kernel/l3news11.pdf
-2024/09/10 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
2024/09/10 | 16624 | macros/latex-dev/required/l3kernel/l3text-map.dtx
2024/09/10 | 16509093 | macros/texinfo/texinfo.zip
2024/09/10 | 163484 | macros/latex-dev/required/l3kernel/l3news08.pdf
2024/09/10 | 160354 | macros/latex-dev/required/l3kernel/l3doc.dtx
-2024/09/10 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2024/09/10 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
2024/09/10 | 151591 | macros/latex-dev/required/l3kernel/l3news06.pdf
2024/09/10 | 151176 | macros/latex-dev/required/l3kernel/l3docstrip.pdf
2024/09/10 | 150919 | macros/latex-dev/required/l3kernel/l3news02.pdf
2024/09/10 | 15034 | macros/latex/contrib/panneauxroute/tex/PanneauxRoute.sty
2024/09/10 | 150302 | macros/latex-dev/required/l3kernel/l3news10.pdf
2024/09/10 | 149633 | macros/latex-dev/required/l3kernel/l3tl.dtx
-2024/09/10 | 1495784 | systems/texlive/tlnet/archive/tex4ht.source.r72244.tar.xz
2024/09/10 | 14913 | macros/latex-dev/required/l3kernel/l3news12.tex
2024/09/10 | 148747 | macros/latex-dev/required/l3kernel/l3news03.pdf
-2024/09/10 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2024/09/10 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
2024/09/10 | 144306 | macros/latex-dev/required/l3kernel/l3file.dtx
2024/09/10 | 14362970 | install/macros/latex-dev/required/l3kernel-dev.tds.zip
2024/09/10 | 14152 | macros/latex-dev/required/l3kernel/l3flag.dtx
2024/09/10 | 14092153 | macros/latex-dev/required/l3kernel.zip
2024/09/10 | 13931620 | systems/texlive/tlnet/archive/spelatex.doc.r72240.tar.xz
2024/09/10 | 138809 | macros/latex-dev/required/l3kernel/l3basics.dtx
-2024/09/10 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r72244.tar.xz
2024/09/10 | 13292 | macros/latex-dev/required/l3kernel/l3tl-build.dtx
2024/09/10 | 130536 | macros/latex-dev/required/l3kernel/l3keys.dtx
2024/09/10 | 13028 | systems/texlive/tlnet/archive/bmstu-iu8.r72237.tar.xz
@@ -154,13 +193,13 @@
2024/09/10 | 117504 | macros/latex-dev/required/l3kernel/l3token.dtx
2024/09/10 | 114754 | macros/latex-dev/required/l3kernel/l3news04.pdf
2024/09/10 | 1146042 | macros/latex/contrib/panneauxroute.zip
-2024/09/10 | 114464 | systems/texlive/tlnet/archive/texlive-scripts.r72245.tar.xz
2024/09/10 | 113735 | macros/latex-dev/required/l3kernel/l3str-convert.dtx
-2024/09/10 | 1136520 | systems/texlive/tlnet/archive/tex4ht.r72244.tar.xz
2024/09/10 | 112524 | macros/latex-dev/required/l3kernel/l3news05.pdf
2024/09/10 | 112286 | macros/latex-dev/required/l3kernel/l3color.dtx
+2024/09/10 | 1089 | macros/latex/contrib/fontscale/fontscale-table-classic.tex
2024/09/10 | 108493 | macros/latex-dev/required/l3kernel/l3prop.dtx
2024/09/10 | 107383 | macros/latex-dev/required/l3kernel/l3news09.tex
+2024/09/10 | 106313 | macros/latex/contrib/fontscale/fontscale.pdf
2024/09/10 | 105021 | macros/latex-dev/required/l3kernel/l3fp-parse.dtx
2024/09/10 | 100477 | macros/latex-dev/required/l3kernel/l3seq.dtx
2024/09/09 | 9999 | macros/latex/required/l3kernel/l3news10.tex
@@ -340,7 +379,6 @@
2024/09/09 | 26790 | macros/latex/required/l3kernel/l3pdf.dtx
2024/09/09 | 26541 | macros/latex/contrib/spelatex/spelatex-spel/4.1.4.0.0.ogg
2024/09/09 | 26397 | macros/latex/contrib/spelatex/spelatex-spel/date.ogg
-2024/09/09 | 259300 | support/TeX4ht/source/ChangeLog
2024/09/09 | 2580 | macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/IU8-01-base.sty
2024/09/09 | 257949 | macros/latex/contrib/spelatex/spelatex-spel/1.3.0.0.0-2.ogg
2024/09/09 | 2566 | macros/latex/contrib/circledtext/README.md
@@ -3247,7 +3285,6 @@
2024/09/07 | 12073 | macros/texinfo/texinfo/tp/t/results/linemacro/verb_in_linemacro_call.pl
2024/09/07 | 1206 | macros/texinfo/texinfo/tp/Texinfo/XS/parsetexi/text.h
2024/09/07 | 1206 | macros/texinfo/texinfo/tp/Texinfo/XS/parsetexi/conf.h
-2024/09/07 | 120441 | macros/latex/contrib/fontscale.zip
2024/09/07 | 12031 | macros/texinfo/texinfo/tp/init/html32.pm
2024/09/07 | 120295 | macros/texinfo/texinfo/install-info/tests/Makefile.in
2024/09/07 | 12012 | macros/texinfo/texinfo/tp/t/results/invalid_nestings/style_not_closed_root_commands.pl
@@ -3466,32 +3503,23 @@
2024/09/07 | 10017 | macros/texinfo/texinfo/tp/t/results/macro/macro_in_brace_command.pl
2024/09/07 | 10004 | macros/texinfo/texinfo/tp/t/results/indices/w_lines_count.pl
2024/09/07 | 10004 | macros/texinfo/texinfo/tp/t/results/coverage_braces/nested_in_sc.pl
-2024/09/06 | 962 | macros/latex/contrib/fontscale/fontscale-table-musical.tex
-2024/09/06 | 913 | macros/latex/contrib/easybook/README.md
-2024/09/06 | 90865 | macros/latex/contrib/easybook/easybook.dtx
2024/09/06 | 8695 | macros/latex/contrib/mitthesis/README.md
2024/09/06 | 85146 | macros/latex/contrib/animate/animate.tex
-2024/09/06 | 837 | macros/latex/contrib/fontscale/fontscale-table-font-steps.tex
-2024/09/06 | 7742 | macros/latex/contrib/fontscale/beery.cls
2024/09/06 | 772430 | macros/latex/contrib/naive-ebnf/naive-ebnf.pdf
2024/09/06 | 767257 | macros/latex/contrib/naive-ebnf.zip
-2024/09/06 | 691358 | macros/latex/contrib/easybook.zip
2024/09/06 | 64292 | fonts/newcomputermodern/doc/newcm-doc.tex
2024/09/06 | 6411324 | fonts/simpleicons.zip
-2024/09/06 | 638418 | macros/latex/contrib/easybook/easybook.pdf
2024/09/06 | 634028 | systems/texlive/tlnet/archive/quran-es.r72203.tar.xz
2024/09/06 | 596 | fonts/simpleicons/tfm/SimpleIcons--simpleiconsonethree.tfm
2024/09/06 | 568844 | systems/texlive/tlnet/archive/scrhack.doc.r72204.tar.xz
2024/09/06 | 5672 | systems/texlive/tlnet/archive/regulatory.r72197.tar.xz
2024/09/06 | 5049 | support/crossrefware/bibdoiadd.1
2024/09/06 | 502 | macros/latex/contrib/rub-kunstgeschichte/README.md
-2024/09/06 | 4968 | macros/latex/contrib/fontscale/CHANGELOG.md
2024/09/06 | 47395 | macros/latex/contrib/mitthesis/mitthesis.cls
2024/09/06 | 454268 | macros/latex/contrib/rub-kunstgeschichte.zip
2024/09/06 | 452128 | systems/texlive/tlnet/archive/framedsyntax.doc.r72199.tar.xz
2024/09/06 | 445288 | systems/texlive/tlnet/archive/regulatory.doc.r72197.tar.xz
2024/09/06 | 4302 | macros/latex/contrib/animate/README.md
-2024/09/06 | 41696 | macros/latex/contrib/fontscale/fontscale.sty
2024/09/06 | 4130050 | macros/latex/contrib/mitthesis.zip
2024/09/06 | 404 | systems/texlive/tlnet/archive/collection-langspanish.r72203.tar.xz
2024/09/06 | 402 | macros/latex/contrib/euromoney/README.md
@@ -3538,7 +3566,6 @@
2024/09/06 | 2472580 | fonts/simpleicons/opentype/SimpleIcons.otf
2024/09/06 | 236994 | support/crossrefware/crossrefware.pdf
2024/09/06 | 2285015 | fonts/simpleicons/type1/SimpleIcons.pfb
-2024/09/06 | 22124 | macros/latex/contrib/fontscale/fontscale.tex
2024/09/06 | 20980 | systems/texlive/tlnet/archive/scrhack.source.r72204.tar.xz
2024/09/06 | 208 | macros/latex/contrib/naive-ebnf/DEPENDS.txt
2024/09/06 | 18780 | macros/latex/contrib/rub-kunstgeschichte/rub-kunstgeschichte.dtx
@@ -3574,12 +3601,9 @@
2024/09/06 | 1207 | fonts/simpleicons/README.md
2024/09/06 | 1138628 | fonts/newcomputermodern/otf/NewCMMath-Regular.otf
2024/09/06 | 1133188 | systems/texlive/tlnet/archive/aiplans.doc.r72202.tar.xz
-2024/09/06 | 109291 | macros/latex/contrib/easybook/easybook.tex
-2024/09/06 | 1089 | macros/latex/contrib/fontscale/fontscale-table-classic.tex
2024/09/06 | 1078 | macros/latex/contrib/naive-ebnf/LICENSE.txt
2024/09/06 | 1071856 | fonts/newcomputermodern/otf/NewCMMath-Bold.otf
2024/09/06 | 10568 | systems/texlive/tlnet/archive/framedsyntax.source.r72199.tar.xz
-2024/09/06 | 105444 | macros/latex/contrib/fontscale/fontscale.pdf
2024/09/05 | 9960 | macros/latex/contrib/euromoney/tex/euromoney-20centsimplebw.pdf
2024/09/05 | 955673 | macros/latex/contrib/euromoney/tex/euromoney-100euro.pdf
2024/09/05 | 9313 | macros/xetex/latex/quran-es/tex/quran-es.sty
@@ -3649,196 +3673,3 @@
2024/09/05 | 1085558 | macros/xetex/latex/quran-es.zip
2024/09/05 | 1065279 | macros/xetex/latex/quran-es/tex/qurantext-esii.translation.def
2024/09/05 | 10164 | macros/latex/contrib/euromoney/tex/euromoney-20centsimple.pdf
-2024/09/04 | 9627 | macros/latex/contrib/profcollege/latex/PfCLabyrintheJeu.tex
-2024/09/04 | 9559 | macros/latex/contrib/profcollege/latex/PfCReseauxSociaux.tex
-2024/09/04 | 94924 | macros/latex/contrib/profcollege/latex/PfCTableauxUnites.tex
-2024/09/04 | 948 | macros/latex/contrib/profcollege/latex/PfCDobble.tex
-2024/09/04 | 9206 | macros/latex/contrib/profcollege/latex/PfCCalisson.tex
-2024/09/04 | 9197 | macros/latex/contrib/profcollege/latex/PfCPuissanceQuatre.tex
-2024/09/04 | 9032956 | systems/texlive/tlnet/archive/pdfmanagement-testphase.doc.r72182.tar.xz
-2024/09/04 | 8900 | macros/latex/contrib/profcollege/latex/PfCBillard.tex
-2024/09/04 | 8835 | macros/latex/contrib/profcollege/latex/PfCShikaku.tex
-2024/09/04 | 8796 | macros/latex/contrib/profcollege/latex/PfCYohaku.tex
-2024/09/04 | 8685 | macros/latex/contrib/scrhack/README.md
-2024/09/04 | 8580 | macros/latex/contrib/profcollege/latex/PfCTortueBase.tex
-2024/09/04 | 84324 | macros/latex/contrib/profcollege/latex/PfCStatistiques.tex
-2024/09/04 | 8306 | macros/latex/contrib/profcollege/latex/PfCPourcentage.tex
-2024/09/04 | 8266 | macros/latex/contrib/profcollege/latex/PfCRepresenterTableur.tex
-2024/09/04 | 8184 | macros/latex/contrib/profcollege/latex/PfCCalculsFractions.tex
-2024/09/04 | 8106 | macros/latex/contrib/profcollege/latex/PfCDessinGradue.tex
-2024/09/04 | 8054 | macros/latex/contrib/profcollege/latex/PfCProbabilites.tex
-2024/09/04 | 8026 | macros/latex/contrib/profcollege/latex/PfCMulJap.tex
-2024/09/04 | 78908 | macros/latex/contrib/profcollege/latex/PfCReperage.tex
-2024/09/04 | 7766 | macros/latex/contrib/profcollege/latex/PfCRangementNombres.tex
-2024/09/04 | 7742 | macros/latex/contrib/profcollege/latex/PfCHorloge.tex
-2024/09/04 | 772 | macros/latex/contrib/regulatory/doc/example.md
-2024/09/04 | 7654 | macros/latex/contrib/profcollege/latex/PfCCible.tex
-2024/09/04 | 7598 | macros/latex/contrib/profcollege/latex/PfCNumerationsAnciennes.tex
-2024/09/04 | 75064 | macros/latex/contrib/scrhack/scrhack-2023-07-07.dtx
-2024/09/04 | 7449 | macros/latex/contrib/profcollege/latex/PfCNombreAstral.tex
-2024/09/04 | 7360 | macros/latex/contrib/profcollege/latex/PfCFrise.tex
-2024/09/04 | 72 | macros/latex/contrib/regulatory/doc/example2.bib
-2024/09/04 | 7274 | macros/latex/contrib/profcollege/latex/PfCPuzzleSommePyramide.tex
-2024/09/04 | 7226 | macros/latex/contrib/profcollege/latex/PfCColorilude.tex
-2024/09/04 | 7065 | macros/latex/contrib/profcollege/latex/PfCGrimuku.tex
-2024/09/04 | 676 | macros/latex/contrib/regulatory/doc/example2.tex
-2024/09/04 | 6736 | macros/latex/contrib/profcollege/latex/PfCMulJal.tex
-2024/09/04 | 6702 | macros/latex/contrib/profcollege/latex/PfCRepresenterEntier.tex
-2024/09/04 | 667091 | install/macros/latex/contrib/heria.tds.zip
-2024/09/04 | 6649 | macros/latex/contrib/profcollege/latex/PfCMentalo.tex
-2024/09/04 | 632512 | macros/latex/contrib/heria.zip
-2024/09/04 | 6274 | macros/latex/contrib/profcollege/latex/PfCDontCountDots.tex
-2024/09/04 | 6158 | macros/latex/contrib/profcollege/latex/PfCTectonic.tex
-2024/09/04 | 60403 | macros/latex/contrib/profcollege/latex/PfCNotionFonction.tex
-2024/09/04 | 60317 | macros/latex/contrib/profcollege/latex/PfCDistributivite.tex
-2024/09/04 | 5843 | macros/latex/contrib/profcollege/latex/PfCCalculsDetailles.tex
-2024/09/04 | 5836 | macros/latex/contrib/profcollege/latex/PfCConversion.tex
-2024/09/04 | 57382 | macros/latex/contrib/profcollege/latex/PfCThales.tex
-2024/09/04 | 5711174 | macros/latex/contrib/profcollege/doc/profcollege-doc.zip
-2024/09/04 | 5493 | macros/latex/contrib/profcollege/latex/PfCMidpoint.tex
-2024/09/04 | 54860 | systems/texlive/tlnet/archive/pdfmanagement-testphase.r72182.tar.xz
-2024/09/04 | 5436 | macros/latex/contrib/profcollege/latex/PfCTablesOperations.tex
-2024/09/04 | 5376 | macros/latex/contrib/profcollege/latex/PfCArbreChiffre.tex
-2024/09/04 | 5284 | macros/latex/contrib/profcollege/latex/PfCGeometrie.tex
-2024/09/04 | 5231 | macros/latex/contrib/profcollege/latex/PfCProbaFrequence.tex
-2024/09/04 | 5100 | macros/latex/contrib/profcollege/latex/PfCCalculatrice.tex
-2024/09/04 | 50114 | macros/latex/contrib/regulatory/doc/example2-nl.pdf
-2024/09/04 | 49921 | macros/latex/contrib/regulatory/doc/example2-en.pdf
-2024/09/04 | 4869 | macros/latex/contrib/profcollege/latex/PfCCryptarithme.tex
-2024/09/04 | 4824 | macros/latex/contrib/profcollege/latex/PfCFutoshiki.tex
-2024/09/04 | 4814 | macros/latex/contrib/profcollege/latex/PfCCritere.tex
-2024/09/04 | 4780 | macros/latex/contrib/profcollege/latex/PfCDiagrammeRadar.tex
-2024/09/04 | 4676 | macros/latex/contrib/profcollege/latex/PfCMosaique.tex
-2024/09/04 | 4613 | macros/latex/contrib/profcollege/latex/PfCLego.tex
-2024/09/04 | 460751 | macros/latex/contrib/framedsyntax/FramedSyntax.pdf
-2024/09/04 | 455 | macros/latex/contrib/regulatory/doc/md-example.tex
-2024/09/04 | 4537 | macros/latex/contrib/profcollege/latex/PfCJeuRangement.tex
-2024/09/04 | 4515 | macros/latex/contrib/profcollege/latex/PfCCheque.tex
-2024/09/04 | 4440 | macros/latex/contrib/profcollege/latex/PfCQuestionsRelier.tex
-2024/09/04 | 44398 | macros/latex/contrib/regulatory/doc/regulatory.tex
-2024/09/04 | 4387 | macros/latex/contrib/profcollege/latex/PfCMulPiecesPuzzle.tex
-2024/09/04 | 4326 | macros/latex/contrib/profcollege/latex/PfCFractionAireCarre.tex
-2024/09/04 | 4286 | macros/latex/contrib/profcollege/latex/PfCDomino.tex
-2024/09/04 | 4194 | macros/latex/contrib/profcollege/latex/PfCVisualisationMulDeci.tex
-2024/09/04 | 4113 | macros/latex/contrib/profcollege/latex/PfCDecompFracDeci.tex
-2024/09/04 | 40570 | macros/latex/contrib/scrhack/scrhack.dtx
-2024/09/04 | 4004 | macros/latex/contrib/profcollege/latex/PfCKenKen.tex
-2024/09/04 | 3956 | macros/latex/contrib/profcollege/latex/PfCEratosthene.tex
-2024/09/04 | 3889 | macros/latex/contrib/profcollege/latex/PfCEnquete.tex
-2024/09/04 | 3869 | macros/latex/contrib/heria/heria.ins
-2024/09/04 | 3780 | macros/latex/contrib/profcollege/latex/PfCDefiCalc.tex
-2024/09/04 | 3603 | macros/latex/contrib/profcollege/latex/PfCFubuki.tex
-2024/09/04 | 35949 | macros/latex/contrib/profcollege/latex/PfCPavage.tex
-2024/09/04 | 3577 | macros/latex/contrib/profcollege/latex/PfCBarresCalculs.tex
-2024/09/04 | 35623 | macros/latex/contrib/framedsyntax/FramedSyntax.dtx
-2024/09/04 | 34199 | macros/latex/contrib/profcollege/latex/PfCSolides.tex
-2024/09/04 | 34185 | macros/latex/contrib/profcollege/latex/PfCRepresenterFraction.tex
-2024/09/04 | 3412 | macros/latex/contrib/profcollege/latex/PfCFicheMemo.tex
-2024/09/04 | 3387 | macros/latex/contrib/regulatory/doc/regulatory-preamble.tex
-2024/09/04 | 3295 | macros/latex/contrib/profcollege/latex/PfCSquaro.tex
-2024/09/04 | 31967 | macros/latex/contrib/profcollege/latex/PfCCartesJeux.tex
-2024/09/04 | 3157 | macros/latex/contrib/profcollege/latex/PfCRLE.tex
-2024/09/04 | 311062 | macros/latex/contrib/heria/heria-proposal.pdf
-2024/09/04 | 3107 | macros/latex/contrib/profcollege/latex/PfCMotsCodes.tex
-2024/09/04 | 3083 | macros/latex/contrib/profcollege/latex/PfCBarreNiveaux.tex
-2024/09/04 | 305232 | macros/latex/contrib/heria/heria.pdf
-2024/09/04 | 301798 | macros/latex/contrib/scrhack/scrhack-2023-07-07.pdf
-2024/09/04 | 30124 | macros/latex/contrib/profcollege/latex/PfCUrneProba.tex
-2024/09/04 | 301231 | macros/latex/contrib/scrhack/scrhack.pdf
-2024/09/04 | 29978 | macros/latex/contrib/profcollege/latex/PfCDecomposerNombrePremier.tex
-2024/09/04 | 29499 | macros/latex/contrib/profcollege/latex/PfCLabyrintheNombre.tex
-2024/09/04 | 28269 | macros/latex/contrib/profcollege/latex/PfCRappelsFormules.tex
-2024/09/04 | 2779 | macros/latex/contrib/profcollege/latex/PfCEngrenagesBase.tex
-2024/09/04 | 2753 | macros/latex/contrib/profcollege/latex/PfCQuiSuisJe.tex
-2024/09/04 | 27503 | macros/latex/contrib/profcollege/latex/PfCPythagore.tex
-2024/09/04 | 2733 | macros/latex/contrib/profcollege/latex/PfCKakurasu.tex
-2024/09/04 | 27096 | macros/latex/contrib/regulatory/doc/example1-en.pdf
-2024/09/04 | 27052 | macros/latex/contrib/regulatory/doc/example1-nl.pdf
-2024/09/04 | 26425 | macros/latex/contrib/profcollege/latex/ProfCollege.sty
-2024/09/04 | 2625 | macros/latex/contrib/profcollege/latex/PfCEcritureLettres.tex
-2024/09/04 | 262288 | systems/texlive/tlnet/archive/verifycommand.doc.r72180.tar.xz
-2024/09/04 | 2576 | systems/texlive/tlnet/archive/verifycommand.r72180.tar.xz
-2024/09/04 | 25681 | macros/latex/contrib/profcollege/latex/PfCPavageAvecMotifImage.tex
-2024/09/04 | 25441 | macros/latex/contrib/profcollege/latex/PfCQuestionsFlash.tex
-2024/09/04 | 24920 | macros/latex/contrib/profcollege/latex/PfCTrigonometrie.tex
-2024/09/04 | 2442 | macros/latex/contrib/profcollege/latex/PfCKakuro.tex
-2024/09/04 | 24316 | macros/latex/contrib/profcollege/latex/PfCPatronPaves.tex
-2024/09/04 | 2412 | macros/latex/contrib/profcollege/latex/PfCTableauDoubleEntree.tex
-2024/09/04 | 2407 | macros/latex/contrib/profcollege/latex/PfCGrades.tex
-2024/09/04 | 23660 | systems/texlive/tlnet/archive/bibtexperllibs.r72184.tar.xz
-2024/09/04 | 2362 | macros/latex/contrib/profcollege/latex/PfCMotsCroises.tex
-2024/09/04 | 2331 | macros/latex/contrib/profcollege/latex/PfCHiddenMessage.tex
-2024/09/04 | 23244 | macros/latex/contrib/euromoney/tex/euromoney-2euro.pdf
-2024/09/04 | 230612 | systems/texlive/tlnet/archive/bibtexperllibs.source.r72184.tar.xz
-2024/09/04 | 229738 | macros/latex/contrib/regulatory/doc/regulatory-nl.pdf
-2024/09/04 | 229664 | macros/latex/contrib/regulatory/doc/regulatory-en.pdf
-2024/09/04 | 2293 | macros/latex/contrib/profcollege/latex/PfCGaram.tex
-2024/09/04 | 22193 | macros/latex/contrib/profcollege/latex/PfCTrio.tex
-2024/09/04 | 22183 | macros/latex/contrib/regulatory/tex/regulatory.sty
-2024/09/04 | 2204 | macros/latex/contrib/profcollege/latex/PfCBonSortie.tex
-2024/09/04 | 21624 | macros/latex/contrib/profcollege/latex/PfCFactorisation.tex
-2024/09/04 | 20467 | macros/latex/contrib/profcollege/latex/PfCRose.tex
-2024/09/04 | 200 | macros/latex/contrib/regulatory/doc/example1.bib
-2024/09/04 | 1996 | macros/latex/contrib/profcollege/latex/PfCMotsEmpiles.tex
-2024/09/04 | 19336 | systems/texlive/tlnet/archive/bibtexperllibs.doc.r72184.tar.xz
-2024/09/04 | 19284 | macros/latex/contrib/profcollege/latex/PfCPattern.tex
-2024/09/04 | 1913 | macros/latex/contrib/profcollege/latex/PfCRapido.tex
-2024/09/04 | 1891 | macros/latex/contrib/profcollege/latex/PfCScratch.tex
-2024/09/04 | 17917 | macros/latex/contrib/profcollege/latex/PfCOperationsTrou.tex
-2024/09/04 | 17915 | macros/latex/contrib/profcollege/latex/PfCRondeInfernale.tex
-2024/09/04 | 1730 | macros/latex/contrib/profcollege/latex/PfCCartesMentales.tex
-2024/09/04 | 17175 | macros/latex/contrib/profcollege/latex/PfCFonctionAffine.tex
-2024/09/04 | 16913 | macros/latex/contrib/profcollege/latex/PfCSerpent.tex
-2024/09/04 | 16880 | macros/latex/contrib/profcollege/latex/PfCPyramideCalculs.tex
-2024/09/04 | 1680 | macros/latex/contrib/regulatory/doc/regulatory-nl.tex
-2024/09/04 | 16529 | macros/latex/contrib/profcollege/latex/PfCResoudreEquation.tex
-2024/09/04 | 16325 | macros/latex/contrib/profcollege/latex/PfCArbreCalcul.tex
-2024/09/04 | 16218 | macros/latex/contrib/profcollege/latex/PfCPropor.tex
-2024/09/04 | 16173 | macros/latex/contrib/profcollege/latex/PfCModeleBarre.tex
-2024/09/04 | 15852 | macros/latex/contrib/profcollege/latex/PfCCartographie.tex
-2024/09/04 | 15737 | macros/latex/contrib/profcollege/latex/PfCRepresentationGraphique.tex
-2024/09/04 | 15246 | macros/latex/contrib/profcollege/latex/PfCEcritureUnites.tex
-2024/09/04 | 15125 | macros/latex/contrib/profcollege/latex/PfCMulArt.tex
-2024/09/04 | 15091 | macros/latex/contrib/profcollege/latex/PfCEcrireunQCM.tex
-2024/09/04 | 1483 | macros/latex/contrib/regulatory/doc/regulatory-en.tex
-2024/09/04 | 1450 | macros/latex/contrib/heria/README.md
-2024/09/04 | 14478 | macros/latex/contrib/profcollege/latex/PfCAssemblagesSolides.tex
-2024/09/04 | 14424 | macros/latex/contrib/profcollege/latex/PfCCAN.tex
-2024/09/04 | 14409 | macros/latex/contrib/profcollege/latex/PfCDessinerRatio.tex
-2024/09/04 | 14277 | macros/latex/contrib/profcollege/latex/PfCNonogramme.tex
-2024/09/04 | 1419 | macros/latex/contrib/regulatory/doc/example2-nl.tex
-2024/09/04 | 1415 | macros/latex/contrib/profcollege/latex/PfCPyraVoca.tex
-2024/09/04 | 14142 | macros/latex/contrib/profcollege/latex/PfCTicketCaisse.tex
-2024/09/04 | 141416 | systems/texlive/tlnet/archive/pdfmanagement-testphase.source.r72182.tar.xz
-2024/09/04 | 1410 | macros/latex/contrib/regulatory/doc/example2-en.tex
-2024/09/04 | 1306 | macros/latex/contrib/regulatory/README.md
-2024/09/04 | 12870 | macros/latex/contrib/profcollege/latex/PfCPixelArt.tex
-2024/09/04 | 12668 | macros/latex/contrib/profcollege/latex/PfCFractionNombre.tex
-2024/09/04 | 12557 | macros/latex/contrib/profcollege/latex/PfCProgrammeCalcul.tex
-2024/09/04 | 12432 | macros/latex/contrib/profcollege/latex/PfCNumberHive.tex
-2024/09/04 | 12392 | macros/latex/contrib/profcollege/latex/PfCSimplifierFraction.tex
-2024/09/04 | 12305 | macros/latex/contrib/profcollege/latex/PfCCalculsCroises.tex
-2024/09/04 | 12167 | macros/latex/contrib/profcollege/latex/PfCRecyclage.tex
-2024/09/04 | 12157 | macros/latex/contrib/profcollege/latex/PfCVueCubes.tex
-2024/09/04 | 12108 | systems/texlive/tlnet/archive/verifycommand.source.r72180.tar.xz
-2024/09/04 | 1189 | macros/latex/contrib/regulatory/doc/example1-nl.tex
-2024/09/04 | 1188 | macros/latex/contrib/regulatory/doc/example1-en.tex
-2024/09/04 | 11878 | macros/latex/contrib/profcollege/latex/PfCSommeAngles.tex
-2024/09/04 | 1176 | macros/latex/contrib/profcollege/latex/PfCBonbon.tex
-2024/09/04 | 11764 | macros/latex/contrib/profcollege/latex/PfCDefiTables.tex
-2024/09/04 | 11430 | macros/latex/contrib/profcollege/latex/PfCCompteBon.tex
-2024/09/04 | 11297 | macros/latex/contrib/profcollege/latex/PfCDessinAlgo.tex
-2024/09/04 | 11275 | macros/latex/contrib/profcollege/latex/PfCProprietesDroites.tex
-2024/09/04 | 11190 | macros/latex/contrib/profcollege/latex/PfCAutomatismes.tex
-2024/09/04 | 1116 | macros/latex/contrib/profcollege/latex/PfCJeton.tex
-2024/09/04 | 11099 | macros/latex/contrib/profcollege/latex/PfCAutonomie.tex
-2024/09/04 | 1098 | macros/latex/contrib/profcollege/latex/PfCAllumettes.tex
-2024/09/04 | 10841130 | macros/latex/contrib/profcollege/doc/profcollege-doc.pdf
-2024/09/04 | 1082 | macros/latex/contrib/scrhack/LICENSE.md
-2024/09/04 | 1077 | macros/latex/contrib/regulatory/doc/example1.tex
-2024/09/04 | 10769 | macros/latex/contrib/profcollege/latex/PfCEnigmeAire.tex
-2024/09/04 | 10627 | macros/latex/contrib/profcollege/latex/PfCCibleQOp.tex
-2024/09/04 | 10292 | macros/latex/contrib/profcollege/latex/PfCPapiers.tex
-2024/09/04 | 102868 | macros/latex/contrib/heria/heria.dtx
-2024/09/04 | 10083 | macros/latex/contrib/profcollege/latex/PfCTriominos.tex
-2024/09/04 | 10026 | macros/latex/contrib/profcollege/latex/PfCDecDeci.tex
diff --git a/biblio/ctan-bibdata/ctan.bib b/biblio/ctan-bibdata/ctan.bib
index 99e3cac2f4..802f1ed870 100644
--- a/biblio/ctan-bibdata/ctan.bib
+++ b/biblio/ctan-bibdata/ctan.bib
@@ -1,7 +1,7 @@
%% bib file of all CTAN packages
%% (C) Herbert Voß
%%
-%% created at 11-09-2024, 02:00:03
+%% created at 12-09-2024, 02:00:03
%%
%% This file is provided under the terms of the LPPL v1.3 or
@@ -11046,6 +11046,17 @@
url = {https://ctan.org/pkg/cascadia-code},
}
+@manual{ctan-cascadiamono-otf,
+ title = {The \texttt{cascadiamono-otf} package},
+ subtitle = {Support for the OpenType font CascadiaMono (with CascadiaCode fontspec config files)},
+ author = {Cédric Pierquet},
+ date = {2024-09-11},
+ version = {0.1},
+ license = {lppl1.3},
+ mirror = {https://mirror.ctan.org/fonts/cascadiamono-otf},
+ url = {https://ctan.org/pkg/cascadiamono-otf},
+}
+
@manual{ctan-cascadilla,
title = {The \texttt{cascadilla} package},
subtitle = {Typeset papers conforming to the stylesheet of the Cascadilla Proceedings Project},
@@ -20965,8 +20976,8 @@
title = {The \texttt{easybook} package},
subtitle = {Easily typesetting Chinese theses or books},
author = {Qu Yi},
- date = {2024-09-06},
- version = {2024dm},
+ date = {2024-09-11},
+ version = {2024dn},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/latex/contrib/easybook},
url = {https://ctan.org/pkg/easybook},
@@ -27395,8 +27406,8 @@
title = {The \texttt{fontscale} package},
subtitle = {A flexible interface for setting font sizes},
author = {Oliver Beery},
- date = {2024-09-07},
- version = {2.3.0},
+ date = {2024-09-11},
+ version = {2.4.0},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/latex/contrib/fontscale},
url = {https://ctan.org/pkg/fontscale},
@@ -80851,6 +80862,17 @@
url = {https://ctan.org/pkg/zref},
}
+@manual{ctan-zugferd,
+ title = {The \texttt{zugferd} package},
+ subtitle = {ZUGFeRD and Faktur-X invoicing using \LaTeX{}},
+ author = {Marei Peischl},
+ date = {2024-09-11},
+ version = {0.8},
+ license = {lppl1.3c},
+ mirror = {https://mirror.ctan.org/macros/latex/contrib/zugferd},
+ url = {https://ctan.org/pkg/zugferd},
+}
+
@manual{ctan-zwgetfdate,
title = {The \texttt{zwgetfdate} package},
subtitle = {Get package or file date},
diff --git a/fonts/cascadiamono-otf/README.md b/fonts/cascadiamono-otf/README.md
new file mode 100644
index 0000000000..6a81169309
--- /dev/null
+++ b/fonts/cascadiamono-otf/README.md
@@ -0,0 +1,45 @@
+cascadiamono-otf fonts
+======================
+
+## Description
+
+`cascadiamono-otf` is the version of cascadiacode-otf without ligatures.
+Official repo is https://github.com/microsoft/cascadia-code
+CascadiaCode is already present, it's just a fontspec file for using CascadiaMono version :-)
+
+## Contents
+
+* the `tex/` directory holds the fontspec configuration files;
+* the `doc/` directory holds short documentation with samples.
+
+## Usage
+
+lualatex/xelatex and fontspec are necessary in order to use cascadiamono fonts.
+
+'Normal' version of the font is available with `\setmonofont{CascadiaCode}[options]`.
+'SemiLight' version of the font is available with `\setmonofont{CascadiaCode-Light}[options]`.
+
+## Installation
+
+This package is meant to be installed automatically by TeXLive, MikTeX, etc.
+Otherwise, `cascadiamono-otf` can be installed under TEXMFHOME or TEXMFLOCAL, f.i.
+
++ fontspec files (`tex/*.fontspec`) in directory `texmf-local/tex/latex/cascadiamono-otf/`
++ documentation (from doc/ directory) in `texmf-local/doc/fonts/public/cascadiamono-otf/`
+
+Don't forget to rebuild the file database (mktexlsr or so) if you install under TEXMFLOCAL.
+
+Finally, you may want to make the system font database aware of the `cascadiamono-otf` fonts (fontconfig under Linux).
+
+## License
+
+* Files are distributed under the terms of the LaTeX Project
+Public License from CTAN archives in directory macros/latex/base/lppl.txt.
+Either version 1.3 or, at your option, any later version.
+
+## Changes
+* First release version: 0.1 (experimental).
+
+---
+Copyright 2024 C. Pierquet (with help from D. Flipo)
+E-mail: cpierquet (at) outlook (dot) fr
diff --git a/fonts/cascadiamono-otf/doc/cascadiamono-otf-doc.pdf b/fonts/cascadiamono-otf/doc/cascadiamono-otf-doc.pdf
new file mode 100644
index 0000000000..3561a9538b
--- /dev/null
+++ b/fonts/cascadiamono-otf/doc/cascadiamono-otf-doc.pdf
Binary files differ
diff --git a/fonts/cascadiamono-otf/doc/cascadiamono-otf-doc.tex b/fonts/cascadiamono-otf/doc/cascadiamono-otf-doc.tex
new file mode 100644
index 0000000000..eccc5953c6
--- /dev/null
+++ b/fonts/cascadiamono-otf/doc/cascadiamono-otf-doc.tex
@@ -0,0 +1,155 @@
+% !TeX TXS-program:compile = txs:///arara
+% arara: lualatex: {shell: no, synctex: no, interaction: batchmode}
+
+\documentclass{article}
+\usepackage[margin=1in]{geometry}
+\usepackage{fontspec}
+\usepackage{listings}
+\usepackage{xcolor}
+\setlength{\parindent}{0pt}
+
+\newcommand\demotext{For \textsterling 45, almost anything can be found floating in fields.\\
+ !`THE DAZED BROWN FOX QUICKLY GAVE 12345--67890 JUMPS!\\
+ --- ?`But aren't Kafka's Schlo\ss{} and \AE sop's \OE uvres often na\"\i ve vis-\`a-vis the d\ae monic ph\oe nix's official r\^ole in fluffy souffl\'es?
+}
+
+%\newcommand*\demotextsc{\textsc{\ Sphinx of black quartz, judge my vow}.}
+
+\begin{document}
+
+\part*{cascadiamono-otf}
+
+\section{Usage}
+
+With \lstinline[language=TeX,basicstyle=\ttfamily]|\usepackage{fontspec}| (so with \lstinline[language=TeX,basicstyle=\ttfamily]|XeTeX| or \lstinline[language=TeX,basicstyle=\ttfamily]|LuaLaTeX| compilation), you can use \texttt{CascadiaCode} fonts, and \textit{remove} ligature's features, in order to use (in fact) \texttt{CascadiaMono} fonts.
+
+\smallskip
+
+The idea is to propose \texttt{fontspec} config files to load correctly \texttt{CascadiaMono} features.
+
+\begin{lstlisting}[language=TeX,basicstyle=\ttfamily,commentstyle=\itshape\color{gray},keywordstyle=\color{magenta},tabsize=4,frame=single]
+\usepackage{fontspec}
+\setmonofont{CascadiaMono}[options] %version regular
+\setmonofont{CascadiaMono-Light}[options] %version semilight
+\end{lstlisting}
+
+\section{The default settings}
+
+Following OpenType fonts are supported (it's based on CascadiaCode without the ligatures) :
+
+\begin{lstlisting}[language=TeX,basicstyle=\ttfamily,commentstyle=\itshape\color{gray},keywordstyle=\color{magenta},tabsize=4,frame=single]
+CascadiaCode-Bold.otf
+CascadiaCode-BoldItalic.otf
+CascadiaCode-ExtraLight.otf
+CascadiaCode-ExtraLightItalic.otf
+CascadiaCode-Italic.otf
+CascadiaCode-Light.otf
+CascadiaCode-LightItalic.otf
+CascadiaCode-Regular.otf
+CascadiaCode-SemiBold.otf
+CascadiaCode-SemiBoldItalic.otf
+CascadiaCode-SemiLight.otf
+CascadiaCode-SemiLightItalic.otf
+\end{lstlisting}
+
+The \texttt{fontspec} config for the \textit{normal} version :
+
+\begin{lstlisting}[language=TeX,basicstyle=\ttfamily,commentstyle=\itshape\color{gray},keywordstyle=\color{magenta},tabsize=4,frame=single]
+\defaultfontfeatures[CascadiaMono]
+ {Extension=.otf,
+ UprightFont=CascadiaCode-Regular,
+ ItalicFont=CascadiaCode-Italic,
+ BoldFont=CascadiaCode-Bold,
+ BoldItalicFont=CascadiaCode-BoldItalic,
+ Contextuals=AlternateOff
+}
+\end{lstlisting}
+
+The \texttt{fontspec} config for the \textit{semilight} version :
+
+\begin{lstlisting}[language=TeX,basicstyle=\ttfamily,commentstyle=\itshape\color{gray},keywordstyle=\color{magenta},tabsize=4,frame=single]
+\defaultfontfeatures[CascadiaMono-Light]
+ {Extension=.otf,
+ UprightFont=CascadiaCode-SemiLight,
+ ItalicFont=CascadiaCode-SemiLightItalic,
+ BoldFont=CascadiaCode-SemiBold,
+ BoldItalicFont=CascadiaCode-SemiBoldItalic,
+ Contextuals=AlternateOff
+}
+\end{lstlisting}
+
+\pagebreak
+
+\section{Font Samples}
+
+\subsection{Normal version (Regular - Italic - Bold - BoldItalic)}
+
+\setmonofont{CascadiaMono}[Scale=MatchLowercase]
+
+\texttt{\demotext}\par\bigskip
+
+\texttt{\textit{\demotext}}\par\bigskip
+
+\texttt{\textbf{\demotext}}\par\bigskip
+
+\texttt{\textbf{\textit{\demotext}}}\par
+
+\subsection{SemiLight version (SemiLight - SemiLightItalic - SemiBold - SemiBoldItalic)}
+
+\setmonofont{CascadiaMono-Light}[Scale=MatchLowercase]
+
+\texttt{\demotext}\par\bigskip
+
+\texttt{\itshape\demotext}\par\bigskip
+
+\texttt{\bfseries\demotext}\par\bigskip
+
+\texttt{\bfseries\itshape\demotext}\par
+
+\pagebreak
+
+\section{Algorithm samples}
+
+\subsection{Normal version}
+
+\setmonofont{CascadiaMono}[Scale=MatchLowercase]
+
+\begin{lstlisting}[language=Python,basicstyle=\ttfamily,commentstyle=\itshape\color{gray},keywordstyle=\color{magenta},tabsize=4,frame=single]
+def Fibonacci(n) :
+ # Check if input is 0 then it will print incorrect input
+ if n < 0 :
+ print("Incorrect input")
+ elif n == 0 :
+ return 0
+ elif n == 1 or n == 2 :
+ return 1
+ else :
+ return Fibonacci(n-1) + Fibonacci(n-2)
+\end{lstlisting}
+
+\subsection{SemiLight version}
+
+\setmonofont{CascadiaMono-Light}[Scale=MatchLowercase]
+
+\begin{lstlisting}[language=Python,basicstyle=\ttfamily,commentstyle=\itshape\color{gray},keywordstyle=\color{magenta},tabsize=4,frame=single]
+def Fibonacci(n) :
+ # Check if input is 0 then it will print incorrect input
+ if n < 0 :
+ print("Incorrect input")
+ elif n == 0 :
+ return 0
+ elif n == 1 or n == 2 :
+ return 1
+ else :
+ return Fibonacci(n-1) + Fibonacci(n-2)
+\end{lstlisting}
+
+\vfill
+
+\section{History}
+
+\begin{verbatim}
+v0.1 Initial version
+\end{verbatim}
+
+\end{document}
diff --git a/fonts/cascadiamono-otf/tex/CascadiaMono-Light.fontspec b/fonts/cascadiamono-otf/tex/CascadiaMono-Light.fontspec
new file mode 100644
index 0000000000..aeae5d23d9
--- /dev/null
+++ b/fonts/cascadiamono-otf/tex/CascadiaMono-Light.fontspec
@@ -0,0 +1,8 @@
+\defaultfontfeatures[CascadiaMono-Light]
+ {Extension=.otf,
+ UprightFont=CascadiaCode-SemiLight,
+ ItalicFont=CascadiaCode-SemiLightItalic,
+ BoldFont=CascadiaCode-SemiBold,
+ BoldItalicFont=CascadiaCode-SemiBoldItalic,
+ Contextuals=AlternateOff
+} \ No newline at end of file
diff --git a/fonts/cascadiamono-otf/tex/CascadiaMono.fontspec b/fonts/cascadiamono-otf/tex/CascadiaMono.fontspec
new file mode 100644
index 0000000000..f008c12d90
--- /dev/null
+++ b/fonts/cascadiamono-otf/tex/CascadiaMono.fontspec
@@ -0,0 +1,8 @@
+\defaultfontfeatures[CascadiaMono]
+ {Extension=.otf,
+ UprightFont=CascadiaCode-Regular,
+ ItalicFont=CascadiaCode-Italic,
+ BoldFont=CascadiaCode-Bold,
+ BoldItalicFont=CascadiaCode-BoldItalic,
+ Contextuals=AlternateOff
+} \ No newline at end of file
diff --git a/macros/latex/contrib/easybook/README.md b/macros/latex/contrib/easybook/README.md
index 0f5e313ddc..8c065d789b 100644
--- a/macros/latex/contrib/easybook/README.md
+++ b/macros/latex/contrib/easybook/README.md
@@ -1,5 +1,5 @@
# The `easybook` document class
-Easily typesetting Chinese theses or books (v2024dm)
+Easily typesetting Chinese theses or books (v2024dn)
## Abstract
`easybook` is a pure academic template created based on the `ctexbook` book document class. It also has the functions of `book` and `article` document class. Combined with the general framework design of the theses of many universities in China, providing multiple commands and interfaces allows users to easily customize the theses templates. Its basic macro package `easybase` can also be used with `ctex` and standard document classes.
diff --git a/macros/latex/contrib/easybook/easybook.dtx b/macros/latex/contrib/easybook/easybook.dtx
index 81853846ab..cb8cdc02cc 100644
--- a/macros/latex/contrib/easybook/easybook.dtx
+++ b/macros/latex/contrib/easybook/easybook.dtx
@@ -14,7 +14,7 @@
% This work has the LPPL maintenance status `maintained'.
%<class|package>\NeedsTeXFormat{LaTeX2e}[2021/11/15]
%<*class>
-\ProvidesExplClass{easybook}{2024/09/06}{2024dm}
+\ProvidesExplClass{easybook}{2024/09/11}{2024dn}
{Easily typesetting Chinese theses or books}
\bool_new:N \l__eb_compile_draft_bool
@@ -301,16 +301,14 @@
%</class>
%<*package>
\RequirePackage{etoolbox}
-\ProvidesExplPackage{easybase}{2024/09/06}{2024dm}
+\ProvidesExplPackage{easybase}{2024/09/11}{2024dn}
{Easily typesetting Chinese theses or books}
\cs_generate_variant:Nn \dim_set:Nn { NV }
\cs_generate_variant:Nn \dim_sign:n { V }
\cs_generate_variant:Nn \int_to_arabic:n { v }
\cs_generate_variant:Nn \msg_warning:nnn { nnV }
-\cs_generate_variant:Nn \prop_set_from_keyval:Nn { NV }
\cs_generate_variant:Nn \skip_set:Nn { NV }
-\cs_generate_variant:Nn \seq_set_from_clist:Nn { No }
\cs_generate_variant:Nn \ctex_define:nn { nx }
\cs_generate_variant:Nn \eb_set_hyperref:n { x }
\cs_generate_variant:Nn \eb_at_begin_environment:nn { o }
@@ -416,11 +414,13 @@
{
\bool_set_true:N \l__eb_class_mode_book_bool
\eb_put_geometry:n { twoside }
+ \booltrue{@titlepage}
},
class/article .code:n =
{
\bool_set_false:N \l__eb_class_mode_book_bool
\eb_put_geometry:n { twoside = false }
+ \boolfalse{@titlepage}
},
class .initial:n = book,
book .meta:n = { class = book },
@@ -2796,7 +2796,8 @@
\renewcommand{\thefootnote}{\@fnsymbol\c@footnote}
}
{}
- \LARGE\@title\par\vskip 3em
+ \LARGE\@title\par
+ \notbool{@titlepage}{\vskip 1.5em}{\vskip 3em}
\large
\begin{tabular}[t]{c}
\@author
@@ -2843,7 +2844,7 @@
}
%</package>
%<*tcolorbox>
-\ProvidesExplFile{eb-tcolorbox.cfg}{2024/09/06}{2024dm}
+\ProvidesExplFile{eb-tcolorbox.cfg}{2024/09/11}{2024dn}
{Customization of tcolorbox for easybook}
\cs_set_protected:Npn \addtotcbstyle #1#2
diff --git a/macros/latex/contrib/easybook/easybook.pdf b/macros/latex/contrib/easybook/easybook.pdf
index 9f6498b888..ff9a8004fc 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 377fe5a7f9..799a013608 100644
--- a/macros/latex/contrib/easybook/easybook.tex
+++ b/macros/latex/contrib/easybook/easybook.tex
@@ -23,8 +23,8 @@
name = easybook,
color-scheme = blue,
title = EASYBOOK使用手册,
- version = v2024dm,
- date = 2024/09/06,
+ version = v2024dn,
+ date = 2024/09/11,
authors = 瞿毅,
info = 简便地排版中文学位论文或书籍,
email = toquyi@163.com,
diff --git a/macros/latex/contrib/fontscale/CHANGELOG.md b/macros/latex/contrib/fontscale/CHANGELOG.md
index 3fe4bd247d..cc467e7c19 100644
--- a/macros/latex/contrib/fontscale/CHANGELOG.md
+++ b/macros/latex/contrib/fontscale/CHANGELOG.md
@@ -7,6 +7,13 @@ Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to
## [Unreleased]
+## [v2.4.0] - 2024-09-10
+
+### Changed
+- `\fontscalesetup` no longer issues a warning if the lengths of the font
+ baselineskips are not ordered from `\tiny` to `\Huge`.
+- Code improvements.
+
## [v2.3.0] - 2024-09-06
### Changed
diff --git a/macros/latex/contrib/fontscale/beery.cls b/macros/latex/contrib/fontscale/beery.cls
index bd50fc9435..d65738d9e9 100644
--- a/macros/latex/contrib/fontscale/beery.cls
+++ b/macros/latex/contrib/fontscale/beery.cls
@@ -4,7 +4,7 @@
\NeedsTeXFormat{LaTeX2e}[2023-11-01]
\ProvidesExplClass
{beery}
- {2024-09-06}
+ {2024-09-10}
{}
{}
diff --git a/macros/latex/contrib/fontscale/fontscale-table-classic.tex b/macros/latex/contrib/fontscale/fontscale-table-classic.tex
index 3f1b94efa5..903e7e3be7 100644
--- a/macros/latex/contrib/fontscale/fontscale-table-classic.tex
+++ b/macros/latex/contrib/fontscale/fontscale-table-classic.tex
@@ -1,6 +1,6 @@
\ProvidesFile
{fontscale-table-classic.tex}
- [2024-09-06]
+ [2024-09-10]
\begin{table}
\centering
diff --git a/macros/latex/contrib/fontscale/fontscale-table-font-steps.tex b/macros/latex/contrib/fontscale/fontscale-table-font-steps.tex
index eb59309c25..50d5440c92 100644
--- a/macros/latex/contrib/fontscale/fontscale-table-font-steps.tex
+++ b/macros/latex/contrib/fontscale/fontscale-table-font-steps.tex
@@ -1,6 +1,6 @@
\ProvidesFile
{fontscale-table-font-steps.tex}
- [2024-09-06]
+ [2024-09-10]
\begin{table}
\centering
diff --git a/macros/latex/contrib/fontscale/fontscale-table-musical.tex b/macros/latex/contrib/fontscale/fontscale-table-musical.tex
index b117653e1f..c2f88c13fa 100644
--- a/macros/latex/contrib/fontscale/fontscale-table-musical.tex
+++ b/macros/latex/contrib/fontscale/fontscale-table-musical.tex
@@ -1,6 +1,6 @@
\ProvidesFile
{fontscale-table-musical.tex}
- [2024-09-06]
+ [2024-09-10]
\begin{table}
\centering
diff --git a/macros/latex/contrib/fontscale/fontscale.pdf b/macros/latex/contrib/fontscale/fontscale.pdf
index 34acc01d03..f859cb6a56 100644
--- a/macros/latex/contrib/fontscale/fontscale.pdf
+++ b/macros/latex/contrib/fontscale/fontscale.pdf
Binary files differ
diff --git a/macros/latex/contrib/fontscale/fontscale.sty b/macros/latex/contrib/fontscale/fontscale.sty
index c9356b566c..01c9c8e8e4 100644
--- a/macros/latex/contrib/fontscale/fontscale.sty
+++ b/macros/latex/contrib/fontscale/fontscale.sty
@@ -8,8 +8,8 @@
\NeedsTeXFormat{LaTeX2e}[2023-11-01]
\ProvidesExplPackage
{fontscale}
- {2024-09-06}
- {2.3.0}
+ {2024-09-10}
+ {2.4.0}
{A flexible interface for setting font sizes}
% l3kernel version 2023-10-10 added many 'e'-variants.
@@ -142,19 +142,12 @@
\q_stop
}
\cs_generate_variant:Nn \__fontscale_skip_set_default_pt:Nn { c }
-% Similar to \@setfontsize. Used to define \tiny to \Huge. Need \dim_use:N for
-% compatibility with the microtype package.
+% Used to define \tiny to \Huge. Sets \@currsize only for compatibility. Need
+% \dim_use:N only for compatibility with the microtype package.
\cs_new_protected:Npn \__fontscale_fontsize:NNN #1#2#3
{
- \mode_if_math:TF
- {
- \msg_warning:nne { fontscale } { math-mode-warning }
- { \token_to_str:N #1 }
- }
- {
- \cs_set_eq:NN \@currsize #1
- \fontsize { \dim_use:N #2 } #3 \selectfont
- }
+ \cs_set_eq:NN \@currsize #1
+ \fontsize { \dim_use:N #2 } #3 \selectfont
}
% Similar to \fontsize + \selectfont, except that it:
% (1) Takes dimen and skip expressions as arguments.
@@ -238,20 +231,12 @@
The~ font~ size~ set~ by~ the~ key~ '#1 / scale'~
has~ been~ overwritten~ by~ the~ key~ '#1 / size'~ \msg_line_context:.
}
-\msg_new:nnn { fontscale } { key-font-sizes-out-of-order }
+\msg_new:nnn { fontscale } { font-sizes-out-of-order }
{
- The~ font~ sizes~
- are~ not~ in~ the~ correct~ order~ \msg_line_context:. \\
+ The~ font~ sizes~ are~ not~ in~ the~ correct~ order~ \msg_line_context:. \\
The~ lengths~ of~ the~ font~ sizes~
should~ be~ ordered~ from~ \iow_char:N \\tiny~ to~ \iow_char:N \\Huge.
}
-\msg_new:nnn { fontscale } { key-font-baselineskips-out-of-order }
- {
- The~ font~ baselineskips~
- are~ not~ in~ the~ correct~ order~ \msg_line_context:. \\
- The~ lengths~ of~ the~ font~ baselineskips~
- should~ be~ ordered~ from~ \iow_char:N \\tiny~ to~ \iow_char:N \\Huge.
- }
\msg_new:nnn { fontscale } { math-mode-warning }
{ '#1'~ does~ nothing~ if~ used~ in~ math~ mode~ \msg_line_context:. }
@@ -323,6 +308,14 @@
, notes .int_set:N = \l__fontscale_musical_notes_int
, notes .value_required:n = true
}
+\keys_define:nn { fontscale / normalsize }
+ {
+ size .tl_set:N = \l__fontscale_normalsize_size_tl
+ , size .value_required:n = true
+
+ , baselineskip .tl_set:N = \l__fontscale_normalsize_baselineskip_tl
+ , baselineskip .value_required:n = true
+ }
\keys_define:nn { fontscale / tiny }
{
scale .tl_set:N = \l__fontscale_tiny_scale_tl
@@ -367,14 +360,6 @@
, baselineskip .tl_set:N = \l__fontscale_small_baselineskip_tl
, baselineskip .value_required:n = true
}
-\keys_define:nn { fontscale / normalsize }
- {
- size .tl_set:N = \l__fontscale_normalsize_size_tl
- , size .value_required:n = true
-
- , baselineskip .tl_set:N = \l__fontscale_normalsize_baselineskip_tl
- , baselineskip .value_required:n = true
- }
\keys_define:nn { fontscale / large }
{
scale .tl_set:N = \l__fontscale_large_scale_tl
@@ -466,7 +451,8 @@
% INITIALIZE AND PRE-COMPILE KEYS
% Pre-compiles the keys with their initial values and then sets the keys to
-% their initial values. This is done by hand for speed.
+% their initial values. This is significantly faster than using .initial:n and
+% \keys_precompile:nnN.
\cs_new_protected:Npn \__fontscale_keys_set_initial:
{
\fp_set:Nn \l__fontscale_baselineskip_size_ratio_fp { 1.2 }
@@ -475,37 +461,41 @@
\fp_set:Nn \l__fontscale_musical_ratio_fp { 2 }
\int_set:Nn \l__fontscale_musical_notes_int { 5 }
- \tl_set:Nn \l__fontscale_tiny_scale_tl { \q_no_value }
- \tl_set:Nn \l__fontscale_scriptsize_scale_tl { \q_no_value }
- \tl_set:Nn \l__fontscale_footnotesize_scale_tl { \q_no_value }
- \tl_set:Nn \l__fontscale_small_scale_tl { \q_no_value }
- \tl_set:Nn \l__fontscale_large_scale_tl { \q_no_value }
- \tl_set:Nn \l__fontscale_Large_scale_tl { \q_no_value }
- \tl_set:Nn \l__fontscale_LARGE_scale_tl { \q_no_value }
- \tl_set:Nn \l__fontscale_huge_scale_tl { \q_no_value }
- \tl_set:Nn \l__fontscale_Huge_scale_tl { \q_no_value }
-
- \tl_set:Nn \l__fontscale_tiny_size_tl { \q_no_value }
- \tl_set:Nn \l__fontscale_scriptsize_size_tl { \q_no_value }
- \tl_set:Nn \l__fontscale_footnotesize_size_tl { \q_no_value }
- \tl_set:Nn \l__fontscale_small_size_tl { \q_no_value }
- \tl_set:Nn \l__fontscale_normalsize_size_tl { \q_no_value }
- \tl_set:Nn \l__fontscale_large_size_tl { \q_no_value }
- \tl_set:Nn \l__fontscale_Large_size_tl { \q_no_value }
- \tl_set:Nn \l__fontscale_LARGE_size_tl { \q_no_value }
- \tl_set:Nn \l__fontscale_huge_size_tl { \q_no_value }
- \tl_set:Nn \l__fontscale_Huge_size_tl { \q_no_value }
-
- \tl_set:Nn \l__fontscale_tiny_baselineskip_tl { \q_no_value }
- \tl_set:Nn \l__fontscale_scriptsize_baselineskip_tl { \q_no_value }
- \tl_set:Nn \l__fontscale_footnotesize_baselineskip_tl { \q_no_value }
- \tl_set:Nn \l__fontscale_small_baselineskip_tl { \q_no_value }
- \tl_set:Nn \l__fontscale_normalsize_baselineskip_tl { \q_no_value }
- \tl_set:Nn \l__fontscale_large_baselineskip_tl { \q_no_value }
- \tl_set:Nn \l__fontscale_Large_baselineskip_tl { \q_no_value }
- \tl_set:Nn \l__fontscale_LARGE_baselineskip_tl { \q_no_value }
- \tl_set:Nn \l__fontscale_huge_baselineskip_tl { \q_no_value }
- \tl_set:Nn \l__fontscale_Huge_baselineskip_tl { \q_no_value }
+ \tl_map_inline:nn
+ {
+ \l__fontscale_tiny_scale_tl
+ \l__fontscale_scriptsize_scale_tl
+ \l__fontscale_footnotesize_scale_tl
+ \l__fontscale_small_scale_tl
+ \l__fontscale_large_scale_tl
+ \l__fontscale_Large_scale_tl
+ \l__fontscale_LARGE_scale_tl
+ \l__fontscale_huge_scale_tl
+ \l__fontscale_Huge_scale_tl
+
+ \l__fontscale_tiny_size_tl
+ \l__fontscale_scriptsize_size_tl
+ \l__fontscale_footnotesize_size_tl
+ \l__fontscale_small_size_tl
+ \l__fontscale_normalsize_size_tl
+ \l__fontscale_large_size_tl
+ \l__fontscale_Large_size_tl
+ \l__fontscale_LARGE_size_tl
+ \l__fontscale_huge_size_tl
+ \l__fontscale_Huge_size_tl
+
+ \l__fontscale_tiny_baselineskip_tl
+ \l__fontscale_scriptsize_baselineskip_tl
+ \l__fontscale_footnotesize_baselineskip_tl
+ \l__fontscale_small_baselineskip_tl
+ \l__fontscale_normalsize_baselineskip_tl
+ \l__fontscale_large_baselineskip_tl
+ \l__fontscale_Large_baselineskip_tl
+ \l__fontscale_LARGE_baselineskip_tl
+ \l__fontscale_huge_baselineskip_tl
+ \l__fontscale_Huge_baselineskip_tl
+ }
+ { \tl_set:Nn ##1 { \q_no_value } }
}
\__fontscale_keys_set_initial:
@@ -766,8 +756,7 @@
{ \use:c { l__fontscale_#1_baselineskip_tl } }
}
}
-% Issues a warning if the font sizes or font baselineskips are not in the
-% correct order.
+% Issues a warning if the font sizes are not in the correct order.
\cs_new_protected:Npn \__fontscale_keys_process_check_order:
{
\dim_compare:nF
@@ -783,74 +772,152 @@
< \l_fontscale_huge_size_dim
< \l_fontscale_Huge_size_dim
}
- { \msg_warning:nn { fontscale } { key-font-sizes-out-of-order } }
- \dim_compare:nF
- {
- \l_fontscale_tiny_baselineskip_skip
- < \l_fontscale_scriptsize_baselineskip_skip
- < \l_fontscale_footnotesize_baselineskip_skip
- < \l_fontscale_small_baselineskip_skip
- < \l_fontscale_normalsize_baselineskip_skip
- < \l_fontscale_large_baselineskip_skip
- < \l_fontscale_Large_baselineskip_skip
- < \l_fontscale_LARGE_baselineskip_skip
- < \l_fontscale_huge_baselineskip_skip
- < \l_fontscale_Huge_baselineskip_skip
- }
- { \msg_warning:nn { fontscale } { key-font-baselineskips-out-of-order } }
+ { \msg_warning:nn { fontscale } { font-sizes-out-of-order } }
}
% DOCUMENT COMMANDS
% Defines the standard LaTeX font size commands from \tiny to \Huge and
-% initializes to \normalsize.
+% initializes to \normalsize. The corresponding internal functions are not used
+% elsewhere in the code for compatibility with hooks such as
+% \AddToHook{cmd/<font size command>/after}{<code>}.
\DeclareDocumentCommand \tiny { }
{
+ \mode_if_math:TF
+ {
+ \msg_warning:nne { fontscale } { math-mode-warning }
+ { \token_to_str:N \tiny }
+ }
+ { \__fontscale_tiny: }
+ }
+\cs_new_protected:Npn \__fontscale_tiny:
+ {
\__fontscale_fontsize:NNN \tiny \l_fontscale_tiny_size_dim
\l_fontscale_tiny_baselineskip_skip
}
\DeclareDocumentCommand \scriptsize { }
{
+ \mode_if_math:TF
+ {
+ \msg_warning:nne { fontscale } { math-mode-warning }
+ { \token_to_str:N \scriptsize }
+ }
+ { \__fontscale_scriptsize: }
+ }
+\cs_new_protected:Npn \__fontscale_scriptsize:
+ {
\__fontscale_fontsize:NNN \scriptsize \l_fontscale_scriptsize_size_dim
\l_fontscale_scriptsize_baselineskip_skip
}
\DeclareDocumentCommand \footnotesize { }
{
+ \mode_if_math:TF
+ {
+ \msg_warning:nne { fontscale } { math-mode-warning }
+ { \token_to_str:N \footnotesize }
+ }
+ { \__fontscale_footnotesize: }
+ }
+\cs_new_protected:Npn \__fontscale_footnotesize:
+ {
\__fontscale_fontsize:NNN \footnotesize \l_fontscale_footnotesize_size_dim
\l_fontscale_footnotesize_baselineskip_skip
}
\DeclareDocumentCommand \small { }
{
+ \mode_if_math:TF
+ {
+ \msg_warning:nne { fontscale } { math-mode-warning }
+ { \token_to_str:N \small }
+ }
+ { \__fontscale_small: }
+ }
+\cs_new_protected:Npn \__fontscale_small:
+ {
\__fontscale_fontsize:NNN \small \l_fontscale_small_size_dim
\l_fontscale_small_baselineskip_skip
}
\DeclareDocumentCommand \normalsize { }
{
+ \mode_if_math:TF
+ {
+ \msg_warning:nne { fontscale } { math-mode-warning }
+ { \token_to_str:N \normalsize }
+ }
+ { \__fontscale_normalsize: }
+ }
+\cs_new_protected:Npn \__fontscale_normalsize:
+ {
\__fontscale_fontsize:NNN \normalsize \l_fontscale_normalsize_size_dim
\l_fontscale_normalsize_baselineskip_skip
}
\DeclareDocumentCommand \large { }
{
+ \mode_if_math:TF
+ {
+ \msg_warning:nne { fontscale } { math-mode-warning }
+ { \token_to_str:N \large }
+ }
+ { \__fontscale_large: }
+ }
+\cs_new_protected:Npn \__fontscale_large:
+ {
\__fontscale_fontsize:NNN \large \l_fontscale_large_size_dim
\l_fontscale_large_baselineskip_skip
}
\DeclareDocumentCommand \Large { }
{
+ \mode_if_math:TF
+ {
+ \msg_warning:nne { fontscale } { math-mode-warning }
+ { \token_to_str:N \Large }
+ }
+ { \__fontscale_Large: }
+ }
+\cs_new_protected:Npn \__fontscale_Large:
+ {
\__fontscale_fontsize:NNN \Large \l_fontscale_Large_size_dim
\l_fontscale_Large_baselineskip_skip
}
\DeclareDocumentCommand \LARGE { }
{
+ \mode_if_math:TF
+ {
+ \msg_warning:nne { fontscale } { math-mode-warning }
+ { \token_to_str:N \LARGE }
+ }
+ { \__fontscale_LARGE: }
+ }
+\cs_new_protected:Npn \__fontscale_LARGE:
+ {
\__fontscale_fontsize:NNN \LARGE \l_fontscale_LARGE_size_dim
\l_fontscale_LARGE_baselineskip_skip
}
\DeclareDocumentCommand \huge { }
{
+ \mode_if_math:TF
+ {
+ \msg_warning:nne { fontscale } { math-mode-warning }
+ { \token_to_str:N \huge }
+ }
+ { \__fontscale_huge: }
+ }
+\cs_new_protected:Npn \__fontscale_huge:
+ {
\__fontscale_fontsize:NNN \huge \l_fontscale_huge_size_dim
\l_fontscale_huge_baselineskip_skip
}
\DeclareDocumentCommand \Huge { }
{
+ \mode_if_math:TF
+ {
+ \msg_warning:nne { fontscale } { math-mode-warning }
+ { \token_to_str:N \Huge }
+ }
+ { \__fontscale_Huge: }
+ }
+\cs_new_protected:Npn \__fontscale_Huge:
+ {
\__fontscale_fontsize:NNN \Huge \l_fontscale_Huge_size_dim
\l_fontscale_Huge_baselineskip_skip
}
@@ -1139,11 +1206,11 @@
}
{
\token_to_str:c {##1} \@ \c_colon_str \c_space_tl
- step ~=~ \fp_use:c { c_fontscale_##1_step_fp } ,~
- scale ~=~ \str_if_eq:nnTF {##1} { normalsize }
+ step~ =~ \fp_use:c { c_fontscale_##1_step_fp } ,~
+ scale~ =~ \str_if_eq:nnTF {##1} { normalsize }
{ 1 } { \fp_use:c { l_fontscale_##1_scale_fp } } ,~
- size ~=~ \dim_use:c { l_fontscale_##1_size_dim } ,~
- baselineskip ~=~ \skip_use:c { l_fontscale_##1_baselineskip_skip }
+ size~ =~ \dim_use:c { l_fontscale_##1_size_dim } ,~
+ baselineskip~ =~ \skip_use:c { l_fontscale_##1_baselineskip_skip }
\str_if_eq:nnF {##1} { Huge } { \newline }
}
}
@@ -1201,25 +1268,12 @@
% TEXT PURIFY
-\cs_new:Npn \__fontscale_remove_arg_spec_sm:n #1
+\NewExpandableDocumentCommand \__fontscale_use_none_sm:w { s m } { }
+\tl_map_inline:nn
{
- \bool_lazy_all:nT
- {
- { \tl_if_single_p:n {#1} }
- { \tl_if_single_token_p:n #1 }
- { \token_if_eq_meaning_p:NN #1 * }
- }
- { \use_none:n }
- }
-\text_declare_purify_equivalent:Nn \fontscalesetup
- { \__fontscale_remove_arg_spec_sm:n }
-\text_declare_purify_equivalent:Nn \SetFontStep
- { \__fontscale_remove_arg_spec_sm:n }
-\text_declare_purify_equivalent:Nn \SetFontScale
- { \__fontscale_remove_arg_spec_sm:n }
-\text_declare_purify_equivalent:Nn \SetFontSize
- { \__fontscale_remove_arg_spec_sm:n }
+ \fontscalesetup \SetFontStep \SetFontScale \SetFontSize
+ \SetFontBaselineskip
+ }
+ { \text_declare_purify_equivalent:Nn #1 { \__fontscale_use_none_sm:w } }
\text_declare_purify_equivalent:Nn \ScaleFont { \use_none:n }
-\text_declare_purify_equivalent:Nn \SetFontSizeBaselineskip { \use_none:nn }
-\text_declare_purify_equivalent:Nn \SetFontBaselineskip
- { \__fontscale_remove_arg_spec_sm:n } \ No newline at end of file
+\text_declare_purify_equivalent:Nn \SetFontSizeBaselineskip { \use_none:nn } \ No newline at end of file
diff --git a/macros/latex/contrib/fontscale/fontscale.tex b/macros/latex/contrib/fontscale/fontscale.tex
index bba06bfa20..8ccec27d8d 100644
--- a/macros/latex/contrib/fontscale/fontscale.tex
+++ b/macros/latex/contrib/fontscale/fontscale.tex
@@ -14,7 +14,7 @@ A flexible interface for setting font sizes
Oliver Beery
-Version 2.3.0\quad{}6 September 2024
+Version 2.4.0\quad{}10 September 2024
\section{Introduction}
@@ -101,7 +101,7 @@ This syntax has the same representation as the arguments to \cs{fpeval}, \cs{int
This section documents the keys provided by the \pkg{fontscale} package.
This package has no package options.
-Set the package keys using \cs{fontscalesetup}\marg{key-value list} (\S\ref{subsec:fontscalesetup}).
+Set the package keys using \cs{fontscalesetup}\marg{key\-/value list} (\S\ref{subsec:fontscalesetup}).
\subsection{The typographic scale}
\label{subsec:typographicscale}
@@ -181,16 +181,17 @@ The font baselineskips of the font size commands from \cs{tiny} to \cs{Huge} are
\KeepNextPar*
Sets the font baselineskip of each font size command from \cs{tiny} to \cs{Huge} equal to its font size \texttimes{} the result of computing the \meta{floating point expression}.
-Sets the font baselineskip set by \cs{SetFontStep}, \cs{SetFontScale}, and \cs{SetFontSize} (\S\ref{subsec:fontsize}) equal to the new font size \texttimes{} the result of computing the \meta{floating point expression}.
+Sets the font baselineskip set by \cs{SetFontStep}, \cs{SetFontScale}, and \cs{SetFontSize} equal to the new font size \texttimes{} the result of computing the \meta{floating point expression} (\S\ref{subsec:fontsize}).
\subsection{Overwriting the previous keys}
\label{subsec:overwriting}
This subsection documents keys for directly setting the font scales, font sizes, and font baselineskips of the font size commands from \cs{tiny} to \cs{Huge}.
-When doing so, the user should take care to ensure that the lengths of the font sizes and font baselineskips remain correctly ordered from \cs{tiny} to \cs{Huge}.
+
+The user should take care to ensure that the lengths of the font sizes remain correctly ordered from \cs{tiny} to \cs{Huge}.
This is important for typographic and syntactic consistency.
-If the font size commands are in the wrong order, this package will issue a warning and some package features may not work correctly.
+If the font sizes are in the wrong order, \cs{fontscalesetup} will issue a warning and some package features may not work correctly.
\Key{\meta{font size command}/scale}[\meta{floating point expression}][\meta{not set}]
\KeepNextPar*
@@ -215,9 +216,12 @@ Overwrites the font baselineskip set by the key \Key{baselineskip\-/size\-/ratio
\nopagebreak\newline
\Key{\meta{font size command}}[\meta{dimen expression}/\meta{skip expression}]
-Sets the keys \Key{\meta{font size command}\slash{}size}[\meta{dimen expression}] or \Key{\meta{font size command}\slash{}baselineskip}[\meta{skip expression}] in a condensed format.
-The latter format resembles traditional typographic notation where the size and leading of a text can be expressed as, for example, \num{10}/\num{12} or \num{11}/\num{13}.
-The number before\slash{}after the slash is the size\slash{}leading in units of \unit{pt}.
+Sets the keys \Key{\meta{font size command}\slash{}size}[\meta{dimen expression}] or \Key{\meta{font size command}\slash{}baselineskip}[\meta{skip expression}] in a condensed format.%
+\footnote
+ {%
+ The latter format resembles traditional typographic notation where the size and leading of a text can be expressed as, for example, \num{10}/\num{12} or \num{11}/\num{13}.
+ The number before\slash{}after the slash is the size\slash{}leading in units of \unit{pt}.%
+ }
\section{Commands}
@@ -271,7 +275,7 @@ Tests if the current font size and current font baselineskip equal the font size
If so, expands to the name of that font size command.
This omits the backslash character and leaves only letters with catcode \num{11}.
If not, expands to nothing.
-This package also provides a similar command \cs{PrintFontSizeCommand} (\S\ref{subsec:debug}), which is not expandable and includes the backslash character.
+This package also provides a similar command \cs{PrintFontSizeCommand}, which is not expandable and includes the backslash character (\S\ref{subsec:debug}).
\subsection{More font size commands}
\label{subsec:fontsize}
@@ -362,7 +366,7 @@ Prints the font step, font scale, font size, and font baselineskip of each font
Prints \meta{text} in each font size ordered from \cs{tiny} to \cs{Huge} each followed by a paragraph break.
\meta{text} can contain \cs{par} tokens.
Adding the optional star reverses the order of the font sizes.
-One useful way of printing example text is \cs{PrintSampleText}\allowbreak\texttt{\{\cs{PrintFontSizeCommand}:\allowbreak\textvisiblespace\allowbreak\cs{PrintFontSizeParameters}\}}.
+One useful way of printing sample text is \cs{PrintSampleText}\allowbreak\texttt{\{\cs{PrintFontSizeCommand}:\allowbreak\textvisiblespace\allowbreak\cs{PrintFontSizeParameters}\}}.
\cs{PrintFontSizeCommand}
\KeepNextPar*
@@ -370,7 +374,7 @@ One useful way of printing example text is \cs{PrintSampleText}\allowbreak\textt
Tests if the current font size and current font baselineskip equal the font size and font baselineskip, respectively, of any font size command from \cs{tiny} to \cs{Huge}.
If so, prints the name of that font size command, including the backslash character.
If not, prints \enquote{\string\undefined}.
-This package also provides a similar command \cs{CurrentFontSizeCommand} (\S\ref{subsec:expandable}), which is expandable and omits the backslash character.
+This package also provides a similar command \cs{CurrentFontSizeCommand}, which is expandable and omits the backslash character (\S\ref{subsec:expandable}).
\section{Programming}
diff --git a/macros/latex/contrib/zugferd/DEMO-rechnung-zugferd.tex b/macros/latex/contrib/zugferd/DEMO-rechnung-zugferd.tex
new file mode 100644
index 0000000000..1d38dcafb5
--- /dev/null
+++ b/macros/latex/contrib/zugferd/DEMO-rechnung-zugferd.tex
@@ -0,0 +1,95 @@
+% !TeX Program=lualatex
+%
+% Demo file for the LaTeX-ZUGFeRD project
+% This file corresponds to version 0.8 (2024-09-11)
+%
+% Copyright (C) 2024 Marei Peischl <marei@peitex.de>
+% ---------------------------------------------------------
+%
+% This file may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3c
+% of this license or (at your option) any later version.
+% The latest version of this license is in:
+%
+% http://www.latex-project.org/lppl.txt
+%
+% and version 1.3c or later is part of all distributions of LaTeX
+% version 2008-05-04 or later.
+%
+\DocumentMetadata{
+ pdfstandard=a-3b,
+ lang=de,
+}
+\documentclass[parskip=half-,german]{scrartcl}
+
+\usepackage[
+ format=xrechnung3.0% 3.0 is the default anyway, but you can select the format to avoid automatic changes.
+]{zugferd-invoice}
+
+\setkomavar{invoice}{2024:1337}
+\setkomavar{date}{2024-01-04}
+\setkomavar{title}{Rechnung}
+
+\newkomafont{invoicetotal}{\bfseries}
+
+\SetZUGFeRDData{
+% document-type = commercial-invoice, % commented as this setting matches the initial value
+ id=komavar,
+% date=auto, % commented as this setting matches the initial value
+% delivery-date = auto, % commented as this setting matches the initial value
+ subject=komavar,
+ fromaddress=komavar,
+% tax/category=S,
+% tax/rate=19,
+ unit=hour,
+ seller/name = {peiTeX (Marei Peischl)},
+ seller/postcode = {20253},
+ seller/city ={Hamburg},
+ seller/country = DE,
+ seller/address = {Address 1},
+ seller/vatid = {DE123456789},
+ seller/contact= {Marei\\+4900000000\\marei@peitex.de},
+ seller/email = {kontakt@peitex.de},
+ buyer/reference = {buyer-reference}, %oder Leitweg-ID
+ buyer/name = {Käufer Name},
+ buyer/postcode = {20253},
+ buyer/city ={Hamburg},
+ buyer/country = DE,
+ buyer/address = {Address 1\\Address 2},
+ buyer/vatid = {DE123456789},
+ buyer/email = {invoice@example.org},
+ currency=€,
+ payment-terms={Zahlbar innerhalb von 14 Tagen},% entweder das oder das Datum (Zeile drunter) ist notwendig
+ due-date={20240118},
+ payment-means / type = 58, % SEPA Übereisung,
+ payment-means / iban = DE68430609671013251700,
+ payment-means / account-holder = Marei Peischl,
+ payment-means / bic =GENODEM1GLS
+}
+
+
+
+\begin{document}
+
+
+\begin{letter}{Firma\\Vorname Nachname\\Rechnungsadresse\\PLZ Ort}
+
+\opening{Guten Tag,}
+
+hiermit stelle ich Ihnen meine Arbeit im Rahmen des Projektes XX in Rechnung. Die Leistung wurde im Januar 2024 erbracht.
+
+\AddInvoiceItem{3}{Weiterentwicklung/funktionale Erweiterung}{90}
+\AddInvoiceItem[7]{3}{Support}{90}
+\AddInvoiceItem{2}{Support an Feiertagen/Wochenende}{180}
+
+\PrintInvoiceTabular
+
+Ich bitte Sie oben genannte Betrag binnen 30 Tagen auf unten genanntes Konto zu überweisen.
+
+%Falls gewünscht
+\closing{Happy \TeX{}ing}
+
+
+\end{letter}
+
+\end{document}
diff --git a/macros/latex/contrib/zugferd/DEPENDS.txt b/macros/latex/contrib/zugferd/DEPENDS.txt
new file mode 100644
index 0000000000..9156e86f4c
--- /dev/null
+++ b/macros/latex/contrib/zugferd/DEPENDS.txt
@@ -0,0 +1,7 @@
+# Proudly generated by the Island of TeX's DEPendency Printer https://gitlab.com/islandoftex/texmf/depp
+soft babel# only zugferd-invoice.sty
+soft booktabs# only zugferd-invoice.sty
+soft koma-script# only zugferd-invoice.sty
+soft ragged2e# only zugferd-invoice.sty
+siunitx
+soft xltabular# only zugferd-invoice.sty
diff --git a/macros/latex/contrib/zugferd/README.md b/macros/latex/contrib/zugferd/README.md
new file mode 100644
index 0000000000..e6d85f137c
--- /dev/null
+++ b/macros/latex/contrib/zugferd/README.md
@@ -0,0 +1,27 @@
+# ZUGFeRD - Create ZUGFeRD and other kinds of E-invoices using LaTeX
+
+Copyright (C) 2023–2024 by Marei Peischl (peiTeX) <marei@peitex.de>
+
+zugferd version 0.8 (2024-09-11)
+
+***************************************************************************
+
+ This material is subject to the LaTeX Project Public License version 1.3c
+ or later. See http://www.latex-project.org/lppl.txt for details.
+
+***************************************************************************
+
+## Abstract
+
+This package provides an interface to make your LaTeX-based invoicing compatible to e-invoicing standards, such as they exist in the EU.
+
+The package includes a demo implementation, which can be used by template developers to create their own company specific variant. The included example file shows how to use it. This package is built so it also creates the XML file which will be directly attached to the PDF.
+
+There also exist interfaces to attach an XML file generated differently. Please have a look at the documentation.
+
+This package does not provide. Please be aware of you have to use valid input data for a valid ZUGFeRD output. The documentation suggests some options.
+
+
+# Version History
+
+ * 0.8 (2024-09-11) First version on CTAN
diff --git a/macros/latex/contrib/zugferd/zugferd-invoice.sty b/macros/latex/contrib/zugferd/zugferd-invoice.sty
new file mode 100644
index 0000000000..e86dbdee1b
--- /dev/null
+++ b/macros/latex/contrib/zugferd/zugferd-invoice.sty
@@ -0,0 +1,193 @@
+%
+% Copyright (C) 2024 Marei Peischl <marei@peitex.de>
+% ---------------------------------------------------------
+%
+% This file may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3c
+% of this license or (at your option) any later version.
+% The latest version of this license is in:
+%
+% http://www.latex-project.org/lppl.txt
+%
+% and version 1.3c or later is part of all distributions of LaTeX
+% version 2008-05-04 or later.
+%
+\ProvidesExplPackage{zugferd-invoice}{2024-09-11}{0.8}{Invoice wrapper example package for the factur-x to create ZUGFerD invoices}
+
+\keys_define:nn {zugferd/invoice}{
+ default-vat .tl_set:N = \defaultVAT,
+ default-vat .initial:n = 19,
+ format .code:n = \PassOptionsToPackage{format=#1}{zugferd},
+ format .initial:n = xrechnung3.0,
+}
+
+\ProcessKeyOptions[zugferd/invoice]
+
+\msg_new:nnnn {ptxcd/zugferd} {not-for-production} {
+ This~package~is~intented~to~be~an~example~for~a~possible~implementation~to~use~the~zugferd~package~for~invoicing.\\
+ As~this~integrates~a~lot~with~the~visual~structure~of~your~invoice~this~should~not~be~used~directly~but~may~be~an~example~for~your~own~package.
+}{See~zugferd~documentation~for~instructions~concerning~the~interfaces~used~in~this~file.}
+\msg_warning:nn {ptxcd/zugferd} {not-for-production}
+
+\RequirePackage{scrletter}
+\RequirePackage{ragged2e}
+\RequirePackage{zugferd}
+\RequirePackage{babel}
+
+% e.g. use comma as output decimal marker if german
+\addto\extrasgerman{\sisetup{locale=DE}}
+\addto\extrasngerman{\sisetup{locale=DE}}% for backwards compatibility
+
+\RequirePackage{xltabular}
+\RequirePackage{booktabs}
+
+\newcounter{invoiceitem}
+\seq_new:N \g__ptxcd_VAT_rates_seq
+
+\NewDocumentCommand{\InitVAT}{omO{S}}{
+ \seq_gput_right:Nn \g__ptxcd_VAT_rates_seq {#2}
+ \fp_new:c {g__ptxcd_invoice_sum_vat#2_fp}
+ \fp_new:c {g__ptxcd_invoice_base_vat#2_fp}
+ \cs_new:cn {__ptxcd_invoice_type_code#2:} {#3}
+}
+
+%%initialisierung auf 5,7,16 oder 19 % Mwst
+\InitVAT{16}
+\InitVAT{19}
+\InitVAT{5}
+\InitVAT{7}
+
+\newcommand*{\SetDefaultVAT}[1]{\def\defaultVAT{#1}}
+
+
+\seq_new:N \l__ptxcd_invoice_items_seq
+
+%\newcommand*{\AddInvoiceItem}[4][\defaultVAT]{%
+\NewDocumentCommand{\AddInvoiceItem}{D<>{}O{\defaultVAT}mmm}{
+ \seq_put_right:Nn \l__ptxcd_invoice_items_seq {
+ {#2}{#3}{#4}{#5}{#1}
+ }
+}
+
+\newcolumntype{P}{r<{\PrintTableCurrency}}
+
+\fp_new:N \g__ptxcd_invoice_sum_fp
+\fp_new:N \g__ptxcd_invoice_total_fp
+\fp_new:N \g__ptxcd_tax_total_fp
+\fp_new:N \g__ptxcd_invoice_item_fp
+\fp_new:N \g__ptxcd_invoice_item_vat_fp
+\fp_new:N \g__ptxcd_invoice_sum_vat_fp
+
+\newcommand*{\PrintInvoiceTabular}{
+\bool_gset_true:N \g_ptxcd_first_run_bool
+ \begin{ZUGFeRD}
+ \sisetup{round-precision=2,round-mode=places,round-pad=false,table-number-alignment=right,minimum-decimal-digits=2,mode=text}
+ \begin{xltabular}{\linewidth}{@{}rS[round-precision=1,table-format=2.1]>{\RaggedRight}XPP@{}}
+ \toprule[\lightrulewidth]
+ \noalign{\global\let\PrintTableCurrency\relax}%
+ \small\emph{Pos.}&\small\emph{Std.}&\small\emph{Beschreibung}&\small\emph{Einzelpreis}&\small\emph{Gesamtpreis}\\\midrule[\heavyrulewidth]
+ \noalign{\global\let\PrintTableCurrency\TableCurrency}%
+ \endhead
+ \bottomrule[\lightrulewidth]\multicolumn{5}{@{}p{\textwidth}@{}}{\strut\hspace*{\fill}\footnotesize Fortsetzung auf der nächsten Seite}\endfoot
+ \bottomrule\endlastfoot
+% Only write xml for the first run of the tabular.
+ \fp_compare:nNnF {\g__ptxcd_invoice_sum_fp} = {\c_zero_dim} {
+ \fp_gzero:N \g__ptxcd_invoice_sum_fp
+ \zugferd_disable_XML_interfaces:
+ }
+ \seq_map_inline:Nn \g__ptxcd_VAT_rates_seq {
+ \fp_gzero:c {g__ptxcd_invoice_sum_vat##1_fp}
+ \fp_gzero:c {g__ptxcd_invoice_base_vat##1_fp}
+ }
+ \fp_gzero:N \g__ptxcd_invoice_sum_fp
+ \seq_map_inline:Nn \l__ptxcd_invoice_items_seq {
+ \PrintInvoiceItem##1
+ }
+ \tabularnewline
+ \noalign{\skip_vertical:n {-\ht\strutbox-\dp\strutbox}}%offset for extra empty row of mapping
+ \midrule[\heavyrulewidth]
+ \PrintInvoiceTotal
+ \end{xltabular}
+ \end{ZUGFeRD}
+}
+
+\newcommand*{\PrintInvoiceTotal}{
+ \zugferd_startInvoiceSums:
+ \fp_gset:Nn \g__ptxcd_invoice_total_fp { \g__ptxcd_invoice_sum_fp}
+ \fp_gzero:N \g__ptxcd_tax_total_fp
+ \PrintInvoiceSum{netto}{\fp_use:N \g__ptxcd_invoice_sum_fp}
+ \seq_map_inline:Nn \g__ptxcd_VAT_rates_seq {
+ \fp_compare:nNnF {\fp_use:c {g__ptxcd_invoice_sum_vat##1_fp}} = {0} {
+ \zugferd_write_TaxEntry:nnnn {\use:c {__ptxcd_invoice_type_code##1:}} {##1} {\fp_use:c {g__ptxcd_invoice_base_vat##1_fp}} {\fp_use:c {g__ptxcd_invoice_sum_vat##1_fp}}
+ \fp_gadd:Nn \g__ptxcd_tax_total_fp {\fp_use:c {g__ptxcd_invoice_sum_vat##1_fp}}
+ \PrintVatSum[{\fp_use:c {g__ptxcd_invoice_base_vat##1_fp}}]{##1 }{\fp_use:c {g__ptxcd_invoice_sum_vat##1_fp}}
+ }
+ }
+ \PrintInvoiceSum{brutto}{\fp_eval:n {\g__ptxcd_tax_total_fp + \g__ptxcd_invoice_total_fp }}
+ % TODO add support for allowance, chargeTotal, and prepaid
+ \zugferd_write_Summation:nnnnnnnn
+ {\fp_use:N \g__ptxcd_invoice_sum_fp}% LineTotalAmount
+ {0} %ChargeTotalAmount
+ {0} %AllowanceTotalAmount
+ {\fp_use:N \g__ptxcd_invoice_sum_fp} %TaxBasisTotalAmount
+ {\fp_use:N \g__ptxcd_tax_total_fp} %TaxTotalAmount
+ {\fp_eval:n {\g__ptxcd_tax_total_fp + \g__ptxcd_invoice_total_fp }} %GrandTotalAmount
+ {0} % TotalPrepaidAmount
+ {\fp_eval:n {\g__ptxcd_tax_total_fp + \g__ptxcd_invoice_total_fp }} %DuePayableAmount = GrandTotalAmount - TotalPrepaidAmount
+ \zugferd_stopInvoiceSums:
+}
+
+%Ausgabe der einzelnen Rechnungspositionen
+\newcommand*{\PrintInvoiceItem}[5]{%
+ \stepcounter{invoiceitem}%
+ \theinvoiceitem%Positionsnummer
+ \fp_gset:Nn \g__ptxcd_invoice_item_vat_fp {#2 * (#1/100) * #4}
+ \fp_gset:Nn \g__ptxcd_invoice_item_fp {#2 * #4}
+% \fp_gadd:Nn \g__ptxcd_invoice_sum_vat_fp
+ \fp_gadd:cn {g__ptxcd_invoice_base_vat#1_fp} {\g__ptxcd_invoice_item_fp}
+ \fp_gadd:cn {g__ptxcd_invoice_sum_vat#1_fp} {\g__ptxcd_invoice_item_vat_fp}
+ \fp_gadd:Nn \g__ptxcd_invoice_sum_fp {\g__ptxcd_invoice_item_fp}
+
+ % position nummer name einzel-preis anzahl gesamtpreis
+ \keys_set:ne {zugferd}{tax/rate=#1, tax/category=\use:c {__ptxcd_invoice_type_code#1:},#5}
+ \zugferd_write_Item:nnnnnn {\theinvoiceitem} {} {#3} {#4} {#2} {\fp_use:N \g__ptxcd_invoice_item_fp}
+
+ &#2% Anzahl
+ &#3\space(\printVAT{#1}~MwSt.)% Beschreibung mit Angabe der MwSt, in Klammern
+ &\num{#4}%\num[round-mode=places,output-decimal-marker={,},round-pad = false]{#4}\tl_show:n {#4}%Einzelpreis
+ &\exp_args:Nx \num{\fp_use:N \g__ptxcd_invoice_item_fp}
+ \tabularnewline
+}
+
+
+
+\newcommand*{\PrintInvoiceSum}[2]{
+ \PrintSum{\csname invoicesum#1name\endcsname}{#2}
+}
+
+\newcommand*{\PrintVatSum}[3][]{
+ \PrintSum{\invoicesumvatname[#1]{#2}}{#3}
+}
+
+\newcommand*{\invoicesumvatname}[2][]{MwSt.~\printVAT{#2}\tl_if_empty:nF {#1} {\space(\num[round-precision=2]{#1}\TableCurrency)}}
+\renewcommand*{\theinvoiceitem}{\int_compare:nNnT {\value{invoiceitem}}<{10}{0}\arabic{invoiceitem}}
+
+\newcommand*{\PrintSum}[2]{
+ &&\multicolumn{1}{r}{#1\invoicesumseparator}&\multicolumn{1}{l}{}&\exp_args:Nx \num {#2}\tabularnewline
+}
+
+\ExplSyntaxOff
+
+\newcommand*{\invoicesumnettoname}{Summe (Netto)}
+\newcommand*{\invoicesumbruttoname}{Summe (Brutto)}
+\newcommand*{\invoicesumseparator}{:\space}
+
+\newcommand*{\TableCurrency}{\,€}
+\newcommand*{\printVAT}[1]{\num[round-mode=none]{#1}\,\%}
+
+\newcommand*{\PrintPositionenVAT}[5]{%
+ \stepcounter{invoiceitem}%
+ \theinvoiceitem&#1&#2\space(\printVAT{#3})&#4&#5\tabularnewline
+}
+
+\endinput
diff --git a/macros/latex/contrib/zugferd/zugferd.dtx b/macros/latex/contrib/zugferd/zugferd.dtx
new file mode 100644
index 0000000000..1bfdb78ac6
--- /dev/null
+++ b/macros/latex/contrib/zugferd/zugferd.dtx
@@ -0,0 +1,2285 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2021–2024 Marei Peischl <marei@peitex.de>
+% ---------------------------------------------------------
+%
+% This file may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3c
+% of this license or (at your option) any later version.
+% The latest version of this license is in:
+%
+% http://www.latex-project.org/lppl.txt
+%
+% and version 1.3c or later is part of all distributions of LaTeX
+% version 2008-05-04 or later.
+%
+% \fi
+% \iffalse
+%<*driver>
+\ProvidesFile{zugferd.dtx}[2024-09-11 v0.8 ZUGFerd Invoice and Faktur-X]
+%</driver>
+%<package>\NeedsTeXFormat{LaTeX2e}[2023-11-01]
+%<package>\ProvidesExplPackage{zugferd}{2024-09-11}{0.8}{Create ZUGFerd invoices using LaTeX}
+%<*driver>
+\DocumentMetadata{pdfstandard=a-3b,lang=en}
+\documentclass[lm-default=false,cs-break-nohyphen]{l3doc}
+\usepackage{zugferd}[2024-09-11]
+\EnableCrossrefs
+%\CodelineIndex
+\RecordChanges
+\usepackage{biblatex}
+
+\usepackage{shellesc}
+\ifnum\ShellEscapeStatus=1\relax\else
+ \PassOptionsToPackage{draft}{minted}
+\fi
+\usepackage{minted}
+\newcounter{codelist}
+\newenvironment{examplecode}{%
+ \VerbatimEnvironment%
+ \fvset{gobble=0}%
+ \begin{VerbatimOut}[tabsize=3,gobble=1]{minted.doc.out}%
+}{%
+ \end{VerbatimOut}%
+ \inputminted[autogobble, escapeinside=||]{latex}{minted.doc.out}%
+}
+\usepackage{accsupp}
+\setminted{breaksymbol={\BeginAccSupp{method=escape,ActualText={}}\tiny\ensuremath{\hookrightarrow}\EndAccSupp{}},breaklines}
+
+\ExplSyntaxOn
+\makeatletter
+\tl_new:N \l__ptxtools_doc_values_tl
+\newcommand*{\codefamily}{\MacroFont}
+\DeclareTextFontCommand{\codefont}{\codefamily}
+\providecommand{\option}[1]{\codefont{#1}}
+
+\cs_new:Npn \__ptxctools_parse_key_option:w #1 #2 #3 #4 = #5 \q_stop {
+ \begingroup
+ \let\PrintDescribeOption\PrintDescribeKeyOption
+ \tl_set:Nn \l__ptxtools_doc_values_tl {\small\IfBooleanTF{#3}{\textsf{#5}}{\textsf{(\codefont{#5})}}}
+ \noindent\DescribeOption{#4}\hfill
+ \small
+ \tl_if_blank:nTF {#2} {\meta{\textrm{initially~unset}}} {
+ \IfBooleanTF{#1}
+ {#2}
+ {(default:~\codefont{#2})}
+ }\strut\par
+ \endgroup
+}
+
+\newcommand*{\PrintDescribeKeyOption}[1]{
+ {\MacroFont #1=}\rlap{\hskip\marginparsep\l__ptxtools_doc_values_tl}
+}
+
+\bool_new:N \l_ptxtools_last_was_describe_bool
+
+\NewDocumentCommand{\DescribeKeyOption}{smms}{
+ \bool_if:NTF \l_ptxtools_last_was_describe_bool {
+ \vskip -\lastskip
+ }{
+ \par
+ \dim_compare:nNnF {\parskip} > {\c_zero_dim} {\medskip}
+ }
+ \__ptxctools_parse_key_option:w #1 {#3} #4 #2 \q_stop
+
+ \bool_set_true:N \l_ptxtools_last_was_describe_bool
+ \AddToHookNext{para/begin}{
+ \bool_set_false:N \l_ptxtools_last_was_describe_bool
+ \OmitIndent
+ }
+ \smallskip
+}
+
+\newenvironment{valuelist}{
+ \list{}{
+ \labelwidth0pt
+ \itemindent0pt
+ \leftmargin0pt
+ \let\makelabel\valuelistlabel
+ }
+}{
+ \endlist
+}
+\newcommand*\valuelistlabel[1]{
+ \llap{
+ \normalfont\codefamily\color_select:n {black!60}
+ \begin{tabular}[t]{@{}r@{}}
+ \clist_use:nn {#1} {\\}
+ \end{tabular}
+ }
+}
+
+\newcommand*{\accessTaxExemptionReason}[1]{
+ \keys_set:nn {zugferd / tax } {category=#1}
+ Exemption~reason:~\tl_if_empty:NTF \l__zugferd_tax_exemption_reason_tl {\meta{empty}} {\l__zugferd_tax_exemption_reason_tl};~
+ Exemption~reason~code:~\tl_if_empty:NTF \l__zugferd_tax_exemption_code_tl {\meta{empty}} {\l__zugferd_tax_exemption_code_tl}
+}
+% to support small layout adjustments for the texdoc version
+\newcommand*{\IfOnlyDocumentation}[1]{
+ \bool_if_exist:NT \g__codedoc_typeset_implementation_bool {
+ \bool_if:NF \g__codedoc_typeset_implementation_bool {#1}
+ }
+}
+%add a subtitle
+\def\@maketitle{%
+ \newpage
+ \null
+ \vskip 2em%
+ \begin{center}%
+ \let \footnote \thanks
+ {\LARGE \@title \par}%
+ \vskip 1.5em%
+ {\large \@subtitle \par}%
+ \vskip 1em%
+ {\large
+ \lineskip .5em%
+ \begin{tabular}[t]{c}%
+ \@author
+ \end{tabular}\par}%
+ \vskip 1em%
+ {\large \@date}%
+ \end{center}%
+ \par
+ \vskip 1.5em}
+\newcommand{\subtitle}[1]{\def\@subtitle{#1}}
+\subtitle{}
+\makeatother
+\ExplSyntaxOff
+
+\usepackage{underscore-ltx}
+
+\begin{filecontents}{zugferd.bib}
+@online{x-rechnung,
+ url={https://xeinkauf.de/dokumente/},
+ urldate={2024-08-20}
+}
+@online{spec-xrechnung,
+ url={https://xeinkauf.de/app/uploads/2024/07/302-XRechnung-2024-06-20.pdf},
+ author={{Koodinierungsstelle für IT-Standards}},
+ title={Spezifikation Standard XRechnung},
+ subtitle={CIUS und Extension},
+ edition={Version XRechnung 3.0.2},
+ date={2024-06-20},
+ urldate={2024-08-20},
+ langid={german}
+}
+@online{mustang-project,
+ title={Mustangproject},
+ url={https://github.com/ZUGFeRD/mustangproject},
+ urldate={2024-08-20}
+}
+@online{country-codes,
+ title={ECE/TRADE/201},
+ subtitle={ISO COUNTRY CODE for Representation of Names of Countries},
+ url={https://unece.org/trade/documents/iso-country-code-representation-names-countries},
+ urldate={2024-08-20},
+}
+@online{unit-codes,
+ title={Rec 20 – Codes for Units of Measure Used in International Trade},
+ url={https://unece.org/sites/default/files/2023-10/rec20_Rev17e-2021.xlsx},
+ urldate={2024-08-20},
+ note={Link directly to xlsx. \cite[see][for all revisions]{cl-recommendations}.}
+}
+@online{cl-recommendations,
+ author={United Nations Economic Commission for Europe (UNECE)},
+ title={Code List Recommendations},
+ url={https://unece.org/trade/uncefact/cl-recommendations},
+ urldate={2024-08-20}
+}
+@online{VAT-exemption-codes,
+ title={VAT exemption reason code list},
+ url={https://www.xrepository.de/details/urn:xoev-de:kosit:codeliste:vatex_1},
+ urldate={2024-08-20}
+}
+@online{zugferd-download,
+ title={ZUGFeRD 2.2},
+ subtitle={Download page},
+ url={https://ferd-net.de/standards/zugferd-2.2/zugferd-2.2.html},
+ urldate={2024-09-02},
+}
+@manual{scrletter,
+ title = {The scrletter package},
+ subtitle = {Letter extension to KOMA-Script classes},
+ author = {Kohm, Markus},
+ url = {https://komascript.de/},
+ urldate = {2024-09-03},
+ documentation = {ctan://macros/latex/contrib/koma-script/doc/scrguide-en.pdf},
+ date = {2023-07-07},
+ version = {3.41},
+}
+@online{leitweg-id,
+ title={Xeinkauf FAQ},
+ subtitle={Leitweg ID},
+ author={{Koordinierungsstelle für IT Standards (KoSIT)}},
+ url={https://xeinkauf.de/faq/xrechnung#leitweg-id},
+ urldate={2024-09-04}
+}
+\end{filecontents}
+\addbibresource{zugferd.bib}
+\nocite{cl-recommendations}
+
+\usepackage{xspace}
+\newcommand*{\XML}{XML\xspace}
+\newcommand*{\XMLfile}{\XML file}
+
+\begin{document}
+\EnableDocumentation\DisableImplementation
+\DocInput{zugferd.dtx}
+%\DisableDocumentation\EnableImplementation
+%\DocInputAgain
+\PrintChanges
+\printbibliography
+\PrintIndex
+\end{document}
+%</driver>
+% \fi
+%
+% \changes{v0.8}{2024-09-11}{First CTAN version}
+%
+% \GetFileInfo{zugferd.dtx}
+%
+% \DoNotIndex{\newcommand,\newenvironment}
+% \begin{documentation}
+% \title{The \textsf{zugferd} package\thanks{This document
+% corresponds to \textsf{zugferd}~\fileversion, dated \filedate.}}
+% \subtitle{Creating electronic and hybrid invoices using \LaTeX}
+% \author{Marei Peischl \\ \texttt{marei@peitex.de}}
+%
+% \maketitle
+%
+% \begin{abstract}
+% Invoicing is getting more and more automated.
+% Starting with public sector, within Germany there already is a requirement to stick to the Faktur-X Standard.
+% First Invoices based on this implementation here have been created back in 2021.
+% And this is now the trial to create a more universal and public package to support the current Version of ZUGFeRD and therefore also X-Rechung and Faktur-X.
+%
+% \indent The fundamental idea of this package was to use the calculation within \LaTeX{} as well. So it also creates the \XMLfile for the attachment on the fly.
+% To match typical setups there is a wrapper package which usually would also hold the personal Invoicing layout configuration.
+% \end{abstract}
+%
+% \IfOnlyDocumentation{\vfill}
+% \section*{Sponsors \& Supporters}
+% Most of this package has been created within my free time and for my personal use. At start, it was not a paid project at all.
+% Since it is addressing business users it would be great if we could keep this actively maintained.
+% If you are able to support this either financially for the maintenance effort, a custom extension, I'd love to hear from you.
+%
+% Tthis project was financially supported by:
+% \begin{itemize}
+% \item Pengutronix e.K., \url{https://pengutronix.de}\newline
+% Special thanks to them, as they also sponsored the minimal portable \TeX{} Live setup.
+% \end{itemize}
+%
+% \IfOnlyDocumentation{\clearpage}
+%
+% \tableofcontents
+%
+% \IfOnlyDocumentation{\clearpage}
+%
+% \section{Quick start}
+% This package is still in development and does not provide any validation.
+% To ensure your invoice is created correctly you should also validate the output files.
+% There are tools like the \citeauthor{mustang-project} \cite{mustang-project} providing an easy-to-use interface for the validation.
+% In the appendix I will add some notes on my setup and how I use it within pipelines.
+%
+% The Bundle provides an example file called \file{DEMO-rechnung-zugferd.tex}.
+% This includes a basic setup for a valid X-Rechnung currently matching Version 3.0.1 of the standard.
+% Details on the requirements can be found in the documentation at \cite{x-rechnung}.
+%
+% \subsection{Disclaimer concerning the \pkg{zugferd-invoice} Package}
+% The included package \pkg{zugferd-invoice} is an example project which might match your own invoicing structure.
+% It holds all the layout information which is static across all the invoices.
+% This package is an example implementation and should not be used in production.
+% It is published as a part of the documentation.
+%
+% The idea is to create your own version of this package to use your own layout and internally load the \pkg {zugferd} package that way.
+% Of course, it's possible to use a copy of this package within your personal setup.
+% But the syntax used in the DEMO file may change, so you have to ensure yourself to be compatible with updates.
+%
+% The interfaces for \pkg{zugferd} will hopefully stay the same.
+% At least changes will be announced and build compatible during a deprecation period.
+%
+% \end{documentation}
+% \iffalse
+% \begin{macrocode}
+%<*package>
+%<@@=zugferd>
+% \end{macrocode}
+% Workaround to replace module name without having a visible <@@=zugferd> in the documentation
+% \fi
+%</package>
+% \ExplSyntaxOn
+% \tl_gset:Nn \g__codedoc_module_name_tl {zugferd}
+% \ExplSyntaxOff
+% \iffalse
+%<*!package>
+% \fi
+% \begin{documentation}
+\ExplSyntaxOn
+\tl_gset:Nn \g__codedoc_module_name_tl {zugferd}
+\ExplSyntaxOff
+% \end{documentation}
+% \iffalse
+%</!package>
+%<*package>
+% \fi
+% \begin{implementation}
+% \section{Implementation}
+% \begin{variable}{\l_@@_tmp_tl,\g_@@_format_str,\g_@@_businessProcessId_str,\g_@@_writeTradeContact_bool,\g_@@_writePaymentMeans_bool,\g_@@_conformance_level_str}
+% \begin{macrocode}
+\tl_new:N \l_@@_tmp_tl
+\str_new:N \g_@@_format_str
+\str_new:N \g_@@_businessProcessId_str
+\bool_new:N \g_@@_writeTradeContact_bool
+\bool_new:N \g_@@_writePaymentMeans_bool
+\str_new:N \g_@@_conformance_level_str
+% \end{macrocode}
+% \end{variable}
+% \end{implementation}
+% \begin{documentation}
+% \section{Package Options}\label{sec:package-options}
+% The package supports a few fundamental settings.
+% These have to be set when the package is loaded as they are used internally to setup the scheme or activate the \XML mechanism.
+%
+% \DescribeKeyOption{format=xrechnung/xrechnung3.0/xrechnung2.3/basic}{xrechunng}
+% \option{format} selects the scheme to be used for the zugferd invoice.
+% Currently xrechnung3.0, xrechnung2.3 and the basic scheme are supported.
+%
+% The value \option{xrechnung} is set as an alias to |xrechnung3.0| and will always use the latest version supported by \pkg{zugferd}.
+%
+% \DescribeKeyOption{zugferd=\meta{boolean}}{true}*
+% This option can be used to deactivate the \XML embedding.
+% It would also disable the the \option{write-xml} option.
+% This can be used to create a package which can use the same structure to also create invoices without \XML attachment.
+% It can also be used with older \LaTeX{} releases than this package requires.
+% There will be a warning, but the visible part should be okay.
+%
+% \DescribeKeyOption{write-xml=\meta{boolean}}{true}*
+% Disable the \XML output.
+% This can be used if you want to create the \XML attachment with different software than this package.
+%
+% In that case you can either rename your file to \meta{\cs[no-index]{jobname}\_zugferd.xml} or also adjust the \option{xml-file} option.
+%
+% \DescribeKeyOption{xml-file=\meta{filename}}{\cs[no-index]{jobname}_zugferd.xml}*
+% Adjust the file name of the created or loaded \XMLfile.
+%
+% The option \option{xrechnung} is only used internally to set the global parameters for all |xrechnung| variants.
+%
+% \DescribeKeyOption{auto-exemption=\meta{boolean}}{true}
+% \pkg{zugferd} tries to automatically add an exemption-reason for the most common VAT categories.
+% In case a more specific reason is required this setting can be disabled and everything should be configured manually.
+% See \autoref{sec:tax-category} for more explanation of this feature and the categories this applies to.
+%
+% \end{documentation}
+% \begin{implementation}
+% \begin{optionenv}{format,xrechnung,write-xml,zugferd,xml-file,auto-exemption}
+% \changes{v0.7}{2024-09-10}{Added auto-exemption option}
+% \begin{macrocode}
+\char_set_catcode_other:N \#%
+\keys_define:nn {zugferd} {
+ xrechnung .code:n = {
+ \bool_gset_true:N \g_@@_writeTradeContact_bool
+ \bool_gset_true:N \g_@@_writePaymentMeans_bool
+ \str_gset:Nn \g_@@_conformance_level_str {XRECHNUNG}
+ },
+ format .choice:,
+ format / xrechnung3.0 .code:n = {
+ \str_gset:Nx \g_@@_format_str {
+ urn:cen.eu:en16931:2017#compliant#urn:xeinkauf.de:kosit:xrechnung_3.0
+ }
+ \str_gset:Nx \g_@@_businessProcessId_str {
+ urn:fdc:peppol.eu:2017:poacc:billing:01:1.0
+ }
+ \keys_set:nn {zugferd}{xrechnung}
+ },
+ format / xrechnung2.3 .code:n = {
+ \str_gset:Nx \g_@@_format_str {
+ urn:cen.eu:en16931:2017#compliant#urn:xoev-de:kosit:standard:xrechnung_2.3
+ }
+ \keys_set:nn {zugferd}{xrechnung}
+ },
+ format / basic .code:n = {
+ \str_gset:Nx \g_@@_format_str {
+ urn:cen.eu:en16931:2017#compliant#urn:factur-x.eu:1p0:basic
+ }
+ \bool_gset_false:N \g_@@_writeTradeContact_bool
+ \bool_gset_false:N \g_@@_writePaymentMeans_bool
+ \str_gset:Nn \g_@@_conformance_level_str {BASIC}
+ },
+ format / xrechnung .meta:n = { format = xrechnung3.0 },
+ format .initial:n = xrechnung,
+ format .usage:n = load,
+ write-xml .bool_gset:N = \g_@@_write_xml_bool,
+ write-xml .initial:n = true,
+ write-xml .usage:n = load,
+ zugferd .bool_gset:N = \g_@@_active_bool,
+ zugferd .initial:n = true,
+ zugferd .default:n = true,
+ zugferd .usage:n = load,
+ ZUGFerD .meta:n = {zugferd = #1},
+ xml-file .tl_gset:N = \g_@@_xml_file_tl,
+ xml-file .initial:n = \jobname _zugferd.xml,
+ xml-file .usage:n = load,
+ auto-exemption .bool_gset:N = \g_@@_auto_exemption_bool,
+ auto-exemption .initial:n = true,
+ auto-exemption .default:n = true,
+ auto-exemption .usage:n =load,
+}
+\char_set_catcode_parameter:N \#%
+
+\ProcessKeyOptions[zugferd]
+% \end{macrocode}
+% \end{optionenv}
+% \subsection{Preparation to write the \file{.xml} file}
+% \begin{variable}{\_@@_xml_writer_iow}
+% \begin{macrocode}
+\iow_new:N \_@@_xml_writer_iow
+% \end{macrocode}
+% \end{variable}
+% To adjust the metadata it is necessary to use the \pkg{pdfmanagement-testphase} by \citeauthor{pdfmanagement-testphase}.
+% She had prepared some experiment files for the PDF attachment in the experiments of the repository.
+% We use these to embed the \XML file.
+%
+% This part prepares the XMP metadata according to the required scheme.
+% \begin{macrocode}
+\bool_if:NT \g_@@_active_bool {
+ \cs_if_exist:NF \pdfmeta_xmp_xmlns_new:nn {
+ \msg_new:nnnn {zugferd} {PDFmanagement-not-active} {
+ The~\LaTeX~PDF~management~is~not~active.\\
+ Activate~it~using~\string\DocumentMetadata.
+ } {
+ See~ZUGFeRD~or~PDFmanagement~documentation~for~more~information.
+ }
+ \msg_error:nn{zugferd} {PDFmanagement-not-active}
+ }
+ %% based on experiments for l3pdfmeta by Ulrike Fischer
+ \pdfmeta_xmp_xmlns_new:nn {fx}{
+ urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0\c_hash_str
+ }
+
+ \cs_generate_variant:Nn \__pdfmeta_xmp_schema_new:nnn {nne}
+
+ \__pdfmeta_xmp_schema_new:nne
+ {Factur-X~PDFA~Extension~Schema}
+ {fx}
+ {urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0\c_hash_str}
+
+ \__pdfmeta_xmp_property_new:nnnnn
+ {fx}
+ {DocumentFileName}
+ {Text}
+ {external}
+ {name~of~the~embedded~XML~invoice~file}
+
+ \__pdfmeta_xmp_property_new:nnnnn
+ {fx}
+ {DocumentType}
+ {Text}
+ {external}
+ {INVOICE}
+
+ \__pdfmeta_xmp_property_new:nnnnn
+ {fx}
+ {Version}
+ {Text}
+ {external}
+ {The~actual~version~of~the~factur-x~schema}
+
+ \__pdfmeta_xmp_property_new:nnnnn
+ {fx}
+ {ConformanceLevel}
+ {Text}
+ {external}
+ {The~conformance~level~of~the~factur-x~data}
+
+ \exp_args:Ne \pdfmeta_xmp_add:n {
+ % fix INVOICE
+ <fx:DocumentType>INVOICE</fx:DocumentType>\iow_newline:
+ % fix factur-x.xml
+ <fx:DocumentFileName>factur-x.xml</fx:DocumentFileName>\iow_newline:
+ % fix schema version
+ <fx:Version>1.0</fx:Version>\iow_newline:
+ % zulässige Werte MINIMUM, BASIC WL, BASIC, EN 16931, EXTENDED, XRECHNUNG
+ <fx:ConformanceLevel>\g_@@_conformance_level_str</fx:ConformanceLevel>%
+ \iow_newline:
+ %
+ }
+}
+% \end{macrocode}
+% \end{implementation}
+% \begin{documentation}
+% \section{User Commands}
+% The end user is only asked to set or access the data to be used by \pkg{zugferd}.
+%
+% \begin{syntax}
+% \cs[no-index]{SetZUGFeRDData}*\marg{key value list}
+% \end{syntax}
+% \DescribeMacro{\SetZUGFeRDData}
+% \DescribeMacro[noindex]{\SetZugferdData}
+% The two modes of \cs[no-index]{SetZUGFeRDData} control if the argument is expanded before the fields are set.
+% Depending on the source of the data this might be necessary.
+% Fields which are involved in the calculation will be expanded anyway, but the text fields will not, to support special characters.
+%
+% \end{documentation}
+% \begin{implementation}
+% \begin{function}{\SetZUGFeRDData}
+% \begin{macrocode}
+\NewDocumentCommand{\SetZUGFeRDData}{sm}{
+ \IfBooleanTF{#1}
+ {\keys_set:ne}
+ {\keys_set:nn}
+ {zugferd} {#2}
+}
+\let\SetZugferdData\SetZUGFeRDData
+% \end{macrocode}
+% \end{function}
+% \end{implementation}
+% \begin{documentation}
+%
+% \DescribeMacro{\InsertZUGFeRDData}
+% \DescribeMacro[noindex]{\InsertZugferdData}
+% \begin{syntax}
+% \cs[no-index]{InsertZugferdData}\oarg{special mode option}\marg{data-selection}
+% \end{syntax}
+% ZUGFerd uses the same data as the \XMLfile inside the PDF.
+% To simplify the reuse of data this command is designed to simplify the access to data fields, for example:
+%
+% \begin{examplecode}
+% \InsertZUGFeRDData{id}
+% {\InsertZUGFeRDData[set-today]{date}\today}
+% \InsertZUGFeRDData[AddressData]{seller}
+% \end{examplecode}
+% As special modes the command currently supports the following:
+%
+% By default \pkg{zugferd} tries to find the variable holding the data itself.
+% First a token list is tried, afterwards a string.
+% Global variables are prefered over local ones.
+%
+% As the variable names may container underscores and the option usually prefers dashes, dashes are converted to underscores for the detection.
+%
+% \DescribeOption{AddressData} Allows |seller| or |buyer| for the data selection.
+% Will print the address, to be used in letters.
+%
+% \DescribeOption{set-today}
+% For dates there also exists the variant which will not print the variable but parse the variable to be used as \cs{today}.
+% Using this the date format can be controlled easier using the language setting of the document.
+% Here you should take care to use it within a group to restore the real value of \cs[no-index]{today} afterwards.
+%
+% \end{documentation}
+% \begin{implementation}
+% \begin{function}{\InsertZUGFeRDData,\InsertZugferdData}
+% To simplify the usage in letters we also add fields to be able to use the zugferd data within \LaTeX{} output.
+% Country is still missing.
+% \begin{macrocode}
+\NewDocumentCommand{\InsertZUGFeRDData}{om}{
+ \str_case:nnF {#1} {
+% \end{macrocode}
+% \begin{macrocode}
+ {AddressData} {
+ \clist_map_inline:nn {name, lineone, linetwo} {
+ \prop_if_in:cnT {g_@@_#2_AddressData_prop } {##1} {
+ \prop_item:cn {g_@@_#2_AddressData_prop } {##1}\\
+ }
+ }
+ \prop_item:cn {g_@@_#2_AddressData_prop } {postcode}
+ \space
+ \prop_item:cn {g_@@_#2_AddressData_prop } {city}
+ }
+% \end{macrocode}
+% \begin{macrocode}
+ {set-today} {
+ \_@@_set_today:v {g_@@_#2_tl}
+ }
+ } {
+% \end{macrocode}
+% Try to find the variable automatially.
+% \begin{itemize}
+% \item replace dashes by underscores
+% \item try if a tokenlist or a string
+% \item prefer global over local
+% \item take the first existing variable and break the loop
+% \end{itemize}
+% \begin{macrocode}
+ \str_set:Ne \l_tmpa_str {#2}
+ \str_replace_all:Nnn \l_tmpa_str {-} {_}
+ \str_replace_all:Nnn \l_tmpa_str {/} {_}
+ \bool_set_true:N \g_tmpa_bool
+ \clist_map_inline:nn {tl, str} {
+ \clist_map_inline:nn {g, l} {
+ \use:c {##1 _if_exist:cT} {####1_@@_ \l_tmpa_str _##1}
+ {
+ \use:c {####1_@@_ \l_tmpa_str _##1}
+ \bool_gset_false:N \g_tmpa_bool
+ }
+ \bool_if:NF \g_tmpa_bool {\clist_map_break:}
+ }
+ \bool_if:NF \g_tmpa_bool {\clist_map_break:}
+ }
+ }
+}
+\providecommand{\InsertZugferdData}{\InsertZUGFeRDData}
+\providecommand{\insertZugferdData}{\InsertZUGFeRDData}
+% \end{macrocode}
+% \end{function}
+% \begin{function}{\_@@_set_today:c}
+% Auxiliary function to use a date variable within the current group to be used as \cs[no-index]{today}.
+% \begin{macrocode}
+\cs_new:Nn \_@@_set_today:n {
+ \_@@_set_today_aux:w #1 \q_stop
+}
+\cs_generate_variant:Nn \_@@_set_today:n {v}
+\cs_new:Npn \_@@_set_today_aux:w #1 #2 #3 #4 #5 #6 #7 #8 \q_stop{
+ \int_set:Nn \year {#1#2#3#4}
+ \int_set:Nn \month {#5#6}
+ \int_set:Nn \day {#7#8}
+}
+% \end{macrocode}
+% \end{function}
+% \end{implementation}
+% \begin{documentation}
+% \section{Commands for template authors}
+%
+% \DescribeEnv{ZUGFeRD}
+% To simplify the structure of the wrapper package, \pkg{zugferd} provides an environment for the \XML mechanism and does the attachment to the PDF file (of course only, if enabled, see \autoref{sec:package-options}).
+% This provides the public interface bundling some steps together to reduce maintenance effort for any template maintainer using this package.
+% It also avoids the use of internal commands.
+%
+% This environment opens the \XML file using \cs{startWritingZUGFeRDxml} and afterwards writes the \XML header including the File and Scheme information, the |ExchangedDocumentContext| and information of the |ExchangedDocument|.
+% Notes will also be written within this step.
+% Afterwards the environment should include all the mechanisms to write the invoice positions as well as summation.
+%
+% At the end of the environment the footer is inserted, before the output stream is closed using \cs{stopWritingZUGFeRDxml}. Which also attaches the \XMLfile to the PDF.
+%
+%
+% \end{documentation}
+% \begin{implementation}
+% \begin{macrocode}
+\NewDocumentEnvironment{ZUGFeRD}{o}{
+ \IfNoValueF{#1}{
+ \SetZUGFeRDData{#1}
+ }
+ \zugferd_enable_XML_interfaces:
+ \startWritingZUGFeRDxml
+ \zugferd_write_Header:
+ \ignorespaces
+}{
+ \zugferd_enable_XML_interfaces:
+ \zugferd_write_Footer:
+ \stopWritingZUGFeRDxml
+ \zugferd_disable_XML_interfaces:
+}
+% \end{macrocode}
+% \end{implementation}
+% \begin{documentation}
+% \DescribeMacro{\startWritingZUGFeRDxml}
+% \cs[no-index]{startWritingZUGFeRDxml} is opening the output stream for the \XMLfile.
+% It also adjusts the indentation.
+% If \option{write-xml} is false, this option only opens a group to achieve the same structure in both modes.
+%
+% \DescribeMacro{\stopWritingZUGFeRDxml}
+% Here the output stream is closed and the \XMLfile is attached.
+% In case \option{write-xml} is not active, the attachment will be made if that's not deactivated separately using \option{zugferd}.
+% It also ends the group started by \cs[no-index]{startWritingZUGFeRDxml}.
+% \end{documentation}
+% \begin{implementation}
+% \begin{macrocode}
+\newcommand*{\startWritingZUGFeRDxml}{
+ \begingroup
+ \bool_if:NTF \g_@@_write_xml_bool {
+ \char_set_active_eq:nN {13} \_@@_xml_newline_indent:
+ \iow_open:Nn \_@@_xml_writer_iow {\g_@@_xml_file_tl}
+ }{
+ \msg_info:nn {zugferd} {no-xml-write}
+ }
+}
+\msg_new:nnn {zugferd} {no-xml-write} {
+ The~option~write-xml=false~was~set.\\
+ Writing~of~XML~file~is~deactivated.
+}
+% \end{macrocode}
+% The PDF attachment is done after the writing stream is closed.
+% \begin{macrocode}
+%% The metadata elements are taken by Ulrike Fischer's faktur-x experiments
+%% https://github.com/latex3/pdfresources/tree/main/experiments/factur-x-bills
+\newcommand*{\stopWritingZUGFeRDxml}{%
+ \bool_if:NT \g_@@_write_xml_bool
+ {\iow_close:N \_@@_xml_writer_iow}%
+ \endgroup
+ \bool_if:NT \g_@@_active_bool {
+ \group_begin:
+ \pdfdict_put:nnn {l_pdffile/Filespec} {AFRelationship}{/Alternative}
+ %or /Source in some cases
+ \pdfdict_put:nnn {l_pdffile/Filespec} {Desc}{(Factur-X/ZUGFeRD-Rechnung)}
+ \pdffile_embed_file:nnn {\g_@@_xml_file_tl}{factur-x.xml}
+ {zugferd/rechnung}
+ \group_end:
+ \pdfmanagement_add:nnx
+ {Catalog/Names}
+ {EmbeddedFiles}
+ {\pdf_object_ref:n{zugferd/rechnung}}
+ % steht in der docu ist aber pdf 2.0 ....
+ \pdfmanagement_add:nnx{Catalog}{AF}{\pdf_object_ref:n{zugferd/rechnung}}
+ }
+}
+% \end{macrocode}
+% \end{implementation}
+% \begin{documentation}
+% \subsection{Interfaces to write the \XML contents}
+% \changes{v0.6}{2024-09-05}{Provide public interfaces and first version of the documentation.}
+% \label{sec:xml-interfaces}
+% In case you are using |write-xml=true| (which is the default) You need to ensure to call the \XML writing functions in the correct order.
+% For example after setting the global invoice data, like it's done in the example file.
+% The minimal example below would create a valid XML.
+% The interface commands are described afterwards.
+%
+% \begin{examplecode}
+% \begin{ZUGFeRD}
+% \zugferd_write_Item:nnnnnn {1} {} {Plushie \TeX{} lion} {31.98} {2} {63.78}
+% \zugferd_startInvoiceSums:
+% \zugferd_write_TaxEntry:nnnn {S} {19} {63.78} {12.12}
+% \zugferd_write_Summation:nnnnnnnn {63.78} {0} {0} {63.78} {12.12} {75.90} {0} {75.90}
+% \zugferd_stopInvoiceSums:
+% \end{ZUGFeRD}
+% \end{examplecode}
+%
+% \DescribeMacro{\zugferd_write_Item:nnnnnn}
+% This command is the interface to write invoice items to the \XMLfile.
+% If the \XML interface is enabled this is a reference to the internal command \cs{_@@_insert_TradeLineItem:nnnnnn}.
+% \begin{syntax}
+% \cs[no-index]{zugferd_write_Item:nnnnn}
+% \marg{LineID}\marg{optional: item id (\enquote{SellerAssignedID})}\marg{item name}
+% \marg{NetPriceProductTradePrice}
+% \marg{BilledQuantity}
+% \marg{LineTotalAmount}
+% \end{syntax}
+% Within the product name macros are disabled using \cs[no-index]{zugferd_disable_macros:}, see \autoref{sec:disable_macros}.
+%
+% This command is using the local values of tax information as well as the unit code.
+% If you want to overwrite them, adjust them locally using the corresponding options, e.g.:
+% \begin{examplecode}
+% \begingroup
+% \keys_set:nn {zugferd}{tax/rate=19, tax/category=S}
+% \zugferd_write_Item:nnnnnn {1} {} {Plushie \TeX{} lion} {31.98} {2} {63.78}
+% % Code using the data for visible representation
+% \endgroup
+% \end{examplecode}
+% This will set the tax rate to 19\,\% unregarding the global setting.
+%
+% \DescribeMacro{\zugferd_startInvoiceSums:}
+% \DescribeMacro{\zugferd_stopInvoiceSums:}
+% There is some global data which is placed in the \XMLfile after the invoice items have been placed.
+% Typically, in \LaTeX{} this block is started after the items have been printed and will enclose the summation block.
+%
+% The starting includes the so called \enquote{ApplicableHeaderTradeAgreement} which contains the address data of both trade parties, see \autoref{sec:TradeParties}
+% And this will also print the \enquote{SpecifiedTradeSettlementPaymentMeans}, see \autoref{sec:PaymentMeans}.
+%
+% \DescribeMacro{\zugferd_write_TaxEntry:nnnn}
+% This command is writing the sum over a tax rate. This command has to be used once per rate applied to the items.
+% \begin{syntax}
+% \cs[no-index]{zugferd_write_TaxEntry:nnnn} \marg{tax category code} \marg{tax rate in \%} \marg{basis amount the tax applies to} \marg{tax amount}
+% \end{syntax}
+% The tax amount could of course be calculated internally.
+% In the example package this is done automatically, but the interface needs to support manual input as a lot of use cases for \LaTeX{} invoicing use it only to create the output file.
+%
+% \DescribeMacro{\zugferd_write_Summation:nnnnnnnn}\par
+% \noindent The total values are all collected with a single macro.
+% \begin{syntax}
+% \cs[no-index]{zugferd_write_Summation:nnnnnnnn}
+% \marg{LineTotalAmount}\marg{ChargeTotalAmount}\marg{AllowanceTotalAmount}
+% \marg{TaxBasisTotalAmount}\marg{TaxTotalAmount}
+% \marg{GrandTotalAmount}\marg{TotalPrepaidAmount}\marg{DuePayableAmount}
+% \end{syntax}
+% This commnd is also writing the payment terms to the \XMLfile.
+% Please be aware that it's in general not possible to calculate the tax values in here, as there might be multiple tax rates applied.
+% This is only taking the sums over all tax entries.
+%
+% In case you are using some specials like category \enquote{E} the exemption reason will also be written at that point.
+% For that it is referencing the current value of the setting.
+%
+% \subsection{Commands to temporary disable/re-enable the \XML writing interfaces}
+% \DescribeMacro{\zugferd_enable_XML_interfaces:}
+% \DescribeMacro{\zugferd_disable_XML_interfaces:}
+% \par\bigskip
+% As there are a lot of usecases where code is processed multiple times, it's necessary to provide an interface to temporary disable the \XML writing mechanism.
+% A lot of these situations appear within table structures whereas a local adjustment would not be helpful.
+% Therefore these adjustments have to be done globally.
+%
+% The example package \pkg{zugferd-invoice} provides an example for this to ensure the \XML data is not written multiple times.
+% The \env{ZUGFeRD} environment has been constructed that way, that it would automatically enable the interface when it begins and also when it ends, to write the data. So you should ensure this environment is only processed once or use the lower level interfaces directly.
+% \end{documentation}
+% \begin{implementation}
+% Provide public interfaces and the ZUGFeRD environment.
+% \begin{function}{\zugferd_enable_XML_interfaces:,\zugferd_disable_XML_interfaces:}
+% \begin{macrocode}
+\cs_new:Nn \zugferd_enable_XML_interfaces: {
+ \bool_if:NT \g_@@_write_xml_bool {
+ \cs_gset:Nn \zugferd_write_Header: {
+ \_@@_insert_Header:
+ \_@@_insert_FrontMatter:
+ }
+ \cs_gset:Nn \zugferd_write_Footer: {
+ \_@@_insert_Footer:
+ }
+ \cs_gset_eq:NN \zugferd_write_Item:nnnnnn
+ \_@@_insert_TradeLineItem:nnnnnn
+ \cs_gset:Nn \zugferd_startInvoiceSums: {
+ \_@@_ApplicableHeaderTradeAgreement:
+ \_@@_ApplicableHeaderTradeSettlement_start:
+ \_@@_SpecifiedTradeSettlementPaymentMeans:
+ }
+ \cs_gset:Nn \zugferd_stopInvoiceSums: {
+ \_@@_ApplicableHeaderTradeSettlement_stop:
+ }
+ \cs_gset_eq:NN \zugferd_write_TaxEntry:nnnn \_@@_ApplicableTradeTax:nnnn
+ \cs_gset:Nn \zugferd_write_Summation:nnnnnnnn {
+ \_@@_SpecifiedTradePaymentTerms:
+ \_@@_SpecifiedTradeSettlementHeaderMonetarySummation:nnnnnnnn
+ {##1} {##2} {##3} {##4} {##5} {##6} {##7} {##8}
+ }
+ }
+}
+\cs_new:Nn \zugferd_disable_XML_interfaces: {
+ \cs_gset_eq:NN \zugferd_write_Header: \prg_do_nothing:
+ \cs_gset_eq:NN \zugferd_write_Footer: \prg_do_nothing:
+ \cs_gset_eq:NN \zugferd_write_Item:nnnnnn \use_none:nnnnnn
+ \cs_gset_eq:NN \zugferd_startInvoiceSums: \prg_do_nothing:
+ \cs_gset_eq:NN \zugferd_stopInvoiceSums: \prg_do_nothing:
+ \cs_gset_eq:NN \zugferd_write_TaxEntry:nnnn \use_none:nnnn
+ \cs_gset_eq:NN \zugferd_write_Summation:nnnnnnnn \use_none:nnnnnnnn
+}
+\bool_if:NTF \g_@@_write_xml_bool {
+ \zugferd_enable_XML_interfaces:
+}{
+ \zugferd_disable_XML_interfaces:
+}
+% \end{macrocode}
+% \end{function}
+% \begin{function}{\_@@_write_xml:n,\_@@_define_xml_writer:Nn,\_@@_define_xml_content:Nn}
+% These commands are used to toggle the writing of the \XMLfile. This corresponds to the option \option{write-xml}.
+% \begin{macrocode}
+\bool_if:NTF \g_@@_write_xml_bool {
+ \cs_new:Nn \_@@_write_xml:n {
+ \iow_now:Ne \_@@_xml_writer_iow {\_@@_xml_auto_indent: #1}
+ }
+ \cs_new_eq:NN \_@@_define_xml_writer:Nn \cs_new:Nn
+ \cs_new_eq:NN \_@@_define_xml_content:Nn \cs_new:Nn
+} {
+ \cs_set_eq:NN \_@@_write_xml:n \use_none:n
+ \cs_set:Nn \_@@_define_xml_writer:Nn {\cs_new:Nn #1 {}}
+ \cs_set:Nn \_@@_define_xml_content:Nn {\cs_new:Nn #1 {}}
+}
+
+\cs_generate_variant:Nn \_@@_write_xml:n {e}
+% \end{macrocode}
+% \end{function}
+% \subsection{Number rounding}
+% As \pkg{siunitx} is implementing this, we use it instead of building our own mechanism.
+% \begin{macrocode}
+\RequirePackage{siunitx}
+% \end{macrocode}
+% \begin{function}{\_@@_number_format:nNn,\_@@_number_format:nNe}
+% \begin{macrocode}
+\cs_new:Nn \_@@_number_format:nNn {
+ \sisetup{
+ parse-numbers=true,
+ round-mode=places,
+ round-precision=#1,
+ round-pad = false,
+ group-digits=false,
+ minimum-decimal-digits=#1,
+ output-decimal-marker=.
+ }
+ \siunitx_number_format:nN {#3} #2
+}
+\cs_generate_variant:Nn \_@@_number_format:nNn {nNe}
+% \end{macrocode}
+% \end{function}
+% \begin{function}{\_@@_write_rounded:nnnn,\_@@_write_rounded:nnn}
+% \begin{macrocode}
+\cs_new:Nn \_@@_write_rounded:nnnn {
+ \_@@_number_format:nNe {#1} \l_@@_tmp_tl {#4}
+ \_@@_write_xml:e {<ram:#2#3>\l_@@_tmp_tl</ram:#2>}
+}
+\cs_new:Nn \_@@_write_rounded:nnn {
+ \_@@_write_rounded:nnnn {#1} {#2} {} {#3}
+}
+% \end{macrocode}
+% \end{function}
+% \subsection{XML indentation}
+% The indentation of the \XML does not really matter.
+% For debugging, it's a lot simpler to have it included and this also helped to maintain the structure of the code during development, so I decided to keep it.
+% The indentation is created using s bunch of auxiliary commands and variables which are defined here.
+% \begin{variable}{\g_@@_indent_int}
+% \begin{macrocode}
+\int_new:N \g_@@_indent_int
+% \end{macrocode}
+% \end{variable}
+% \begin{function}{\_@@_indent:,\_@@_xml_auto_indent:,\_@@_xml_newline_indent: }
+% \begin{macrocode}
+\cs_new:Nn \_@@_indent: {
+ \space\space
+}
+\cs_new:Nn \_@@_indent:n {
+ \prg_replicate:nn {#1} {\_@@_indent:}
+}
+\cs_new:Nn \_@@_xml_auto_indent: {
+ \_@@_indent:n {\g_@@_indent_int}
+}
+% \end{macrocode}
+% \end{function}
+% The idea was to redefine the \cs[no-index]{newlinechar} to automatically indent the following line.
+% \begin{macrocode}
+\cs_new:Nn \_@@_xml_newline_indent: {
+ \iow_newline: \_@@_xml_auto_indent:
+}
+% \end{macrocode}
+% \end{implementation}
+% Setting up the catcodes to simplify the \XML indentation.
+% \iffalse
+% \begin{macrocode}
+\cctab_new:N \g_@@_xml_cctab
+\begingroup%
+\endlinechar=13%
+\char_set_catcode:nn {13}{13}%
+\cctab_gsave_current:N \g_@@_xml_cctab%
+\endgroup
+% \end{macrocode}
+% \fi
+% \begin{documentation}
+% \subsection{Escaping macros inside \XML data}
+% \label{sec:disable_macros}
+% \DescribeMacro{\zugferd_disable_macros:}
+% Since we allow the use of \LaTeX{} code in some fields there has to be a mechanism to disable macros inside the \XML output.
+% The mechanism is created similar to the one by \pkg{hyperref}, and we also use some definitions from there to use those as a starting point.
+% To have a detailed list of the redefinition, please have a look at the implementation of this command.
+%
+% There exists a hook to extend or overwrite these definitions |zugferd/disable-macros|.
+% You can add own redefinitions using this. For example if you want to overwrite the setting mapping a \cs[no-index]{newline} to a new line char instead of space, you could add the following to your setup:
+% \begin{examplecode}
+% \hook_gput_code:nnn {zugferd/disable-macros}
+% {newline-to-LF}
+% {\def\newline{\iow_newline:}}
+% \end{examplecode}
+% \end{documentation}
+% \begin{implementation}
+% \begin{function}{\zugferd_disable_macros:}
+% The definition was mostly taken from \pkg{hyperref} \cite{hyperref}.
+% Most likely not all of these are required, but it's probably easier to take this as a reasonable choice instead of creating an own collection.
+% \iffalse
+% \begin{macrocode}
+%% modified list taken from hyperref.sty v7.01i
+%% Copyright
+%% 1995-2001 Sebastian Rahtz, with portions written by David Carlisle and Heiko Oberdiek
+%% 2001-2015 Heiko Oberdiek
+%% 2016-2019 Oberdiek Package Support Group
+%% 2019-2024 LaTeX Project
+%% modifications have been made to support the mechanism if hyperref is not loaded
+% \end{macrocode}
+% \fi
+% \begin{macrocode}
+\cs_new:Nn \zugferd_disable_macros: {
+ \let\{\textbraceleft
+ \let\}\textbraceright
+ \let\\\textbackslash
+ \let\#\textnumbersign
+ \let\$\textdollar
+% \end{macrocode}
+% This only is a part of the list.
+% There is no real use of printing the whole list, it's inside \file{zugferd.sty} anyway.
+% \comment
+% \begin{macrocode}
+ \let\%\textpercent
+ \let\&\textampersand
+ \let\_\textunderscore
+ \let\P\textparagraph
+ \let\ldots\textellipsis
+ \let\dots\textellipsis
+ \def\\{\space}%
+ \def\newline{\space}%
+ \def\TeX{TeX}%
+ \def\LaTeX{La\TeX}%
+ \def\LaTeXe{\LaTeX2e}%
+ \def\eTeX{e-\TeX}%
+ \def\SliTeX{Sli\TeX}%
+ \def\MF{Metafont}%
+ \def\MP{Metapost}%
+ \let\fontencoding\@gobble
+ \let\fontfamily\@gobble
+ \let\fontseries\@gobble
+ \let\fontshape\@gobble
+ \let\fontsize\@gobbletwo
+ \let\selectfont\@empty
+ \let\usefont\@gobblefour
+ \let\emph\@firstofone
+ \let\textnormal\@firstofone
+ \let\textrm\@firstofone
+ \let\textsf\@firstofone
+ \let\texttt\@firstofone
+ \let\textbf\@firstofone
+ \let\textmd\@firstofone
+ \let\textit\@firstofone
+ \let\textsc\@firstofone
+ \let\textsl\@firstofone
+ \let\textup\@firstofone
+ \let\normalfont\@empty
+ \let\rmfamily\@empty
+ \let\sffamily\@empty
+ \let\ttfamily\@empty
+ \let\bfseries\@empty
+ \let\mdseries\@empty
+ \let\itshape\@empty
+ \let\scshape\@empty
+ \let\slshape\@empty
+ \let\upshape\@empty
+ \let\em\@empty
+ \let\rm\@empty
+ \let\Huge\@empty
+ \let\LARGE\@empty
+ \let\Large\@empty
+ \let\footnotesize\@empty
+ \let\huge\@empty
+ \let\large\@empty
+ \let\normalsize\@empty
+ \let\scriptsize\@empty
+ \let\small\@empty
+ \let\tiny\@empty
+ \let\mathversion\@gobble
+ \let\phantom\@gobble
+ \let\vphantom\@gobble
+ \let\hphantom\@gobble
+ \let\ding\HyPsd@ding
+ \let\Cube\HyPsd@DieFace
+ \def\begin##1{\csname##1\endcsname}%
+ \def\end##1{\csname end##1\endcsname}%
+ \def\textcolor##1##{\@secondoftwo}%
+ \def\TextOrMath{\ifmmode\expandafter\@secondoftwo\else\expandafter\@firstoftwo\fi}%
+ \let\foreignlanguage\@secondoftwo
+ \let\textlatin\@firstofone
+ \let\cyr\relax
+ \let\glqq\textglqq
+ \let\grqq\textgrqq
+ \let\glq\textglq
+ \let\grq\textgrq
+ \let\flqq\textflqq
+ \let\frqq\textfrqq
+ \let\flq\textflq
+ \let\frq\textfrq
+ \let\if@mid@expandable\@firstoftwo
+ \let\hspace\@gobble
+ \let\label\@gobble
+ \let\index\@gobble
+ \let\glossary\@gobble
+ \let\@mkboth\@gobbletwo
+ \let\leavevmode\@empty
+ \let\mbox\@empty
+ \def\halign{\@gobble}%
+ \let\Hy@SectionAnchorHref\@gobble
+ \let\ref\@gobble
+ \let\href\@gobble
+ \let\pageref\@gobble
+ \let\nameref\@gobble
+ \let\autoref\@gobble
+ \let\ignorespaces\relax
+ \let\ensuremath\@firstofone
+ \hook_use:n {zugferd/disable-macros}
+% \end{macrocode}
+% \endcomment
+% \begin{macrocode}
+}
+% \end{macrocode}
+% To provide a possibility to extend or overwrite the macro list a hook is added.
+% \begin{macrocode}
+\hook_new:n {zugferd/disable-macros}
+% \end{macrocode}
+% \end{function}
+% \end{implementation}
+% \begin{documentation}
+% \section{Adding data to the XML}
+% All data which does not directly depend on amounts or specific items is provided using a key-value interface.
+% For some fields there is the option to define a global preset but locally overwrite it for a specific item.
+% This only applies to data fields used by the writing interfaces described in \autoref{sec:xml-interfaces}.
+%
+% This package is using the UN/CEFACT Cross Industry Invoice Syntax for the data.
+% Currently it is not planned to implement the UBL syntax as well, but generally this would be possible.
+%
+% In most cases this functionality will be used to change the tax setting or unit for a single item.
+% \autoref{sec:xml-interfaces} also provided an example for this.
+%
+% This section will now take all data which can be set using \cs{SetZUGFeRDData}.
+%
+% \end{documentation}
+% \begin{implementation}
+% \begin{variable}{\g_@@_notes_seq,\g_@@_id_tl,\g_@@_date_tl,\g_@@_subject_tl,\g_@@_fromaddress_tl,\g_@@_DocumentTypeCode_tl}
+% \begin{macrocode}
+\seq_new:N \g_@@_notes_seq
+\tl_new:N \g_@@_id_tl
+\tl_new:N \g_@@_date_tl
+\tl_new:N \g_@@_delivery_date_tl
+\tl_new:N \g_@@_subject_tl
+\tl_new:N \g_@@_fromaddress_tl
+\tl_new:N \g_@@_DocumentTypeCode_tl
+\tl_new:N \l_@@_currency_tl
+% \end{macrocode}
+% \end{variable}
+% \end{implementation}
+% \begin{documentation}
+% \subsection{General Invoicing Data}
+% Some of the general data currently supports only one value, which is alreay selected by default.
+% The interface already exists and may be extended later.
+%
+% \end{documentation}
+% \begin{implementation}
+% \begin{macrocode}
+\keys_define:nn { zugferd } {
+%TODO define others
+% \end{macrocode}
+% \end{implementation}
+% \begin{documentation}
+% \DescribeKeyOption{document-type=commercial-invoice}{commercial-invoice}
+% Select the document type. The only supported value currently is |commercial-invoice|. This will select the corresponding type code, which is 380.
+% \end{documentation}
+% \begin{implementation}
+% \begin{optionenv}{id, document-type}
+% \begin{macrocode}
+ document-type .choice:,
+ document-type / commercial-invoice .code:n =
+ \tl_gset:Nn \g_@@_DocumentTypeCode_tl {380},
+ document-type .initial:n = commercial-invoice,
+% \end{macrocode}
+% \end{optionenv}
+% \end{implementation}
+% \begin{documentation}
+% \subsubsection{Invoice number/document ID}
+% \DescribeKeyOption*{id=komavar/\meta{document ID/invoice number}}{}
+% This has to be set. Leaving it empty will lead to an invalid \XMLfile.
+%
+% The value |komavar| would reference the data provided the KOMA-Script letter variabe |invoice|. In case you don't use \pkg{scrletter} you should not use this setting.
+% More information can be found in the documentation \cite{scrletter}.
+% \end{documentation}
+% \begin{implementation}
+% \begin{macrocode}
+ id .choice:,
+ id / komavar .code:n = \tl_gset:Nf \g_@@_id_tl {\scr@invoice@var},
+ id / unknown .code:n = \tl_gset:Nn \g_@@_id_tl {#1},
+% \end{macrocode}
+% \end{implementation}
+% \begin{documentation}
+% \subsubsection{Currency}
+% \DescribeKeyOption{currency=EUR/USD/CHF/€}{EUR}
+% Currently \pkg{zugferd} only supports one currency for an invoice. This might be extended later.
+% The currency is pre-configured to use Euro.
+% \end{documentation}
+% \begin{implementation}
+% \begin{macrocode}
+ currency .choices:nn = {EUR, USD, CHF} {
+ \tl_set_eq:NN \l_@@_currency_tl \l_keys_choice_tl
+ },
+ currency / € .meta:n = {currency = EUR},
+ currency / unknown .code:n = {
+ \exp_args:Nnnx \keys_if_choice_exist:nnnTF {zugferd} {unit} {
+ \str_uppercase:f {#1}
+ }
+ {\keys_set:nx { zugferd } {unit= {\str_uppercase:f {#1}}}}
+ {
+ \msg_warning:nnn { zugferd } {unknown-value} {currency} {#1}
+ \tl_set:Ne \l_@@_currency_tl {\str_uppercase:f {#1}}
+ }
+ },
+ currency .initial:n = EUR,
+% \end{macrocode}
+% \end{implementation}
+% \begin{documentation}
+% \subsubsection{Dates}
+% \DescribeKeyOption{date=auto/\meta{date formatted as YYYYMMDD}}{auto}
+% \DescribeKeyOption{delivery-date=auto/\meta{date formatted as YYYYMMDD}}{auto}
+% \DescribeKeyOption*{due-date=\meta{date formatted as YYYYMMDD}}{}*
+% Currently there are three kinds of dates implemented.
+% The XML-Standard requires them to use the structure \meta{YYYYMMDD}.
+% For the day this document was compiled this would be: \enquote{\InsertZUGFeRDData{date}} (\today).
+%
+% Instead of providing a date value directly it's also possible to use \cs[no-index]{today}.
+% This is done using the \value{auto} which is the default setting for \option{date} and \option{delivery-date}.
+% Please be aware, that this would change if you rebuild the document later. So you might want to use an actual value here.
+% \end{documentation}
+%
+% \begin{implementation}
+% \begin{optionenv}{date,delivery-date}
+% \begin{macrocode}
+ date .choice:,
+ date / auto .code:n = \tl_gset:Ne \g_@@_date_tl {
+ \the\year
+ \int_compare:nNnT {\month} < {10} {0} \the\month
+ \int_compare:nNnT {\day} < {10} {0}\the\day
+ },
+ date / unknown .code:n = \tl_gset:Nn \g_@@_date_tl {#1},
+ date .initial:n = auto,
+ delivery-date .choice:,
+ delivery-date / auto .code:n = \tl_gset:Ne \g_@@_delivery_date_tl {
+ \the\year
+ \int_compare:nNnT {\month} < {10} {0} \the\month
+ \int_compare:nNnT {\day} < {10} {0}\the\day
+ },
+ delivery-date / unknown .code:n = {
+ \tl_gset:Nn \g_@@_delivery_date_tl {#1}
+ },
+ delivery-date .initial:n = auto,
+ due-date .tl_gset:N = \_@@_due_date_tl,
+ due-date .initial:n =,
+% \end{macrocode}
+% \end{optionenv}
+% \end{implementation}
+% \begin{documentation}
+% \subsubsection{Payment terms}
+% \DescribeKeyOption{payment-terms=\meta{string}}{}
+% One option to set payment terms is the \option{due-date} mentioned before.
+% If this is not set or the setting is more complex one can use \option{payment-terms} to add more information.
+%
+% This setting is a string. In case there is expansion required this has to be done before.
+% \end{documentation}
+% \begin{implementation}
+% \begin{optionenv}{payment-terms}
+% \begin{macrocode}
+ payment-terms .str_gset:N = \_@@_payment_terms_str,
+ payment-terms .initial:n =,
+% \end{macrocode}
+% \end{optionenv}
+% \end{implementation}
+% \begin{documentation}
+% \subsubsection{Notes: Adding additional information}
+% \DescribeKeyOption{subject=komavar/\meta{Tokenlist}}{}
+% \DescribeKeyOption{fromaddress=komavar/\meta{Tokenlist}}{}
+% \DescribeKeyOption{add-note=\meta{Tokenlist}}{}*
+% The ZUGFeRD example files\cite{zugferd-download} use all visible data to add them to the \XML as a note.
+% \option{subject} and \option{fromaddress} are used to support this.
+% The data should not be too relevant but \pkg{zugferd} want's to support adding additional data to the \XML using the note element.
+% So these fields can be left out but in case they are not empty, they will also be written to the \XML.
+%
+% The \value{komavar} corresponds to the mechanism provided by \pkg{scrletter}.
+% It accesses the variable expands it to be used directly.
+% If you don't use this package, you can ignore this setting or add content manually.
+% \end{documentation}
+% \begin{implementation}
+% \begin{optionenv}{subject,fromaddress,add-note}
+% \begin{macrocode}
+ subject .choice:,
+ subject / komavar .code:n = {
+ \tl_gset:Nf \g_@@_subject_tl {\scr@subject@var}
+ },
+ subject / unknown .code:n = \tl_gset:Nn \g_@@_subject_tl {#1},
+ fromaddress .choice:,
+ fromaddress / komavar .code:n = \tl_gset:Nf \g_@@_fromaddress_tl
+ {\scr@fromaddress@var},
+ fromaddress / unknown .code:n = \tl_gset:Nn \g_@@_fromaddress_tl {#1},
+ add-note .code:n = \seq_gput_right:Nn \g_@@_notes_seq {#1},
+}
+\msg_new:nnnn {zugferd} {unknown-value} {
+ You~selected~a~#1~which~was~not~predefined.\\
+ I~will~directly~use~your~selection~'#1=#2'.
+ Please~ensure~the~selection~is~valid!
+} {
+ For~more~information~see~the~zugferd~documentation.
+}
+% \end{macrocode}
+% \end{optionenv}
+% Macro to write notes
+% \begin{macrocode}
+\cs_new:Nn \_@@_note_if_not_empty:N {%
+ \tl_if_empty:NF #1 {%
+ \_@@_write_note:n {#1}%
+ }%
+}%
+% \end{macrocode}
+% \end{implementation}
+% \begin{documentation}
+% \subsection{Trade parties}
+% \label{sec:TradeParties}
+% The \XML scheme knows 6 different Trade Parties:
+% \begin{itemize}
+% \item Seller
+% \item Buyer
+% \item Payee
+% \item ShipTo
+% \item SellerTaxRepresentative
+% \end{itemize}
+%
+% \noindent Currently \pkg{zugferd} supports only Buyer, Seller and ShipTo, but can be easily extended to support the others as well.
+% The data for each party follows the same structure, except the \enquote{BuyerReference} which is described later in this section.
+%
+% Some of the data is optional for specific parties.
+% As this also depends on the selected scheme and version we will not list the details.
+% All fields for a trade party can be set using the \enquote{group} named by the party.
+% For example setting all the seller data is done in the following listing:
+% \begin{examplecode}
+% \SetZUGFeRDData{
+% seller/name = {peiTeX (Marei Peischl)},
+% seller/email = {invoicing@peitex.de},
+% seller/vatid = {DE123456789},
+% seller/contact= {Marei\\+4900000000\\marei@peitex.de},
+% seller/address = {Address Line 1\\Address Line 2},
+% seller/postcode = {20253},
+% seller/city ={Hamburg},
+% seller/country = {DE},
+% }
+% \end{examplecode}
+% \noindent All this data is saved within a property list, which is internally called \cs[no-index]{g_@@_\meta{seller/buyer/shipto}_prop}.
+% By default this property list is empty.
+% The users themselves have to ensure to add the required data.
+%
+% The outer braces are not required, if the data does not container an equal sign or a comma.
+% In case the final data is unknown, it's recommended to use them anyway.
+%
+% \DescribeKeyOption*{\meta{party}/name=\meta{name}}{}*
+% \DescribeKeyOption*{\meta{party}/email=\meta{email address}}{}*
+% \DescribeKeyOption*{\meta{party}/vatid=\meta{VAT ID}}{}*
+%
+% \DescribeKeyOption*{\meta{party}/address=\meta{address}}{}*
+% As shown in the example \option{address} can use two lines separted by |\\|.
+% It's possble to set all fields for all trade contacts, but e.\,g. for the |shipto|-party email and vatid will not be used in the \XML.
+%
+% Alternatively it's also possible to use \option{\meta{party}/lineone} and \option{\meta{party/linetwo}} separately.
+% This may be helpful if you use a custom input format. In any way you should ensure that all macros used within the data either are expandable or disabled using \cs[no-index]{zugferd_disable_macros:}.
+%
+% \DescribeKeyOption*{\meta{party}/postcode=\meta{postal code}}{}*
+% \DescribeKeyOption*{\meta{party}/city=\meta{city}}{}*
+% \DescribeKeyOption*{\meta{party}/country=\meta{country code}}{}*
+% The two letter country codes allowed here can be found in \cite{country-codes}.
+%
+% % \DescribeKeyOption*{\meta{party}/contact=\meta{Combined contact data}}{}*
+% The contact person can either be set using the combined structure similar to \option{\meta{party}/address}.
+% It either consists of 3 or 4 entries, depending on if a department should be used or not.
+%
+% \begin{examplecode}
+% \SetZUGFeRDData{
+% seller/contact = {
+% |\meta{contact-name}|\\
+% |\meta{contact-phone}|\\
+% |\meta{contact-email}|
+% },
+% seller/contact = {
+% |\meta{contact-name}|\\
+% |\meta{contact-department}|\\
+% |\meta{contact-phone}|\\
+% |\meta{contact-email}|
+% }
+% }
+% \end{examplecode}
+% \noindent As for \option{seller/address} it's also possible to set the keys directly:
+% \begin{examplecode}
+% \SetZUGFeRDData{
+% seller/contact-name= {|\meta{contact-name}|},
+% seller/contact-department = {|\meta{contact-department}|},
+% seller/cotact-phone ={|\meta{contact-phone}|},
+% seller/contact-email= {|\meta{contact-email}|}
+% }
+% \end{examplecode}
+% \end{documentation}
+% \begin{implementation}
+% ApplicableHeaderTradeAgreement
+%
+% Contains information on seller and buyer trade party:
+% \begin{itemize}
+% \item BuyerReference
+% \item SellerTradeParty
+% \item BuyerTradeParty
+% \end{itemize}
+%
+% \begin{optionenv}{\meta{party}/address}
+% \begin{variable}{\g_@@_seller_AddressData_prop,\g_@@_buyer_AddressData_prop,\g_@@_shipto_AddressData_prop}
+% Seller and Buyer are specified the same way.
+% \begin{macrocode}
+\clist_map_inline:nn {seller,buyer,shipto} {
+ \prop_new:c {g_@@_#1_AddressData_prop}
+ \keys_define:nn {zugferd / #1} {
+ address .code:n = {
+ \seq_set_split:Nnn \l_tmpa_seq {\\} {##1}
+ %TODO error if more than 2 lines or only 1
+ \keys_set:nx {zugferd / #1} {
+ lineone=\seq_item:Nn \l_tmpa_seq {1},
+ linetwo=\seq_item:Nn \l_tmpa_seq {2}
+ }
+ },
+ contact .code:n = {
+ \seq_set_split:Nnn \l_tmpa_seq {\\} {##1}
+ \int_compare:nNnTF {\seq_count:N \l_tmpa_seq} > {3} {
+ \keys_set:ne {zugferd/#1} {
+ contact-name = \seq_item:Nn \l_tmpa_seq {1},
+ contact-department = \seq_item:Nn \l_tmpa_seq {2},
+ contact-phone = \seq_item:Nn \l_tmpa_seq {3},
+ contact-email= \seq_item:Nn \l_tmpa_seq {4}
+ }
+ }{
+ \keys_set:ne {zugferd/#1} {
+ contact-name = \seq_item:Nn \l_tmpa_seq {1},
+ contact-phone = \seq_item:Nn \l_tmpa_seq {2},
+ contact-email= \seq_item:Nn \l_tmpa_seq {3}
+ }
+ }
+ },
+ unknown .code:n = \tl_if_blank:nF {##1} {
+ \prop_gput:cVe {g_@@_#1_AddressData_prop}
+ \l_keys_key_tl {\tl_trim_spaces:n {##1}}
+ }
+ }
+}
+% \end{macrocode}
+% \end{variable}
+% \end{optionenv}
+% \begin{function}{\_@@_PostalTradeAddress:N,\_@@_DefinedTradeContact:N}
+% Wrappers to map the property list items to the writing macro.
+% \begin{macrocode}
+\cs_new:Nn \_@@_PostalTradeAddress_short:N {
+ \exp_args:Ne \tl_if_blank:nF {\prop_item:Nn #1 {name}}
+ {<ram:Name>\prop_item:Nn #1 {name}</ram:Name>\iow_newline:\_@@_xml_auto_indent:}
+ \_@@_PostalTradeAddress:eeeee
+ {\prop_item:Nn #1 {postcode}}
+ {\prop_item:Nn #1 {lineone}}
+ {\prop_item:Nn #1 {linetwo}}
+ {\prop_item:Nn #1 {city}}
+ {\prop_item:Nn #1 {country}}
+}
+\cs_new:Nn \_@@_PostalTradeAddress:N {%
+ \_@@_PostalTradeAddress:eeeeeee
+ {\prop_item:Nn #1 {postcode}}
+ {\prop_item:Nn #1 {lineone}}
+ {\prop_item:Nn #1 {linetwo}}
+ {\prop_item:Nn #1 {city}}
+ {\prop_item:Nn #1 {country}}
+ {\prop_item:Nn #1 {email}}
+ {\prop_item:Nn #1 {vatid}}
+}%
+\cs_new:Nn \_@@_DefinedTradeContact:N {%
+ \_@@_DefinedTradeContact:eeee
+ {\prop_item:Nn #1 {contact-name}}
+ {\prop_item:Nn #1 {contact-department}}
+ {\prop_item:Nn #1 {contact-phone}}
+ {\prop_item:Nn #1 {contact-email}}
+}%
+% \end{macrocode}
+% \end{function}
+% \begin{macrocode}
+\cctab_begin:N \g_@@_xml_cctab%
+% \end{macrocode}
+% \iffalse
+% \_@@_PostalTradeAddress:nnnnnnn Name/Firma PLZ Zeile1 Zeile2 Ort Ländercode Email UID
+% \fi
+% \begin{macrocode}
+\_@@_define_xml_content:Nn \_@@_PostalTradeAddress:nnnnn {%
+ <ram:PostalTradeAddress>
+ \_@@_indent: <ram:PostcodeCode>#1</ram:PostcodeCode>
+ \tl_if_blank:nF {#2} {%
+ \_@@_indent: <ram:LineOne>#2</ram:LineOne>
+ }%
+ \tl_if_blank:nF {#3} {%
+ \_@@_indent: <ram:LineTwo>#3</ram:LineTwo>
+ }%
+ \_@@_indent: <ram:CityName>#4</ram:CityName>
+ \_@@_indent: <ram:CountryID>#5</ram:CountryID>
+ </ram:PostalTradeAddress>%
+}
+\_@@_define_xml_content:Nn \_@@_PostalTradeAddress:nnnnnnn {%
+ \_@@_PostalTradeAddress:nnnnn {#1} {#2} {#3} {#4} {#5}
+ \tl_if_empty:nF {#6} {%
+ <ram:URIUniversalCommunication>
+ \_@@_indent: <ram:URIID~schemeID="EM">#6</ram:URIID>
+ </ram:URIUniversalCommunication>%
+ }%
+ % TODO add support local tax id: schemaID="FC"
+ \tl_if_empty:nF {#7} {
+ <ram:SpecifiedTaxRegistration>
+ \_@@_indent: <ram:ID~schemeID="VA">#7</ram:ID>
+ </ram:SpecifiedTaxRegistration>%
+ }%
+}%
+%
+% Contact data phone/email to a specific contact person
+\_@@_define_xml_content:Nn \_@@_DefinedTradeContact:nnnn {%
+ % Do not print if name is empty
+ \tl_if_blank:nT {#1} {\use_none:nnn} %
+ \bool_if:NT \g_@@_writeTradeContact_bool {%
+ <ram:DefinedTradeContact>
+ \_@@_indent: <ram:PersonName>#1</ram:PersonName>
+ \tl_if_blank:nF {#2} {%
+ \_@@_indent: <ram:DepartmentName>#2</ram:DepartmentName>
+ }%
+ \tl_if_blank:nF {#3} {%
+ \_@@_indent: <ram:TelephoneUniversalCommunication>
+ \_@@_indent:n {2} <ram:CompleteNumber>#3</ram:CompleteNumber>
+ \_@@_indent: </ram:TelephoneUniversalCommunication>
+ }%
+ \tl_if_blank:nF {#4} {%
+ \_@@_indent: <ram:EmailURIUniversalCommunication>
+ \_@@_indent:n {2} <ram:URIID>#4</ram:URIID>
+ \_@@_indent: </ram:EmailURIUniversalCommunication>
+ }%
+ </ram:DefinedTradeContact>%
+ }%
+}%
+%
+\_@@_define_xml_writer:Nn \_@@_ApplicableHeaderTradeAgreement: {%
+ \_@@_write_xml:n {<ram:ApplicableHeaderTradeAgreement>}%
+ \int_gincr:N \g_@@_indent_int%
+ \_@@_write_xml:e {%
+ <ram:BuyerReference>\g_@@_buyer_reference_tl</ram:BuyerReference>
+ <ram:SellerTradeParty>%
+ }%
+ \int_gincr:N \g_@@_indent_int%
+ \_@@_write_xml:e {%
+ <ram:Name>\prop_item:Nn \g_@@_seller_AddressData_prop {name}</ram:Name>
+ \_@@_DefinedTradeContact:N \g_@@_seller_AddressData_prop%
+ \_@@_PostalTradeAddress:N \g_@@_seller_AddressData_prop%
+ }%
+ \int_gdecr:N \g_@@_indent_int%
+ \_@@_write_xml:e {%
+ </ram:SellerTradeParty>
+ <ram:BuyerTradeParty>%
+ }%
+ \int_gincr:N \g_@@_indent_int%
+ \_@@_write_xml:e {%
+ <ram:Name>\prop_item:Nn \g_@@_buyer_AddressData_prop {name}</ram:Name>
+ \_@@_DefinedTradeContact:N \g_@@_buyer_AddressData_prop%
+ \_@@_PostalTradeAddress:N \g_@@_buyer_AddressData_prop%
+ }%
+ \int_gdecr:N \g_@@_indent_int%
+ \_@@_write_xml:n {</ram:BuyerTradeParty>}%
+ \int_gdecr:N \g_@@_indent_int%
+ \_@@_write_xml:n {</ram:ApplicableHeaderTradeAgreement>}
+ \_@@_ApplicableHeaderTradeDelivery:V \g_@@_delivery_date_tl%
+}%
+%
+%
+% delivery date
+\_@@_define_xml_content:Nn \_@@_ApplicableHeaderTradeDelivery:n {%
+ \bool_lazy_and:nnF {\prop_if_empty_p:N \g_@@_shipto_AddressData_prop}%
+ {\tl_if_blank_p:n {#1}}%
+ {%
+ \_@@_write_xml:n {<ram:ApplicableHeaderTradeDelivery>}%
+ \prop_if_empty:NF \g_@@_shipto_AddressData_prop {%
+ \int_gincr:N \g_@@_indent_int%
+ \_@@_write_xml:n {<ram:ShipToTradeParty>}%
+ \int_gincr:N \g_@@_indent_int%
+ \_@@_write_xml:e {%
+ \_@@_PostalTradeAddress_short:N \g_@@_shipto_AddressData_prop%
+ }%
+ \int_gdecr:N \g_@@_indent_int%
+ \_@@_write_xml:n {</ram:ShipToTradeParty>}%
+ \int_gdecr:N \g_@@_indent_int%
+ }%
+ \tl_if_blank:nF {#1} {%
+ \_@@_write_xml:n {%
+ \_@@_indent: <ram:ActualDeliverySupplyChainEvent>
+ \_@@_indent:n {2} <ram:OccurrenceDateTime>
+ \_@@_indent:n {3}<udt:DateTimeString~format="102">#1</udt:DateTimeString>
+ \_@@_indent:n {2} </ram:OccurrenceDateTime>
+ \_@@_indent: </ram:ActualDeliverySupplyChainEvent>%
+ }%
+ }%
+ \_@@_write_xml:n {</ram:ApplicableHeaderTradeDelivery>}%
+ }%
+}%
+%
+\cctab_end:
+\cs_generate_variant:Nn \_@@_DefinedTradeContact:nnnn {eeee}
+\cs_generate_variant:Nn \_@@_PostalTradeAddress:nnnnn {eeeee}%
+\cs_generate_variant:Nn \_@@_PostalTradeAddress:nnnnnnn {eeeeeee}
+\cs_generate_variant:Nn \_@@_ApplicableHeaderTradeDelivery:n {V}
+% \end{macrocode}
+% \end{implementation}
+% \begin{documentation}
+% \subsubsection{Buyer Reference}
+% \DescribeKeyOption*{buyer/reference=komavar/\meta{Reference}}{}
+% The reference field only exists for the |buyer| trade party.
+% Depending on the process it's required to use some unique identifier referring to the |buyer|.
+% Within Germany these numbers are called \enquote{Leitweg-ID}\cite{leitweg-id}.
+%
+% In any way the |buyer| may choose what is used here. Also may be some PO number or similar reference.
+%
+% As defined for other variables the \option{reference} can also use the \value{komavar} value to refer to the value of komavar |yourref|\cite{scrletter}.
+% \end{documentation}
+% \begin{implementation}
+% \begin{optionenv}{buyer/reference}
+% \begin{macrocode}
+\tl_new:N \g_@@_buyer_reference_tl
+\keys_define:nn {zugferd/buyer} {
+ reference .choice:,
+ reference / komavar .code:n = {
+ \tl_gset:Nf \g_@@_buyer_reference_tl {\scr@yourref@var}
+ },
+ reference / unknown .code:n = {
+ \tl_gset:Nn \g_@@_buyer_reference_tl {#1}
+ }
+}
+% \end{macrocode}
+% \end{optionenv}
+% \end{implementation}
+% \begin{documentation}
+% \subsubsection{Payment Means}
+% \label{sec:PaymentMeans}
+% The payment means are selected by numeric codes.
+% Currently we support:
+% \begin{itemize}
+% \UseName{exp_args:Nnnc} \UseName{exp_args:co} {clist_map_inline:nn} {zugferd@paymentMeans@english} {\item #1}
+% \end{itemize}
+% Others may be added in the future but it's not planned to include a full list.
+%
+% The codes will automatically add the corresponding string inside the \enquote{Information} field.
+% The initial version only included German strings, but currently they are also included in English.
+% It's possible to overwrite them using the same structure:
+%
+% \begin{examplecode}
+% \setupZUGFeRDStrings{payment-means}{
+% 10 = Bargeld,
+% 58 = Zahlung per SEPA Überweisung.,
+% }
+% \end{examplecode}
+% The language selection is done using at hook executed at |\begin{document}| and will try to use the document's language.
+% If this is not defined English will be used.
+%
+% Internally the commands are predefined as a key-value list like the argument in the example above.
+% They macros are called \cs[no-index]{zugferd@paymentMeans@\meta{languagename}}.
+% Currently \pkg{zugferd} defines these for |english| and |german| (also |ngerman| as an compatibility alias).
+% \end{documentation}
+% \begin{implementation}
+% \begin{optionenv}{payment-means}
+% \begin{macrocode}
+\ExplSyntaxOff
+\providecommand*{\zugferd@paymentMeans@german}{
+ 1 = Keine Zahlungsart definiert,
+ 10 = Bargeld,
+ 30 = Überweisung,
+ 42 = Zahlung an Bankkonto,
+ 48 = Kartenzahlung,
+ 49 = Lastschriftverfahren,
+ 57 = Dauerauftrag,
+ 58 = Zahlung per SEPA Überweisung.,
+ 59 = SEPA Lastschrift,
+ 97 = Ausgleich zwischen Partnern
+}
+\def\zugferd@paymentMeans@ngerman{\zugferd@paymentMeans@german}
+\providecommand*{\zugferd@paymentMeans@english}{
+ 1 = Instrument not defined,
+ 10 = In cash,
+ 30 = Credit Transfer,
+ 31 = Debit Transfer,
+ 42 = Payment to bank account,
+ 48 = Bank card,
+ 49 = Direct Debit,
+ 57 = Standing agreement,
+ 58 = SEPA credit transfer,
+ 59 = SEPA direct debit,
+ 97 = Clearing between partners
+}
+\ExplSyntaxOn
+\tl_new:N \g_@@_payment_means_tl
+\keys_define:nn {zugferd} {
+ payment-means / type .choices:nn = {1,10,30,42,48,49,57,58,59,97} {
+ \tl_gset_eq:NN \g_@@_payment_means_tl \l_keys_choice_tl
+ },
+ payment-means / unknown .code:n = {
+ \msg_warning:nnn { zugferd } {unknown-value} {payment-means} {#1}
+ \tl_gset:Nn \g_@@_payment_means_tl {\int_eval:n {#1}}
+ }
+}
+
+\clist_map_inline:nn {iban,account-holder,bic} {
+ \keys_define:nn {zugferd/payment-means} {
+ #1 .tl_gset:c = {g_@@_payment_#1_tl}
+ }
+}
+
+\prop_new:c {g_@@_payment-means_names_prop}
+\newcommand*{\setupZUGFeRDStrings}[2]{
+ \prop_gset_from_keyval:cn {g_@@_#1_names_prop} {
+ #2
+ }
+}
+
+\hook_gput_code:nnn {begindocument/end}{zugferd/payment-means}{
+ \prop_if_empty:cT {g_@@_payment-means_names_prop} {
+ \exp_args:Nne \setupZUGFeRDStrings{payment-means}{
+ \use:c {zugferd@paymentMeans@
+ \cs_if_exist:cTF {zugferd@paymentMeans@\languagename} {\languagename} {english}
+ }
+ }
+ }
+}
+% \end{macrocode}
+% \end{optionenv}
+% \end{implementation}
+% \begin{documentation}
+% \subsection{Variables which may be changed per invoice item}
+% Some settings may have the same value for all invoice items.
+% These are defined to take some preset but are set locally.
+% So it's possible to adjust them for a single invoice item if necessary.
+% An example is shown in \autoref{sec:xml-interfaces}.
+% \subsubsection{Units}
+% \DescribeKeyOption*{unit=hour/day/one/piece/\meta{unit code}}{}
+% The Faktur-X standard requires the unit to be selected.
+% These are called \enquote{/UN/CEFACT Common Codes} and can be found withtin \cite{unit-codes}.
+%
+% Currently \pkg{zugferd} supports |hour| (|HUR|), |day| (|DAY|), |one| (C62) and |piece| (H87).
+% For these the corresponding codes have been implemented within the package.
+% Other units can be selected using the codes listed in \cite{unit-codes}.
+%
+% This option is not case sensitive
+% The value is automatically converted to uppercase.
+% If the selected option is different from the predefined ones, there will be a warning, as \pkg{zugferd} does not know if the selection is valid or not.
+% \begin{NOTE}
+% additional source: http://www.unece.org/fileadmin/DAM/cefact/recommendations/rec20/rec20_Rev9e_2014.xls
+% \end{NOTE}
+% \end{documentation}
+% \begin{implementation}
+% \begin{optionenv}{unit}
+% \begin{macrocode}
+\keys_define:nn { zugferd } {
+ unit .choices:nn = {HUR,DAY,C62,H87} {
+ \tl_set_eq:NN \l_@@_unit_code_tl \l_keys_choice_tl
+ },
+ unit / hour .meta:n = {unit=HUR},
+ unit / day .meta:n = {unit=DAY},
+ unit / one .meta:n= {unit= C62},
+ unit / piece .meta:n = {unit=H87},
+% \end{macrocode}
+% If unknown, the value is converted to uppercase and we use the selection directly.
+% There is a warning in that case
+% \begin{macrocode}
+ unit / unknown .code:n = {
+ \tl_set:Nx \l_tmpa_tl {\str_uppercase:f {#1}}
+ \exp_args:NnnV \keys_if_choice_exist:nnnTF {zugferd} {unit}
+ \l_tmpa_tl
+ {
+ \keys_set:ne { zugferd } {unit= {\l_tmpa_tl}}
+ } {
+ \msg_warning:nnn { zugferd } {unknown-unit} {#1}
+ \tl_set_eq:NN \l_@@_unit_code_tl \l_tmpa_tl
+ }
+ },
+ unit .usage:n = general,
+}
+
+\msg_new:nnnn {zugferd} {unknown-unit} {
+ You~selected~a~unit~which~was~not~predefined.\\
+ I~~will~directly~use~your~selection~'unit=#1'~as~Common~Code.
+ Please~ensure~the~selection~is~valid!
+} {
+ For~more~information~see~the~zugferd~documentation\\
+ and~the~/UN/CEFACT~Common~Code~list.
+}
+% \end{macrocode}
+% \end{optionenv}
+% \end{implementation}
+% \begin{documentation}
+% \subsubsection{Tax category and rate}
+% \label{sec:tax-category}
+% \DescribeKeyOption{tax/category=\meta{category code/alias}}{standard}*
+% The Tax data requires a category code. For details have a look at the Specification \cite[e.\,g. at][]{spec-xrechnung}.
+% \pkg{zugferd} implements all of those, but the user has to take care to select the correct one for each invoice item.
+% The example file includes 2 different VAT values using the same category.
+%
+% The labels have been chosen to simplify the usage. It's also possible to enter the codes directly.
+% This option is not case sensitive.
+% \begin{valuelist}
+% \item[standard] Standard rate and reduced rate item, |category=S|
+% \item[zero] Zero rated sale, |category=Z|
+% \item[exempt] Exempted from VAT. This requires a reason via \option{exemption-reason},|category=E|
+% \item[reverse-charge] Reverse Charge, |category=AE|
+% \item[intra-community\\\textnormal{or} EEA] Intra-Community Supply, |category=K|
+% \item[export] Free export item, tax not charged, |category=G|
+% \item[O] Services outside scope of tax
+% \item[canary-islands] Canary Islands general indirect tax, |category=L|
+% \item[ceuta\\\textnormal{or} melilla] Ceuta and Melilla, |category=M|
+% \end{valuelist}
+%
+% \end{documentation}
+% \begin{implementation}
+% \optionenv{category, exemption-reason,rate}
+% \begin{macrocode}
+\msg_new:nnnn {zugferd} {unknown-tax-category} {
+ You~selected~an~unknown~tax~category.\\
+ I~~will~directly~use~your~selection~'category=#1'~as~Code.\\
+ Please~ensure~the~selection~is~valid!
+} {
+ For~more~information~see~the~zugferd~documentation\\
+ and~the~corresponding~code~list.
+}
+\msg_new:nnnn {zugferd} {no-auto-exemption} {
+ You~selected~tax/category=#1~together~with~the~auto-exemption~option.\\
+ I~don't~have~any~pre-configured~exemption~setting~for~category=#1.\\
+ Please~make~sure~you~add~a~valid~setting~yourself.
+} {
+ For~more~information~see~the~zugferd~documentation.
+}
+\keys_define:nn { zugferd / tax } {
+ category .choices:nn = {S,Z,E,AE,K,G,O,L,M} {
+ \tl_set_eq:NN \l_@@_tax_category_code_tl \l_keys_choice_tl
+ \bool_if:NT \g_@@_auto_exemption_bool {
+ \keys_if_choice_exist:nnnTF {zugferd/tax} {exemption-reason-auto} {#1} {
+ \keys_set:nn {zugferd/tax} {exemption-reason-auto=#1}
+ } {
+ \msg_warning:nnn { zugferd } {no-auto-exemption} {#1}
+ }
+ }
+ },
+% \end{macrocode}
+% \end{implementation}
+% \begin{documentation}
+% \DescribeKeyOption*{tax/exemption-reason=\meta{Text}}{}*
+% \DescribeKeyOption*{tax/exemption-reason-code=\meta{exemption reason code}}{}*
+% Add Reasons for a tax exempt, as required by |category=E,K,AE,G,O|.
+% This can either be added using a text (|exemption-reason|) or a predefined code (|exemption-reason-code|).
+% The codes are listed at \cite{VAT-exemption-codes}.
+%
+% In most common cases \pkg{zugferd} tries to automatically match them if the package option \option{auto-exemption} is enabled, which is the default.
+% In that case the following settings would apply:
+%
+% \begin{valuelist}
+% \item[S] \accessTaxExemptionReason{S}
+% \item[Z] Not configured.
+% \item[E] Not configured, as there are too many options.
+% \item[AE] \accessTaxExemptionReason{AE}
+% \item[K] \accessTaxExemptionReason{K}
+% \item[G] \accessTaxExemptionReason{G}
+% \item[O] \accessTaxExemptionReason{O}
+% \end{valuelist}
+%
+% In case there is no pre-configured selection \pkg{zugferd} will create a warning to remind the user to add a selection themselves.
+%
+% \end{documentation}
+% \begin{implementation}
+% \begin{macrocode}
+ exemption-reason .tl_set:N = \l_@@_tax_exemption_reason_tl,
+ exemption-reason .initial:V = \c_empty_tl,
+ exemption-reason .usage:n = general,
+ exemption-reason-code .tl_set:N = \l_@@_tax_exemption_code_tl,
+ exemption-reason-code .initial:V = \c_empty_tl,
+ exemption-reason .usage:n = general,
+% \end{macrocode}
+% \changes{v0.7}{2024-09-10}{Added exemption-reason-auto key for pre-configured exemption-reasons.}
+% \begin{macrocode}
+ exemption-reason-auto .choice:,
+ exemption-reason-auto / S .code:n = {
+ \keys_set:nn {zugferd/tax} {exemption-reason=,exemption-reason-code=}
+ },
+ exemption-reason-auto / K .code:n = {
+ \keys_set:nn {zugferd/tax} {
+ exemption-reason= Intra-Community~Supply,
+ exemption-reason-code={vatex-eu-ic}
+ }
+ },
+ exemption-reason-auto / AE .code:n = {
+ \keys_set:nn {zugferd/tax}{
+ exemption-reason=Reverse~Charge,
+ exemption-reason-code={vatex-eu-ae}
+ }
+ },
+ exemption-reason-auto / G .code:n = {
+ \keys_set:nn {zugferd/tax}{
+ exemption-reason=Export~outside~the~EU,
+ exemption-reason-code={vatex-eu-g}
+ }
+ },
+ exemption-reason-auto / O .code:n = {
+ \keys_set:nn {zugferd/tax}{
+ exemption-reason=No~subject~to~VAT,
+ exemption-reason-code={vatex-eu-o}
+ }
+ },
+ standard .meta:n = {category=S},
+ zero .meta:n = {category=Z},
+ exempt .meta:n = {category=E},
+ reverse-charge .meta:n = {category=AE},
+ intra-community .meta:n = {category=K},
+ EEA .meta:n = {category=K},
+ export .meta:n = {category=G},
+ canary-islands .meta:n = {category=L},
+ ceuta .meta:n = {category=M},
+ melilla .meta:n = {category=M},
+ category / unknown .code:n = {
+ \exp_args:Nnnx \keys_if_choice_exist:nnnTF {zugferd} {category}
+ {\str_uppercase:f {#1}}
+ {
+ \keys_set:nx { zugferd } {category= {\str_uppercase:f {#1}}}
+ } {
+ \msg_warning:nnn { zugferd } {unknown-tax-category} {#1}
+ }
+ },
+ category .initial:n = S,
+ category .usage:n = general,
+% \end{macrocode}
+% \end{implementation}
+% \begin{documentation}
+% \DescribeKeyOption{tax/rate=\meta{floating point}}{19}*
+% The value given will be used for tax calculation.
+% By default it's configured to |19| to match the German standard VAT rate.
+%
+% \end{documentation}
+% \begin{implementation}
+% \begin{macrocode}
+ rate .fp_set:N = \l_@@_tax_rate_fp,
+ rate .initial:n = 19,
+ rate .usage:n = general,
+}
+% \end{macrocode}
+% \endoptionenv
+% \begin{macrocode}
+\_@@_define_xml_writer:Nn \_@@_write_inline:nn {
+ \tl_if_blank:nF {#2} {
+ <#1>#2</#1>
+ }
+}
+\cs_generate_variant:Nn \_@@_write_inline:nn {ne}
+\_@@_define_xml_writer:Nn \_@@_write_inline_i:nn {
+ \_@@_indent: \_@@_write_inline:nn {#1} {#2}
+}
+\cctab_begin:N \g_@@_xml_cctab%
+%
+\_@@_define_xml_writer:Nn \_@@_write_note:n {%
+ \begingroup%
+ \let\\\iow_newline:%
+ \_@@_write_xml:e {%
+ <ram:IncludedNote>
+ \_@@_indent: <ram:Content>
+ #1
+ \_@@_indent: </ram:Content>
+ </ram:IncludedNote>%
+ }%
+ \endgroup%
+}%
+%
+%
+\begingroup%
+\char_set_catcode_other:N \#%
+\char_set_catcode:nn {32}{10}%
+\_@@_define_xml_writer:Nn \_@@_insert_Header: {%
+ \_@@_write_xml:e {%
+ <?xml version='1.0' encoding='UTF-8' ?>
+ <rsm:CrossIndustryInvoice %
+ xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100" %
+ xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:100" %
+ xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100" %
+ xmlns:xs="http://www.w3.org/2001/XMLSchema" %
+ xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100">%
+ }%
+ \int_gincr:N \g_@@_indent_int%
+ \_@@_write_xml:n {<rsm:ExchangedDocumentContext>}%
+ \int_gincr:N \g_@@_indent_int%
+ \_@@_write_xml:e {%
+ \str_if_empty:NF \g_@@_businessProcessId_str {%
+ <ram:BusinessProcessSpecifiedDocumentContextParameter>
+ \_@@_indent: <ram:ID>\g_@@_businessProcessId_str</ram:ID>
+ </ram:BusinessProcessSpecifiedDocumentContextParameter>
+ }%
+ <ram:GuidelineSpecifiedDocumentContextParameter>
+ \_@@_indent: <ram:ID>\g_@@_format_str</ram:ID>
+ </ram:GuidelineSpecifiedDocumentContextParameter>%
+ }%
+ \int_gdecr:N \g_@@_indent_int%
+ \_@@_write_xml:n {</rsm:ExchangedDocumentContext>}%
+}%
+\endgroup%
+\_@@_define_xml_writer:Nn \_@@_insert_FrontMatter: {%
+ \_@@_write_xml:n {<rsm:ExchangedDocument>}%
+ \int_gincr:N \g_@@_indent_int%
+ \_@@_write_xml:e {%
+ <ram:ID>\g_@@_id_tl</ram:ID>
+ <ram:TypeCode>\g_@@_DocumentTypeCode_tl</ram:TypeCode>
+ <ram:IssueDateTime>
+ % space required!
+ \_@@_indent:<udt:DateTimeString~format="102">\g_@@_date_tl</udt:DateTimeString>
+ </ram:IssueDateTime>%
+ }%
+ \_@@_note_if_not_empty:N \g_@@_subject_tl%
+ \_@@_note_if_not_empty:N \g_@@_fromaddress_tl%
+ \seq_map_inline:Nn \g_@@_notes_seq {%
+ \_@@_write_note:n {##1}%
+ }%
+ \int_gdecr:N \g_@@_indent_int%
+ \_@@_write_xml:e {%
+ </rsm:ExchangedDocument>
+ <rsm:SupplyChainTradeTransaction>%
+ }%
+ \int_gincr:N \g_@@_indent_int%
+}%
+%
+% footer
+\_@@_define_xml_writer:Nn \_@@_insert_Footer: {%
+ \int_gdecr:N \g_@@_indent_int%
+ \_@@_write_xml:n {</rsm:SupplyChainTradeTransaction>}%
+ \int_gdecr:N \g_@@_indent_int%
+ \_@@_write_xml:n {</rsm:CrossIndustryInvoice>}%
+}%
+\cctab_end:
+% \end{macrocode}
+%
+% \subsection{Invoice Items}
+% Each item consists of 5 parts:
+% \begin{itemize}
+% \item AssociatedDocumentLineDocument
+% \item SpecifiedTradeProduct
+% \item SpecifiedLineTradeAgreement
+% \item SpecifiedLineTradeDelivery
+% \item SpecifiedLineTradeSettlement
+% \end{itemize}
+% These are implemented as separate commands to be more flexible.
+% The wrapper command is called \cs[no-index]{@@_insert_TradeLineItem:nnnnnn} and is created to be used in your own invoicing package-
+% \begin{macrocode}
+\cctab_begin:N \g_@@_xml_cctab%
+% \end{macrocode}
+% \begin{function}{\_@@_AssociatedDocumentLineDocument:n}
+% \begin{macrocode}
+\_@@_define_xml_writer:Nn \_@@_AssociatedDocumentLineDocument:n {%
+ <ram:AssociatedDocumentLineDocument>
+ \_@@_indent: <ram:LineID>#1</ram:LineID>
+ </ram:AssociatedDocumentLineDocument>%
+}%
+% \end{macrocode}
+% \end{function}
+% \begin{function}{\_@@_SpecifiedTradeProduct:nn}
+% \begin{macrocode}
+\_@@_define_xml_writer:Nn \_@@_SpecifiedTradeProduct:nn {%
+ <ram:SpecifiedTradeProduct>
+ \tl_if_empty:nF {#1} {%
+ \_@@_indent: <ram:SellerAssignedID>#1</ram:SellerAssignedID>
+ }%
+ \_@@_indent: <ram:Name>#2</ram:Name>
+ </ram:SpecifiedTradeProduct>%
+}%
+% \end{macrocode}
+% \end{function}
+% \begin{function}{\_@@_ProductTradePrice:nn}
+% \begin{macrocode}
+\_@@_define_xml_writer:Nn \_@@_ProductTradePrice:nn {%
+ <ram:\str_uppercase:n #1PriceProductTradePrice>
+ \_@@_indent: <ram:ChargeAmount>#2</ram:ChargeAmount>
+ </ram:\str_uppercase:n #1PriceProductTradePrice>%
+}%
+% \end{macrocode}
+% \end{function}
+% \begin{function}{\_@@_SpecifiedLineTradeAgreement:nn}
+% \begin{macrocode}
+\_@@_define_xml_writer:Nn \_@@_SpecifiedLineTradeAgreement:nn {%
+ <ram:SpecifiedLineTradeAgreement>
+ \_@@_indent:<ram:GrossPriceProductTradePrice>
+ \_@@_indent:n {2} <ram:ChargeAmount>#1</ram:ChargeAmount>
+ \_@@_indent:</ram:GrossPriceProductTradePrice>
+ \_@@_indent:<ram:NetPriceProductTradePrice>
+ \_@@_indent:n {2} <ram:ChargeAmount>#2</ram:ChargeAmount>
+ \_@@_indent:</ram:NetPriceProductTradePrice>
+ </ram:SpecifiedLineTradeAgreement>
+}%
+% \end{macrocode}
+% \end{function}
+%%%\subsubsection{SpecifiedLineTradeDelivery}%:nn <unit code > <number>
+% \begin{function}{\_@@_SpecifiedLineTradeDelivery:nn}
+% \begin{macrocode}
+\_@@_define_xml_writer:Nn \_@@_SpecifiedLineTradeDelivery:nn {%
+ <ram:SpecifiedLineTradeDelivery>
+ % SPACE!
+ \_@@_indent: <ram:BilledQuantity~unitCode="#1">#2</ram:BilledQuantity>
+ </ram:SpecifiedLineTradeDelivery>
+}%
+% \end{macrocode}
+% \end{function}
+% \begin{function}{\_@@_SpecifiedLineTradeSettlement:nnn,\_@@_SpecifiedLineTradeSettlement:Vnn}
+% \begin{macrocode}
+\_@@_define_xml_content:Nn \_@@_SpecifiedLineTradeSettlement:nnn {%
+ <ram:SpecifiedLineTradeSettlement>
+ \_@@_indent: <ram:ApplicableTradeTax>
+ %BT-151
+ \_@@_indent:n {2} <ram:TypeCode>VAT</ram:TypeCode>
+ %BT-151
+ \_@@_indent:n {2} <ram:CategoryCode>#1</ram:CategoryCode>
+ %BT-152
+ \_@@_indent:n {2} <ram:RateApplicablePercent>#2</ram:RateApplicablePercent>
+ \_@@_indent: </ram:ApplicableTradeTax>
+ \_@@_indent: <ram:SpecifiedTradeSettlementLineMonetarySummation>
+ % BT-131
+ \_@@_indent:n {2} <ram:LineTotalAmount>#3</ram:LineTotalAmount>
+ \_@@_indent: </ram:SpecifiedTradeSettlementLineMonetarySummation>
+ </ram:SpecifiedLineTradeSettlement>%
+}%
+% \end{macrocode}
+% \begin{macrocode}
+\cctab_end:
+\cs_generate_variant:Nn \_@@_SpecifiedLineTradeSettlement:nnn {Vnn}
+% \end{macrocode}
+% \end{function}
+% The exemption reason was placed wrong with the pre-CTAN release.
+% This was fixed in August 2024.
+% The old macro will be kept for a bit longer but will be removed soon.
+% Please update your own implementations accordingly.
+% \changes{v0.4}{2024-08-22}{Deprecate old syntax and add public interfaces.}
+% \begin{macrocode}
+\cs_new:Nn \_@@_SpecifiedLineTradeSettlement:nnnn {
+ \msg_warning:nnnn {zugferd} {macro-deprecated}
+ { \_@@_SpecifiedLineTradeSettlement:nnnn }
+ { \_@@_SpecifiedLineTradeSettlement:nnn }
+ \_@@_SpecifiedLineTradeSettlement:nnn {#2} {#3} {#4}
+}
+\cs_generate_variant:Nn \_@@_SpecifiedLineTradeSettlement:nnnn {VVnn}
+% \end{macrocode}
+% \end{implementation}
+% \begin{implementation}
+% \begin{function}{ \_@@_insert_TradeLineItem:nnnnnn,\@@_write_TradeLineItem:nnnnnn}
+% Writing an invoice item using the helper commands defined before, to the \XMLfile.
+% \begin{macrocode}
+\_@@_define_xml_writer:Nn \_@@_insert_TradeLineItem:nnnnnn {
+ \_@@_write_xml:n {<ram:IncludedSupplyChainTradeLineItem>}
+ \int_gincr:N \g_@@_indent_int
+ \_@@_write_xml:e {\_@@_AssociatedDocumentLineDocument:n {#1}}%
+
+ \begingroup
+ \zugferd_disable_macros:
+ \_@@_write_xml:e {\_@@_SpecifiedTradeProduct:nn {#2} {#3}}
+ \endgroup
+
+ \_@@_write_xml:n {<ram:SpecifiedLineTradeAgreement>}
+ \int_gincr:N \g_@@_indent_int%
+ \_@@_write_xml:e {\_@@_ProductTradePrice:nn {net} {#4}}
+ \int_gdecr:N \g_@@_indent_int%
+ \_@@_write_xml:n {</ram:SpecifiedLineTradeAgreement>}
+ \_@@_write_xml:e {%
+ \_@@_SpecifiedLineTradeDelivery:nn { \l_@@_unit_code_tl } {#5}
+ \_@@_SpecifiedLineTradeSettlement:Vnn \l_@@_tax_category_code_tl %
+ { \fp_use:N \l_@@_tax_rate_fp} {#6}
+ }%
+ \int_gdecr:N \g_@@_indent_int
+ \_@@_write_xml:n {</ram:IncludedSupplyChainTradeLineItem>}
+}
+% \end{macrocode}
+% \end{function}
+% \end{implementation}
+% \begin{implementation}
+% ApplicableHeaderTradeSettlement
+% \begin{macrocode}
+\_@@_define_xml_writer:Nn \_@@_SpecifiedTradeSettlementHeaderMonetarySummation:nnnnnnnn {%
+ \_@@_write_xml:n {<ram:SpecifiedTradeSettlementHeaderMonetarySummation>}%
+ \int_gincr:N \g_@@_indent_int%
+ \_@@_write_rounded:nnn {2} {LineTotalAmount} {#1}
+ \_@@_write_rounded:nnn {2} {ChargeTotalAmount} {#2}
+ \_@@_write_rounded:nnn {2} {AllowanceTotalAmount} {#3}
+ \_@@_write_rounded:nnn {2} {TaxBasisTotalAmount} {#4}
+ \_@@_write_rounded:nnnn {2} {TaxTotalAmount} {~currencyID="\l_@@_currency_tl "} {#5}
+ \_@@_write_rounded:nnn {2} {GrandTotalAmount} {#6}
+ \_@@_write_rounded:nnn {2} {TotalPrepaidAmount} {#7}
+ \_@@_write_rounded:nnn {2} {DuePayableAmount} {#8}
+ \int_gdecr:N \g_@@_indent_int%
+ \_@@_write_xml:n {</ram:SpecifiedTradeSettlementHeaderMonetarySummation>}%
+}%
+% ApplicableTradeTax CategoryCode Rate BaseAmount Result
+\_@@_define_xml_writer:Nn \_@@_ApplicableTradeTax:nnnn {%
+ \_@@_write_xml:n {<ram:ApplicableTradeTax>}
+ \int_gincr:N \g_@@_indent_int%
+ \_@@_write_rounded:nnn {2} {CalculatedAmount} {#4}%BT117
+ \_@@_write_xml:n {<ram:TypeCode>VAT</ram:TypeCode>}%BT118
+ \tl_if_blank:VF \l_@@_tax_exemption_reason_tl {%BT-120
+ \_@@_write_xml:e {<ram:ExemptionReason>
+ \l_@@_tax_exemption_reason_tl
+ </ram:ExemptionReason>}
+ }
+ {{\_@@_write_rounded:nnn {2} {BasisAmount} {#3}}}%BT-116
+ \_@@_write_xml:e {<ram:CategoryCode>#1</ram:CategoryCode>}%BT-118
+ \tl_if_blank:VF \l_@@_tax_exemption_code_tl {%BT121
+ \_@@_write_xml:e {<ram:ExemptionReasonCode>
+ \l_@@_tax_exemption_code_tl
+ </ram:ExemptionReasonCode>}
+ }
+ \_@@_write_xml:n {<ram:RateApplicablePercent>#2</ram:RateApplicablePercent>}%BT-119
+ \int_gdecr:N \g_@@_indent_int%
+ \_@@_write_xml:n {</ram:ApplicableTradeTax>}
+}%
+%
+\cctab_begin:N \g_@@_xml_cctab%
+% ApplicableHeaderTradeSettlement
+\_@@_define_xml_writer:Nn \_@@_ApplicableHeaderTradeSettlement:nnnnnnnn {%
+
+}%
+% \end{macrocode}
+% ApplicableHeaderTradeSettlement needs to be splitted to be used in separate parts of the tabular.
+% \begin{macrocode}
+\_@@_define_xml_writer:Nn \_@@_ApplicableHeaderTradeSettlement_start: {%
+ \_@@_write_xml:n {<ram:ApplicableHeaderTradeSettlement>}%
+ \int_gincr:N \g_@@_indent_int%
+ \_@@_write_xml:e {<ram:InvoiceCurrencyCode>\l_@@_currency_tl</ram:InvoiceCurrencyCode>}%
+}%
+\_@@_define_xml_writer:Nn \_@@_ApplicableHeaderTradeSettlement_stop: {%
+ \int_gdecr:N \g_@@_indent_int%
+ \_@@_write_xml:n {</ram:ApplicableHeaderTradeSettlement>}%
+}%
+% \end{macrocode}
+% SpecifiedTradePaymentTerms
+% \begin{macrocode}
+\_@@_define_xml_writer:Nn \_@@_SpecifiedTradePaymentTerms:nn {%
+ \_@@_write_xml:n {<ram:SpecifiedTradePaymentTerms>}%
+ \int_gincr:N \g_@@_indent_int%
+ \_@@_write_xml:e {%
+ \tl_if_blank:nF {#1} {%
+ <ram:Description>#1</ram:Description>%
+ }%
+ \tl_if_blank:nF {#2} {%
+ <ram:DueDateDateTime>
+ \_@@_indent: <udt:DateTimeString~format="102">#2</udt:DateTimeString>
+ </ram:DueDateDateTime>%
+ }%
+ }%
+ \int_gdecr:N \g_@@_indent_int%
+ \_@@_write_xml:n {</ram:SpecifiedTradePaymentTerms>}%
+}%
+%
+%
+% sums
+\_@@_define_xml_writer:Nn \_@@_SpecifiedTradeSettlementPaymentMeans:nnn {%
+ \bool_if:NT \g_@@_writePaymentMeans_bool {%
+ \_@@_write_xml:n {<ram:SpecifiedTradeSettlementPaymentMeans>}%
+ \int_gincr:N \g_@@_indent_int%
+ \_@@_write_xml:e {%
+ <ram:TypeCode>\g_@@_payment_means_tl</ram:TypeCode>
+ \_@@_write_inline:ne {ram:Information} {\prop_item:cV {g_@@_payment-means_names_prop} \g_@@_payment_means_tl}%
+ \tl_if_blank:nF {#1#2} {%
+ <ram:PayeePartyCreditorFinancialAccount>
+ \_@@_write_inline_i:nn {ram:IBANID} {#2}
+ \_@@_write_inline_i:nn {ram:AccountName} {#1}
+ </ram:PayeePartyCreditorFinancialAccount>
+ }%
+ \tl_if_blank:nF {#3} {%
+ <ram:PayeeSpecifiedCreditorFinancialInstitution>
+ \_@@_write_inline_i:nn {ram:BICID} {#3}
+ </ram:PayeeSpecifiedCreditorFinancialInstitution>%
+ }%
+ }%
+ \int_gdecr:N \g_@@_indent_int%
+ \_@@_write_xml:n {</ram:SpecifiedTradeSettlementPaymentMeans>}%
+ }%
+}%
+\cctab_end:
+\cs_generate_variant:Nn \_@@_SpecifiedTradePaymentTerms:nn {VV}
+\_@@_define_xml_writer:Nn \_@@_SpecifiedTradePaymentTerms: {
+ \_@@_SpecifiedTradePaymentTerms:VV \_@@_payment_terms_str \_@@_due_date_tl
+}
+% \end{macrocode}
+% \begin{function}{\_@@_SpecifiedTradeSettlementPaymentMeans:}
+% \begin{macrocode}
+\cs_generate_variant:Nn \_@@_SpecifiedTradeSettlementPaymentMeans:nnn {vvv}
+\_@@_define_xml_writer:Nn \_@@_SpecifiedTradeSettlementPaymentMeans: {
+ \tl_if_blank:VF \g_@@_payment_means_tl {
+ \_@@_SpecifiedTradeSettlementPaymentMeans:vvv
+ {g_@@_payment_account-holder_tl} {g_@@_payment_iban_tl} {g_@@_payment_bic_tl}
+ }
+}
+% \end{macrocode}
+% \end{function}
+% \end{implementation}
+% \begin{implementation}
+% \begin{macrocode}
+\msg_new:nnn {zugferd} {macro-deprecated} {
+ The~function~#1~is~deprecated.\\
+ It~was~replaced~by~#2.\\
+ Please~adjust~your~mechanism~to~use~the~new~version.
+}
+% \end{macrocode}
+% \end{implementation}
+% \iffalse
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+% \fi
+% \Finale
+\endinput
diff --git a/macros/latex/contrib/zugferd/zugferd.ins b/macros/latex/contrib/zugferd/zugferd.ins
new file mode 100644
index 0000000000..207227702a
--- /dev/null
+++ b/macros/latex/contrib/zugferd/zugferd.ins
@@ -0,0 +1,19 @@
+\input docstrip
+
+\preamble
+
+Copyright (C) 2023--2024 by Marei Peischl (peiTeX) <marei@peitex.de>
+
+\endpreamble
+
+\askforoverwritefalse
+
+\usedir{tex/latex/zugferd}
+
+\generate{
+ \file{zugferd.sty}{
+ \from{zugferd.dtx}{package}
+ }
+}
+
+\endbatchfile
diff --git a/macros/latex/contrib/zugferd/zugferd.pdf b/macros/latex/contrib/zugferd/zugferd.pdf
new file mode 100644
index 0000000000..3d3801ab7b
--- /dev/null
+++ b/macros/latex/contrib/zugferd/zugferd.pdf
Binary files differ
diff --git a/support/TeX4ht/source/ChangeLog b/support/TeX4ht/source/ChangeLog
index 64f4b66df8..0efdd8bc4f 100644
--- a/support/TeX4ht/source/ChangeLog
+++ b/support/TeX4ht/source/ChangeLog
@@ -1,3 +1,8 @@
+2024-09-11 Michal Hoftich <michal.h21@gmail.com>
+
+ * tex4ht-mathjax.tex (mathjax-latex-4ht.4ht): prevent insertion of
+ spaces after \begin and \end in \VerbMath.
+
2024-09-10 Michal Hoftich <michal.h21@gmail.com>
* tex4ht-mathjax.tex (mathjax-latex-4ht.4ht): use \detokenize again,
diff --git a/support/TeX4ht/source/tex4ht-mathjax.tex b/support/TeX4ht/source/tex4ht-mathjax.tex
index f4338eb6f5..56c53e3698 100644
--- a/support/TeX4ht/source/tex4ht-mathjax.tex
+++ b/support/TeX4ht/source/tex4ht-mathjax.tex
@@ -1,4 +1,4 @@
-% $Id: tex4ht-mathjax.tex 1553 2024-09-10 13:43:17Z michal_h21 $
+% $Id: tex4ht-mathjax.tex 1554 2024-09-11 13:41:52Z michal_h21 $
% compile: latex tex4ht-mathjax
%
% Copyright 2018-2024 TeX Users Group
@@ -132,9 +132,9 @@ environments. They will then keep the LaTeX code unchanged.
\long\def\AltlDisplayDollars#1$${\alteqtoks{\[#1\]}$$}
\newcommand\VerbMathToks[2]{%
- \alteqtoks{\begin{#2}
- #1
- \end{#2}}%
+ \HCode{\string\begin{#2}}%
+ \alteqtoks{#1}%
+ \HCode{\string\end{#2}}%
}
>>>
diff --git a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
index a1f0909911..1a862ed3aa 100644
--- a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+++ b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
@@ -19,7 +19,6 @@ $mirrors = {
'https://mirrors.hust.edu.cn/CTAN/' => 1,
'https://mirrors.jlu.edu.cn/CTAN/' => 1,
'https://mirrors.nju.edu.cn/CTAN/' => 1,
- 'https://mirrors.pku.edu.cn/ctan/' => 1,
'https://mirrors.sjtug.sjtu.edu.cn/ctan/' => 1,
'https://mirrors.sustech.edu.cn/CTAN/' => 1,
'https://mirrors.tuna.tsinghua.edu.cn/CTAN/' => 1,
@@ -48,7 +47,6 @@ $mirrors = {
'https://jp.mirrors.cicku.me/ctan/' => 1,
},
'Korea' => {
- 'http://ftp.ktug.org/tex-archive/' => 1,
'https://ftp.kaist.ac.kr/tex-archive/' => 1,
'https://kr.mirrors.cicku.me/ctan/' => 1,
'https://lab.uklee.pe.kr/tex-archive/' => 1,
@@ -77,6 +75,10 @@ $mirrors = {
'Belarus' => {
'https://mirror.datacenter.by/pub/mirrors/CTAN/' => 1,
},
+ 'Bulgaria' => {
+ 'https://mirrors.neterra.net/CTAN/' => 1,
+ 'https://mirrors.netix.net/CTAN/' => 1,
+ },
'Czech Republic' => {
'http://ftp.cvut.cz/tex-archive/' => 1,
'https://mirrors.nic.cz/tex-archive/' => 1,
@@ -90,6 +92,7 @@ $mirrors = {
'https://www.texlive.info/CTAN/' => 1,
},
'France' => {
+ 'https://ctan.gutenberg-asso.fr/' => 1,
'https://ctan.mines-albi.fr/' => 1,
'https://ctan.tetaneutral.net/' => 1,
'https://distrib-coffee.ipsl.jussieu.fr/pub/mirrors/ctan/' => 1,
@@ -141,6 +144,7 @@ $mirrors = {
'Poland' => {
'https://ctan.gust.org.pl/tex-archive/' => 1,
'https://polish-mirror.evolution-host.com/ctan/' => 1,
+ 'https://sunsite.icm.edu.pl/pub/CTAN/' => 1,
},
'Portugal' => {
'https://ftp.eq.uc.pt/software/TeX/' => 1,
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
index 4ee6c72eac..2d6dea3a99 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
@@ -26,11 +26,11 @@ depend container_split_src_files/1
depend frozen/0
depend minrelease/2016
depend release/2024
-depend revision/72252
+depend revision/72259
name 00texlive.image
category TLCore
-revision 72250
+revision 72257
shortdesc TeX Live files only in the source repository
longdesc The files here are not copied by the installer and containers
longdesc are not built for them; they exist only in the source
@@ -984,6 +984,7 @@ runfiles size=14523
tlpkg/tlpsrc/cartonaugh.tlpsrc
tlpkg/tlpsrc/cascade.tlpsrc
tlpkg/tlpsrc/cascadia-code.tlpsrc
+ tlpkg/tlpsrc/cascadiamono-otf.tlpsrc
tlpkg/tlpsrc/cascadilla.tlpsrc
tlpkg/tlpsrc/cases.tlpsrc
tlpkg/tlpsrc/casyl.tlpsrc
@@ -4944,7 +4945,7 @@ depend setting_available_architectures:aarch64-linux amd64-freebsd amd64-netbsd
name 00texlive.installer
category TLCore
-revision 72252
+revision 72259
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
@@ -50763,6 +50764,33 @@ catalogue-license ofl lppl
catalogue-topics font font-mono font-sans font-otf font-type1 font-supp font-t1enc
catalogue-version 0.0.2
+name cascadiamono-otf
+category Package
+revision 72257
+shortdesc Support for the OpenType font CascadiaMono (with CascadiaCode fontspec config files)
+relocated 1
+longdesc Support for the OpenType font CascadiaMono (so with
+longdesc LuaLaTeX/XeTeX and fontspec), which is a variant of
+longdesc CascadiaCode, but without ligatures. \setmonofont{CascadiaMono}
+longdesc for regular version, \setmonofont{CascadiaMono-Light} for
+longdesc semilight version.
+containersize 732
+containerchecksum f7c2f69a5d024239ae57eb6c367f359ac6a10153ed8ae1cd47e7882a7344e68a2b457449c7d886884f66c48f08175e7d2b766f00c92ca4dc5e29be1907ac54c5
+doccontainersize 92876
+doccontainerchecksum 4e8e1c51e3ae538afe8da337536f2c0a9feb328149ac228b62d52ab2b6e2a3f5a897dec6c5e1d0ae962ba0f2f6937ca988c398b37782ed50ce91e8896dc50ff5
+docfiles size=26
+ RELOC/doc/fonts/cascadiamono-otf/README.md details="Readme"
+ RELOC/doc/fonts/cascadiamono-otf/cascadiamono-otf-doc.pdf details="Package documentation"
+ RELOC/doc/fonts/cascadiamono-otf/cascadiamono-otf-doc.tex
+runfiles size=2
+ RELOC/tex/fonts/cascadiamono-otf/CascadiaMono-Light.fontspec
+ RELOC/tex/fonts/cascadiamono-otf/CascadiaMono.fontspec
+catalogue-contact-repository https://github.com/cpierquet/cascadiamono-otf
+catalogue-ctan /fonts/cascadiamono-otf
+catalogue-license lppl1.3
+catalogue-topics font-supp font-otf font-mono
+catalogue-version 0.1
+
name cascadilla
category Package
revision 25144
@@ -70911,7 +70939,7 @@ containerchecksum ce789f2713ee28ab46cf0cbe370fd1e914cd13b749033dfe86509ba44764d0
name collection-fontsextra
category Collection
-revision 71982
+revision 72257
shortdesc Additional fonts
relocated 1
depend aboensis
@@ -70977,6 +71005,7 @@ depend cantarell
depend carlito
depend carolmin-ps
depend cascadia-code
+depend cascadiamono-otf
depend ccicons
depend cfr-initials
depend cfr-lm
@@ -71278,8 +71307,8 @@ depend yfonts-t1
depend yinit-otf
depend ysabeau
depend zlmtt
-containersize 2076
-containerchecksum b2321b7ec3ded15c19220e96331f1dcbf1c6bee2ab7701672473bbb9103bd63199e57d5ef0498fc7d7de790a26f4ee48268154b74c575aba0742b9be9df89211
+containersize 2080
+containerchecksum cf8014625fa52542b452d8257cf075c8f96dd911127c93ddb1cde725cc25d7edeaef7dfcefa0316f2904d5c75654d8dbc444d99e545e7d91165c421f100e09f9
name collection-fontsrecommended
category Collection
@@ -133164,15 +133193,15 @@ catalogue-version 0.7.3
name fontscale
category Package
-revision 72223
+revision 72254
shortdesc A flexible interface for setting font sizes
relocated 1
longdesc This package provides an interface for selecting (arbitrary)
longdesc font sizes and associated values.
-containersize 6340
-containerchecksum 783c306e3a262ed60badb97a2ba453cbe1528d75586da2a99108610b67723c55cbe01fb9dfd666a98fd6b1397319cb864a5ce32d9edef76d728ec62f580f5d77
-doccontainersize 112104
-doccontainerchecksum 0cd80a99f5f5a4fe8665da2d9aef0bda77baefdea14a75b6eec8fe0123fd92823551df8c03f753605854e129d6750eba2b7d5f81cd20ff886a1a517671de88a7
+containersize 6404
+containerchecksum 21db77f34faee66171b2504dde7b24d4d62e334b89ba87c9f4015b29a1dcb8747052752c35e086e4be4b308a60f7b6c0d6587d498c1dd203966e618156182fc5
+doccontainersize 113032
+doccontainerchecksum 46e36ed5c19383a2c6f0b8ea375e6cc127b9c22d5bcaba84ac8d504e47a3e23bcc3a7292add8bd8c64a4b55935d4ec0c0aef54405fd67b4c453124220aaa6b97
docfiles size=40
RELOC/doc/latex/fontscale/CHANGELOG.md
RELOC/doc/latex/fontscale/README.txt details="Readme"
@@ -133189,7 +133218,7 @@ catalogue-contact-repository https://github.com/beeryoliver/fontscale
catalogue-ctan /macros/latex/contrib/fontscale
catalogue-license lppl1.3c
catalogue-topics expl3 font-sel
-catalogue-version 2.3.0
+catalogue-version 2.4.0
name fontsetup
category Package
@@ -253576,21 +253605,21 @@ catalogue-version 0.0c
name panneauxroute
category Package
-revision 67951
+revision 72255
shortdesc Commands to display French road signs (vector graphics)
relocated 1
longdesc The package provides commands to insert French road signs as
-longdesc vector graphics: \AffPanneau[graphicx options]{} \pr[graphicx
-longdesc options]
-containersize 376816
-containerchecksum d904edbcc40640e89e3399a5e00310174bc9317a1ac87da86ad15dfb2ec24757b21cc9ec1d9e562547b6637bc63fb1d58bc5373d4b84f4b53c0194c001a2ae59
-doccontainersize 596496
-doccontainerchecksum b0fc8b96588dbe692eebec332da0cd3fbea74090b566a9afddad30b6028d3592e95f729d7d8f6f198c14e2cbe63e821715ddd2678bd4a58865c5a159d8d8ce4b
-docfiles size=177
+longdesc vector graphics: \AffPanneau[graphicx options]{code}
+longdesc \prcode[graphicx options]
+containersize 378812
+containerchecksum 33b63c042b6987877fdb36afa0a48dfde959c2da3e17ba35de8641d5b899c61f6c360138b6404018a9635b6ac61239c036e3135664f34462c02c32b2c3acc357
+doccontainersize 599952
+doccontainerchecksum ee70e39c07f8655fb688d5294a9723c78aed3dbc387608adb38a6387652ddb129868c4f03ac346e9aff20d80e735548fc3bb39f484731d30cc68f2a0add84867
+docfiles size=178
RELOC/doc/latex/panneauxroute/PanneauxRoute-doc.pdf details="Package documentation"
RELOC/doc/latex/panneauxroute/PanneauxRoute-doc.tex
RELOC/doc/latex/panneauxroute/README.md details="Readme"
-runfiles size=247
+runfiles size=248
RELOC/tex/latex/panneauxroute/Danger/PanneauRouteA13a.pdf
RELOC/tex/latex/panneauxroute/Danger/PanneauRouteA13b.pdf
RELOC/tex/latex/panneauxroute/Danger/PanneauRouteA14.pdf
@@ -253684,6 +253713,7 @@ runfiles size=247
RELOC/tex/latex/panneauxroute/Interdiction/PanneauRouteB14_30.pdf
RELOC/tex/latex/panneauxroute/Interdiction/PanneauRouteB14_50.pdf
RELOC/tex/latex/panneauxroute/Interdiction/PanneauRouteB14_70.pdf
+ RELOC/tex/latex/panneauxroute/Interdiction/PanneauRouteB14_80.pdf
RELOC/tex/latex/panneauxroute/Interdiction/PanneauRouteB14_90.pdf
RELOC/tex/latex/panneauxroute/Interdiction/PanneauRouteB15.pdf
RELOC/tex/latex/panneauxroute/Interdiction/PanneauRouteB16.pdf
@@ -253806,7 +253836,7 @@ catalogue-contact-repository https://github.com/cpierquet/PanneauxRoute
catalogue-ctan /macros/latex/contrib/panneauxroute
catalogue-license lppl1.3c cc-by-sa-3
catalogue-topics french graphics-use
-catalogue-version 0.1.0
+catalogue-version 0.1.1
name paper
category Package
@@ -281182,18 +281212,18 @@ catalogue-version 1.0
name quizztex
category Package
-revision 68823
+revision 72256
shortdesc Create quizzes like in TV shows
relocated 1
longdesc This LaTeX package permits to create quizzes in the style of
longdesc the TV shows << Qui veut gagner des millions ? >> ("Who Wants
longdesc to Be a Millionaire?") or << Tout le monde veut prendre sa
longdesc place ! >>.
-containersize 5528
-containerchecksum dbf234ba1d366bdd2a1be442c4bb670efe34d67584386ab1dadfa8afa2ff8551ff03ed9c441f6dc480bfed36ea79082048aa6f0e182f4b9bb5dbce7782c81391
-doccontainersize 536884
-doccontainerchecksum 5c9242df37a22ebdc33d834acd95f760681eebf32516857d6b7ef866ebd00060017ec058c7a628239aa65cfbe62d0335ec00d786d4f9558ec754687b161ea017
-docfiles size=141
+containersize 5636
+containerchecksum cbfa0d27489f2812fdbed0826ea4a27dd3b7b1ac5c82544d9f84f1019cbac2a00e756fb9e5f65e4b15474fd759d499a44328b73326542bc287b6f72becbaba24
+doccontainersize 545000
+doccontainerchecksum 98df000f994e70b148d44a572a4bf159a0a35ffe68ef22aefbb17e345b869bb0d7cc5cd72e1b01d91c264bdad58afcd599bfff25b0356b33821ea6fb141eb6c5
+docfiles size=143
RELOC/doc/latex/quizztex/README.md details="Readme"
RELOC/doc/latex/quizztex/quizztex-doc-fr.pdf details="Package documentation" language="fr"
RELOC/doc/latex/quizztex/quizztex-doc-fr.tex
@@ -281204,7 +281234,7 @@ catalogue-contact-repository https://github.com/cpierquet/quizztex
catalogue-ctan /macros/latex/contrib/quizztex
catalogue-license lppl1.3c
catalogue-topics exam pgf-tikz
-catalogue-version 0.1.2
+catalogue-version 0.1.4
name quotchap
category Package
@@ -316846,7 +316876,7 @@ binfiles arch=x86_64-solaris size=1
name tex4ht
category Package
-revision 72251
+revision 72258
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
@@ -316867,10 +316897,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 1136480
-containerchecksum 18fa12ff5ecf143be8094d36d2014dc2fed2e15a433d7b8c1fdca6791a6356a02f6d451929c3ecabb4774661c1415fa1a229d38398a27a4f634f990beabfd716
+containersize 1136500
+containerchecksum 7238d17dede14eb4d64186914a1aa3a545f5e840d557c68c5bbb74084322fbced733581b2d141e36467631338773d1173180c50d472b2a48c7c9e87db61eaf26
doccontainersize 136384
-doccontainerchecksum ef4d3e57f2bfbbeb5158f801427a4ae6c7622fb9a412fca0a94e01144133c325660df0888108714a21c8eba92da4b82f918528a0b9d3f14211a05edbefd05989
+doccontainerchecksum f7940c5a02e7e3e30214e0a7ba77534322a24a1002f457e1ef09e4d140934191a35286a9203197d98b245c44999c2958efcfcbcf441524bfa89df16198accf3c
docfiles size=260
texmf-dist/doc/generic/tex4ht/Makefile
texmf-dist/doc/generic/tex4ht/README details="Readme"
@@ -316942,8 +316972,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 1501216
-srccontainerchecksum d58f231802f284cf337091fad90be3f1b70a6a464aebc0fa423cf4537b8bfb1d06e0910f9f8a026df349cfee73cd6302fce1555ff1713883332ac7bbf5e676c3
+srccontainersize 1498868
+srccontainerchecksum cfa20184505fa3422e47a6fbae8213d1f5761d7acda39a64220953b0809306b0da5c384592561fcccc67badc6ce19c68d3fb26e54f4a921873c1bbdea2b105fe
srcfiles size=4659
texmf-dist/source/generic/tex4ht/ChangeLog
texmf-dist/source/generic/tex4ht/Makefile
@@ -329381,7 +329411,7 @@ docfiles size=376
name texlive-scripts
category TLCore
-revision 72252
+revision 72259
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.
@@ -329389,10 +329419,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 114424
-containerchecksum 025e2cc0ec97a2695735993d9d7a868952ff3a5d821fdbe5223488c407ebf27d80559e06325163404868396d28e423bce55e47c0131e372ce53da86f669f45fc
+containersize 114468
+containerchecksum 5bf840bd5dea6077da3f03f0d993b4e2c46a876526e74bc72d105d711f822559fb9b581dd79dd8475c611560b0c7e62b4b8f0b0229448f9184bd0f679e967184
doccontainersize 436736
-doccontainerchecksum e3a7c576e211aba8ba90ad68c36e3291b9c08c78f98f175ba9b4ce841c54487d05159db4873c534a1d47982e978f07dcb1d175cc428aef95a464b17c7920ea06
+doccontainerchecksum b7e2ab38878ad7053fe53379859f4a1571ab0409b8e6ead0dbc05b5be19db9380da6c5ea9d340e1dafe14b87674286552de6ef8ea95437fc1bebc86486eca29a
docfiles size=566
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 17777ba0ff..03e380b84e 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
@@ -1 +1 @@
-d9dd67dc5629f97c9dfc646f5697a2ab texlive.tlpdb
+9cd8d27e4ff04138e6adf2698f501d23 texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
index 2fbd405a16..82070e329b 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
@@ -1 +1 @@
-f0bb3aff4777e7496e44d66575541ceaa59bdf6253d18e3ea346cb12dacedcabb9c997efd703dddd280383df2cde8a773889ba4f430a393a645263fcc62fab91 texlive.tlpdb
+9e8f0c8aaa1e1207b69388c0ac35fc9795a1f7e13236b623f2d2a6e5f4e10d96016e50dfe9b671175f7a5761d9c7c4ed0133417385e1999619384e964f9a1900 texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
index 743734df1c..c284119c40 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
@@ -1,11 +1,11 @@
-----BEGIN PGP SIGNATURE-----
-iQEzBAEBCgAdFiEE2PL4YFeoV+QqiBBqTOGHfhlDjHAFAmbg2pUACgkQTOGHfhlD
-jHAI3Af/f+2QiYCVnmy3N4Pkkxj2AjrPjlyP7NzVqBNvU4NNqkuYRBf+NcmGltJQ
-UyNnu7wEszgUv9fFoixxDZZWiEeqiT3uyxWvQ+IM+AncIaJQI5sriD6hz59ShZyx
-GwftHSUduAUG5FDPeXrmkGAfGI/6EuF3Sf8v3jGPuE2SFDBBcOX7fY8uRdieQdT8
-K+9XquByrmJTa/th3u6ME4qitijzGvUlQD7OQ1i+X/mMPPZRNkFfAw7/C81O+GWf
-WvxfqDPN8uNOXqFT1Y8xli/gSnEsl3x0d3NOkZ+0+Msop/MxyZIEjwcHI/L3+MQ/
-YULJgW4lkq4AzIxtWiiK9U+ueFWMDA==
-=kV/O
+iQEzBAEBCgAdFiEE2PL4YFeoV+QqiBBqTOGHfhlDjHAFAmbiLAEACgkQTOGHfhlD
+jHCU+ggAjDULOjsm/VNfVKYSLF6RJOHL8DXVL9bguLILS+hIHvZBY0Oh5ifQUZsJ
+QpoJxq9CO3n1FLZOAwNzAf/LXlLdWm92OnWMYVTOQJmysJ0R9GBQf47HRWDiZrV+
+ozXsRzkjKICWistthkI7OUM4wM2DUNN3tCedRZ9uANBNXxap/IOWNJzzj3GPGpSN
+U5N86gFxJn1tAtgTLlPJBGNakEfZpfHsnVnFdsiNXXYh1NdfP1FLdWAZ7uJbECqF
+23RuG18u4QifmrGAI+F/gKfMWkuYa9hWm9ymvAVg+Irsipy4vc144nmXMmjo6Vu8
+5L4OuUGbQfxayZd7lxD1v/dLdS7t0g==
+=NrVZ
-----END PGP SIGNATURE-----
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
index d908309f2e..5e9a06255a 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
Binary files differ
diff --git a/timestamp b/timestamp
index 19d5595703..2404fa2d0e 100644
--- a/timestamp
+++ b/timestamp
@@ -2,4 +2,4 @@
# The source CTAN of this site's material:
dante.ctan.org
# The year-month-day-hour-minute of this site's material:
-2024-09-11-02-02
+2024-09-12-02-02