summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FILES.byname161
-rw-r--r--FILES.byname.gzbin2657834 -> 2657864 bytes
-rw-r--r--FILES.last07days144
-rw-r--r--biblio/ctan-bibdata/ctan.bib23
-rw-r--r--graphics/pgf/contrib/liftarm/README.md12
-rw-r--r--graphics/pgf/contrib/liftarm/liftarm.pdfbin2004786 -> 2192283 bytes
-rw-r--r--graphics/pgf/contrib/liftarm/liftarm.sty1208
-rw-r--r--graphics/pgf/contrib/liftarm/liftarm.tex689
-rw-r--r--macros/latex/contrib/thuthesis/CHANGELOG.md14
-rw-r--r--macros/latex/contrib/thuthesis/thuthesis-author-year.bst24
-rw-r--r--macros/latex/contrib/thuthesis/thuthesis-bachelor.bst24
-rw-r--r--macros/latex/contrib/thuthesis/thuthesis-example.pdfbin408220 -> 407055 bytes
-rw-r--r--macros/latex/contrib/thuthesis/thuthesis-numeric.bst24
-rw-r--r--macros/latex/contrib/thuthesis/thuthesis.dtx25
-rw-r--r--macros/latex/contrib/thuthesis/thuthesis.pdfbin1188909 -> 1190791 bytes
-rw-r--r--support/TeX4ht/source/ChangeLog8
-rw-r--r--support/TeX4ht/source/tex4ht-4ht.tex20
-rw-r--r--systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl2
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb118
-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.xzbin2573720 -> 2573716 bytes
-rw-r--r--timestamp2
24 files changed, 1652 insertions, 866 deletions
diff --git a/FILES.byname b/FILES.byname
index 898330da8e..ce894a1a41 100644
--- a/FILES.byname
+++ b/FILES.byname
@@ -2078,12 +2078,12 @@
2024/04/21 | 1837 | biblio/citation-style-language/README.md
2024/04/21 | 12878 | biblio/citation-style-language/vancouver.csl
2024/04/21 | 4553350 | biblio/citation-style-language.zip
-2024/05/19 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
+2024/05/20 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
2022/10/08 | 127 | biblio/ctan-bibdata/biblatex-ctan/ctan.cbx
-2024/05/19 | 2867695 | biblio/ctan-bibdata/ctan.bib
-2024/05/19 | 3708800 | biblio/ctan-bibdata/ctan.pdf
+2024/05/20 | 2868610 | biblio/ctan-bibdata/ctan.bib
+2024/05/20 | 3708800 | biblio/ctan-bibdata/ctan.pdf
2023/01/16 | 1489 | biblio/ctan-bibdata/README
-2024/05/19 | 4121389 | biblio/ctan-bibdata.zip
+2024/05/20 | 4121555 | 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
@@ -5445,7 +5445,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/05/19 | 149853 | FILES.last07days
+2024/05/20 | 106649 | 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
@@ -172726,11 +172726,11 @@
2020/02/03 | 17373 | graphics/pgf/contrib/lie-hasse/lie-hasse.tex
2020/02/03 | 590 | graphics/pgf/contrib/lie-hasse/README
2020/02/03 | 586616 | graphics/pgf/contrib/lie-hasse.zip
-2022/04/07 | 2004786 | graphics/pgf/contrib/liftarm/liftarm.pdf
-2022/04/07 | 14005 | graphics/pgf/contrib/liftarm/liftarm.sty
-2022/04/07 | 22395 | graphics/pgf/contrib/liftarm/liftarm.tex
-2022/04/07 | 982 | graphics/pgf/contrib/liftarm/README.md
-2022/04/07 | 1881776 | graphics/pgf/contrib/liftarm.zip
+2024/05/20 | 2192283 | graphics/pgf/contrib/liftarm/liftarm.pdf
+2024/05/20 | 44094 | graphics/pgf/contrib/liftarm/liftarm.sty
+2024/05/20 | 29394 | graphics/pgf/contrib/liftarm/liftarm.tex
+2024/05/20 | 1175 | graphics/pgf/contrib/liftarm/README.md
+2024/05/20 | 2068884 | graphics/pgf/contrib/liftarm.zip
2014/06/15 | 336497 | graphics/pgf/contrib/logicpuzzle/logicpuzzle.dtx
2014/06/15 | 810773 | graphics/pgf/contrib/logicpuzzle/logicpuzzle.pdf
2014/06/15 | 1855 | graphics/pgf/contrib/logicpuzzle/qrcode.png
@@ -207315,7 +207315,7 @@
2022/12/11 | 267075 | install/macros/latex/contrib/thalie.tds.zip
2013/01/06 | 389729 | install/macros/latex/contrib/threadcol.tds.zip
2014/03/09 | 752162 | install/macros/latex/contrib/thumbs.tds.zip
-2024/03/29 | 1756345 | install/macros/latex/contrib/thuthesis.tds.zip
+2024/05/20 | 1758279 | install/macros/latex/contrib/thuthesis.tds.zip
2009/09/04 | 196291 | install/macros/latex/contrib/titling.tds.zip
2010/10/13 | 327240 | install/macros/latex/contrib/tocbibind.tds.zip
2014/03/10 | 311835 | install/macros/latex/contrib/tocvsec2.tds.zip
@@ -254007,42 +254007,42 @@
2010/01/15 | 10230 | macros/latex/contrib/thumby/thumby.sty
2010/01/15 | 162336 | macros/latex/contrib/thumby.zip
2005/06/21 | 207846 | macros/latex/contrib/thumb.zip
-2024/03/29 | 43497 | macros/latex/contrib/thuthesis/CHANGELOG.md
-2024/03/29 | 2280 | macros/latex/contrib/thuthesis/data/abstract.tex
-2024/03/29 | 548 | macros/latex/contrib/thuthesis/data/acknowledgements.tex
-2024/03/29 | 2008 | macros/latex/contrib/thuthesis/data/appendix-survey.tex
-2024/03/29 | 1922 | macros/latex/contrib/thuthesis/data/appendix.tex
-2024/03/29 | 2256 | macros/latex/contrib/thuthesis/data/appendix-translation.tex
-2024/03/29 | 4656 | macros/latex/contrib/thuthesis/data/chap01.tex
-2024/03/29 | 4960 | macros/latex/contrib/thuthesis/data/chap02.tex
-2024/03/29 | 3836 | macros/latex/contrib/thuthesis/data/chap03.tex
-2024/03/29 | 2980 | macros/latex/contrib/thuthesis/data/chap04.tex
-2024/03/29 | 279 | macros/latex/contrib/thuthesis/data/comments.tex
-2024/03/29 | 1664 | macros/latex/contrib/thuthesis/data/committee.tex
-2024/03/29 | 5438 | macros/latex/contrib/thuthesis/data/denotation.tex
-2024/03/29 | 462 | macros/latex/contrib/thuthesis/data/resolution.tex
-2024/03/29 | 1452 | macros/latex/contrib/thuthesis/data/resume.tex
-2024/03/29 | 7875 | macros/latex/contrib/thuthesis/README.md
-2024/03/29 | 10070 | macros/latex/contrib/thuthesis/ref/refs.bib
-2024/03/29 | 22049 | macros/latex/contrib/thuthesis/spine.pdf
-2024/03/29 | 5531 | macros/latex/contrib/thuthesis/thusetup.tex
-2024/03/29 | 1455 | macros/latex/contrib/thuthesis/thuthesis-author-year.bbx
-2024/03/29 | 50250 | macros/latex/contrib/thuthesis/thuthesis-author-year.bst
-2024/03/29 | 132 | macros/latex/contrib/thuthesis/thuthesis-author-year.cbx
-2024/03/29 | 778 | macros/latex/contrib/thuthesis/thuthesis-bachelor.bbx
-2024/03/29 | 46436 | macros/latex/contrib/thuthesis/thuthesis-bachelor.bst
-2024/03/29 | 366 | macros/latex/contrib/thuthesis/thuthesis-bachelor.cbx
-2024/03/29 | 215724 | macros/latex/contrib/thuthesis/thuthesis.dtx
-2024/03/29 | 408220 | macros/latex/contrib/thuthesis/thuthesis-example.pdf
-2024/03/29 | 2646 | macros/latex/contrib/thuthesis/thuthesis-example.tex
-2024/03/29 | 863 | macros/latex/contrib/thuthesis/thuthesis-inline.cbx
-2024/03/29 | 1387 | macros/latex/contrib/thuthesis/thuthesis.ins
-2024/03/29 | 1798 | macros/latex/contrib/thuthesis/thuthesis-numeric.bbx
-2024/03/29 | 46439 | macros/latex/contrib/thuthesis/thuthesis-numeric.bst
-2024/03/29 | 365 | macros/latex/contrib/thuthesis/thuthesis-numeric.cbx
-2024/03/29 | 1188909 | macros/latex/contrib/thuthesis/thuthesis.pdf
-2024/03/29 | 14186 | macros/latex/contrib/thuthesis/tsinghua-name-bachelor.pdf
-2024/03/29 | 1728334 | macros/latex/contrib/thuthesis.zip
+2024/05/20 | 43957 | macros/latex/contrib/thuthesis/CHANGELOG.md
+2024/05/20 | 2280 | macros/latex/contrib/thuthesis/data/abstract.tex
+2024/05/20 | 548 | macros/latex/contrib/thuthesis/data/acknowledgements.tex
+2024/05/20 | 2008 | macros/latex/contrib/thuthesis/data/appendix-survey.tex
+2024/05/20 | 1922 | macros/latex/contrib/thuthesis/data/appendix.tex
+2024/05/20 | 2256 | macros/latex/contrib/thuthesis/data/appendix-translation.tex
+2024/05/20 | 4656 | macros/latex/contrib/thuthesis/data/chap01.tex
+2024/05/20 | 4960 | macros/latex/contrib/thuthesis/data/chap02.tex
+2024/05/20 | 3836 | macros/latex/contrib/thuthesis/data/chap03.tex
+2024/05/20 | 2980 | macros/latex/contrib/thuthesis/data/chap04.tex
+2024/05/20 | 279 | macros/latex/contrib/thuthesis/data/comments.tex
+2024/05/20 | 1664 | macros/latex/contrib/thuthesis/data/committee.tex
+2024/05/20 | 5438 | macros/latex/contrib/thuthesis/data/denotation.tex
+2024/05/20 | 462 | macros/latex/contrib/thuthesis/data/resolution.tex
+2024/05/20 | 1452 | macros/latex/contrib/thuthesis/data/resume.tex
+2024/05/20 | 7875 | macros/latex/contrib/thuthesis/README.md
+2024/05/20 | 10070 | macros/latex/contrib/thuthesis/ref/refs.bib
+2024/05/20 | 22049 | macros/latex/contrib/thuthesis/spine.pdf
+2024/05/20 | 5531 | macros/latex/contrib/thuthesis/thusetup.tex
+2024/05/20 | 1455 | macros/latex/contrib/thuthesis/thuthesis-author-year.bbx
+2024/05/20 | 50314 | macros/latex/contrib/thuthesis/thuthesis-author-year.bst
+2024/05/20 | 132 | macros/latex/contrib/thuthesis/thuthesis-author-year.cbx
+2024/05/20 | 778 | macros/latex/contrib/thuthesis/thuthesis-bachelor.bbx
+2024/05/20 | 46500 | macros/latex/contrib/thuthesis/thuthesis-bachelor.bst
+2024/05/20 | 366 | macros/latex/contrib/thuthesis/thuthesis-bachelor.cbx
+2024/05/20 | 216056 | macros/latex/contrib/thuthesis/thuthesis.dtx
+2024/05/20 | 407055 | macros/latex/contrib/thuthesis/thuthesis-example.pdf
+2024/05/20 | 2646 | macros/latex/contrib/thuthesis/thuthesis-example.tex
+2024/05/20 | 863 | macros/latex/contrib/thuthesis/thuthesis-inline.cbx
+2024/05/20 | 1387 | macros/latex/contrib/thuthesis/thuthesis.ins
+2024/05/20 | 1798 | macros/latex/contrib/thuthesis/thuthesis-numeric.bbx
+2024/05/20 | 46503 | macros/latex/contrib/thuthesis/thuthesis-numeric.bst
+2024/05/20 | 365 | macros/latex/contrib/thuthesis/thuthesis-numeric.cbx
+2024/05/20 | 1190791 | macros/latex/contrib/thuthesis/thuthesis.pdf
+2024/05/20 | 14186 | macros/latex/contrib/thuthesis/tsinghua-name-bachelor.pdf
+2024/05/20 | 1730184 | macros/latex/contrib/thuthesis.zip
2016/10/11 | 347 | macros/latex/contrib/ticket/comment
2016/09/07 | 42607 | macros/latex/contrib/ticket/doc/ex_file.pdf
2016/09/07 | 1294 | macros/latex/contrib/ticket/doc/ex_file.tex
@@ -302009,7 +302009,7 @@
2021/05/03 | 1121 | support/TeX4ht/source/README
2021/05/03 | 1744 | support/TeX4ht/source/t1fontmake.lua
2021/05/03 | 297 | support/TeX4ht/source/t1fontsample.tex
-2024/05/13 | 1190444 | support/TeX4ht/source/tex4ht-4ht.tex
+2024/05/19 | 1190438 | support/TeX4ht/source/tex4ht-4ht.tex
2021/05/03 | 7127 | support/TeX4ht/source/tex4ht-auto-script.tex
2021/05/16 | 1539 | support/TeX4ht/source/tex4ht-bibtex2.tex
2023/10/16 | 21307 | support/TeX4ht/source/tex4ht-cond4ht.tex
@@ -308191,7 +308191,7 @@
2024/05/15 | 7180 | systems/texlive/tlnet/archive/collection-latexextra.r71253.tar.xz
2023/12/14 | 704 | systems/texlive/tlnet/archive/collection-latex.r69131.tar.xz
2024/02/14 | 740 | systems/texlive/tlnet/archive/collection-latexrecommended.r69841.tar.xz
-2024/03/26 | 1040 | systems/texlive/tlnet/archive/collection-luatex.r70765.tar.xz
+2024/05/20 | 1044 | systems/texlive/tlnet/archive/collection-luatex.r71305.tar.xz
2024/05/15 | 1756 | systems/texlive/tlnet/archive/collection-mathscience.r71255.tar.xz
2023/05/12 | 564 | systems/texlive/tlnet/archive/collection-metapost.r67071.tar.xz
2024/01/28 | 508 | systems/texlive/tlnet/archive/collection-music.r69613.tar.xz
@@ -308738,8 +308738,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/04/05 | 1599440 | systems/texlive/tlnet/archive/customenvs.doc.r70859.tar.xz
-2024/04/05 | 9000 | systems/texlive/tlnet/archive/customenvs.r70859.tar.xz
+2024/05/20 | 1647448 | systems/texlive/tlnet/archive/customenvs.doc.r71303.tar.xz
+2024/05/20 | 10976 | systems/texlive/tlnet/archive/customenvs.r71303.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
@@ -313317,9 +313317,9 @@
2024/03/01 | 1869764 | systems/texlive/tlnet/archive/luatex.i386-linux.r70276.tar.xz
2024/03/01 | 1459712 | systems/texlive/tlnet/archive/luatex.i386-netbsd.r70286.tar.xz
2024/03/01 | 1681692 | systems/texlive/tlnet/archive/luatex.i386-solaris.r70276.tar.xz
-2024/05/06 | 3241916 | systems/texlive/tlnet/archive/luatexja.doc.r71181.tar.xz
-2024/05/06 | 193580 | systems/texlive/tlnet/archive/luatexja.r71181.tar.xz
-2024/05/06 | 83900 | systems/texlive/tlnet/archive/luatexja.source.r71181.tar.xz
+2024/05/20 | 3241212 | systems/texlive/tlnet/archive/luatexja.doc.r71306.tar.xz
+2024/05/20 | 193152 | systems/texlive/tlnet/archive/luatexja.r71306.tar.xz
+2024/05/20 | 83904 | systems/texlive/tlnet/archive/luatexja.source.r71306.tar.xz
2023/09/12 | 350680 | systems/texlive/tlnet/archive/luatexko.doc.r68243.tar.xz
2023/09/12 | 23676 | systems/texlive/tlnet/archive/luatexko.r68243.tar.xz
2024/03/31 | 13620 | systems/texlive/tlnet/archive/luatex.r70814.tar.xz
@@ -315731,8 +315731,8 @@
2024/05/12 | 72500 | systems/texlive/tlnet/archive/proflycee.r71235.tar.xz
2024/05/04 | 385104 | systems/texlive/tlnet/archive/profmaquette.doc.r71161.tar.xz
2024/05/04 | 25092 | systems/texlive/tlnet/archive/profmaquette.r71161.tar.xz
-2024/05/13 | 505836 | systems/texlive/tlnet/archive/profsio.doc.r71240.tar.xz
-2024/05/13 | 18276 | systems/texlive/tlnet/archive/profsio.r71240.tar.xz
+2024/05/20 | 578468 | systems/texlive/tlnet/archive/profsio.doc.r71302.tar.xz
+2024/05/20 | 20564 | systems/texlive/tlnet/archive/profsio.r71302.tar.xz
2019/02/28 | 49880 | systems/texlive/tlnet/archive/program.doc.r44214.tar.xz
2019/02/28 | 11780 | systems/texlive/tlnet/archive/program.r44214.tar.xz
2019/02/28 | 86236 | systems/texlive/tlnet/archive/progressbar.doc.r33822.tar.xz
@@ -316851,6 +316851,9 @@
2019/02/28 | 266760 | systems/texlive/tlnet/archive/semaphor.doc.r18651.tar.xz
2019/02/28 | 244948 | systems/texlive/tlnet/archive/semaphor.r18651.tar.xz
2020/11/03 | 76732 | systems/texlive/tlnet/archive/semesterplanner.doc.r56841.tar.xz
+2024/05/20 | 139612 | systems/texlive/tlnet/archive/semesterplannerlua.doc.r71305.tar.xz
+2024/05/20 | 8352 | systems/texlive/tlnet/archive/semesterplannerlua.r71305.tar.xz
+2024/05/20 | 10504 | systems/texlive/tlnet/archive/semesterplannerlua.source.r71305.tar.xz
2020/11/03 | 1900 | systems/texlive/tlnet/archive/semesterplanner.r56841.tar.xz
2020/11/03 | 2944 | systems/texlive/tlnet/archive/semesterplanner.source.r56841.tar.xz
2021/07/02 | 348624 | systems/texlive/tlnet/archive/seminar.doc.r59801.tar.xz
@@ -317135,8 +317138,8 @@
2022/10/28 | 1669756 | systems/texlive/tlnet/archive/spath3.doc.r64818.tar.xz
2022/10/28 | 25528 | systems/texlive/tlnet/archive/spath3.r64818.tar.xz
2022/10/28 | 37180 | systems/texlive/tlnet/archive/spath3.source.r64818.tar.xz
-2024/05/15 | 95744 | systems/texlive/tlnet/archive/spbmark.doc.r71256.tar.xz
-2024/05/15 | 3924 | systems/texlive/tlnet/archive/spbmark.r71256.tar.xz
+2024/05/20 | 95824 | systems/texlive/tlnet/archive/spbmark.doc.r71304.tar.xz
+2024/05/20 | 4120 | systems/texlive/tlnet/archive/spbmark.r71304.tar.xz
2022/09/28 | 80968 | systems/texlive/tlnet/archive/spectral.doc.r64528.tar.xz
2022/09/28 | 3545188 | systems/texlive/tlnet/archive/spectral.r64528.tar.xz
2023/01/30 | 2103268 | systems/texlive/tlnet/archive/spectralsequences.doc.r65667.tar.xz
@@ -317691,13 +317694,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/05/15 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r71257.tar.xz
+2024/05/20 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r71301.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/05/15 | 1131816 | systems/texlive/tlnet/archive/tex4ht.r71257.tar.xz
-2024/05/15 | 1495764 | systems/texlive/tlnet/archive/tex4ht.source.r71257.tar.xz
+2024/05/20 | 1132052 | systems/texlive/tlnet/archive/tex4ht.r71301.tar.xz
+2024/05/20 | 1491072 | systems/texlive/tlnet/archive/tex4ht.source.r71301.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
@@ -317975,7 +317978,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/05/19 | 435608 | systems/texlive/tlnet/archive/texlive-scripts.doc.r71298.tar.xz
+2024/05/20 | 435568 | systems/texlive/tlnet/archive/texlive-scripts.doc.r71307.tar.xz
2020/01/27 | 916 | systems/texlive/tlnet/archive/texlive-scripts-extra.aarch64-linux.r53577.tar.xz
2020/01/27 | 924 | systems/texlive/tlnet/archive/texlive-scripts-extra.amd64-freebsd.r53577.tar.xz
2020/01/27 | 916 | systems/texlive/tlnet/archive/texlive-scripts-extra.amd64-netbsd.r53577.tar.xz
@@ -317997,7 +318000,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/05/19 | 114364 | systems/texlive/tlnet/archive/texlive-scripts.r71298.tar.xz
+2024/05/20 | 114340 | systems/texlive/tlnet/archive/texlive-scripts.r71307.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
@@ -319942,16 +319945,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/05/02 | 125808 | systems/texlive/tlnet/install-tl
-2024/05/19 | 5752503 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2024/05/19 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2024/05/19 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2024/05/20 | 5750851 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2024/05/20 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2024/05/20 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2024/04/13 | 5743 | systems/texlive/tlnet/install-tl-windows.bat
-2024/05/19 | 27719536 | systems/texlive/tlnet/install-tl-windows.exe
-2024/05/19 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2024/05/19 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2024/05/19 | 34426589 | systems/texlive/tlnet/install-tl.zip
-2024/05/19 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2024/05/19 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2024/05/20 | 27718896 | systems/texlive/tlnet/install-tl-windows.exe
+2024/05/20 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2024/05/20 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2024/05/20 | 34426566 | systems/texlive/tlnet/install-tl.zip
+2024/05/20 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2024/05/20 | 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
@@ -319961,7 +319964,7 @@
2024/01/02 | 1280 | systems/texlive/tlnet/tlpkg/gpg/trustdb.gpg
2024/01/16 | 50726 | systems/texlive/tlnet/tlpkg/installer/config.guess
2010/11/11 | 11651 | systems/texlive/tlnet/tlpkg/installer/COPYING.MinGW-runtime.txt
-2024/05/19 | 7218 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+2024/05/20 | 7031 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2024/03/15 | 229654 | 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
@@ -320003,12 +320006,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/05/19 | 19482168 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
-2024/05/19 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2024/05/20 | 19484738 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2024/05/20 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
2024/05/02 | 87729 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm
-2024/05/19 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
-2024/05/19 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2024/05/19 | 2575172 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2024/05/20 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2024/05/20 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2024/05/20 | 2573720 | 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
@@ -331530,7 +331533,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/05/20 | 186 | timestamp
+2024/05/21 | 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 ee6594d792..80d643831e 100644
--- a/FILES.byname.gz
+++ b/FILES.byname.gz
Binary files differ
diff --git a/FILES.last07days b/FILES.last07days
index 1090568960..59d5e3a99b 100644
--- a/FILES.last07days
+++ b/FILES.last07days
@@ -1,3 +1,82 @@
+2024/05/20 | 95824 | systems/texlive/tlnet/archive/spbmark.doc.r71304.tar.xz
+2024/05/20 | 863 | macros/latex/contrib/thuthesis/thuthesis-inline.cbx
+2024/05/20 | 83904 | systems/texlive/tlnet/archive/luatexja.source.r71306.tar.xz
+2024/05/20 | 8352 | systems/texlive/tlnet/archive/semesterplannerlua.r71305.tar.xz
+2024/05/20 | 7875 | macros/latex/contrib/thuthesis/README.md
+2024/05/20 | 778 | macros/latex/contrib/thuthesis/thuthesis-bachelor.bbx
+2024/05/20 | 7031 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+2024/05/20 | 578468 | systems/texlive/tlnet/archive/profsio.doc.r71302.tar.xz
+2024/05/20 | 5750851 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2024/05/20 | 5531 | macros/latex/contrib/thuthesis/thusetup.tex
+2024/05/20 | 548 | macros/latex/contrib/thuthesis/data/acknowledgements.tex
+2024/05/20 | 5438 | macros/latex/contrib/thuthesis/data/denotation.tex
+2024/05/20 | 50314 | macros/latex/contrib/thuthesis/thuthesis-author-year.bst
+2024/05/20 | 4960 | macros/latex/contrib/thuthesis/data/chap02.tex
+2024/05/20 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2024/05/20 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2024/05/20 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2024/05/20 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2024/05/20 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2024/05/20 | 4656 | macros/latex/contrib/thuthesis/data/chap01.tex
+2024/05/20 | 46503 | macros/latex/contrib/thuthesis/thuthesis-numeric.bst
+2024/05/20 | 46500 | macros/latex/contrib/thuthesis/thuthesis-bachelor.bst
+2024/05/20 | 462 | macros/latex/contrib/thuthesis/data/resolution.tex
+2024/05/20 | 44094 | graphics/pgf/contrib/liftarm/liftarm.sty
+2024/05/20 | 43957 | macros/latex/contrib/thuthesis/CHANGELOG.md
+2024/05/20 | 435568 | systems/texlive/tlnet/archive/texlive-scripts.doc.r71307.tar.xz
+2024/05/20 | 4121555 | biblio/ctan-bibdata.zip
+2024/05/20 | 4120 | systems/texlive/tlnet/archive/spbmark.r71304.tar.xz
+2024/05/20 | 407055 | macros/latex/contrib/thuthesis/thuthesis-example.pdf
+2024/05/20 | 3836 | macros/latex/contrib/thuthesis/data/chap03.tex
+2024/05/20 | 3708800 | biblio/ctan-bibdata/ctan.pdf
+2024/05/20 | 366 | macros/latex/contrib/thuthesis/thuthesis-bachelor.cbx
+2024/05/20 | 365 | macros/latex/contrib/thuthesis/thuthesis-numeric.cbx
+2024/05/20 | 34426566 | systems/texlive/tlnet/install-tl.zip
+2024/05/20 | 3241212 | systems/texlive/tlnet/archive/luatexja.doc.r71306.tar.xz
+2024/05/20 | 2980 | macros/latex/contrib/thuthesis/data/chap04.tex
+2024/05/20 | 29394 | graphics/pgf/contrib/liftarm/liftarm.tex
+2024/05/20 | 2868610 | biblio/ctan-bibdata/ctan.bib
+2024/05/20 | 279 | macros/latex/contrib/thuthesis/data/comments.tex
+2024/05/20 | 27718896 | systems/texlive/tlnet/install-tl-windows.exe
+2024/05/20 | 2646 | macros/latex/contrib/thuthesis/thuthesis-example.tex
+2024/05/20 | 2573720 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2024/05/20 | 2280 | macros/latex/contrib/thuthesis/data/abstract.tex
+2024/05/20 | 2256 | macros/latex/contrib/thuthesis/data/appendix-translation.tex
+2024/05/20 | 22049 | macros/latex/contrib/thuthesis/spine.pdf
+2024/05/20 | 2192283 | graphics/pgf/contrib/liftarm/liftarm.pdf
+2024/05/20 | 216056 | macros/latex/contrib/thuthesis/thuthesis.dtx
+2024/05/20 | 2068884 | graphics/pgf/contrib/liftarm.zip
+2024/05/20 | 20564 | systems/texlive/tlnet/archive/profsio.r71302.tar.xz
+2024/05/20 | 2008 | macros/latex/contrib/thuthesis/data/appendix-survey.tex
+2024/05/20 | 19484738 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2024/05/20 | 193152 | systems/texlive/tlnet/archive/luatexja.r71306.tar.xz
+2024/05/20 | 1922 | macros/latex/contrib/thuthesis/data/appendix.tex
+2024/05/20 | 1798 | macros/latex/contrib/thuthesis/thuthesis-numeric.bbx
+2024/05/20 | 1758279 | install/macros/latex/contrib/thuthesis.tds.zip
+2024/05/20 | 1730184 | macros/latex/contrib/thuthesis.zip
+2024/05/20 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
+2024/05/20 | 1664 | macros/latex/contrib/thuthesis/data/committee.tex
+2024/05/20 | 1647448 | systems/texlive/tlnet/archive/customenvs.doc.r71303.tar.xz
+2024/05/20 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2024/05/20 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2024/05/20 | 1491072 | systems/texlive/tlnet/archive/tex4ht.source.r71301.tar.xz
+2024/05/20 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2024/05/20 | 1455 | macros/latex/contrib/thuthesis/thuthesis-author-year.bbx
+2024/05/20 | 1452 | macros/latex/contrib/thuthesis/data/resume.tex
+2024/05/20 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2024/05/20 | 14186 | macros/latex/contrib/thuthesis/tsinghua-name-bachelor.pdf
+2024/05/20 | 139612 | systems/texlive/tlnet/archive/semesterplannerlua.doc.r71305.tar.xz
+2024/05/20 | 1387 | macros/latex/contrib/thuthesis/thuthesis.ins
+2024/05/20 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r71301.tar.xz
+2024/05/20 | 132 | macros/latex/contrib/thuthesis/thuthesis-author-year.cbx
+2024/05/20 | 1190791 | macros/latex/contrib/thuthesis/thuthesis.pdf
+2024/05/20 | 1175 | graphics/pgf/contrib/liftarm/README.md
+2024/05/20 | 114340 | systems/texlive/tlnet/archive/texlive-scripts.r71307.tar.xz
+2024/05/20 | 1132052 | systems/texlive/tlnet/archive/tex4ht.r71301.tar.xz
+2024/05/20 | 10976 | systems/texlive/tlnet/archive/customenvs.r71303.tar.xz
+2024/05/20 | 10504 | systems/texlive/tlnet/archive/semesterplannerlua.source.r71305.tar.xz
+2024/05/20 | 1044 | systems/texlive/tlnet/archive/collection-luatex.r71305.tar.xz
+2024/05/20 | 10070 | macros/latex/contrib/thuthesis/ref/refs.bib
2024/05/19 | 99319 | macros/latex/contrib/spbmark.zip
2024/05/19 | 979592 | systems/texlive/tlnet/archive/wintools.windows.doc.r71293.tar.xz
2024/05/19 | 926160 | systems/texlive/tlnet/archive/beebe.r71298.tar.xz
@@ -8,51 +87,31 @@
2024/05/19 | 832 | macros/latex/contrib/catppuccinpalette/README.md
2024/05/19 | 7662 | macros/luatex/latex/semesterplannerlua/semesterplannerlua_timetable.lua
2024/05/19 | 7288916 | systems/texlive/tlnet/archive/pst-mirror.doc.r71294.tar.xz
-2024/05/19 | 7218 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2024/05/19 | 660551 | graphics/pgf/contrib/profsio.zip
2024/05/19 | 633 | graphics/pgf/contrib/profsio/doc/ProfSio-doc-annexe72.tex
2024/05/19 | 613 | graphics/pgf/contrib/profsio/doc/ProfSio-doc-annexe73.tex
2024/05/19 | 5919 | macros/luatex/latex/semesterplannerlua/semesterplannerlua_dmenu.lua
-2024/05/19 | 5752503 | systems/texlive/tlnet/install-tl-unx.tar.gz
2024/05/19 | 570243 | graphics/pgf/contrib/profsio/doc/ProfSio-doc-fr.pdf
2024/05/19 | 5662004 | systems/texlive/tlnet/archive/wintools.windows.r71293.tar.xz
2024/05/19 | 530 | graphics/pgf/contrib/profsio/doc/ProfSio-doc-annexe71.tex
2024/05/19 | 5065 | macros/luatex/latex/semesterplannerlua/semesterplannerlua_calendar.lua
-2024/05/19 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
-2024/05/19 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2024/05/19 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc
-2024/05/19 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2024/05/19 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
-2024/05/19 | 435608 | systems/texlive/tlnet/archive/texlive-scripts.doc.r71298.tar.xz
-2024/05/19 | 4121389 | biblio/ctan-bibdata.zip
2024/05/19 | 39405 | macros/luatex/latex/semesterplannerlua/semesterplannerlua.dtx
-2024/05/19 | 3708800 | biblio/ctan-bibdata/ctan.pdf
-2024/05/19 | 34426589 | systems/texlive/tlnet/install-tl.zip
-2024/05/19 | 2867695 | biblio/ctan-bibdata/ctan.bib
-2024/05/19 | 27719536 | systems/texlive/tlnet/install-tl-windows.exe
-2024/05/19 | 2575172 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
2024/05/19 | 2532 | macros/luatex/latex/semesterplannerlua/semesterplannerlua.ins
2024/05/19 | 2410 | macros/latex/contrib/catppuccinpalette/catppuccinpalette.ins
2024/05/19 | 231316 | systems/texlive/tlnet/archive/babel.r71296.tar.xz
2024/05/19 | 210724 | macros/latex/contrib/catppuccinpalette/catppuccinpalette.pdf
2024/05/19 | 208840 | macros/latex/contrib/catppuccinpalette.zip
-2024/05/19 | 19482168 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
2024/05/19 | 19377 | macros/latex/contrib/spbmark/spbmark.tex
2024/05/19 | 18476 | macros/latex/contrib/spbmark/spbmark.sty
-2024/05/19 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
2024/05/19 | 161514 | graphics/pgf/contrib/profsio/tex/ProfSio.sty
2024/05/19 | 156576 | macros/luatex/latex/semesterplannerlua.zip
-2024/05/19 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2024/05/19 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
2024/05/19 | 15086100 | systems/texlive/tlnet/archive/profcollege.doc.r71295.tar.xz
-2024/05/19 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2024/05/19 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
2024/05/19 | 144336 | macros/luatex/latex/semesterplannerlua/semesterplannerlua.pdf
2024/05/19 | 14250 | macros/latex/contrib/catppuccinpalette/catppuccinpalette.dtx
2024/05/19 | 1383 | macros/luatex/latex/semesterplannerlua/README.md
2024/05/19 | 1345996 | systems/texlive/tlnet/archive/profcollege.r71295.tar.xz
2024/05/19 | 12212 | systems/texlive/tlnet/archive/pst-mirror.r71294.tar.xz
-2024/05/19 | 114364 | systems/texlive/tlnet/archive/texlive-scripts.r71298.tar.xz
+2024/05/19 | 1190438 | support/TeX4ht/source/tex4ht-4ht.tex
2024/05/19 | 1052892 | systems/texlive/tlnet/archive/babel.doc.r71296.tar.xz
2024/05/18 | 9752 | systems/texlive/tlnet/archive/se2thesis.r71285.tar.xz
2024/05/18 | 9601362 | systems/win32/miktex/tm/packages/profcollege__doc.tar.lzma
@@ -429,7 +488,6 @@
2024/05/16 | 103014 | macros/latex/contrib/easybook/easybook.tex
2024/05/16 | 10136 | indexing/xindex/lualatex/xindex-lapp.lua
2024/05/15 | 95752 | macros/latex/contrib/rpgicons/rpgicons-pgf.sty
-2024/05/15 | 95744 | systems/texlive/tlnet/archive/spbmark.doc.r71256.tar.xz
2024/05/15 | 88052 | macros/latex/contrib/rpgicons/rpgicons-l3.sty
2024/05/15 | 748 | systems/texlive/tlnet/archive/latex2e-help-texinfo.r71252.tar.xz
2024/05/15 | 7180 | systems/texlive/tlnet/archive/collection-latexextra.r71253.tar.xz
@@ -437,17 +495,13 @@
2024/05/15 | 500755 | macros/latex/contrib/rpgicons/rpgicons-doc.pdf
2024/05/15 | 497219 | macros/latex/contrib/rpgicons.zip
2024/05/15 | 45746 | macros/latex/contrib/rpgicons/rpgicons-doc.tex
-2024/05/15 | 3924 | systems/texlive/tlnet/archive/spbmark.r71256.tar.xz
2024/05/15 | 3576 | systems/texlive/tlnet/archive/colorblind.r71253.tar.xz
2024/05/15 | 273576 | systems/texlive/tlnet/archive/rigidnotation.doc.r71264.tar.xz
2024/05/15 | 2181440 | systems/texlive/tlnet/archive/latex2e-help-texinfo.doc.r71252.tar.xz
2024/05/15 | 2140 | systems/texlive/tlnet/archive/rigidnotation.r71264.tar.xz
2024/05/15 | 1942 | macros/latex/contrib/rpgicons/README.md
2024/05/15 | 1756 | systems/texlive/tlnet/archive/collection-mathscience.r71255.tar.xz
-2024/05/15 | 1495764 | systems/texlive/tlnet/archive/tex4ht.source.r71257.tar.xz
2024/05/15 | 1465 | macros/latex/contrib/rpgicons/rpgicons.sty
-2024/05/15 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r71257.tar.xz
-2024/05/15 | 1131816 | systems/texlive/tlnet/archive/tex4ht.r71257.tar.xz
2024/05/15 | 108048 | systems/texlive/tlnet/archive/colorblind.doc.r71253.tar.xz
2024/05/14 | 9951 | macros/latex/contrib/profcollege/latex/PfCTriominos.tex
2024/05/14 | 9902 | macros/latex/contrib/profcollege/latex/PfCDecDeci.tex
@@ -1031,8 +1085,6 @@
2024/05/14 | 17795 | macros/latex/contrib/profcollege/latex/PfCRondeInfernale.tex
2024/05/14 | 1767 | macros/latex/contrib/profcollege/latex/PfCScratch.tex
2024/05/14 | 1740 | macros/luatex/generic/luatexja/tool/test_exist_nodelib.tex
-2024/05/14 | 173300 | macros/latex/contrib/skillicons/skill-icons/skillicons_Laravel-Dark.eps
-2024/05/14 | 171861 | macros/latex/contrib/skillicons/skill-icons/skillicons_Redux.eps
2024/05/14 | 16728 | macros/latex/contrib/skillicons/skill-icons/skillicons_VSCodium-Light-eps-converted-to.pdf
2024/05/14 | 166557 | macros/luatex/generic/luatexja/doc/lltjp-geometry.pdf
2024/05/14 | 16653 | macros/latex/contrib/skillicons/skill-icons/skillicons_VSCodium-Dark-eps-converted-to.pdf
@@ -1112,39 +1164,3 @@
2024/05/14 | 10145 | macros/latex/contrib/skillicons/skill-icons/skillicons_ReactiveX-Dark-eps-converted-to.pdf
2024/05/14 | 10143 | macros/latex/contrib/skillicons/skill-icons/skillicons_ReactiveX-Light-eps-converted-to.pdf
2024/05/14 | 1000 | macros/latex/contrib/profcollege/latex/PfCJeton.tex
-2024/05/13 | 933483 | info/latex2e-help-texinfo/latex2e.info
-2024/05/13 | 875684 | systems/texlive/tlnet/archive/piton.doc.r71244.tar.xz
-2024/05/13 | 873681 | info/latex2e-help-texinfo/latex2e.txt
-2024/05/13 | 8636 | systems/texlive/tlnet/archive/tkz-grapheur.r71241.tar.xz
-2024/05/13 | 76412 | systems/texlive/tlnet/archive/latexindent.r71245.tar.xz
-2024/05/13 | 7561 | info/latex2e-help-texinfo/Makefile
-2024/05/13 | 671464 | systems/texlive/tlnet/archive/tkz-grapheur.doc.r71241.tar.xz
-2024/05/13 | 629959 | support/TeX4ht/source/tex4ht-html4.tex
-2024/05/13 | 5865118 | info/latex2e-help-texinfo.zip
-2024/05/13 | 57212 | systems/texlive/tlnet/archive/piton.source.r71244.tar.xz
-2024/05/13 | 5256 | systems/texlive/tlnet/archive/mathgreeks.r71248.tar.xz
-2024/05/13 | 505836 | systems/texlive/tlnet/archive/profsio.doc.r71240.tar.xz
-2024/05/13 | 4740 | systems/texlive/tlnet/archive/ximera.source.r71243.tar.xz
-2024/05/13 | 3853220 | systems/texlive/tlnet/archive/latexindent.windows.r71245.tar.xz
-2024/05/13 | 344204 | systems/texlive/tlnet/archive/ximera.doc.r71243.tar.xz
-2024/05/13 | 29492 | macros/latex/contrib/tblr-extras/tblr-extras-doc-EN.pdf
-2024/05/13 | 2824 | systems/texlive/tlnet/archive/synthslant.r71249.tar.xz
-2024/05/13 | 276947 | macros/latex/contrib/rigidnotation.zip
-2024/05/13 | 273188 | systems/texlive/tlnet/archive/lete-sans-math.r71247.tar.xz
-2024/05/13 | 253630 | support/TeX4ht/source/ChangeLog
-2024/05/13 | 2056 | systems/texlive/tlnet/archive/collection-fontsextra.r71246.tar.xz
-2024/05/13 | 2050140 | systems/texlive/tlnet/archive/lete-sans-math.doc.r71247.tar.xz
-2024/05/13 | 2009981 | info/latex2e-help-texinfo/latex2e.html
-2024/05/13 | 19920 | systems/texlive/tlnet/archive/piton.r71244.tar.xz
-2024/05/13 | 18276 | systems/texlive/tlnet/archive/profsio.r71240.tar.xz
-2024/05/13 | 1706612 | systems/texlive/tlnet/archive/mathgreeks.doc.r71248.tar.xz
-2024/05/13 | 1680 | systems/texlive/tlnet/archive/collection-pictures.r71241.tar.xz
-2024/05/13 | 157428 | systems/texlive/tlnet/archive/synthslant.source.r71249.tar.xz
-2024/05/13 | 1472619 | info/latex2e-help-texinfo/latex2e.xml
-2024/05/13 | 14604 | systems/texlive/tlnet/archive/ximera.r71243.tar.xz
-2024/05/13 | 1386279 | info/latex2e-help-texinfo/latex2e.pdf
-2024/05/13 | 1373928 | systems/texlive/tlnet/archive/latexindent.doc.r71245.tar.xz
-2024/05/13 | 12132 | systems/texlive/tlnet/archive/mathgreeks.source.r71248.tar.xz
-2024/05/13 | 1190444 | support/TeX4ht/source/tex4ht-4ht.tex
-2024/05/13 | 1107633 | info/latex2e-help-texinfo/latex2e.dbk
-2024/05/13 | 1103696 | systems/texlive/tlnet/archive/synthslant.doc.r71249.tar.xz
diff --git a/biblio/ctan-bibdata/ctan.bib b/biblio/ctan-bibdata/ctan.bib
index 5861361177..761c57aece 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 20-05-2024, 02:00:03
+%% created at 21-05-2024, 02:00:03
%%
%% This file is provided under the terms of the LPPL v1.3 or
@@ -40149,13 +40149,20 @@
@manual{ctan-liftarm,
title = {The \texttt{liftarm} package},
- subtitle = {Draw liftarms},
+ subtitle = {Geometric constructions with liftarms using TikZ and \LaTeX{}3},
author = {Matthias Floré},
- date = {2022-04-07},
- version = {2.0},
- license = {lppl1.3},
+ date = {2024-05-20},
+ version = {3.0},
+ license = {lppl1.3c},
mirror = {https://mirror.ctan.org/graphics/pgf/contrib/liftarm},
url = {https://ctan.org/pkg/liftarm},
+ annotation = {This package is based on the package
+ and can be used to draw geometric constructions with liftarms.
+ There are several options for the appearance of the liftarms.
+ It provides an environment to connect multiple liftarms using
+ the Newton-Raphson method and LU decomposition.
+ It also provides an environment to describe a construction and
+ a method to animate a construction with one or more traces.},
}
@manual{ctan-ligatex,
@@ -62683,7 +62690,7 @@
title = {The \texttt{semesterplannerLua} package},
subtitle = {Draw timetables and other organizational matters useful for planning a semester},
author = {Lukas Heindl},
- date = {2024-05-19},
+ date = {2024-05-20},
version = {1.1.1},
license = {lppl1.3},
mirror = {https://mirror.ctan.org/macros/luatex/latex/semesterplannerlua},
@@ -70743,8 +70750,8 @@
title = {The \texttt{thuthesis} package},
subtitle = {Thesis template for Tsinghua University},
author = {Ruini Xue and {Tsinghua University TUNA Association}},
- date = {2024-03-29},
- version = {7.5.0},
+ date = {2024-05-20},
+ version = {7.5.1},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/latex/contrib/thuthesis},
url = {https://ctan.org/pkg/thuthesis},
diff --git a/graphics/pgf/contrib/liftarm/README.md b/graphics/pgf/contrib/liftarm/README.md
index 2759458717..af687942b7 100644
--- a/graphics/pgf/contrib/liftarm/README.md
+++ b/graphics/pgf/contrib/liftarm/README.md
@@ -1,20 +1,20 @@
-# liftarm
+# `liftarm`
-Draw liftarms with TikZ
+## Geometric constructions with liftarms using Ti*k*Z and LaTeX3
-Version 2.0 (2022/04/07)
+Version 3.0 (2024/05/20)
-This package is based on the package TikZ and can be used to draw liftarms with TikZ. It provides several options for the appearance of the liftarms, a command which connects two liftarms, an environment to describe a construction and a method to animate a construction with one or more traces.
+This package is based on the package [Ti*k*Z](https://ctan.org/pkg/pgf) and can be used to draw geometric constructions with liftarms using Ti*k*Z. There are several options for the appearance of the liftarms. It provides an environment to connect multiple liftarms using the Newton-Raphson method and LU decomposition. It also provides an environment to describe a construction and a method to animate a construction with one or more traces.
%% README.md
%% Copyright 2022 Matthias Floré
%
% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3
+% conditions of the LaTeX Project Public License, either version 1.3c
% of this license or (at your option) any later version.
% The latest version of this license is in
% http://www.latex-project.org/lppl.txt
-% and version 1.3 or later is part of all distributions of LaTeX
+% and version 1.3c or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
%
% This work has the LPPL maintenance status `maintained'.
diff --git a/graphics/pgf/contrib/liftarm/liftarm.pdf b/graphics/pgf/contrib/liftarm/liftarm.pdf
index d428d1f7af..eddb6d4f1d 100644
--- a/graphics/pgf/contrib/liftarm/liftarm.pdf
+++ b/graphics/pgf/contrib/liftarm/liftarm.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/liftarm/liftarm.sty b/graphics/pgf/contrib/liftarm/liftarm.sty
index b850c8f16a..63d6b51f44 100644
--- a/graphics/pgf/contrib/liftarm/liftarm.sty
+++ b/graphics/pgf/contrib/liftarm/liftarm.sty
@@ -1,12 +1,12 @@
%% liftarm.sty
-%% Copyright 2022 Matthias Floré
+%% Copyright 2022-2024 Matthias Floré
%
% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3
+% conditions of the LaTeX Project Public License, either version 1.3c
% of this license or (at your option) any later version.
% The latest version of this license is in
% http://www.latex-project.org/lppl.txt
-% and version 1.3 or later is part of all distributions of LaTeX
+% and version 1.3c or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
%
% This work has the LPPL maintenance status `maintained'.
@@ -16,321 +16,897 @@
% This work consists of the files liftarm.pdf, liftarm.sty,
% liftarm.tex and README.md.
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{liftarm}[2022/04/07 v2.0 Draw liftarms with TikZ]
-\RequirePackage{etoolbox}
\RequirePackage[dvipsnames]{xcolor}
\RequirePackage{tikz}
\usetikzlibrary{calc}
-\newif\ifliftarm@animate
-\newif\ifliftarm@brick
-\newif\ifliftarm@connectreverse
-\newif\ifliftarm@contour
-\pgfkeys{
-/liftarm/.is family,
-/liftarm/.unknown/.code={\edef\liftarm@colorkey{\pgfkeyscurrentname}},
-/liftarm,
-axle holes/.store in=\liftarm@axleholes,
-brick/.is if=liftarm@brick,
-color/.store in=\liftarm@colorkey,
-color 0/.initial=Gray,
-color 1/.initial=darkgray,
-color 2/.initial=Yellow,
-color 3/.initial=Orange,
-color 4/.initial=Red,
-color 5/.initial=Green,
-color 6/.initial=Blue,
-color 7/.initial=Brown,
-color modulo/.initial=8,
-connect/.store in=\liftarm@connect,
-connect coordinate/.store in=\liftarm@connectcoordinate,
-connect reverse/.is if=liftarm@connectreverse,
-contour/.is if=liftarm@contour,
-coordinate/.store in=\liftarm@coordinate,
-globalize/.code n args={2}{\xdef#1{#2}},
-hole radius/.initial=0.3,
-liftarm 1/.style={liftarm 1 options/.style={#1}},
-liftarm 1 options/.style={},
-liftarm 2/.style={liftarm 2 options/.style={#1}},
-liftarm 2 options/.style={},
-liftarm thickness/.initial=0.92,
-mark color/.initial=Black,
-mark holes/.store in=\liftarm@markholes,
-origin/.initial=0,
-scalefactor/.initial=0.5,
-screw color/.initial=Black,
-screw holes/.store in=\liftarm@screwholes,
-screw holes angle/.initial=45,
-trace/.store in=\liftarm@trace,
-}
-\pgfmathsetmacro{\liftarm@axleholeangle}{14}%2*\liftarm@axleholeradius*sin(\liftarm@axleholeangle)=1.78/8
-\pgfmathsetmacro{\liftarm@screwholestartangle}{10}
-\newcommand{\liftarm}[4][]{
-\pgfmathsetmacro{\liftarm@length}{#3}
-\ifdim \liftarm@length pt<0 pt
-\PackageWarning{liftarm}{The length (\liftarm@length) of the liftarm is smaller than 0.}
-\else
-\pgfmathsetmacro{\liftarm@ang}{#4}
-\begin{scope}[shift={(#2)},rotate=\liftarm@ang]
-\pgfkeys{/liftarm,#1}
-\pgfmathsetmacro{\liftarm@origin}{\pgfkeysvalueof{/liftarm/origin}}
-\begin{scope}[shift={(-\liftarm@origin,0)}]
-\pgfmathsetmacro{\liftarm@halfthickness}{0.5*\pgfkeysvalueof{/liftarm/scalefactor}*\pgfkeysvalueof{/liftarm/liftarm thickness}}
-\pgfmathsetmacro{\liftarm@holeradius}{\pgfkeysvalueof{/liftarm/scalefactor}*\pgfkeysvalueof{/liftarm/hole radius}}
-\pgfmathsetmacro{\liftarm@halfstudwidth}{\pgfkeysvalueof{/liftarm/scalefactor}*0.3}
-\pgfmathsetmacro{\liftarm@studheight}{\pgfkeysvalueof{/liftarm/scalefactor}*0.2}
-\pgfmathsetmacro{\liftarm@halfplateheight}{\pgfkeysvalueof{/liftarm/scalefactor}*0.2}
-\pgfmathsetmacro{\liftarm@halfplatewidth}{\pgfkeysvalueof{/liftarm/scalefactor}*0.5}
-\pgfmathsetmacro{\liftarm@axleholeradius}{\liftarm@halfthickness}
-\pgfmathsetmacro{\liftarm@screwholeradius}{0.8*\liftarm@holeradius}
-\colorlet{liftarm@markcolor}{\pgfkeysvalueof{/liftarm/mark color}}
-\colorlet{liftarm@screwcolor}{\pgfkeysvalueof{/liftarm/screw color}}
-\pgfmathsetmacro{\liftarm@screwholesangle}{\pgfkeysvalueof{/liftarm/screw holes angle}}
-\ifcsname liftarm@colorkey\endcsname
-\colorlet{liftarm@color}{\liftarm@colorkey}
-\else
-\pgfmathsetmacro{\liftarm@colornumber}{int(mod(\liftarm@length,\pgfkeysvalueof{/liftarm/color modulo}))}
-\colorlet{liftarm@color}{\pgfkeysvalueof{/liftarm/color \liftarm@colornumber}}
-\fi
-\ifliftarm@brick
-\def\liftarm@shape{(-1,{-\liftarm@halfplatewidth-\liftarm@halfplateheight})--(-1,\liftarm@halfplatewidth)
-\foreach\liftarm@n in {-1,...,\liftarm@length}{
---({\liftarm@n+0.5-\liftarm@halfstudwidth},\liftarm@halfplatewidth)--({\liftarm@n+0.5-\liftarm@halfstudwidth},{\liftarm@halfplatewidth+\liftarm@studheight})--({\liftarm@n+0.5+\liftarm@halfstudwidth},{\liftarm@halfplatewidth+\liftarm@studheight})--({\liftarm@n+0.5+\liftarm@halfstudwidth},\liftarm@halfplatewidth)--({\liftarm@n+1},\liftarm@halfplatewidth)
-}
---({\liftarm@length+1},{-\liftarm@halfplatewidth-\liftarm@halfplateheight})--cycle}
-\else
-\def\liftarm@shape{(0,\liftarm@halfthickness) arc (90:270:\liftarm@halfthickness)--(\liftarm@length,-\liftarm@halfthickness) arc (-90:90:\liftarm@halfthickness)--cycle}
-\fi
-\fill[liftarm@color,even odd rule] \liftarm@shape
-\foreach\liftarm@n in {0,...,\liftarm@length}{
-(\liftarm@n,0) circle[radius=\liftarm@holeradius]
-};
-\ifliftarm@contour
-%\ifliftarm@brick
-%\else
-\draw[liftarm@color!75!Black,ultra thick] \liftarm@shape;
-%\fi
-\fi
-\ifcsname liftarm@axleholes\endcsname
-\foreach\liftarm@n in \liftarm@axleholes{
-\pgfmathsetmacro{\liftarm@axlehole}{\liftarm@n}
-\ifdim \liftarm@axlehole pt<0 pt
-\else
-\ifdim \liftarm@axlehole pt>\liftarm@length pt
-\else
-\foreach\liftarm@angle in {0,90,180,270}{
-\begin{scope}[shift={(\liftarm@axlehole,0)},rotate=\liftarm@angle]
-\fill[liftarm@color] (\liftarm@axleholeangle:\liftarm@axleholeradius) arc (\liftarm@axleholeangle:{90-\liftarm@axleholeangle}:\liftarm@axleholeradius)--({\liftarm@axleholeradius*sin(\liftarm@axleholeangle)},{\liftarm@axleholeradius*sin(\liftarm@axleholeangle)})--cycle;
-\end{scope}
-}
-\fi
-\fi
-}
-\fi
-\ifcsname liftarm@markholes\endcsname
-\foreach\liftarm@n in \liftarm@markholes{
-\pgfmathsetmacro{\liftarm@markhole}{\liftarm@n}
-\ifdim \liftarm@markhole pt<0 pt
-\else
-\ifdim \liftarm@markhole pt>\liftarm@length pt
-\else
-\fill[liftarm@markcolor] (\liftarm@markhole,0) circle[radius=\liftarm@holeradius];
-\fi
-\fi
-}
-\fi
-\ifcsname liftarm@screwholes\endcsname
-\foreach\liftarm@n in \liftarm@screwholes{
-\pgfmathsetmacro{\liftarm@screwhole}{\liftarm@n}
-\ifdim \liftarm@screwhole pt<0 pt
-\else
-\ifdim \liftarm@screwhole pt>\liftarm@length pt
-\else
-\begin{scope}[shift={(\liftarm@screwhole,0)},rotate=\liftarm@screwholesangle]
-\foreach\liftarm@n in {-1,1}{
-\fill[liftarm@screwcolor] ({\liftarm@screwholeradius*cos(\liftarm@screwholestartangle)},{\liftarm@n*\liftarm@screwholeradius*sin(\liftarm@screwholestartangle)}) arc ({\liftarm@n*\liftarm@screwholestartangle}:{\liftarm@n*(180-\liftarm@screwholestartangle)}:\liftarm@screwholeradius);
-}
-\end{scope}
-\fi
-\fi
-}
-\fi
-\ifcsname liftarm@coordinate\endcsname
-\foreach\liftarm@n/\liftarm@name in \liftarm@coordinate{
-\pgfmathsetmacro{\liftarm@value}{\liftarm@n}
-\coordinate (\liftarm@name) at (\liftarm@value,0);
-}
-\fi
-\ifcsname liftarm@trace\endcsname
-\ifliftarm@animate
-\foreach\liftarm@n/\liftarm@numberofframes/\liftarm@tracefigure in \liftarm@trace{
-\pgfmathsetmacro{\liftarm@value}{\liftarm@n}
-\gappto\liftarm@animateframestrace{\newframe\begin{scope}}
-\addtocounter{liftarm@animateframenumber}{1}
-\xappto\liftarm@animateframestrace{[shift={(#2)},rotate=\liftarm@ang]}
-\gappto\liftarm@animateframestrace{\begin{scope}}
-\xappto\liftarm@animateframestrace{[shift={(\liftarm@value-\liftarm@origin,0)}]}
-\ifdefempty{\liftarm@tracefigure}{
-\gappto\liftarm@animateframestrace{\fill[Black] (0,0) circle}
-\xappto\liftarm@animateframestrace{[radius=0.66*\liftarm@holeradius];}
-}
-{
-\xappto\liftarm@animateframestrace{\expandonce\liftarm@tracefigure}
-}
-\gappto\liftarm@animateframestrace{\end{scope}\end{scope}}
-\ifdefempty{\liftarm@numberofframes}{
-\csxappto{liftarm@animatetimeline0}{\theliftarm@animateframenumber x0,}
-}
-{
-\csxappto{liftarm@animatetimeline\theliftarm@animatestepnumber}{\theliftarm@animateframenumber x\liftarm@numberofframes,}
-}
-}
-\fi
-\fi
-\end{scope}
-\end{scope}
-\fi
-}
-\newcommand{\liftarmconnect}[5][]{
-\begin{scope}
-\pgfkeys{/liftarm,#1}
-\coordinate (liftarm@A) at (#2);
-\coordinate (liftarm@B) at (#4);
-\begin{scope}
-\pgfkeys{/liftarm,liftarm 1 options}
-\ifcsname liftarm@connect\endcsname
-\pgfmathsetmacro{\liftarm@connectlengthAtemp}{\liftarm@connect-\pgfkeysvalueof{/liftarm/origin}}
-\else
-\pgfmathsetmacro{\liftarm@connectlengthAtemp}{#3-\pgfkeysvalueof{/liftarm/origin}}
-\fi
-\xdef\liftarm@connectlengthA{\liftarm@connectlengthAtemp}
-\ifdim \liftarm@connectlengthA pt=0 pt
-\PackageWarning{liftarm}{The length of the first liftarm is 0.}
-\fi
-\end{scope}
-\begin{scope}
-\pgfkeys{/liftarm,liftarm 2 options}
-\ifcsname liftarm@connect\endcsname
-\pgfmathsetmacro{\liftarm@connectlengthBtemp}{\liftarm@connect-\pgfkeysvalueof{/liftarm/origin}}
-\else
-\pgfmathsetmacro{\liftarm@connectlengthBtemp}{#5-\pgfkeysvalueof{/liftarm/origin}}
-\fi
-\xdef\liftarm@connectlengthB{\liftarm@connectlengthBtemp}
-\ifdim \liftarm@connectlengthB pt=0 pt
-\PackageWarning{liftarm}{The length of the second liftarm is 0.}
-\fi
-\end{scope}
-\path
-let
-\p1=(liftarm@A),
-\p2=(liftarm@B),
-\n1={\x1/\pgf@xx},
-\n2={\y1/\pgf@yy},
-\n3={\x2/\pgf@xx},
-\n4={\y2/\pgf@yy}
-in
-[
-/liftarm/globalize={\liftarm@connectxalet}{\n3},
-/liftarm/globalize={\liftarm@connectyalet}{\n4},
-/liftarm/globalize={\liftarm@connectxblet}{\n1},
-/liftarm/globalize={\liftarm@connectyblet}{\n2}
-]
-;
-\pgfmathsetmacro{\liftarm@connectxa}{\liftarm@connectxalet}
-\pgfmathsetmacro{\liftarm@connectya}{\liftarm@connectyalet}
-\pgfmathsetmacro{\liftarm@connectxb}{\liftarm@connectxblet}
-\pgfmathsetmacro{\liftarm@connectyb}{\liftarm@connectyblet}
-\pgfmathsetmacro{\liftarm@absdiff}{abs(\liftarm@connectxa-\liftarm@connectxb)}
-\ifdim \liftarm@absdiff pt<0.001 pt
-\pgfmathsetmacro{\liftarm@connectanglegamma}{90}
-\ifdim \liftarm@connectya pt<\liftarm@connectyb pt
-\pgfmathsetmacro{\liftarm@connectangleshift}{0}
-\else
-\pgfmathsetmacro{\liftarm@connectangleshift}{180}
-\fi
-\else
-\pgfmathsetmacro{\liftarm@connectanglegamma}{atan((\liftarm@connectyb-\liftarm@connectya)/(\liftarm@connectxb-\liftarm@connectxa))}
-\ifdim \liftarm@connectxa pt<\liftarm@connectxb pt
-\pgfmathsetmacro{\liftarm@connectangleshift}{0}
-\else
-\pgfmathsetmacro{\liftarm@connectangleshift}{180}
-\fi
-\fi
-\pgfmathsetmacro{\liftarm@connectlength}{sqrt((\liftarm@connectyb-\liftarm@connectya)^2+(\liftarm@connectxb-\liftarm@connectxa)^2)}
-\ifdim \liftarm@connectlength pt=0 pt
-\PackageWarning{liftarm}{The length between the origins of the liftarms is 0.}
-\fi
-\pgfmathsetmacro{\liftarm@connectabsconnectlengthAminusconnectlengthB}{abs(\liftarm@connectlengthA-\liftarm@connectlengthB)}
-\ifdim \liftarm@connectabsconnectlengthAminusconnectlengthB pt>\liftarm@connectlength pt
-\PackageWarning{liftarm}{The liftarms can not be connected.}
-\fi
-\pgfmathsetmacro{\liftarm@connectconnectlengthAplusconnectlengthB}{\liftarm@connectlengthA+\liftarm@connectlengthB}
-\ifdim \liftarm@connectconnectlengthAplusconnectlengthB pt<\liftarm@connectlength pt
-\PackageWarning{liftarm}{The liftarms can not be connected.}
-\fi
-\pgfmathsetmacro{\liftarm@connectanglealpha}{acos(((\liftarm@connectlengthB)^2+(\liftarm@connectlength)^2-(\liftarm@connectlengthA)^2)/(2*(\liftarm@connectlength)*(\liftarm@connectlengthB)))}
-\pgfmathsetmacro{\liftarm@connectanglebeta}{acos(((\liftarm@connectlength)^2+(\liftarm@connectlengthA)^2-(\liftarm@connectlengthB)^2)/(2*\liftarm@connectlength*(\liftarm@connectlengthA)))}
-\pgfmathsetmacro{\liftarm@connectangledelta}{\liftarm@connectangleshift+180+\liftarm@connectanglegamma-\liftarm@connectanglebeta}
-\def\liftarm@liftarmA{\liftarm[liftarm 1 options]{#2}{#3}{\liftarm@connectangledelta}}
-\def\liftarm@liftarmB{\liftarm[liftarm 2 options]{#4}{#5}{\liftarm@connectangleshift+\liftarm@connectanglegamma+\liftarm@connectanglealpha}}
-\ifliftarm@connectreverse
-\liftarm@liftarmB
-\liftarm@liftarmA
-\else
-\liftarm@liftarmA
-\liftarm@liftarmB
-\fi
-\ifcsname liftarm@connectcoordinate\endcsname
-\coordinate (\liftarm@connectcoordinate) at ($(#2)+(\liftarm@connectangledelta:\liftarm@connectlengthA)$);
-\fi
-\end{scope}
-}
-\newcommand{\liftarm@construction}[2][]{\begin{tikzpicture}[#1]
-\liftarm@constructfigure
-#2
-\end{tikzpicture}}
-\newcommand{\liftarmconstruct}[3][]{\item #2\nopagebreak
+\ProvidesExplPackage{liftarm}{2024/05/20}{3.0}{Geometric constructions with liftarms using TikZ and LaTeX3}
+
+%%> \subsection{Variables}
+
+\newcounter { g__liftarm_animate_frame_number_counter }
+\newcounter { g__liftarm_animate_number_of_animation_counter }
+\newcounter { g__liftarm_animate_number_of_steps_counter }
+\newcounter { g__liftarm_animate_step_number_counter }
+
+\bool_new:N \l__liftarm_animate_bool
+\bool_new:N \l__liftarm_brick_bool
+\bool_new:N \l__liftarm_contour_bool
+\bool_new:N \l__liftarm_LU_bool
+
+\clist_new:N \l__liftarm_trace_clist
+
+\fp_new:N \l__liftarm_angle_fp
+\fp_const:Nn \c__liftarm_axle_hole_angle_fp { 21.76702028497987 }%asind ( 1.78 / ( 16 * 0.3 ) )
+\fp_new:N \l__liftarm_connect_det_fp
+\fp_new:N \l__liftarm_connect_norm_fp
+\fp_new:N \l__liftarm_connect_start_constant_x_fp
+\fp_new:N \l__liftarm_connect_start_constant_y_fp
+\fp_new:N \l__liftarm_connect_stop_value_fp
+\fp_new:c { l__liftarm_connect_two_1_option_0_angle_fp }
+\fp_new:c { l__liftarm_connect_two_1_option_1_angle_fp }
+\fp_new:c { l__liftarm_connect_two_2_option_0_angle_fp }
+\fp_new:c { l__liftarm_connect_two_2_option_1_angle_fp }
+\fp_new:N \l__liftarm_connect_two_angle_fp
+\fp_new:N \l__liftarm_connect_two_A_angle_fp
+\fp_new:N \l__liftarm_connect_two_A_length_fp
+\fp_new:N \l__liftarm_connect_two_A_x_fp
+\fp_new:N \l__liftarm_connect_two_A_y_fp
+\fp_new:N \l__liftarm_connect_two_B_angle_fp
+\fp_new:N \l__liftarm_connect_two_B_length_fp
+\fp_new:N \l__liftarm_connect_two_B_x_fp
+\fp_new:N \l__liftarm_connect_two_B_y_fp
+\fp_new:N \l__liftarm_connect_two_length_fp
+\fp_new:N \g__liftarm_coord_x_fp
+\fp_new:N \g__liftarm_coord_y_fp
+\fp_new:N \l__liftarm_half_thickness_fp
+\fp_new:N \l__liftarm_hole_radius_fp
+\fp_new:N \l__liftarm_length_fp
+\fp_new:N \l__liftarm_LU_maxA_fp
+\fp_new:N \l__liftarm_LU_tmp_fp
+\fp_new:N \l__liftarm_mark_radius_fp
+\fp_new:N \l__liftarm_origin_fp
+\fp_new:N \l__liftarm_origin_connect_initial_fp
+\fp_new:N \l__liftarm_scalefactor_fp
+\fp_new:N \l__liftarm_screw_angle_fp
+\fp_new:N \l__liftarm_screw_radius_fp
+
+\int_new:N \l__liftarm_connect_count_int
+\int_new:N \l__liftarm_connect_equation_int
+\int_new:N \l__liftarm_LU_count_int
+\int_new:N \l__liftarm_LU_imax_int
+\int_new:N \l__liftarm_LU_j_int
+\int_new:N \l__liftarm_LU_N_int
+
+\iow_new:N \g__liftarm_animate_write_timeline_iow
+
+\seq_new:N \l__liftarm_connect_coordinate_seq
+\seq_new:N \l__liftarm_connect_start_arg_seq
+\seq_new:N \l__liftarm_connect_start_coeff_seq
+\seq_new:N \l__liftarm_coordinate_seq
+\seq_new:N \l__liftarm_trace_item_seq
+
+\str_new:N \l__liftarm_connect_stop_type_str
+\str_new:N \l__liftarm_type_str
+
+\tl_new:N \g__liftarm_animate_frames_tl
+\tl_new:N \g__liftarm_animate_frames_trace_tl
+\tl_new:N \l__liftarm_animate_value_tl
+\tl_new:N \l__liftarm_color_tl
+\tl_new:N \g__liftarm_construct_tl
+\tl_const:Nn \c__liftarm_cos_sin_diff_x_tl { - sin }
+\tl_const:Nn \c__liftarm_cos_sin_diff_y_tl { cos }
+\tl_const:Nn \c__liftarm_cos_sin_x_tl { cos }
+\tl_const:Nn \c__liftarm_cos_sin_y_tl { sin }
+\tl_new:N \l__liftarm_holes_tl
+\tl_new:N \l__liftarm_shape_tl
+\tl_new:N \l__liftarm_tmp_tl
+
+%%> \subsection{Pgfkeys}
+
+\pgfkeys
+ {
+ / liftarm /. is~family ,
+ / liftarm ,
+ axle~holes /. initial = {} ,
+ brick /. code = { \bool_set:Nn \l__liftarm_brick_bool { \cs:w c_#1_bool\cs_end: } } ,
+ brick /. default = true ,
+ brick = false ,
+ color /. code~2~args =
+ {
+ \tl_clear_new:c { l__liftarm_color_\int_eval:n {#1}_tl }
+ \tl_set:cn { l__liftarm_color_\int_eval:n {#1}_tl } {#2}
+ } ,
+ color = { 0 } { Gray } ,
+ color = { 1 } { darkgray } ,
+ color = { 2 } { Yellow } ,
+ color = { 3 } { Orange } ,
+ color = { 4 } { Red } ,
+ color = { 5 } { Green } ,
+ color = { 6 } { Blue } ,
+ color = { 7 } { Brown } ,
+ color~modulo /. initial = 8 ,
+ connect~stop /. is~choice ,
+ connect~stop / 1-norm /. code =
+ {
+ \str_set:Nn \l__liftarm_connect_stop_type_str { 1-norm }
+ \fp_set:Nn \l__liftarm_connect_stop_value_fp {#1}
+ } ,
+ connect~stop / 1-norm /. default = 0.001 ,
+ connect~stop / 2-norm /. code =
+ {
+ \str_set:Nn \l__liftarm_connect_stop_type_str { 2-norm }
+ \fp_set:Nn \l__liftarm_connect_stop_value_fp {#1}
+ } ,
+ connect~stop / 2-norm /. default = 0.001 ,
+ connect~stop / iterations /. code =
+ {
+ \str_set:Nn \l__liftarm_connect_stop_type_str { iterations }
+ \fp_set:Nn \l__liftarm_connect_stop_value_fp {#1}
+ } ,
+ connect~stop / iterations /. default = 10 ,
+ connect~stop = 1-norm ,
+ contour /. code = { \bool_set:Nn \l__liftarm_contour_bool { \cs:w c_#1_bool\cs_end: } } ,
+ contour /. default = true ,
+ contour = false ,
+ contour~style /. style = { contour_style /. style = {#1} } ,
+ contour_style /. style = {} ,
+ coordinate /. initial = {} ,
+ hole~radius /. initial = 0.3 ,
+ liftarm~style /. style = { liftarm_style /. style = {#1} } ,
+ liftarm_style /. style = {} ,
+ liftarm~thickness /. initial = 0.92 ,
+ mark~holes /. initial = {} ,
+ mark~radius /. code =
+ {
+ \pgfmathparse {#1}
+ \fp_set:Nn \l__liftarm_mark_radius_fp { \pgfmathresult }
+ } ,
+ mark~radius = 1 ,
+ mark~style /. style = { mark_style /. style = {#1} } ,
+ mark_style /. style = {} ,
+ origin /. code =
+ {
+ \pgfmathparse {#1}
+ \fp_set:Nn \l__liftarm_origin_fp { \pgfmathresult }
+ } ,
+ origin = 0 ,
+ scalefactor /. code =
+ {
+ \pgfmathparse {#1}
+ \fp_set:Nn \l__liftarm_scalefactor_fp { \pgfmathresult }
+ } ,
+ scalefactor = 0.5 ,
+ screw~angle /. code =
+ {
+ \pgfmathparse {#1}
+ \fp_set:Nn \l__liftarm_screw_angle_fp { \pgfmathresult }
+ } ,
+ screw~angle = 10 ,
+ screw~holes /. initial = {} ,
+ screw~radius /. code =
+ {
+ \pgfmathparse {#1}
+ \fp_set:Nn \l__liftarm_screw_radius_fp { \pgfmathresult }
+ } ,
+ screw~radius = 0.8 ,
+ screw~style /. style = { screw_style /. style = {#1} } ,
+ screw_style /. style = {} ,
+ trace /. code = { \clist_set:Nn \l__liftarm_trace_clist {#1} } ,
+ type /. is~choice ,
+ type / liftarm /. code = { \str_set:Nn \l__liftarm_type_str { liftarm } } ,
+ type / liftarm /. value~forbidden ,
+ type / line~segment /. code = { \str_set:Nn \l__liftarm_type_str { line~segment } } ,
+ type / line~segment /. value~forbidden ,
+ type = liftarm ,
+ }
+
+\pgfkeys
+ {
+ / liftarm / connect_algorithm /. is~family ,
+ / liftarm / connect_algorithm /. unknown /. code = {} ,
+ / liftarm / connect_algorithm ,
+ coordinate /. initial = {} ,
+ origin /. code =
+ {
+ \pgfmathparse {#1}
+ \fp_set:Nn \l__liftarm_origin_fp { \pgfmathresult }
+ } ,
+ }
+
+%%> \subsection{Functions}
+
+\cs_generate_variant:Nn \clist_if_in:nnTF { enTF }
+\cs_generate_variant:Nn \clist_map_inline:nn { en }
+\cs_generate_variant:Nn \seq_map_indexed_inline:Nn { cn }
+\cs_generate_variant:Nn \tl_build_begin:N { c }
+\cs_generate_variant:Nn \tl_build_gbegin:N { c }
+\cs_generate_variant:Nn \tl_build_end:N { c }
+\cs_generate_variant:Nn \tl_build_gend:N { c }
+\cs_generate_variant:Nn \tl_build_put_right:Nn { ce , cn }
+\cs_generate_variant:Nn \tl_build_gput_right:Nn { ce , cn }
+
+\cs_new_protected:Npn \__liftarm_connect:nnnn #1#2#3#4
+ {
+ \int_incr:N \l__liftarm_connect_count_int
+ \fp_zero_new:c { l__liftarm_connect_angle_\int_use:N \l__liftarm_connect_count_int _fp }
+ \pgfmathparse {#4}
+ \fp_set:cn { l__liftarm_connect_angle_\int_use:N \l__liftarm_connect_count_int _fp } { \pgfmathresult * deg }
+ \fp_set_eq:NN \l__liftarm_origin_fp \l__liftarm_origin_connect_initial_fp
+ \pgfkeys
+ {
+ / liftarm / connect_algorithm ,
+ coordinate = \pgfkeysvalueof { / liftarm / coordinate } ,
+ #1
+ }
+ \seq_if_in:NnTF \l__liftarm_connect_coordinate_seq {#2}
+ {
+ \fp_set_eq:Nc \l__liftarm_connect_start_constant_x_fp { l__liftarm_connect_constant_x_coord_#2_fp }
+ \fp_set_eq:Nc \l__liftarm_connect_start_constant_y_fp { l__liftarm_connect_constant_y_coord_#2_fp }
+ \seq_set_eq:Nc \l__liftarm_connect_start_arg_seq { l__liftarm_connect_arg_coord_#2_seq }
+ \seq_set_eq:Nc \l__liftarm_connect_start_coeff_seq { l__liftarm_connect_coeff_coord_#2_seq }
+ }
+ {
+ \__liftarm_def_coord:n {#2}
+ \fp_set_eq:NN \l__liftarm_connect_start_constant_x_fp \g__liftarm_coord_x_fp
+ \fp_set_eq:NN \l__liftarm_connect_start_constant_y_fp \g__liftarm_coord_y_fp
+ \seq_clear:N \l__liftarm_connect_start_arg_seq
+ \seq_clear:N \l__liftarm_connect_start_coeff_seq
+ }
+ \clist_map_inline:en { \pgfkeysvalueof { / liftarm / connect_algorithm / coordinate } }
+ {
+ \seq_set_split:Nnn \l__liftarm_coordinate_seq { / } {##1}
+ \pgfmathparse { \seq_item:Nn \l__liftarm_coordinate_seq { 1 } }
+ \fp_set:Nn \l__liftarm_length_fp { \pgfmathresult - \l__liftarm_origin_fp }
+ \seq_if_in:NeTF \l__liftarm_connect_coordinate_seq { \seq_item:Nn \l__liftarm_coordinate_seq { 2 } }
+ {
+ \clist_map_inline:nn { x , y }
+ {
+ \int_incr:N \l__liftarm_connect_equation_int
+ \tl_clear_new:c { l__liftarm_connect_F_\int_use:N \l__liftarm_connect_equation_int _tl }
+ \tl_build_begin:c { l__liftarm_connect_F_\int_use:N \l__liftarm_connect_equation_int _tl }
+ \int_step_inline:nn { \l__liftarm_LU_N_int }
+ {
+ \tl_clear_new:c { l__liftarm_connect_Jacobian_\int_use:N \l__liftarm_connect_equation_int _########1_tl }
+ \tl_build_begin:c { l__liftarm_connect_Jacobian_\int_use:N \l__liftarm_connect_equation_int _########1_tl }
+ \tl_build_put_right:cn { l__liftarm_connect_Jacobian_\int_use:N \l__liftarm_connect_equation_int _########1_tl }
+ { 0 }
+ \fp_zero_new:c { l__liftarm_LU_A_\int_use:N \l__liftarm_connect_equation_int _########1_fp }
+ }
+ \tl_build_put_right:ce { l__liftarm_connect_F_\int_use:N \l__liftarm_connect_equation_int _tl }
+ {
+ \fp_use:c { l__liftarm_connect_constant_####1_coord_\seq_item:Nn \l__liftarm_coordinate_seq { 2 }_fp }
+ - \fp_use:c { l__liftarm_connect_start_constant_####1_fp }
+ - \fp_use:N \l__liftarm_length_fp * \cs:w c__liftarm_cos_sin_####1_tl\cs_end:
+ ( \exp_not:N \cs:w l__liftarm_connect_angle_\int_use:N \l__liftarm_connect_count_int _fp \exp_not:N \cs_end: )
+ }
+ \tl_build_put_right:ce
+ {
+ l__liftarm_connect_Jacobian_\int_use:N \l__liftarm_connect_equation_int _
+ \int_use:N \l__liftarm_connect_count_int _tl
+ }
+ {
+ - \fp_use:N \l__liftarm_length_fp * \cs:w c__liftarm_cos_sin_diff_####1_tl\cs_end:
+ ( \exp_not:N \cs:w l__liftarm_connect_angle_\int_use:N \l__liftarm_connect_count_int _fp \exp_not:N \cs_end: )
+ }
+ \seq_map_indexed_inline:cn { l__liftarm_connect_arg_coord_\seq_item:Nn \l__liftarm_coordinate_seq { 2 }_seq }
+ {
+ \tl_build_put_right:ce { l__liftarm_connect_F_\int_use:N \l__liftarm_connect_equation_int _tl }
+ {
+ + \seq_item:cn { l__liftarm_connect_coeff_coord_\seq_item:Nn \l__liftarm_coordinate_seq { 2 }_seq } {########1}
+ * \cs:w c__liftarm_cos_sin_####1_tl\cs_end:
+ ( \exp_not:N \cs:w l__liftarm_connect_angle_########2_fp \exp_not:N \cs_end: )
+ }
+ \tl_build_put_right:ce { l__liftarm_connect_Jacobian_\int_use:N \l__liftarm_connect_equation_int _########2_tl }
+ {
+ + \seq_item:cn { l__liftarm_connect_coeff_coord_\seq_item:Nn \l__liftarm_coordinate_seq { 2 }_seq } {########1}
+ * \cs:w c__liftarm_cos_sin_diff_####1_tl\cs_end:
+ ( \exp_not:N \cs:w l__liftarm_connect_angle_########2_fp \exp_not:N \cs_end: )
+ }
+ }
+ \seq_map_indexed_inline:Nn \l__liftarm_connect_start_arg_seq
+ {
+ \tl_build_put_right:ce { l__liftarm_connect_F_\int_use:N \l__liftarm_connect_equation_int _tl }
+ {
+ - \seq_item:Nn \l__liftarm_connect_start_coeff_seq {########1} * \cs:w c__liftarm_cos_sin_####1_tl\cs_end:
+ ( \exp_not:N \cs:w l__liftarm_connect_angle_########2_fp \exp_not:N \cs_end: )
+ }
+ \tl_build_put_right:ce { l__liftarm_connect_Jacobian_\int_use:N \l__liftarm_connect_equation_int _########2_tl }
+ {
+ - \seq_item:Nn \l__liftarm_connect_start_coeff_seq {########1} * \cs:w c__liftarm_cos_sin_diff_####1_tl\cs_end:
+ ( \exp_not:N \cs:w l__liftarm_connect_angle_########2_fp \exp_not:N \cs_end: )
+ }
+ }
+ \tl_build_end:c { l__liftarm_connect_F_\int_use:N \l__liftarm_connect_equation_int _tl }
+ \int_step_inline:nn { \l__liftarm_LU_N_int }
+ { \tl_build_end:c { l__liftarm_connect_Jacobian_\int_use:N \l__liftarm_connect_equation_int _########1_tl } }
+ }
+ }
+ {
+ \clist_map_inline:nn { x , y }
+ {
+ \fp_zero_new:c { l__liftarm_connect_constant_####1_coord_\seq_item:Nn \l__liftarm_coordinate_seq { 2 }_fp }
+ \fp_set_eq:cc { l__liftarm_connect_constant_####1_coord_\seq_item:Nn \l__liftarm_coordinate_seq { 2 }_fp }
+ { l__liftarm_connect_start_constant_####1_fp }
+ }
+ \clist_map_inline:nn { arg , coeff }
+ {
+ \seq_clear_new:c { l__liftarm_connect_####1_coord_\seq_item:Nn \l__liftarm_coordinate_seq { 2 }_seq }
+ \seq_set_eq:cc { l__liftarm_connect_####1_coord_\seq_item:Nn \l__liftarm_coordinate_seq { 2 }_seq }
+ { l__liftarm_connect_start_####1_seq }
+ }
+ \seq_put_right:ce { l__liftarm_connect_arg_coord_\seq_item:Nn \l__liftarm_coordinate_seq { 2 }_seq }
+ { \int_use:N \l__liftarm_connect_count_int }
+ \seq_put_right:ce { l__liftarm_connect_coeff_coord_\seq_item:Nn \l__liftarm_coordinate_seq { 2 }_seq }
+ { \fp_use:N \l__liftarm_length_fp }
+ \seq_put_right:Ne \l__liftarm_connect_coordinate_seq { \seq_item:Nn \l__liftarm_coordinate_seq { 2 } }
+ }
+ }
+ }
+
+\cs_new_protected:Npn \__liftarm_connect_stop_criterion:
+ {
+ \int_step_inline:nn { \l__liftarm_LU_N_int }
+ { \fp_set:cn { l__liftarm_LU_b_##1_fp } { \cs:w l__liftarm_connect_F_##1_tl\cs_end: } }
+ \str_case:Vn \l__liftarm_connect_stop_type_str
+ {
+ { 1-norm }
+ {
+ \fp_zero:N \l__liftarm_connect_norm_fp
+ \int_step_inline:nn { \l__liftarm_LU_N_int }
+ { \fp_add:Nn \l__liftarm_connect_norm_fp { abs ( \cs:w l__liftarm_LU_b_##1_fp\cs_end: ) } }
+ \bool_set:Nn \l__liftarm_LU_bool
+ { \fp_compare_p:nNn { \l__liftarm_connect_norm_fp } > { \l__liftarm_connect_stop_value_fp } }
+ }
+ { 2-norm }
+ {
+ \fp_zero:N \l__liftarm_connect_norm_fp
+ \int_step_inline:nn { \l__liftarm_LU_N_int }
+ { \fp_add:Nn \l__liftarm_connect_norm_fp { ( \cs:w l__liftarm_LU_b_##1_fp\cs_end: ) ^ 2 } }
+ \bool_set:Nn \l__liftarm_LU_bool
+ { \fp_compare_p:nNn { sqrt ( \l__liftarm_connect_norm_fp ) } > { \l__liftarm_connect_stop_value_fp } }
+ }
+ { iterations }
+ {
+ \bool_set:Nn \l__liftarm_LU_bool
+ { \fp_compare_p:nNn { \l__liftarm_LU_count_int } < { \l__liftarm_connect_stop_value_fp } }
+ }
+ }
+ }
+
+\cs_new_protected:Npn \__liftarm_def_coord:n #1
+ {
+ \path let \p { l__liftarm_coord } = (#1) in
+ [
+ / utils / exec =
+ {
+ \fp_gset:Nn \g__liftarm_coord_x_fp
+ { ( \pgf@yy * \x { l__liftarm_coord } - \pgf@yx * \y { l__liftarm_coord } ) / \l__liftarm_connect_det_fp }
+ \fp_gset:Nn \g__liftarm_coord_y_fp
+ { ( \pgf@xx * \y { l__liftarm_coord } - \pgf@xy * \x { l__liftarm_coord } ) / \l__liftarm_connect_det_fp }
+ }
+ ] ;
+ }
+
+\cs_new_protected:Npn \__liftarm_default:nnnn #1#2#3#4
+ {
+ \pgfmathparse {#3}
+ \fp_set:Nn \l__liftarm_length_fp { \pgfmathresult }
+ \fp_compare:nNnTF { \l__liftarm_length_fp } < { 0 }
+ { \PackageWarning { liftarm } { The~length~( \fp_use:N \l__liftarm_length_fp )~of~the~liftarm~is~smaller~than~0. } }
+ {
+ \pgfmathparse {#4}
+ \fp_set:Nn \l__liftarm_angle_fp { \pgfmathresult }
+ \begin { scope }
+ [
+ shift = { (#2) } ,
+ rotate = \fp_use:N \l__liftarm_angle_fp
+ ]
+ \pgfkeys { / liftarm , #1 }
+ \tl_set:Ne \l__liftarm_color_tl
+ {
+ \cs:w
+ l__liftarm_color_
+ \int_mod:nn { \fp_eval:n { trunc ( \l__liftarm_length_fp , 0 ) } } { \pgfkeysvalueof { / liftarm / color~modulo } }_tl
+ \cs_end:
+ }
+ \begin { scope } [ shift = { ( - \fp_use:N \l__liftarm_origin_fp , 0 ) } ]
+ \str_case:Vn \l__liftarm_type_str
+ {
+ { liftarm }
+ {
+ \pgfmathparse { \pgfkeysvalueof { / liftarm / liftarm~thickness } }
+ \fp_set:Nn \l__liftarm_half_thickness_fp { 0.5 * \l__liftarm_scalefactor_fp * \pgfmathresult }
+ \pgfmathparse { \pgfkeysvalueof { / liftarm / hole~radius } }
+ \fp_set:Nn \l__liftarm_hole_radius_fp { \l__liftarm_scalefactor_fp * \pgfmathresult }
+ \bool_if:NTF \l__liftarm_brick_bool
+ {
+ \tl_build_begin:N \l__liftarm_shape_tl
+ \tl_build_put_right:Ne \l__liftarm_shape_tl
+ {
+ ( -1 , \fp_eval:n { - \l__liftarm_scalefactor_fp * 0.7 } )
+ -- ( -1 , \fp_eval:n { \l__liftarm_scalefactor_fp * 0.5 } )
+ }
+ \int_step_inline:nnn { -1 } { \fp_eval:n { trunc ( \l__liftarm_length_fp , 0 ) } }
+ {
+ \tl_build_put_right:Ne \l__liftarm_shape_tl
+ {
+ -- (
+ \fp_eval:n { ##1 + 0.5 - \l__liftarm_scalefactor_fp * 0.3 } ,
+ \fp_eval:n { \l__liftarm_scalefactor_fp * 0.5 }
+ )
+ --++ ( 0 , \fp_eval:n { \l__liftarm_scalefactor_fp * 0.2 } )
+ --++ ( \fp_eval:n { \l__liftarm_scalefactor_fp * 0.6 } , 0 )
+ --++ ( 0 , \fp_eval:n { - \l__liftarm_scalefactor_fp * 0.2 } )
+ }
+ }
+ \tl_build_put_right:Ne \l__liftarm_shape_tl
+ {
+ -- ( \fp_eval:n { \l__liftarm_length_fp + 1 } , \fp_eval:n { \l__liftarm_scalefactor_fp * 0.5 } )
+ --++ ( 0 , \fp_eval:n { - \l__liftarm_scalefactor_fp * 1.2 } )
+ -- cycle
+ }
+ \tl_build_end:N \l__liftarm_shape_tl
+ }
+ {
+ \tl_set:Ne \l__liftarm_shape_tl
+ {
+ ( 0 , \fp_use:N \l__liftarm_half_thickness_fp )
+ arc
+ [
+ start~angle = 90 ,
+ end~angle = 270 ,
+ radius = \fp_use:N \l__liftarm_half_thickness_fp
+ ]
+ -- ( \fp_use:N \l__liftarm_length_fp , - \fp_use:N \l__liftarm_half_thickness_fp )
+ arc
+ [
+ start~angle = -90 ,
+ end~angle = 90 ,
+ radius = \fp_use:N \l__liftarm_half_thickness_fp
+ ]
+ -- cycle
+ }
+ }
+ \tl_build_begin:N \l__liftarm_holes_tl
+ \int_step_inline:nnn { 0 } { \fp_eval:n { trunc ( \l__liftarm_length_fp , 0 ) } }
+ {
+ \clist_if_in:enTF { \pgfkeysvalueof { / liftarm / axle~holes } } {##1}
+ {
+ \int_step_inline:nn { 4 }
+ {
+ \tl_build_put_right:Ne \l__liftarm_holes_tl
+ {
+ (
+ \fp_eval:n
+ {
+ ##1 + sqrt ( 2 ) * \l__liftarm_hole_radius_fp * sind ( \c__liftarm_axle_hole_angle_fp )
+ * cosd ( ####1 * 90 - 45 )
+ } ,
+ \fp_eval:n { sqrt ( 2 ) * \l__liftarm_hole_radius_fp * sind ( \c__liftarm_axle_hole_angle_fp )
+ * sind ( ####1 * 90 - 45 ) }
+ )
+ -- (
+ \fp_eval:n
+ {
+ ##1
+ + \l__liftarm_hole_radius_fp * cosd ( ####1 * 90 - \c__liftarm_axle_hole_angle_fp )
+ } ,
+ \fp_eval:n { \l__liftarm_hole_radius_fp * sind ( ####1 * 90 - \c__liftarm_axle_hole_angle_fp ) }
+ )
+ arc
+ [
+ start~angle = \fp_eval:n { ####1 * 90 - \c__liftarm_axle_hole_angle_fp } ,
+ end~angle = \fp_eval:n { ####1 * 90 + \c__liftarm_axle_hole_angle_fp } ,
+ radius = \fp_use:N \l__liftarm_hole_radius_fp
+ ]
+ --
+ }
+ }
+ \tl_build_put_right:Nn \l__liftarm_holes_tl { cycle }
+ }
+ {
+ \tl_build_put_right:Ne \l__liftarm_holes_tl
+ { ( ##1 , 0 ) circle [ radius = \fp_use:N \l__liftarm_hole_radius_fp ] }
+ }
+ }
+ \tl_build_end:N \l__liftarm_holes_tl
+ \fill [ \l__liftarm_color_tl , even~odd~rule , / liftarm / liftarm_style ]
+ \l__liftarm_shape_tl \l__liftarm_holes_tl ;
+ \bool_if:NT \l__liftarm_contour_bool
+ { \draw [ \l__liftarm_color_tl ! 75 ! black , ultra~thick , / liftarm / contour_style ] \l__liftarm_shape_tl ; }
+ \clist_map_inline:en { \pgfkeysvalueof { / liftarm / mark~holes } }
+ {
+ \fill [ black , / liftarm / mark_style ]
+ ( {##1} , 0 ) circle [ radius = \fp_eval:n { \l__liftarm_mark_radius_fp * \l__liftarm_hole_radius_fp } ] ;
+ }
+ \clist_map_inline:en { \pgfkeysvalueof { / liftarm / screw~holes } }
+ {
+ \clist_map_inline:nn { -1 , 1 }
+ {
+ \fill [ black , shift = { ( {##1} , 0 ) } , rotate = 45 , / liftarm / screw_style ]
+ (
+ \fp_eval:n { ####1 * \l__liftarm_screw_angle_fp }
+ \c_colon_str
+ \fp_eval:n { \l__liftarm_screw_radius_fp * \l__liftarm_hole_radius_fp }
+ )
+ arc
+ [
+ start~angle = \fp_eval:n { ####1 * \l__liftarm_screw_angle_fp } ,
+ end~angle = \fp_eval:n { ####1 * ( 180 - \l__liftarm_screw_angle_fp ) } ,
+ radius = \fp_eval:n { \l__liftarm_screw_radius_fp * \l__liftarm_hole_radius_fp }
+ ]
+ ;
+ }
+ }
+ }
+ { line~segment }
+ {
+ \draw [ \l__liftarm_color_tl , / liftarm / liftarm_style ] ( 0 , 0 ) -- ( \fp_use:N \l__liftarm_length_fp , 0 ) ;
+ }
+ }
+ \clist_map_inline:en { \pgfkeysvalueof { / liftarm / coordinate } }
+ {
+ \seq_set_split:Nnn \l__liftarm_coordinate_seq { / } {##1}
+ \coordinate ( \seq_item:Nn \l__liftarm_coordinate_seq { 2 } )
+ at ( { \seq_item:Nn \l__liftarm_coordinate_seq { 1 } } , 0 ) ;
+ }
+ \bool_if:NT \l__liftarm_animate_bool
+ {
+ \clist_map_inline:Nn \l__liftarm_trace_clist
+ {
+ \seq_set_split:Nnn \l__liftarm_trace_item_seq { / } {##1}
+ \stepcounter { g__liftarm_animate_frame_number_counter }
+ \tl_build_gput_right:Ne \g__liftarm_animate_frames_trace_tl
+ {
+ \exp_not:n { \newframe \begin } { scope }
+ [ shift = { (#2) } , rotate = \fp_use:N \l__liftarm_angle_fp ]
+ \exp_not:N \begin { scope }
+ [ shift = { ( \fp_eval:n { \seq_item:Nn \l__liftarm_trace_item_seq { 1 } - \l__liftarm_origin_fp } , 0 ) } ]
+ \tl_if_empty:eTF { \seq_item:Nn \l__liftarm_trace_item_seq { 3 } }
+ {
+ \exp_not:N \fill
+ [ black ] ( 0 , 0 ) circle [ radius = \fp_eval:n { \l__liftarm_hole_radius_fp * 2 / 3 } ] ;
+ }
+ { \seq_item:Nn \l__liftarm_trace_item_seq { 3 } }
+ \exp_not:n { \end { scope } \end { scope } }
+ }
+ \tl_if_empty:eTF { \seq_item:Nn \l__liftarm_trace_item_seq { 2 } }
+ {
+ \tl_build_gput_right:ce { g__liftarm_animate_timeline_0_tl }
+ { \theg__liftarm_animate_frame_number_counter x 0 , }
+ }
+ {
+ \pgfmathparse { \use:e { \seq_item:Nn \l__liftarm_trace_item_seq { 2 } } }
+ \tl_build_gput_right:ce { g__liftarm_animate_timeline_\theg__liftarm_animate_step_number_counter _tl }
+ { \theg__liftarm_animate_frame_number_counter x \fp_eval:n { \pgfmathresult } , }
+ }
+ }
+ }
+ \end { scope }
+ \end { scope }
+ }
+ }
+
+\cs_new_protected:Npn \__liftarm_LU_decomposition:
+ {
+ \int_step_inline:nn { \l__liftarm_LU_N_int }
+ {
+ \int_zero_new:c { l__liftarm_LU_P_##1_int }
+ \int_set:cn { l__liftarm_LU_P_##1_int } {##1}
+ }
+ \int_step_inline:nn { \l__liftarm_LU_N_int }
+ {
+ \fp_zero:N \l__liftarm_LU_maxA_fp
+ \int_set:Nn \l__liftarm_LU_imax_int {##1}
+ \int_step_inline:nnn {##1} { \l__liftarm_LU_N_int }
+ {
+ \fp_set:Nn \l__liftarm_LU_tmp_fp { abs ( \cs:w l__liftarm_LU_A_####1_##1_fp\cs_end: ) }
+ \fp_compare:nNnT { \l__liftarm_LU_tmp_fp } > { \l__liftarm_LU_maxA_fp }
+ {
+ \fp_set_eq:NN \l__liftarm_LU_maxA_fp \l__liftarm_LU_tmp_fp
+ \int_set:Nn \l__liftarm_LU_imax_int {####1}
+ }
+ }
+ \int_compare:nNnF { \l__liftarm_LU_imax_int } = {##1}
+ {
+ \int_set_eq:Nc \l__liftarm_LU_j_int { l__liftarm_LU_P_##1_int }
+ \int_set_eq:cc { l__liftarm_LU_P_##1_int } { l__liftarm_LU_P_\int_use:N \l__liftarm_LU_imax_int _int }
+ \int_set_eq:cN { l__liftarm_LU_P_\int_use:N \l__liftarm_LU_imax_int _int } \l__liftarm_LU_j_int
+ \int_step_inline:nn { \l__liftarm_LU_N_int }
+ {
+ \fp_set_eq:Nc \l__liftarm_LU_tmp_fp { l__liftarm_LU_A_##1_####1_fp }
+ \fp_set_eq:cc { l__liftarm_LU_A_##1_####1_fp } { l__liftarm_LU_A_\int_use:N \l__liftarm_LU_imax_int _####1_fp }
+ \fp_set_eq:cN { l__liftarm_LU_A_\int_use:N \l__liftarm_LU_imax_int _####1_fp } \l__liftarm_LU_tmp_fp
+ }
+ }
+ \int_step_inline:nnn { ##1 + 1 } { \l__liftarm_LU_N_int }
+ {
+ \fp_set:cn { l__liftarm_LU_A_####1_##1_fp }
+ { \cs:w l__liftarm_LU_A_####1_##1_fp\cs_end: / \cs:w l__liftarm_LU_A_##1_##1_fp\cs_end: }
+ \int_step_inline:nnn { ##1 + 1 } { \l__liftarm_LU_N_int }
+ {
+ \fp_sub:cn { l__liftarm_LU_A_####1_########1_fp }
+ { \cs:w l__liftarm_LU_A_####1_##1_fp\cs_end: * \cs:w l__liftarm_LU_A_##1_########1_fp\cs_end: }
+ }
+ }
+ }
+ }
+
+\cs_new_protected:Npn \__liftarm_LU_solve:
+ {
+ \int_step_inline:nn { \l__liftarm_LU_N_int }
+ {
+ \fp_zero_new:c { l__liftarm_LU_x_##1_fp }
+ \fp_set_eq:cc { l__liftarm_LU_x_##1_fp } { l__liftarm_LU_b_\int_use:c { l__liftarm_LU_P_##1_int }_fp }
+ \int_step_inline:nn { ##1 - 1 }
+ {
+ \fp_sub:cn { l__liftarm_LU_x_##1_fp }
+ { \cs:w l__liftarm_LU_A_##1_####1_fp\cs_end: * \cs:w l__liftarm_LU_x_####1_fp\cs_end: }
+ }
+ }
+ \int_step_inline:nnnn { \l__liftarm_LU_N_int } { -1 } { 1 }
+ {
+ \int_step_inline:nnn { ##1 + 1 } { \l__liftarm_LU_N_int }
+ {
+ \fp_sub:cn { l__liftarm_LU_x_##1_fp }
+ { \cs:w l__liftarm_LU_A_##1_####1_fp\cs_end: * \cs:w l__liftarm_LU_x_####1_fp\cs_end: }
+ }
+ \fp_set:cn { l__liftarm_LU_x_##1_fp } { \cs:w l__liftarm_LU_x_##1_fp\cs_end: / \cs:w l__liftarm_LU_A_##1_##1_fp\cs_end: }
+ }
+ }
+
+\cs_new:Npn \__liftarm_Mod:nn #1#2
+ {
+ min
+ (
+ Mod
+ (
+ \fp_eval:n { \cs:w l__liftarm_connect_two_#1_option_#2_angle_fp\cs_end: - \cs:w l__liftarm_connect_angle_#1_fp\cs_end: } ,
+ 360
+ ) ,
+ Mod
+ (
+ \fp_eval:n { \cs:w l__liftarm_connect_angle_#1_fp\cs_end: - \cs:w l__liftarm_connect_two_#1_option_#2_angle_fp\cs_end: } ,
+ 360
+ )
+ )
+ }
+
+%%> \subsection{Document commands and environment}
+
+\NewDocumentCommand \liftarm { O {} m m m }
+ { \__liftarm_default:nnnn {#1} {#2} {#3} {#4} }
+
+\NewDocumentCommand \liftarmanimate { O {} m m m }
+ {
+ \bool_set_true:N \l__liftarm_animate_bool
+ \stepcounter { g__liftarm_animate_number_of_animation_counter }
+ \setcounter { g__liftarm_animate_number_of_steps_counter } { -1 }
+ \tl_build_gbegin:N \g__liftarm_animate_frames_tl
+ \tl_build_gbegin:N \g__liftarm_animate_frames_trace_tl
+ \setcounter { g__liftarm_animate_step_number_counter } { -1 }
+ \foreach \l__liftarm_animate_value_tl in {#3}
+ {
+ \stepcounter { g__liftarm_animate_number_of_steps_counter }
+ \tl_build_gput_right:Ne \g__liftarm_animate_frames_tl
+ {
+ \exp_not:n { \newframe \stepcounter { g__liftarm_animate_step_number_counter } #4 }
+ { \l__liftarm_animate_value_tl }
+ }
+ }
+ \tl_build_gend:N \g__liftarm_animate_frames_tl
+ \int_step_inline:nnn { 0 } { \theg__liftarm_animate_number_of_steps_counter }
+ {
+ \tl_clear_new:c { g__liftarm_animate_timeline_##1_tl }
+ \tl_build_gbegin:c { g__liftarm_animate_timeline_##1_tl }
+ }
+ \tl_build_gput_right:cn { g__liftarm_animate_timeline_0_tl } { c , }
+ \setcounter { g__liftarm_animate_frame_number_counter } { \theg__liftarm_animate_number_of_steps_counter }
+ \file_if_exist:nF { \c_sys_jobname_str \theg__liftarm_animate_number_of_animation_counter . tln }
+ {
+ \iow_open:Nn \g__liftarm_animate_write_timeline_iow
+ { \c_sys_jobname_str \theg__liftarm_animate_number_of_animation_counter . tln }
+ \iow_now:Ne \g__liftarm_animate_write_timeline_iow { \c_colon_str \c_colon_str c , 0 }
+ \iow_close:N \g__liftarm_animate_write_timeline_iow
+ }
+ \begin { animateinline } [ #1 , timeline = \c_sys_jobname_str \theg__liftarm_animate_number_of_animation_counter . tln ] {#2}
+ \tl_tail:N \g__liftarm_animate_frames_tl%remove the first \newframe
+ \tl_build_gend:N \g__liftarm_animate_frames_trace_tl
+ \g__liftarm_animate_frames_trace_tl
+ \end { animateinline }
+ \iow_open:Nn \g__liftarm_animate_write_timeline_iow { \c_sys_jobname_str \theg__liftarm_animate_number_of_animation_counter . tln }
+ \int_step_inline:nnn { 0 } { \theg__liftarm_animate_number_of_steps_counter }
+ {
+ \tl_build_gend:c { g__liftarm_animate_timeline_##1_tl }
+ \iow_now:Ne \g__liftarm_animate_write_timeline_iow
+ { \c_colon_str \c_colon_str \cs:w g__liftarm_animate_timeline_##1_tl\cs_end: ##1 }
+ }
+ \iow_close:N \g__liftarm_animate_write_timeline_iow
+ \bool_set_false:N \l__liftarm_animate_bool
+ }
+
+\NewDocumentCommand \liftarmconstruct { m }
+ {
+ \tl_gput_right:Nn \g__liftarm_construct_tl {#1}
+ \g__liftarm_construct_tl
+ }
+
+\NewDocumentCommand \liftarmconstructclear {}
+ { \tl_gclear:N \g__liftarm_construct_tl }
+
+\NewDocumentEnvironment { liftarmconnect } { O {} +b }
+ {
+ \pgfkeys { / liftarm , #1 }
+ %verify that the contents consists only of commands \liftarm because the contents of this environment are processed several times
+ \DeclareExpandableDocumentCommand \liftarm { O {} m m m } {}%expandable for usage in \tl_set:Ne
+ \tl_set:Ne \l__liftarm_tmp_tl {#2}
+ \tl_remove_all:Nn \l__liftarm_tmp_tl { \par }
+ \tl_if_blank:VF \l__liftarm_tmp_tl
+ { \PackageError { liftarm } { The~environment~liftarmconnect~should~only~consist~of~commands~\protect \liftarm } {} }
+ \int_zero:N \l__liftarm_LU_N_int
+ \RenewDocumentCommand \liftarm { O {} m m m } { \int_incr:N \l__liftarm_LU_N_int }
+ #2
+ \fp_set:Nn \l__liftarm_connect_det_fp { \pgf@yy * \pgf@xx - \pgf@yx * \pgf@xy }
+ \int_case:nnF { \l__liftarm_LU_N_int }
+ {
+ { 0 }
+ {}
+ { 1 }
+ {
+ \RenewDocumentCommand \liftarm { O {} m m m }
+ { \__liftarm_default:nnnn {##1} {##2} {##3} {##4} }
+ }
+ { 2 }
+ {
+ \int_zero:N \l__liftarm_connect_count_int
+ \int_zero:N \l__liftarm_connect_equation_int
+ \seq_clear:N \l__liftarm_connect_coordinate_seq
+ \fp_set_eq:NN \l__liftarm_origin_connect_initial_fp \l__liftarm_origin_fp
+ \RenewDocumentCommand \liftarm { O {} m m m }
+ {
+ \int_incr:N \l__liftarm_connect_count_int
+ \fp_zero_new:c { l__liftarm_connect_angle_\int_use:N \l__liftarm_connect_count_int _fp }
+ \pgfmathparse {##4}
+ \fp_set:cn { l__liftarm_connect_angle_\int_use:N \l__liftarm_connect_count_int _fp } { \pgfmathresult }
+ \fp_set_eq:NN \l__liftarm_origin_fp \l__liftarm_origin_connect_initial_fp
+ \pgfkeys
+ {
+ / liftarm / connect_algorithm ,
+ coordinate = \pgfkeysvalueof { / liftarm / coordinate } ,
+ ##1
+ }
+ \__liftarm_def_coord:n {##2}
+ \fp_set_eq:cN { l__liftarm_connect_two_\int_to_Alph:n { \l__liftarm_connect_count_int }_x_fp } \g__liftarm_coord_x_fp
+ \fp_set_eq:cN { l__liftarm_connect_two_\int_to_Alph:n { \l__liftarm_connect_count_int }_y_fp } \g__liftarm_coord_y_fp
+ \int_compare:nNnTF { \l__liftarm_connect_count_int } = { 1 }
+ {
+ \clist_map_inline:en { \pgfkeysvalueof { / liftarm / connect_algorithm / coordinate } }
+ {
+ \seq_set_split:Nnn \l__liftarm_coordinate_seq { / } {####1}
+ \tl_clear_new:c { l__liftarm_connect_two_A_length_coord_\seq_item:Nn \l__liftarm_coordinate_seq { 2 }_tl }
+ \tl_set:ce { l__liftarm_connect_two_A_length_coord_\seq_item:Nn \l__liftarm_coordinate_seq { 2 }_tl }
+ { \seq_item:Nn \l__liftarm_coordinate_seq { 1 } - \fp_use:N \l__liftarm_origin_fp }
+ \seq_put_right:Ne \l__liftarm_connect_coordinate_seq { \seq_item:Nn \l__liftarm_coordinate_seq { 2 } }
+ }
+ }
+ {
+ \clist_map_inline:en { \pgfkeysvalueof { / liftarm / connect_algorithm / coordinate } }
+ {
+ \seq_set_split:Nnn \l__liftarm_coordinate_seq { / } {####1}
+ \seq_if_in:NeT \l__liftarm_connect_coordinate_seq { \seq_item:Nn \l__liftarm_coordinate_seq { 2 } }
+ {
+ \int_incr:N \l__liftarm_connect_equation_int
+ \int_compare:nNnT { \l__liftarm_connect_equation_int } > { 1 }
+ { \PackageError { liftarm } { There~are~too~many~conditions~for~2~liftarms } {} }
+ \pgfmathparse
+ { \cs:w l__liftarm_connect_two_A_length_coord_\seq_item:Nn \l__liftarm_coordinate_seq { 2 }_tl\cs_end: }
+ \fp_set:Nn \l__liftarm_connect_two_A_length_fp { \pgfmathresult }
+ \pgfmathparse { \seq_item:Nn \l__liftarm_coordinate_seq { 1 } }
+ \fp_set:Nn \l__liftarm_connect_two_B_length_fp { \pgfmathresult - \l__liftarm_origin_fp }
+ }
+ }
+ }
+ }
+ #2
+ \fp_set:Nn \l__liftarm_connect_two_length_fp
+ {
+ sqrt (
+ ( \l__liftarm_connect_two_A_x_fp - \l__liftarm_connect_two_B_x_fp ) ^ 2
+ + ( \l__liftarm_connect_two_A_y_fp - \l__liftarm_connect_two_B_y_fp ) ^ 2
+ )
+ }
+ \fp_set:Nn \l__liftarm_connect_two_angle_fp
+ {
+ atand (
+ \l__liftarm_connect_two_B_y_fp - \l__liftarm_connect_two_A_y_fp ,
+ \l__liftarm_connect_two_B_x_fp - \l__liftarm_connect_two_A_x_fp
+ )
+ }
+ \fp_set:Nn \l__liftarm_connect_two_A_angle_fp
+ {
+ acosd (
+ (
+ ( \l__liftarm_connect_two_A_length_fp ) ^ 2 + ( \l__liftarm_connect_two_length_fp ) ^ 2
+ - ( \l__liftarm_connect_two_B_length_fp ) ^ 2
+ ) / ( 2 * \l__liftarm_connect_two_A_length_fp * \l__liftarm_connect_two_length_fp )
+ )
+ }
+ \fp_set:Nn \l__liftarm_connect_two_B_angle_fp
+ {
+ acosd (
+ (
+ ( \l__liftarm_connect_two_B_length_fp ) ^ 2 + ( \l__liftarm_connect_two_length_fp ) ^ 2
+ - ( \l__liftarm_connect_two_A_length_fp ) ^ 2
+ ) / ( 2 * \l__liftarm_connect_two_B_length_fp * \l__liftarm_connect_two_length_fp )
+ )
+ }
+ \fp_set:cn { l__liftarm_connect_two_1_option_0_angle_fp }
+ { \l__liftarm_connect_two_angle_fp + \l__liftarm_connect_two_A_angle_fp }
+ \fp_set:cn { l__liftarm_connect_two_1_option_1_angle_fp }
+ { \l__liftarm_connect_two_angle_fp - \l__liftarm_connect_two_A_angle_fp }
+ \fp_set:cn { l__liftarm_connect_two_2_option_0_angle_fp }
+ { 180 + \l__liftarm_connect_two_angle_fp - \l__liftarm_connect_two_B_angle_fp }
+ \fp_set:cn { l__liftarm_connect_two_2_option_1_angle_fp }
+ { 180 + \l__liftarm_connect_two_angle_fp + \l__liftarm_connect_two_B_angle_fp }
+ \pgfmathparse
+ {
+ \__liftarm_Mod:nn { 1 } { 0 } + \__liftarm_Mod:nn { 2 } { 0 }
+ >
+ \__liftarm_Mod:nn { 1 } { 1 } + \__liftarm_Mod:nn { 2 } { 1 }
+ }
+ \tl_set:Ne \l__liftarm_tmp_tl { \pgfmathresult }
+ \int_zero:N \l__liftarm_connect_count_int
+ \RenewDocumentCommand \liftarm { O {} m m m }
+ {
+ \int_incr:N \l__liftarm_connect_count_int
+ \__liftarm_default:nnnn {##1} {##2} {##3}
+ { \fp_use:c { l__liftarm_connect_two_\int_use:N \l__liftarm_connect_count_int _option_\l__liftarm_tmp_tl _angle_fp } }
+ }
+ }
+ }
+ {
+ \int_zero:N \l__liftarm_connect_count_int
+ \int_zero:N \l__liftarm_connect_equation_int
+ \seq_clear:N \l__liftarm_connect_coordinate_seq
+ \fp_set_eq:NN \l__liftarm_origin_connect_initial_fp \l__liftarm_origin_fp
+ \RenewDocumentCommand \liftarm { O {} m m m } { \__liftarm_connect:nnnn {##1} {##2} {##3} {##4} }
+ #2
+ \int_compare:nNnF { \l__liftarm_connect_equation_int } = { \l__liftarm_LU_N_int }
+ {
+ \PackageError { liftarm }
+ {
+ The~Jacobian~matrix~is~not~square~
+ (the~size~is~\int_use:N \l__liftarm_connect_equation_int \space by~\int_use:N \l__liftarm_LU_N_int )
+ } {}
+ }
+ \int_zero:N \l__liftarm_LU_count_int
+ \int_step_inline:nn { \l__liftarm_LU_N_int }
+ { \fp_zero_new:c { l__liftarm_LU_b_##1_fp } }
+ \__liftarm_connect_stop_criterion:
+ \bool_while_do:Nn \l__liftarm_LU_bool
+ {
+ \int_step_inline:nn { \l__liftarm_LU_N_int }
+ {
+ \int_step_inline:nn { \l__liftarm_LU_N_int }
+ { \fp_set:cn { l__liftarm_LU_A_##1_####1_fp } { \cs:w l__liftarm_connect_Jacobian_##1_####1_tl\cs_end: } }
+ }
+ \__liftarm_LU_decomposition:
+ \__liftarm_LU_solve:
+ \int_step_inline:nn { \l__liftarm_LU_N_int }
+ { \fp_sub:cn { l__liftarm_connect_angle_##1_fp } { \cs:w l__liftarm_LU_x_##1_fp\cs_end: } }
+ \int_incr:N \l__liftarm_LU_count_int
+ \__liftarm_connect_stop_criterion:
+ }
+ \int_zero:N \l__liftarm_connect_count_int
+ \RenewDocumentCommand \liftarm { O {} m m m }
+ {
+ \int_incr:N \l__liftarm_connect_count_int
+ \__liftarm_default:nnnn {##1} {##2} {##3}
+ { \fp_eval:n { \cs:w l__liftarm_connect_angle_\int_use:N \l__liftarm_connect_count_int _fp\cs_end: / deg } }
+ }
+ }
+ #2
+ }
+ {}
-\gappto\liftarm@constructfigure{#3}
-\expandafter\liftarm@construction\expandafter[\liftarm@constructoptions]{#1}
-}
-\newenvironment{liftarmconstruction}[1][]{\def\liftarm@constructoptions{#1}\def\liftarm@constructfigure{}\begin{enumerate}}{\end{enumerate}}
-\newcounter{liftarm@animatenumberofsteps}
-\newcounter{liftarm@animateframenumber}
-\newcounter{liftarm@animatestepnumber}
-\newwrite\liftarm@animatewritetimeline
-\newcounter{liftarm@animatenumberofanimation}
-\newcommand{\liftarmanimate}[4][]{%
-\liftarm@animatetrue%
-\addtocounter{liftarm@animatenumberofanimation}{1}%
-\setcounter{liftarm@animatenumberofsteps}{-1}%
-\gdef\liftarm@animateframes{}%
-\gdef\liftarm@animateframestrace{}%
-\setcounter{liftarm@animatestepnumber}{-1}%
-\foreach\liftarm@n in {#3}{%
-\addtocounter{liftarm@animatenumberofsteps}{1}%
-\gappto\liftarm@animateframes{\newframe\addtocounter{liftarm@animatestepnumber}{1}#4}%
-\xappto\liftarm@animateframes{{\liftarm@n}}%
-}%
-\patchcmd{\liftarm@animateframes}{\newframe}{}{}{}%
-\csgdef{liftarm@animatetimeline0}{c,}%
-\foreach\liftarm@n in {1,...,\theliftarm@animatenumberofsteps}{%
-\csgdef{liftarm@animatetimeline\liftarm@n}{}%
-}%
-\setcounter{liftarm@animateframenumber}{\theliftarm@animatenumberofsteps}%
-\IfFileExists{\jobname\theliftarm@animatenumberofanimation.tln}{}{%
-\immediate\openout\liftarm@animatewritetimeline=\jobname\theliftarm@animatenumberofanimation.tln%
-\immediate\write\liftarm@animatewritetimeline{::c,0}%
-\immediate\closeout\liftarm@animatewritetimeline%
-}%
-\begin{animateinline}[#1,timeline=\jobname\theliftarm@animatenumberofanimation.tln]{#2}%
-\liftarm@animateframes%
-\liftarm@animateframestrace%
-\end{animateinline}%
-\immediate\openout\liftarm@animatewritetimeline=\jobname\theliftarm@animatenumberofanimation.tln%
-\foreach\liftarm@n in {0,...,\theliftarm@animatenumberofsteps}{%
-\immediate\write\liftarm@animatewritetimeline{::\csname liftarm@animatetimeline\liftarm@n\endcsname\liftarm@n}%
-}%
-\immediate\closeout\liftarm@animatewritetimeline%
-\liftarm@animatefalse%
-}
\endinput \ No newline at end of file
diff --git a/graphics/pgf/contrib/liftarm/liftarm.tex b/graphics/pgf/contrib/liftarm/liftarm.tex
index b45bb85793..a7719fc926 100644
--- a/graphics/pgf/contrib/liftarm/liftarm.tex
+++ b/graphics/pgf/contrib/liftarm/liftarm.tex
@@ -1,12 +1,12 @@
%% liftarm.tex
-%% Copyright 2022 Matthias Floré
+%% Copyright 2022-2024 Matthias Floré
%
% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3
+% conditions of the LaTeX Project Public License, either version 1.3c
% of this license or (at your option) any later version.
% The latest version of this license is in
% http://www.latex-project.org/lppl.txt
-% and version 1.3 or later is part of all distributions of LaTeX
+% and version 1.3c or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
%
% This work has the LPPL maintenance status `maintained'.
@@ -20,37 +20,42 @@
\usepackage{graphicx}
\usepackage[a4paper,left=2.25cm,right=2.25cm,top=2.5cm,bottom=2.5cm,nohead]{geometry}
\usepackage{parskip}
+\usepackage{iftex}
+\ifluatex
+\else
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
+\fi
\usepackage{mathtools}
\usepackage{amssymb}
\allowdisplaybreaks
-\usepackage{multicol}
+\usepackage{pdflscape}
\usepackage{animate}
\usepackage{liftarm}
\input{pgfmanual-en-macros.tex}
-\usepackage[page]{totalcount}
+\usepackage{codehigh}
\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\headrulewidth}{0pt}
-\cfoot{\iftotalpages\begin{tikzpicture}\liftarm[mark holes=\thepage-1]{0,0}{\totalpages-2}{0}\end{tikzpicture}\fi}%\liftarm{0,0}{\thepage}{0}
\fancyhead{}
+\fancyfoot[C]{\IfRefUndefinedExpandable{Thesourcecode}{}{\begin{tikzpicture}\liftarm[mark holes=\thepage -1]{0,0}{\getpagerefnumber{Thesourcecode}-2}{0}\end{tikzpicture}}}%\liftarm{0,0}{\thepage}{0}
+\usepackage[nottoc]{tocbibind}
\usepackage{imakeidx}
\makeindex[program=makeindex,columns=2,intoc=true]
\indexsetup{othercode={\thispagestyle{fancy}}}
\usepackage[linktoc=all,pdfstartview=FitH,colorlinks=true,linkcolor=Mahogany,citecolor=ForestGreen,urlcolor=MidnightBlue,bookmarksnumbered=true]{hyperref}
-\hypersetup{pdftitle={The liftarm package},pdfauthor={Matthias Flor\'e},pdfsubject={Manual},pdfkeywords={liftarm}}
+\hypersetup{pdftitle={The liftarm package},pdfauthor={Matthias Floré},pdfsubject={Manual},pdfkeywords={liftarm}}
\setcounter{tocdepth}{2}
\setcounter{secnumdepth}{2}
\DeclareMathOperator{\atan}{atan}
-\title{The \texttt{liftarm} package\\[12pt]\large Draw liftarms with \tikzname}
-\author{Matthias Flor\'e}
-\date{Version 2.0 (2022/04/07)}%\\[12pt]
+\title{The \texttt{liftarm} package\\[12pt]\large Geometric constructions with liftarms using \tikzname{} and \LaTeX3}
+\author{Matthias Floré}
+\date{Version 3.0 (2024/05/20)}%\\[12pt]
\begin{document}
\maketitle
\thispagestyle{fancy}
\begin{abstract}
-\noindent This package is based on the package |tikz| (see \cite{TtTaPGFp}) and can be used to draw liftarms with \tikzname. It provides several options for the appearance of the liftarms, a command which connects two liftarms, an environment to describe a construction and a method to animate a construction with one or more traces.% This is the manual for version .
+\noindent This package is based on the package |tikz| (see \cite{TtTaPGFp}) and can be used to draw geometric constructions with liftarms using \tikzname. There are several options for the appearance of the liftarms. It provides an environment to connect multiple liftarms using the Newton-Raphson method and LU decomposition. It also provides an environment to describe a construction and a method to animate a construction with one or more traces.% This is the manual for version .
\end{abstract}
\tableofcontents
\section{Usage}
@@ -58,7 +63,7 @@ The package |liftarm| can be used by putting the following in the preamble.
\begin{codeexample}[code only]
\usepackage{liftarm}
\end{codeexample}
-The package |liftarm| loads the packages |etoolbox|, |xcolor| with the option |dvipsnames|, |tikz| and the \tikzname{} library |calc|. Since |xcolor| is loaded with the option |dvipsnames|, packages such as |pgfplots| and |tcolorbox| must be loaded \emph{after} |liftarm|.
+The package |liftarm| loads the package |xcolor| with the option |dvipsnames|, the package |tikz| and the \tikzname{} library |calc|. Since |xcolor| is loaded with the option |dvipsnames|, packages such as |pgfplots| and |tcolorbox| must be loaded \emph{after} |liftarm|.
\section{Drawing liftarms}
\begin{command}{\liftarm\opt{\oarg{options}}\marg{point}\marg{length}\marg{angle}}
This command can be placed inside a |tikzpicture| environment. It draws a liftarm of \meta{length} starting at \meta{point}. The angle between the liftarm and the $x$-axis can be specified by \meta{angle} in degrees. The distance between the holes is $1$.
@@ -84,53 +89,25 @@ If true, a brick will be drawn instead of a liftarm.
\end{tikzpicture}
\end{codeexample}
\end{key}
-\begin{key}{/liftarm/color=\marg{name}}
-This key defines the color of the liftarm. The color can also be specified without key.
-\begin{codeexample}[width=10cm]
-\begin{tikzpicture}
-\liftarm[color=Green]{0,1}{4}{0}
-\liftarm[Blue]{0,2}{3}{0}
-\end{tikzpicture}
-\end{codeexample}
-\end{key}
-\begin{key}{/liftarm/color 0=\marg{name} (initially Gray)}
-\end{key}
-\begin{key}{/liftarm/color 1=\marg{name} (initially darkgray)}
-\end{key}
-\begin{key}{/liftarm/color 2=\marg{name} (initially Yellow)}
-\end{key}
-\begin{key}{/liftarm/color 3=\marg{name} (initially Orange)}
-\end{key}
-\begin{key}{/liftarm/color 4=\marg{name} (initially Red)}
-\end{key}
-\begin{key}{/liftarm/color 5=\marg{name} (initially Green)}
-\end{key}
-\begin{key}{/liftarm/color 6=\marg{name} (initially Blue)}
-\end{key}
-\begin{key}{/liftarm/color 7=\marg{name} (initially Brown)}
-These keys define the colors of the liftarms which have as their length the number following |color|.
+\begin{key}{/liftarm/color=\marg{number}\marg{color}}
+This key defines the color of liftarms of length \meta{number}.
+
+Initially, the colors |Gray|, |darkgray|, |Yellow|, |Orange|, |Red|, |Green|, |Blue| and |Brown| are defined for respectively the lengths |0| till |7|.
\end{key}
\begin{key}{/liftarm/color modulo=\marg{number} (initially 8)}
-The default colors of the liftarms are determined by computing the length of the liftarm modulo the value of this key and selecting the color from the previous keys.
-\begin{codeexample}[width=10cm]
-\begin{tikzpicture}[scale=0.5]
-\foreach\n in {0,...,16}{
- \liftarm{0,-\n}{\n}{0}
-}
-\end{tikzpicture}
-\end{codeexample}
+The default colors of the liftarms are determined by computing the length of the liftarm modulo the value of this key and selecting the color defined by the key |color|.
\begin{codeexample}[width=10cm]
\begin{tikzpicture}[scale=0.5]
\pgfkeys{
- /liftarm,
- color 0=Yellow,
- color 1=Red,
- color 2=Green,
- color 3=Blue,
- color modulo=4
+ /liftarm,
+ color={0}{Yellow},
+ color={1}{Red},
+ color={2}{Green},
+ color={3}{Blue},
+ color modulo=4
}
\foreach\n in {0,...,8}{
- \liftarm{0,-\n}{\n}{0}
+ \liftarm{0,-\n}{\n}{0}
}
\end{tikzpicture}
\end{codeexample}
@@ -144,12 +121,28 @@ If true, a contour will be drawn around the liftarm.
\end{tikzpicture}
\end{codeexample}
\end{key}
-\begin{key}{/liftarm/coordinate=\marg{number 1/name 1}\dots}
+\begin{stylekey}{/liftarm/contour style=\marg{options} (initially \normalfont empty)}
+The style of the contour is determined as follows. First, the color is defined as \meta{initial color of the liftarm}|!75!black|. Then the option |ultra thick| is added. Thereafter, the style of the key |contour style| is added.
+
+The style |contour style| only applies to the border of the liftarm. The style |liftarm style| also applies to the holes of the liftarm.
+\begin{codeexample}[width=10cm]
+\begin{tikzpicture}
+\liftarm[
+ contour,
+ contour style={dashed,black}
+]{0,1}{4}{0}
+\liftarm[
+ liftarm style={draw=black,thick}
+]{0,2}{4}{0}
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+\begin{key}{/liftarm/coordinate=\marg{number 1/name 1,\dots}}
This key defines coordinates with name \meta{name i} at hole \meta{number i} of the liftarm.
\begin{codeexample}[width=10cm]
\begin{tikzpicture}
\liftarm[
- coordinate={1/A,3/B}
+ coordinate={1/A,3/B}
]{0,1}{6}{40}
\liftarm{A}{3}{0}
\liftarm{B}{2}{180}
@@ -164,40 +157,46 @@ The \meta{value} of this key, multiplied with the \meta{value} of the key |scale
\end{tikzpicture}
\end{codeexample}
\end{key}
+\begin{stylekey}{/liftarm/liftarm style=\marg{options} (initially \normalfont empty)}
+The style of the liftarm is determined as follows. First, the color is defined by the keys |color| and |color modulo|. Thereafter, the style of the key |liftarm style| is added.
+\end{stylekey}
\begin{key}{/liftarm/liftarm thickness=\marg{value} (initially 0.92)}
The \meta{value} of this key, multiplied with the \meta{value} of the key |scalefactor| defines the thickness of the liftarm.
\begin{codeexample}[width=10cm]
\begin{tikzpicture}
\liftarm[
- hole radius=0.1,
- liftarm thickness=0.3
+ hole radius=0.1,
+ liftarm thickness=0.3
]{0,0}{5}{0}
\end{tikzpicture}
\end{codeexample}
\end{key}
-\begin{key}{/liftarm/mark color=\marg{name} (initially Black)}
-\end{key}
\begin{key}{/liftarm/mark holes=\marg{values}}
-The key |mark holes| defines the holes in the liftarm which will be marked. The key |mark color| defines the color of these marks.
+\end{key}
+\begin{key}{/liftarm/mark radius=\marg{factor} (initially 1)}
+\end{key}
+\begin{stylekey}{/liftarm/mark style=\marg{options} (initially \normalfont empty)}
+The key |mark holes| defines the holes in the liftarm which will be marked. The radius is the product of the \meta{factor} given to the key |mark radius| and the value of the key |hole radius|. The style of these marks is determined as follows. First, the color is set to |black|. Thereafter, the style of the key |mark style| is added.
\begin{codeexample}[width=10cm]
\begin{tikzpicture}
\liftarm[
- mark holes={0,1,3}
+ mark holes={0,1,3}
]{0,0}{5}{0}
\liftarm[
- mark holes={1,2,4},
- mark color=Blue
+ mark holes={1,2,4},
+ mark radius=2/3,
+ mark style=Blue
]{0,1}{4}{0}
\end{tikzpicture}
\end{codeexample}
-\end{key}
+\end{stylekey}
\begin{key}{/liftarm/origin=\marg{number} (initially 0)}
This key defines the number of the hole which will be placed at the coordinate given as argument to the liftarm.
\begin{codeexample}[width=10cm]
\begin{tikzpicture}
\liftarm{-2,0}{4}{0}
-\liftarm[origin=1]{0,0}{6}{30}
-\liftarm[origin=2]{0,0}{5}{60}
+\liftarm[origin=1]{0,0}{3}{30}
+\liftarm[origin=2]{0,0}{5}{-20}
\end{tikzpicture}
\end{codeexample}
\end{key}
@@ -210,216 +209,254 @@ The \meta{value} of this key defines the factor which scales the thickness of th
\end{tikzpicture}
\end{codeexample}
\end{key}
-\begin{key}{/liftarm/screw color=\marg{name} (initially Black)}
+\begin{key}{/liftarm/screw angle=\marg{angle} (initially 10)}
\end{key}
\begin{key}{/liftarm/screw holes=\marg{values}}
\end{key}
-\begin{key}{/liftarm/screw holes angle=\marg{angle} (initially 45)}
-The key |screw holes| defines the holes in the liftarm where a screw will be drawn. The key |screw color| defines the color of these screws. The key |screw holes angle| defines the angle in degrees around which the screws are drawn.
+\begin{key}{/liftarm/screw radius=\marg{factor} (initially 0.8)}
+\end{key}
+\begin{stylekey}{/liftarm/screw style=\marg{options} (initially \normalfont empty)}
+The key |screw holes| defines the holes in the liftarm where a screw will be drawn. The angle of these screws is determined by the key |screw angle| which is an angle in degrees. The radius is the product of the \meta{factor} given to the key |screw radius| and the value of the key |hole radius|. The style of these screws is determined as follows. First, the color is set to |black|. Then the option |rotate=45| is added. Thereafter, the style of the key |screw style| is added.
\begin{codeexample}[width=10cm]
\begin{tikzpicture}
\liftarm[
- screw holes={0,1,3}
+ screw holes={0,1,3}
]{0,0}{5}{0}
\liftarm[
- screw holes={1,2,4},
- screw color=Blue,
- screw holes angle=0
+ screw angle=15,
+ screw holes={1,2,4},
+ screw radius=0.7,
+ screw style={Blue,rotate=-45}
]{0,1}{4}{0}
\end{tikzpicture}
\end{codeexample}
+\end{stylekey}
+\begin{key}{/liftarm/type=\mchoice{liftarm,line segment} (initially liftarm)}
+\begin{description}
+\item[\texttt{liftarm}] In this case, the command |\liftarm| draws a liftarm.
+\item[\texttt{line segment}] In this case, the command |\liftarm| draws a line segment.
+\end{description}
\end{key}
\end{command}
\section{Connecting liftarms}
-\begin{command}{\liftarmconnect\opt{\oarg{options}}\marg{point1}\marg{length1}\marg{point2}\marg{length2}}
-This command can be placed inside a |tikzpicture| environment. It draws a liftarm of \meta{length1} starting at \meta{point1} and a liftarm of \meta{length2} starting at \meta{point2} in such a way that their last holes have the same coordinate in case that such a point exists. If such a point does not exist then nothing is drawn. In case that there exist 2 such points then this point is chosen counterclockwise. In that case, the other configuration of the 2 liftarms can be obtained by simply swapping \marg{point1}\marg{length1} and \marg{point2}\marg{length2}. The keys for the command |\liftarm| can be given to the \meta{options}. In this case these keys will be passed to both liftarms.
-\begin{codeexample}[width=9cm]
+\begin{environment}{{liftarmconnect}\opt{\oarg{options}}}
+This environment can be placed inside a |tikzpicture| environment. It can be used to connect liftarms where the angles are computed automatically. The \meta{options} can be a list of keys from the liftarm key family.
+
+The contents should consist only of commands |\liftarm| and spaces.
+
+The conditions to connect the liftarms are specified by the key |coordinate|. The resulting equations are determined automatically by the environment |liftarmconnect|. The number of liftarms needs to be equal to the number of equations. In the example below, there are 2 liftarms and 1 condition specified with the coordinate |A| resulting in 2 equations.
+\begin{codeexample}[width=10cm]
\begin{tikzpicture}
-\coordinate (A) at (0,0);
-\coordinate (B) at (4,2);
-\coordinate (C) at (1,-3);
-\coordinate (D) at (5,-1);
-\liftarmconnect[Yellow]{A}{2}{B}{3}
-\liftarmconnect[Red]{B}{3}{A}{2}
-\liftarmconnect[Green]{C}{3}{D}{2}
-\liftarmconnect[Blue]{D}{2}{C}{3}
-\foreach\coord in {A,B,C,D}{
- \node at (\coord) {{\small $\coord$}};
-}
+\coordinate (X) at (5,0);
+\begin{liftarmconnect}
+ \liftarm[coordinate=4/A]{0,0}{4}{60}
+ \liftarm[coordinate=4/A]{X}{4}{120}
+\end{liftarmconnect}
\end{tikzpicture}
\end{codeexample}
-Additionally, the \meta{options} can be given with the following keys.
-\begin{key}{/liftarm/connect coordinate=\marg{name}}
-This key defines a coordinate with name \meta{name} at the connection point of both liftarms.
-\begin{codeexample}[width=10cm]
+The similar code below does not work because the coordinate |A| is used as the starting point of the second liftarm but is unknown since it is used in a condition for the first liftarm and furthermore, there is no liftarm to complement the condition involving |A| in the first liftarm.
+\begin{codeexample}[code only]
\begin{tikzpicture}
-\liftarm{-3,0}{5}{0}
-\liftarmconnect[
- connect coordinate=A
-]{2,0}{2}{-2,0}{3}
-\liftarm{A}{4}{180}
+\coordinate (X) at (5,0);
+\begin{liftarmconnect}
+ \liftarm[coordinate=4/A]{0,0}{4}{60}
+ \liftarm[coordinate=4/X]{A}{4}{-60}
+\end{liftarmconnect}
\end{tikzpicture}
\end{codeexample}
+If the environment |liftarmconnect| consists of 2 liftarms then the law of cosines is used to compute the angles.
+
+If there are more than 2 liftarms then the set of equations is solved with the Newton-Raphson method. The initial values for the angles are given by the last arguments of the commands |\liftarm|. The Jacobian matrix is defined by the environment |liftarmconnect|. The resulting set of linear equations is solved with LU decomposition. The iteration stops if the condition determined by the key |connect stop| is satisfied.
+
+Since the \emph{let operation} from the \tikzname{} library |calc| is used, it is not possible to use the variable names |\n|, |\p|, |\x| and |\y| inside the starting point of a command |\liftarm| which is used in the environment |liftarmconnect|.
+\begin{key}{/liftarm/connect stop=\mchoice{1-norm,2-norm,iterations} (initially 1-norm)}
+\begin{description}
+\item[\texttt{1-norm}] In this case, the iteration stops if the 1-norm is smaller than the value given to this key. Its default value is $0.001$.
+\item[\texttt{2-norm}] In this case, the iteration stops if the 2-norm is smaller than the value given to this key. Its default value is $0.001$.
+\item[\texttt{iterations}] In this case, a number of iterations is executed where the number is the one given to this key. Its default value is $10$.
+\end{description}
\end{key}
-\begin{key}{/liftarm/connect reverse=\opt{\meta{boolean}} (default true, initially false)}
-If true, the first liftarm of |\liftarmconnect| will be drawn second and the second liftarm will be drawn first. This option can be used to change the appearance at the connection point of both liftarms.
\begin{codeexample}[width=10cm]
\begin{tikzpicture}
-\liftarmconnect{2,0}{1}{0,0}{2}
-\liftarmconnect[
- connect reverse
-]{5,0}{1}{3,0}{2}
+\begin{liftarmconnect}
+ \liftarm[coordinate=2/A]{0,0}{2}{70}
+ \liftarm[coordinate=3/A]{4,0}{3}{120}
+\end{liftarmconnect}
+\begin{liftarmconnect}
+ \liftarm[coordinate=4/B]{4,0}{4}{200}
+ \liftarm[coordinate=1/B]{0,0}{1}{-90}
+\end{liftarmconnect}
+\node at (A) {\small $A$};
+\node at (B) {\small $B$};
\end{tikzpicture}
\end{codeexample}
-\end{key}
-\begin{stylekey}{/liftarm/liftarm 1=\marg{options} (initially \normalfont empty)}
-\end{stylekey}
-\begin{stylekey}{/liftarm/liftarm 2=\marg{options} (initially \normalfont empty)}
-These keys accept a list of keys which will be applied to the first respectively second liftarm. These lists of keys accept the same options as the command |\liftarm|. Additionally, the key |connect| below can be given.
-\begin{key}{/liftarm/connect=\marg{number}}
-This key defines the number of the hole which will be connected to the matching liftarm. If this key is not given then the last hole of the liftarm is taken as the connecting point.
-\begin{codeexample}[width=10cm]
+The example below shows the regular pentagon from \cite{Tmm1}. In the first environment |liftarmconnect| there are $4$ liftarms and $2$ conditions resulting in $4$ equations. Hence the Jacobian matrix has size $4\times 4$.
+\begin{codeexample}[width=7cm]
+\begin{tikzpicture}[scale=0.5]
+\pgfkeys{/liftarm,liftarm style={draw=black},scalefactor=1}
+\liftarm{0,0}{3}{0}
+\begin{liftarmconnect}
+ \liftarm[coordinate={3/A,4/B,12/C}]{0,0}{12}{100}
+ \liftarm[coordinate={3/D,4/E,12/F}]{3,0}{12}{80}
+ \liftarm[coordinate=11/F]{B}{11}{60}
+ \liftarm[coordinate=11/C]{E}{11}{120}
+\end{liftarmconnect}
+\begin{liftarmconnect}
+ \liftarm[coordinate=3/G]{A}{3}{30}
+ \liftarm[coordinate=3/G]{D}{3}{150}
+\end{liftarmconnect}
+\end{tikzpicture}
+\end{codeexample}
+The example below shows iterations $0$ till $3$ of a construction with $6$ liftarms and $3$ conditions resulting in $6$ equations. Hence the Jacobian matrix has size $6\times 6$.
+\begin{codeexample}[]
\begin{tikzpicture}
-\liftarm{0,-7}{10}{90}
-\liftarmconnect[
- connect coordinate=A,
- liftarm 1={
- origin=1,
- connect=5
- },
- liftarm 2={
- origin=2,
- connect=6
- }
-]{0,2}{6}{0,0}{7}
-\liftarmconnect[
- liftarm 1={
- origin=2,
- connect=8
- },
- liftarm 2={
- origin=1,
- connect=5,
- coordinate=4/B
- }
-]{A}{9}{0,-6}{6}
-\liftarm[origin=1]{B}{4}{70}
+\liftarm{0,0}{15}{0}
+\liftarm{0,5}{15}{0}
+\foreach\k in {0,...,3}{
+ \begin{scope}[shift={(\k*4,0)}]
+ \begin{liftarmconnect}[connect stop={iterations=\k},liftarm style=ultra thick,type=line segment]
+ \liftarm[coordinate=3/A]{1,0}{3}{90}
+ \liftarm[coordinate=3/B]{3,0}{3}{90}
+ \liftarm[coordinate=1/B]{A}{1}{0}
+ \liftarm[coordinate=1/C]{A}{1}{70}
+ \liftarm[coordinate=1/C]{B}{1}{110}
+ \liftarm[coordinate=2/C]{0,5}{2}{0}
+ \end{liftarmconnect}
+ \node at (1.5,-1) {\texttt{iterations=\k}};
+ \end{scope}
+}
\end{tikzpicture}
\end{codeexample}
-\end{key}
-\end{stylekey}
-\end{command}
+The example below shows the regular heptagon from \cite{Tmm1}. In the first environment |liftarmconnect| there are $8$ liftarms and $4$ conditions resulting in $8$ equations. Hence the Jacobian matrix has size $8\times 8$.
+\begin{codeexample}[width=8cm]
+\begin{tikzpicture}[scale=0.4]
+\pgfkeys{/liftarm,scalefactor=1}
+\liftarm{-4,0}{8}{0}
+\begin{liftarmconnect}
+ \liftarm[coordinate={1/A,7/B,8/G}]{-4,0}{8}{135}
+ \liftarm[coordinate=11/F]{A}{11}{50}
+ \liftarm[coordinate=11/F]{B}{11}{20}
+ \liftarm[coordinate={1/C,7/D,8/H}]{4,0}{8}{45}
+ \liftarm[coordinate=11/E]{C}{11}{130}
+ \liftarm[coordinate=11/E]{D}{11}{160}
+ \liftarm[coordinate=8/E]{G}{8}{30}
+ \liftarm[coordinate=8/F]{H}{8}{150}
+\end{liftarmconnect}
+\begin{liftarmconnect}
+ \liftarm[coordinate=8/I]{E}{8}{70}
+ \liftarm[coordinate=8/I]{F}{8}{110}
+\end{liftarmconnect}
+\begin{liftarmconnect}
+ \liftarm[coordinate=8/J]{G}{8}{70}
+ \liftarm[coordinate=8/J]{I}{8}{210}
+\end{liftarmconnect}
+\begin{liftarmconnect}
+ \liftarm[coordinate=8/K]{H}{8}{110}
+ \liftarm[coordinate=8/K]{I}{8}{-30}
+\end{liftarmconnect}
+\end{tikzpicture}
+\end{codeexample}
+\end{environment}
\section{Describing a construction}
-If a construction involves many liftarms then it is convenient to describe this construction in separate steps and |tikzpicture|s. Then the content of previous |tikzpicture|s would need to be copied in each new |tikzpicture|. This process can be automated by using the |liftarmconstruction| environment and the command |\liftarmconstruct| below.
-\begin{environment}{{liftarmconstruction}\opt{\oarg{options}}}
-This environment is in fact an |enumerate| environment with the addition that it resets the content of the |tikzpicture| which is displayed by the command |\liftarmconstruct| below. Thus in particular, |\item| can be used inside the |liftarmconstruction| environment. The \meta{options} will be passed to each |tikzpicture| drawn by the command |\liftarmconstruct| inside this environment. The following command can be used inside this environment.
-\begin{command}{\liftarmconstruct\opt{\oarg{options}}\marg{text}\marg{commands}}
-This command starts an |\item| and shows \meta{text}. Then it displays a |tikzpicture| containing \meta{commands} and also the \meta{commands} of previous |\liftarmconstruct| commands inside the same |liftarmconstruction| environment. The \meta{options} will be added to this |tikzpicture| but \emph{only} in the current step.
+If a construction involves many liftarms then it is convenient to describe this construction in separate steps. Then the content of previous steps would need to be copied in each new step. This process can be automated by using the command |\liftarmconstruct| below.
+\begin{command}{\liftarmconstruct\marg{commands}}
+This command appends \meta{commands} to an internal token list. Then it uses this token list.
+\end{command}
+\begin{command}{\liftarmconstructclear}
+This command clears the token list which is used by the command |\liftarmconstruct|.
As an example, we describe below the construction of a regular pentagon from \cite{Tmm1}.
-\begin{codeexample}[width=10cm]
-\begin{minipage}{0.5\linewidth}%only for
-%usage in this manual%\linewidth-6pt
-%\begin{multicols}{2}%only for
-%usage in this manual
-\begin{liftarmconstruction}[scale=0.75]
-\liftarmconstruct[
- {\node[left,align=left]
- at (-0.5,-1.3)
- {Rectangular triangle.\\
- This text is only\\
- visible in this step.};}
-]{
- We start with 3 liftarms to form
- a rectangular triangle.
-}{
-\liftarm{-3,0}{4}{0}
-\liftarmconnect[
- liftarm 1={
- origin=2,
- mark holes={2,6}
- },
- liftarm 2={
- mark holes=0
- }
-]{0,0}{6}{-3,0}{5}}
-\item An |\item| can be added since this
- is an |enumerate| environment.
+\begin{codeexample}[width=7cm]
+\begin{minipage}{5.5cm}%only for usage in this manual
+\liftarmconstructclear
+\begin{enumerate}
+\item First we form a rectangular triangle with 3 liftarms.
+\begin{center}
+\begin{tikzpicture}[scale=0.7]
\liftarmconstruct{
- Now we add 2 liftarms of length $3$.
-}{\liftarmconnect[
- connect coordinate=A,
- liftarm 1={
- mark holes={0,3}
- },
- liftarm 2={
- mark holes=0
- }
-]{0,-2}{3}{0,2}{3}}
+ \liftarm[mark holes=3]{-3,0}{4}{0}
+ \begin{liftarmconnect}
+ \liftarm[coordinate=6/A,origin=2]{0,0}{6}{90}
+ \liftarm[coordinate=5/A,mark holes={0,5}]{-3,0}{5}{60}
+ \end{liftarmconnect}
+}
+\end{tikzpicture}
+\end{center}
+\item Then we add 2 liftarms of length $3$.
+\begin{center}
+\begin{tikzpicture}[scale=0.7]
\liftarmconstruct{
- In this step we construct the first
- side of the regular pentagon.
-}{\liftarmconnect[
- connect coordinate=B,
- liftarm 2={
- mark holes={0,2}
- }
-]{A}{2}{1,0}{2}}
+ \begin{liftarmconnect}
+ \liftarm[coordinate=3/B,mark holes={0,3}]{0,-2}{3}{45}
+ \liftarm[coordinate=3/B,mark holes=0]{0,2}{3}{-45}
+ \end{liftarmconnect}
+}
+\end{tikzpicture}
+\end{center}
+\item Here appears the first side of the regular pentagon.
+\begin{center}
+\begin{tikzpicture}[scale=0.7]
\liftarmconstruct{
- Now we finish the construction
- of the regular pentagon.
-}{\liftarmconnect[
- liftarm 2={
- mark holes={0,2}
- }
-]{B}{2}{-1,0}{2}
-\liftarmconnect[
- liftarm 1={
- mark holes=2
- }
-]{-1,0}{2}{A}{2}}
-\end{liftarmconstruction}
-%\end{multicols}
+ \begin{liftarmconnect}
+ \liftarm[coordinate=2/C]{B}{2}{100}
+ \liftarm[coordinate=2/C,mark holes={0,2}]{1,0}{2}{80}
+ \end{liftarmconnect}
+}
+\end{tikzpicture}
+\end{center}
+\item Now we end the construction of the regular pentagon.
+\begin{center}
+\begin{tikzpicture}[scale=0.7]
+\liftarmconstruct{
+ \begin{liftarmconnect}
+ \liftarm[coordinate=2/D]{C}{2}{180}
+ \liftarm[coordinate=2/D,mark holes={0,2}]{-1,0}{2}{80}
+ \end{liftarmconnect}
+ \begin{liftarmconnect}
+ \liftarm[coordinate=2/E,mark holes=2]{-1,0}{2}{-80}
+ \liftarm[coordinate=2/E]{B}{2}{210}
+ \end{liftarmconnect}
+}
+\end{tikzpicture}
+\end{center}
+\end{enumerate}
\end{minipage}
\end{codeexample}
\end{command}
-\end{environment}
\section{Animations}
\begin{command}{\liftarmanimate\opt{\oarg{options}}\marg{frame rate}\marg{list}\marg{command}}
-This command shows an animation using the |animateinline| environment of the package |animate|. The package |animate| is \emph{not} loaded by default and needs to be loaded to use the command |\liftarmanimate|. The \meta{options} are passed to the |animateinline| environment. The \meta{frame rate} of the animation is described in the documentation of the package |animate|. The \meta{command} must be a previously defined command with one mandatory argument. The \meta{list} is passed to a |\foreach| loop. The frames of the animation consist of the \meta{command} evaluated one by one in the result of the |\foreach| loop. The command |\liftarmanimate| creates a timeline which is used in the |animateinline| environment. This timeline is stored in the file |liftarm|\meta{number of the animation in the document}|.tln|. It requires two compiler runs to create and use this timeline correctly.
+This command shows an animation using the |animateinline| environment of the package |animate|. The package |animate| is \emph{not} loaded by default and needs to be loaded to use the command |\liftarmanimate|. The \meta{options} are passed to the |animateinline| environment. The \meta{frame rate} of the animation is described in the documentation of the package |animate|. The \meta{command} must be a previously defined command with one mandatory argument. The \meta{list} is passed to a |\foreach| loop. The frames of the animation consist of the \meta{command} evaluated one by one in the result of the |\foreach| loop. The command |\liftarmanimate| creates a timeline which is used in the |animateinline| environment. This timeline is stored in the file \meta{job name}\meta{number of the animation in the document}|.tln|. It requires two compiler runs to create and use this timeline correctly.
\begin{key}{/liftarm/trace=\marg{number/number of frames/code}\dots}
This key draws \meta{code} at hole \meta{number} of the liftarm on the frames of the animation determined by \meta{number of frames}.
If \meta{number of frames} is 0 then the \meta{code} is drawn starting at the current frame until the end of the animation. If \meta{number of frames} is an integer greater than or equal to 1 then the \meta{code} is drawn starting at the current frame and remaining during the next frames determined by \meta{number of frames}. If \meta{number of frames} is left empty then the \meta{code} is drawn starting at the beginning of the animation until the end of the animation.
-The \meta{code} can be some \tikzname{} code. In this \meta{code}, $(0,0)$ is positioned at hole \meta{number} of the liftarm. If \meta{code} is left empty then the following code is used.
-\begin{codeexample}[code only]
-\fill[Black] (0,0) circle[radius=0.66*\liftarm@holeradius];
-\end{codeexample}
+The \meta{code} can be some \tikzname{} code. In this \meta{code}, $(0,0)$ is positioned at hole \meta{number} of the liftarm. If \meta{code} is left empty then a black circle with radius $\frac{2}{3}$ times the |hole radius| is used.
+
A list of multiple triples \meta{number/number of frames/code} can be given to the key |trace|.
\begin{codeexample}[width=10cm,preamble={\usepackage{animate}}]
\newcommand{\exampleliftarmanimate}[1]{
- \liftarm[
- origin=1,
- mark holes=1,
- trace={
- 2/0/,
- 3//,
- 4/3/{\fill[Blue] (0,0)
- circle[radius=0.15];}
- }
- ]{0,0}{4}{#1}
+ \liftarm[
+ origin=1,
+ mark holes=1,
+ trace={
+ 2/0/,
+ 3//,
+ 4/3/{\fill[Blue] (0,0)
+ circle[radius=0.15];}
+ }
+ ]{0,0}{4}{#1}
}
\liftarmanimate[
- autoplay,
- controls,
- loop,
- begin={
- \begin{tikzpicture}
- \useasboundingbox (-4,-4)
- rectangle (4,4);
- },
- end={\end{tikzpicture}}
+ autoplay,
+ controls,
+ loop,
+ begin={
+ \begin{tikzpicture}
+ \useasboundingbox (-4,-4)
+ rectangle (4,4);
+ },
+ end={\end{tikzpicture}}
]
{5}
{0,30,...,330}
@@ -429,11 +466,14 @@ A list of multiple triples \meta{number/number of frames/code} can be given to t
\end{command}
\section{Additional examples}
The following example shows a regular hexagon.
-\begin{codeexample}[width=9cm]
+\begin{codeexample}[width=8cm]
\begin{tikzpicture}
\def\r{3}
-\foreach\n in {1,...,6}{
- \liftarmconnect{0,0}{\r}{\n*60:\r}{\r}
+\foreach\m in {1,...,6}{
+ \begin{liftarmconnect}
+ \liftarm[coordinate=\r/A]{0,0}{\r}{(\m+1)*60}
+ \liftarm[coordinate=\r/A]{\m*60:\r}{\r}{(\m+2)*60}
+ \end{liftarmconnect}
}
\end{tikzpicture}
\end{codeexample}
@@ -448,18 +488,6 @@ The following example illustrates that $2\atan(\frac{1}{2})=\atan(\frac{4}{3})$.
\liftarm{2,1}{1}{90+atan(4/3)}
\end{tikzpicture}
\end{codeexample}
-Below is an example of an angled liftarm.
-\begin{codeexample}[width=9cm]
-\begin{tikzpicture}
-\pgfkeys{
- /liftarm,
- scalefactor=1,
- Blue
-}
-\liftarm[axle holes=0]{0,0}{3}{0}
-\liftarm[axle holes=5]{3,0}{5}{atan(4/3)}
-\end{tikzpicture}
-\end{codeexample}
The following example illustrates an angle bisection.
\begin{codeexample}[width=9cm]
\begin{tikzpicture}
@@ -468,26 +496,45 @@ The following example illustrates an angle bisection.
\liftarm[mark holes={0,\r}]{0,0}{2*\r}{0}
\liftarm[mark holes=\r]{0,0}{2*\r}{\ang}
\liftarm[
- mark holes=\r,
- mark color=Red
+ mark holes=\r,
+ mark style=Red
]{\r,0}{\r}{\ang}
\liftarm{\ang:\r}{\r}{0}
\end{tikzpicture}
\end{codeexample}
+The following example illustrates that $7^{2}=3^{2}+8^{2}-2\cdot 3\cdot 8\cos(\frac{\pi}{3})$.
+\begin{codeexample}[width=9cm]
+\begin{tikzpicture}
+\begin{liftarmconnect}
+ \liftarm[coordinate=3/A]{0,0}{3}{80}
+ \liftarm[coordinate=3/A]{3,0}{3}{100}
+\end{liftarmconnect}
+\begin{liftarmconnect}
+ \liftarm[coordinate=8/B]{0,0}{8}{0}
+ \liftarm[coordinate=7/B]{A}{7}{0}
+\end{liftarmconnect}
+\end{tikzpicture}
+\end{codeexample}
The following example illustrates that $7^{2}+4^{2}=8^{2}+1^{2}$.
\begin{codeexample}[width=9cm]
-\begin{tikzpicture}[scale=0.75]
+\begin{tikzpicture}
\def\a{4}
\def\b{7}
\def\c{1}
\def\d{8}
%\liftarm{0,0}{\b}{0}
%\liftarm{\b,0}{\a}{90}
-\liftarmconnect{0,0}{\b}{\b,\a}{\a}
+\begin{liftarmconnect}
+ \liftarm[coordinate=\b/A]{0,0}{\b}{0}
+ \liftarm[coordinate=\a/A]{\b,\a}{\a}{-90}
+\end{liftarmconnect}
\liftarm{4,0}{3}{90}
%\liftarm{\b,\a}{1}{atan(\a/\b)+atan(\c/\d)+90}
%\liftarm{0,0}{\d}{atan(\a/\b)+atan(\c/\d)}
-\liftarmconnect{\b,\a}{\c}{0,0}{\d}
+\begin{liftarmconnect}
+ \liftarm[coordinate=\d/B]{0,0}{\d}{45}
+ \liftarm[coordinate=\c/B]{\b,\a}{\c}{135}
+\end{liftarmconnect}
\end{tikzpicture}
\end{codeexample}
Below is an animation of the Peaucellier-Lipkin linkage, see e.g.~\cite{Koagmopermbl}.
@@ -497,31 +544,35 @@ Below is an animation of the Peaucellier-Lipkin linkage, see e.g.~\cite{Koagmope
\def\a{3}
\def\b{4}
\def\c{9}
-\pgfmathsetmacro{\x}{
- 2*\a+((\c^2-\b^2-(2*\a)^2)/(2*\a))
+\edef\l{
+ \fpeval{2*\a+(\c^2-\b^2-(2*\a)^2)/(2*\a)}
}
\useasboundingbox (-0.23,-6) rectangle
- ({\x+0.23},6);
-\draw (\x,-5)--(\x,5);
+ (\l+0.23,6);
+\draw (\l,-5)--(\l,5);
\liftarm{0,0}{\a}{0}
\liftarm[coordinate=\a/A]{\a,0}{\a}{#1}
-\liftarmconnect[
- connect coordinate=B,
- connect reverse
-]{A}{\b}{0,0}{\c}
-\liftarmconnect[
- connect coordinate=C
-]{0,0}{\c}{A}{\b}
-\liftarmconnect{C}{\b}{B}{\b}
+\begin{liftarmconnect}
+ \liftarm[coordinate=\c/B]{0,0}{\c}{0}
+ \liftarm[coordinate=\b/B]{A}{\b}{90}
+\end{liftarmconnect}
+\begin{liftarmconnect}
+ \liftarm[coordinate=\c/C]{0,0}{\c}{0}
+ \liftarm[coordinate=\b/C]{A}{\b}{-90}
+\end{liftarmconnect}
+\begin{liftarmconnect}
+ \liftarm[coordinate=\b/D]{C}{\b}{0}
+ \liftarm[coordinate=\b/D]{B}{\b}{0}
+\end{liftarmconnect}
\end{tikzpicture}
}
\begin{animateinline}[
- autoplay,
- controls,
- palindrome
+ autoplay,
+ controls,
+ palindrome
]{30}
\multiframe{80}{rAng=-40+1}{
- \PLlinkage{\rAng}
+ \PLlinkage{\rAng}
}
\end{animateinline}
\end{codeexample}
@@ -534,13 +585,19 @@ Below is an animation of Kempe's trisector, as shown in \cite{Tmm3}.
\liftarm[coordinate=12/B]{0,0}{27}{180-(#1)}
\liftarm[coordinate=18/C]{0,0}{27}{180-2*(#1)}
\liftarm[coordinate=27/D]{0,0}{27}{180-3*(#1)}
-\liftarmconnect{C}{27}{D}{18}
-\liftarmconnect[liftarm 2={connect=8}]{A}{12}{B}{18}
+\begin{liftarmconnect}
+ \liftarm[coordinate=27/E]{C}{27}{0}
+ \liftarm[coordinate=18/E]{D}{18}{0}
+\end{liftarmconnect}
+\begin{liftarmconnect}
+ \liftarm[coordinate=12/F]{A}{12}{0}
+ \liftarm[coordinate=8/F]{B}{18}{0}
+\end{liftarmconnect}
\end{tikzpicture}
}
\begin{animateinline}[autoplay,controls,palindrome]{5}
\multiframe{20}{rAng=15+1}{
-\trisector{\rAng}
+ \trisector{\rAng}
}
\end{animateinline}
\end{codeexample}
@@ -549,40 +606,85 @@ Below is an animation of Chebyshev's Lambda Mechanism.
\newcommand{\CL}[1]{
\liftarm{0,0}{4*\r}{0}
\liftarm[
- mark holes={0,2*\r}
+ mark holes={0,2*\r}
]{0,0}{2*\r}{#1}
-\liftarmconnect[
- liftarm 1={mark holes={0,5*\r}},
- liftarm 2={
- connect=5*\r,
- mark holes=10*\r,
- mark color=Red,
- trace={6*\r/0/,10*\r//}
- }
-]{4*\r,0}{5*\r}{#1:2*\r}{10*\r}
+\begin{liftarmconnect}
+ \liftarm[
+ coordinate=5*\r/A,
+ mark holes={0,5*\r}
+ ]{4*\r,0}{5*\r}{90}
+ \liftarm[
+ coordinate=5*\r/A,
+ mark holes=10*\r,
+ mark style=Red,
+ trace={6*\r/0/,10*\r//}
+ ]{#1:2*\r}{10*\r}{90}
+\end{liftarmconnect}
}
\liftarmanimate[
- autoplay,
- controls,
- loop,
- begin={
- \begin{tikzpicture}[scale=0.8]
- \def\r{1}
- \useasboundingbox
- (-2*\r-0.5,-2*\r-0.5)
- rectangle
- (10*\r-0.5,10*\r+0.5);
- },
- end={\end{tikzpicture}}
+ autoplay,
+ controls,
+ loop,
+ begin={
+ \begin{tikzpicture}[scale=0.8]
+ \def\r{1}
+ \useasboundingbox
+ (-2*\r-0.5,-2*\r-0.5)
+ rectangle
+ (10*\r-0.5,10*\r+0.5);
+ },
+ end={\end{tikzpicture}}
]
{20}
{0,5,...,355}
{\CL}
\end{codeexample}
+Below is an animation of a multilink steering mechanism.
+\begin{codeexample}[preamble={\usepackage{animate}}]
+\newcommand{\multilink}[1]{
+\begin{tikzpicture}[scale=0.9]
+\useasboundingbox (-8.5,-0.5) rectangle (8.5,5.7);
+\liftarm[brick,screw holes={0,6}]{-3,0}{6}{0}
+\liftarm[brick,screw holes={0,6}]{-3,3}{6}{0}
+\liftarm[coordinate={0/X,6/Y},screw holes={0,6}]{{-3+(#1)*0.1},4}{6}{0}
+\begin{liftarmconnect}
+ \liftarm[coordinate=3/A]{-3,0}{3}{160}
+ \liftarm[coordinate=3/B]{-3,3}{3}{200}
+ \liftarm[coordinate={1/B,4/C},screw holes={0,1,4}]{A}{4}{90}
+ \liftarm[coordinate=3/C]{X}{3}{180}
+\end{liftarmconnect}
+\begin{liftarmconnect}
+ \liftarm[coordinate=3/D]{3,0}{3}{20}
+ \liftarm[coordinate=3/E]{3,3}{3}{-20}
+ \liftarm[coordinate={1/E,4/F},screw holes={0,1,4}]{D}{4}{90}
+ \liftarm[coordinate=3/F]{Y}{3}{0}
+\end{liftarmconnect}
+\end{tikzpicture}
+}
+\begin{animateinline}[autoplay,controls,palindrome]{10}
+\multiframe{41}{rAng=-20+1}{
+ \multilink{\rAng}
+}
+\end{animateinline}
+\end{codeexample}
\section{Version history}
\begin{itemize}
\item[] \textbf{Version 1.0 (2022/03/08)} First version.
-\item[] \textbf{Version 2.0 (2022/04/07)} Removed some redundant |;| in the code.\footnote{Thanks to Denis Bitouz\'e for pointing this out.} Added the command |\liftarmanimate| and the key |trace|.
+\item[] \textbf{Version 2.0 (2022/04/07)} Removed some redundant |;| in the code.\footnote{Thanks to Denis Bitouzé for pointing this out.} Added the command |\liftarmanimate| and the key |trace|.
+\item[] \textbf{Version 3.0 (2024/05/20)}
+\begin{itemize}
+\item The package now mainly uses \LaTeX3 syntax. The package |etoolbox| is not loaded anymore.
+\item Improved the code for the key |axle holes|. In particular, the combinations with the keys |contour| and |hole radius| are fixed.
+\item Improved the path for the shape of a liftarm if the key |brick| is used.
+\item Changed the key |color| to accept two arguments. The color can no longer be specified without a key.
+\item Removed the keys |color 0|, |color 1|, |color 2|, |color 3|, |color 4|, |color 5|, |color 6| and |color 7|.
+\item In v2.0, the colors could only be defined up to length $7$. In v3.0, this is not a restriction anymore.
+\item Changed some initial colors from |Black| to |black|.
+\item Added the keys |contour style| and |liftarm style|.
+\item Removed the keys |mark color|, |screw color| and |screw holes angle|. Added the keys |mark radius|, |mark style|, |screw angle|, |screw radius| and |screw style|.
+\item Improved the algorithm to connect liftarms in multiple ways. In v2.0, transformations such as |x={(0.8,0.5)},y={(-0.6,1.2)}| were not taken into account correctly. This is fixed in v3.0. In v2.0, only 2 liftarms could be connected automatically. In v3.0, this is not a restriction anymore. Therefore the command |\liftarmconnect| and the keys |connect|, |connect coordinate|, |connect reverse|, |liftarm 1| and |liftarm 2| are removed. Instead, the environment |liftarmconnect| and the key |connect stop| were added in v3.0.
+\item Changed the command |\liftarmconstruct| to allow more customization. Removed the environment |liftarmconstruction| and added the command |\liftarmconstructclear|.
+\end{itemize}
\end{itemize}
\begin{thebibliography}{9}
\bibitem{Tmm1}
@@ -607,9 +709,16 @@ Alfred Bray Kempe,
\bibitem{TtTaPGFp}
Till Tantau,
\emph{The \tikzname{} and {\upshape\pgfname} Packages},
-Manual for version 3.1.9a,
+Manual for version 3.1.10,
\url{https://ctan.org/pkg/pgf},
-2021.
+2023.
\end{thebibliography}
\printindex
+\newgeometry{left=2.25cm,right=2.25cm,top=2.25cm,bottom=2.25cm}
+\pagestyle{plain}
+\appendix
+\begin{landscape}
+\section{The source code}\label{Thesourcecode}
+\dochighinput[language=latex/latex3]{liftarm.sty}
+\end{landscape}
\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/thuthesis/CHANGELOG.md b/macros/latex/contrib/thuthesis/CHANGELOG.md
index 9864c944bc..fb293105fc 100644
--- a/macros/latex/contrib/thuthesis/CHANGELOG.md
+++ b/macros/latex/contrib/thuthesis/CHANGELOG.md
@@ -6,6 +6,17 @@
## [Unreleased]
+## [v7.5.1] - 2024-05-20
+
+### Changed
+
+- 更新 `student-id` 选项的处理逻辑,非 `proposal` 类型默认忽略,并增加警告([#945](https://github.com/tuna/thuthesis/issues/945))。
+
+### Fixed
+
+- 修复参考文献 URL 中带有 DOI 时,重复打印 DOI 的问题([#952](https://github.com/tuna/thuthesis/discussions/952))。
+- 修复文档中的部分错别字。
+
## [v7.5.0] - 2024-03-29
### Added
@@ -977,7 +988,8 @@
-[Unreleased]: https://github.com/tuna/thuthesis/compare/v7.5.0...HEAD
+[Unreleased]: https://github.com/tuna/thuthesis/compare/v7.5.1...HEAD
+[v7.5.1]: https://github.com/tuna/thuthesis/compare/v7.5.0...v7.5.1
[v7.5.0]: https://github.com/tuna/thuthesis/compare/v7.4.0...v7.5.0
[v7.4.0]: https://github.com/tuna/thuthesis/compare/v7.3.2...v7.4.0
[v7.3.2]: https://github.com/tuna/thuthesis/compare/v7.3.1...v7.3.2
diff --git a/macros/latex/contrib/thuthesis/thuthesis-author-year.bst b/macros/latex/contrib/thuthesis/thuthesis-author-year.bst
index 9a46a4e461..03d02861f4 100644
--- a/macros/latex/contrib/thuthesis/thuthesis-author-year.bst
+++ b/macros/latex/contrib/thuthesis/thuthesis-author-year.bst
@@ -1314,7 +1314,7 @@ FUNCTION {extract.after.slash}
FUNCTION {format.year}
{ year empty$ not
- { year extract.before.slash extra.label * }
+ { year extra.label * }
{ date empty$ not
{ date extract.before.dash extra.label * }
{ entry.is.electronic not
@@ -1494,7 +1494,7 @@ FUNCTION {format.periodical.year.volume.number}
FUNCTION {check.url}
{ url empty$ not
- { "\url{" url * "}" * 'entry.url :=
+ { url 'entry.url :=
#1 'entry.is.electronic :=
}
{ howpublished empty$ not
@@ -1525,7 +1525,11 @@ FUNCTION {output.url}
{ show.url is.pure.electronic or
entry.url empty$ not and
{ new.block
- entry.url output
+ entry.url #1 #5 substring$ "\url{" =
+ { entry.url }
+ { "\url{" entry.url * "}" * }
+ if$
+ output
}
'skip$
if$
@@ -1545,8 +1549,8 @@ FUNCTION {is.in.url}
{ entry.url empty$
{ #0 }
{ s text.length$ 'len :=
- entry.url text.length$ 'charptr :=
- { entry.url charptr len substring$ s = not
+ entry.url "l" change.case$ text.length$ 'charptr :=
+ { entry.url "l" change.case$ charptr len substring$ s "l" change.case$ = not
charptr #0 >
and
}
@@ -2073,7 +2077,7 @@ FUNCTION {map}
FUNCTION {manual} { monograph }
-FUNCTION {thesis}
+FUNCTION {mastersthesis}
{ "D" set.entry.mark
monograph
}
@@ -2088,9 +2092,7 @@ FUNCTION {online}
electronic
}
-FUNCTION {mastersthesis} { thesis }
-
-FUNCTION {phdthesis} { thesis }
+FUNCTION {phdthesis} { mastersthesis }
FUNCTION {proceedings}
{ "C" set.entry.mark
@@ -2107,13 +2109,11 @@ FUNCTION {standard}
misc
}
-FUNCTION {report}
+FUNCTION {techreport}
{ "R" set.entry.mark
misc
}
-FUNCTION {techreport} { report }
-
FUNCTION {unpublished} { misc }
FUNCTION {default.type} { misc }
diff --git a/macros/latex/contrib/thuthesis/thuthesis-bachelor.bst b/macros/latex/contrib/thuthesis/thuthesis-bachelor.bst
index 67e1f7eeb3..aea8c151bf 100644
--- a/macros/latex/contrib/thuthesis/thuthesis-bachelor.bst
+++ b/macros/latex/contrib/thuthesis/thuthesis-bachelor.bst
@@ -1304,7 +1304,7 @@ FUNCTION {extract.after.slash}
FUNCTION {format.year}
{ year empty$ not
- { year extract.before.slash extra.label * }
+ { year extra.label * }
{ date empty$ not
{ date extract.before.dash extra.label * }
{ entry.is.electronic not
@@ -1484,7 +1484,7 @@ FUNCTION {format.periodical.year.volume.number}
FUNCTION {check.url}
{ url empty$ not
- { "\url{" url * "}" * 'entry.url :=
+ { url 'entry.url :=
#1 'entry.is.electronic :=
}
{ howpublished empty$ not
@@ -1515,7 +1515,11 @@ FUNCTION {output.url}
{ show.url is.pure.electronic or
entry.url empty$ not and
{ new.block
- entry.url output
+ entry.url #1 #5 substring$ "\url{" =
+ { entry.url }
+ { "\url{" entry.url * "}" * }
+ if$
+ output
}
'skip$
if$
@@ -1535,8 +1539,8 @@ FUNCTION {is.in.url}
{ entry.url empty$
{ #0 }
{ s text.length$ 'len :=
- entry.url text.length$ 'charptr :=
- { entry.url charptr len substring$ s = not
+ entry.url "l" change.case$ text.length$ 'charptr :=
+ { entry.url "l" change.case$ charptr len substring$ s "l" change.case$ = not
charptr #0 >
and
}
@@ -2063,7 +2067,7 @@ FUNCTION {map}
FUNCTION {manual} { monograph }
-FUNCTION {thesis}
+FUNCTION {mastersthesis}
{ "D" set.entry.mark
monograph
}
@@ -2078,9 +2082,7 @@ FUNCTION {online}
electronic
}
-FUNCTION {mastersthesis} { thesis }
-
-FUNCTION {phdthesis} { thesis }
+FUNCTION {phdthesis} { mastersthesis }
FUNCTION {proceedings}
{ "C" set.entry.mark
@@ -2097,13 +2099,11 @@ FUNCTION {standard}
misc
}
-FUNCTION {report}
+FUNCTION {techreport}
{ "R" set.entry.mark
misc
}
-FUNCTION {techreport} { report }
-
FUNCTION {unpublished} { misc }
FUNCTION {default.type} { misc }
diff --git a/macros/latex/contrib/thuthesis/thuthesis-example.pdf b/macros/latex/contrib/thuthesis/thuthesis-example.pdf
index 1a4d6b72b0..2c48ce2ef5 100644
--- a/macros/latex/contrib/thuthesis/thuthesis-example.pdf
+++ b/macros/latex/contrib/thuthesis/thuthesis-example.pdf
Binary files differ
diff --git a/macros/latex/contrib/thuthesis/thuthesis-numeric.bst b/macros/latex/contrib/thuthesis/thuthesis-numeric.bst
index b27da61efc..6d24c4465e 100644
--- a/macros/latex/contrib/thuthesis/thuthesis-numeric.bst
+++ b/macros/latex/contrib/thuthesis/thuthesis-numeric.bst
@@ -1304,7 +1304,7 @@ FUNCTION {extract.after.slash}
FUNCTION {format.year}
{ year empty$ not
- { year extract.before.slash extra.label * }
+ { year extra.label * }
{ date empty$ not
{ date extract.before.dash extra.label * }
{ entry.is.electronic not
@@ -1484,7 +1484,7 @@ FUNCTION {format.periodical.year.volume.number}
FUNCTION {check.url}
{ url empty$ not
- { "\url{" url * "}" * 'entry.url :=
+ { url 'entry.url :=
#1 'entry.is.electronic :=
}
{ howpublished empty$ not
@@ -1515,7 +1515,11 @@ FUNCTION {output.url}
{ show.url is.pure.electronic or
entry.url empty$ not and
{ new.block
- entry.url output
+ entry.url #1 #5 substring$ "\url{" =
+ { entry.url }
+ { "\url{" entry.url * "}" * }
+ if$
+ output
}
'skip$
if$
@@ -1535,8 +1539,8 @@ FUNCTION {is.in.url}
{ entry.url empty$
{ #0 }
{ s text.length$ 'len :=
- entry.url text.length$ 'charptr :=
- { entry.url charptr len substring$ s = not
+ entry.url "l" change.case$ text.length$ 'charptr :=
+ { entry.url "l" change.case$ charptr len substring$ s "l" change.case$ = not
charptr #0 >
and
}
@@ -2063,7 +2067,7 @@ FUNCTION {map}
FUNCTION {manual} { monograph }
-FUNCTION {thesis}
+FUNCTION {mastersthesis}
{ "D" set.entry.mark
monograph
}
@@ -2078,9 +2082,7 @@ FUNCTION {online}
electronic
}
-FUNCTION {mastersthesis} { thesis }
-
-FUNCTION {phdthesis} { thesis }
+FUNCTION {phdthesis} { mastersthesis }
FUNCTION {proceedings}
{ "C" set.entry.mark
@@ -2097,13 +2099,11 @@ FUNCTION {standard}
misc
}
-FUNCTION {report}
+FUNCTION {techreport}
{ "R" set.entry.mark
misc
}
-FUNCTION {techreport} { report }
-
FUNCTION {unpublished} { misc }
FUNCTION {default.type} { misc }
diff --git a/macros/latex/contrib/thuthesis/thuthesis.dtx b/macros/latex/contrib/thuthesis/thuthesis.dtx
index 6e25d0cdfb..ea4ac03f22 100644
--- a/macros/latex/contrib/thuthesis/thuthesis.dtx
+++ b/macros/latex/contrib/thuthesis/thuthesis.dtx
@@ -14,7 +14,7 @@
%
% \iffalse
%<*driver>
-\ProvidesFile{thuthesis.dtx}[2024/03/29 7.5.0 Tsinghua University Thesis Template]
+\ProvidesFile{thuthesis.dtx}[2024/05/20 7.5.1 Tsinghua University Thesis Template]
\documentclass{ltxdoc}
\usepackage{dtx-style}
@@ -1243,8 +1243,8 @@
% include-spine = true,
% }
% \end{latex}
-% 打开此选项后,书籍会出现在中文封面后面的第一个空白页。如果有英文封面,则在英文封面之前。
-% 如果需要书籍出现在其他位置,请手工使用 \cs{spine} 生成,不要使用此选项。
+% 打开此选项后,书脊会出现在中文封面后面的第一个空白页。如果有英文封面,则在英文封面之前。
+% 如果需要书脊出现在其他位置,请手工使用 \cs{spine} 生成,不要使用此选项。
%
% \section{致谢}
% \label{sec:thanks}
@@ -1269,7 +1269,7 @@
% \begin{macrocode}
%<cls>\NeedsTeXFormat{LaTeX2e}[2017/04/15]
%<cls>\ProvidesClass{thuthesis}
-%<cls>[2024/03/29 7.5.0 Tsinghua University Thesis Template]
+%<cls>[2024/05/20 7.5.1 Tsinghua University Thesis Template]
% \end{macrocode}
%
% 报错
@@ -1330,7 +1330,7 @@
%<*cls>
\hyphenation{Thu-Thesis}
\def\thuthesis{ThuThesis}
-\def\version{7.5.0}
+\def\version{7.5.1}
\RequirePackage{kvdefinekeys}
\RequirePackage{kvsetkeys}
\RequirePackage{kvoptions}
@@ -4584,14 +4584,15 @@
\restoregeometry
}
\newcommand\thu@set@student@id{%
- \ifthu@thesis@type@proposal
- \ifx\thu@student@id\@empty
- \thusetup{student-id=2000310000}%
+ \ifthu@thesis@type@proposal\else
+ \ifx\thu@student@id\@empty\else
+ \thu@warning{`student-id' in "\protect\thusetup" would be ignored when `thesis-type' is not proposal.}%
\fi
\fi
}
\thu@set@student@id
\thu@option@hook{thesis-type}{\thu@set@student@id}
+\thu@option@hook{student-id}{\thu@set@student@id}
% \end{macrocode}
%
% 涉密信息
@@ -4656,7 +4657,13 @@
\thu@info@item{工程领域}{}{\thu@engineering@field}%
\thu@info@item{申请人}{\thu@name@title}{\thu@author}%
\fi
- \thu@info@item{学号}{}{\thu@student@id}%
+ \ifthu@thesis@type@proposal
+ \ifx\thu@student@id\@empty
+ \thu@warning{Missing option `student-id' in "\protect\thusetup", ID will not appear on cover.}
+ \else
+ \thu@info@item{学号}{}{\thu@student@id}%
+ \fi
+ \fi
\thu@info@item{指导教师}{\thu@name@title}{\thu@supervisor}%
\thu@info@item{副指导教师}{\thu@name@title}{\thu@associate@supervisor}%
\thu@info@item{联合指导教师}{\thu@name@title}{\thu@co@supervisor}%
diff --git a/macros/latex/contrib/thuthesis/thuthesis.pdf b/macros/latex/contrib/thuthesis/thuthesis.pdf
index 9f55312fdd..daa32de045 100644
--- a/macros/latex/contrib/thuthesis/thuthesis.pdf
+++ b/macros/latex/contrib/thuthesis/thuthesis.pdf
Binary files differ
diff --git a/support/TeX4ht/source/ChangeLog b/support/TeX4ht/source/ChangeLog
index 3e15e91edc..9c755d1d42 100644
--- a/support/TeX4ht/source/ChangeLog
+++ b/support/TeX4ht/source/ChangeLog
@@ -1,3 +1,11 @@
+2024-05-20 Michal Hoftich <michal.h21@gmail.com>
+
+ * tex4ht-4ht.tex (
+ index.4ht, imakeidx.4ht, memoir.4ht, indextools.4ht
+ ): added support for optional argument of \index used inside of
+ \caption.
+ https://tex.stackexchange.com/a/718360/2891
+
2024-05-10 Michal Hoftich <michal.h21@gmail.com>
* tex4ht-4ht.tex (lettrine.4ht): defined more keys supported by the
diff --git a/support/TeX4ht/source/tex4ht-4ht.tex b/support/TeX4ht/source/tex4ht-4ht.tex
index 040ebf5bde..c0a300cb01 100644
--- a/support/TeX4ht/source/tex4ht-4ht.tex
+++ b/support/TeX4ht/source/tex4ht-4ht.tex
@@ -1,4 +1,4 @@
-% $Id: tex4ht-4ht.tex 1519 2024-05-19 14:40:58Z karl $
+% $Id: tex4ht-4ht.tex 1521 2024-05-20 13:02:00Z michal_h21 $
% tex tex4ht-4ht or ht tex tex4ht-4ht
%
% Copyright 2009-2024 TeX Users Group
@@ -12261,6 +12261,13 @@ and print them when it is safe.
\ExplSyntaxOff
>>>
+\<latex caption index optional\><<<
+\ExplSyntaxOn
+\renewcommand\:saveindex[2][]{\seq_gput_right:Nn\:savedindex{[#1]{#2}}}
+\def\:printsavedindex{\seq_map_inline:Nn\:savedindex{\index##1}}
+\ExplSyntaxOff
+>>>
+
\<latex caption index save\><<<
\:initsaveindex%
\let\index\:saveindex%
@@ -16518,6 +16525,7 @@ DIV.right
\<memoir.4ht\><<<
% memoir.4ht (|version), generated from |jobname.tex
% Copyright |CopyYear.2003. Eitan M. Gurari
+% Copyright 2003-2024 TeX Users Group
|<TeX4ht copywrite|>
\input book.4ht
\input verse.4ht
@@ -16530,6 +16538,7 @@ DIV.right
|<memoir 2008|>
|<mempatch cfg|>
\fi
+|<latex caption index optional|>
\Hinput{memoir}
\endinput
>>> \AddFile{8}{memoir}
@@ -32413,6 +32422,7 @@ not necessary in MathML anyway.
\<index.4ht\><<<
% index.4ht (|version), generated from |jobname.tex
% Copyright |CopyYear.1999. Eitan M. Gurari
+% Copyright 2024 TeX Users Group
|<TeX4ht copywrite|>
|<index shared|>
\expandafter\ifx \csname @vwritefile\endcsname\relax
@@ -32420,6 +32430,7 @@ not necessary in MathML anyway.
\else
|<index 3.02|>
\fi
+|<latex caption index optional|>
\Hinput{index}
\endinput
>>> \AddFile{7}{index}
@@ -32519,11 +32530,11 @@ multind.sty\EndLink
\<imakeidx.4ht\><<<
% imakeidx.4ht (|version), generated from |jobname.tex
-% Copyright 2019-2022 TeX Users Group
+% Copyright 2019-2024 TeX Users Group
|<TeX4ht license text|>
|<imakeidx.sty|>
-
+|<latex caption index optional|>
\Hinput{imakeidx}
\endinput
@@ -32588,11 +32599,12 @@ d|<haddr prefix|>\last:haddr
\<indextools.4ht\><<<
% indextools.4ht (|version), generated from |jobname.tex
-% Copyright 2022 TeX Users Group
+% Copyright 2022-2024 TeX Users Group
|<TeX4ht license text|>
|<indextools index|>
|<indextools defs|>
|<indextools disable options|>
+|<latex caption index optional|>
\Hinput{indextools}
\endinput
diff --git a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
index 5702413522..7a28b3cd16 100644
--- a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+++ b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
@@ -16,6 +16,7 @@ $mirrors = {
'https://mirrors.cloud.tencent.com/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,
@@ -112,6 +113,7 @@ $mirrors = {
},
'Greece' => {
'http://ftp.ntua.gr/mirror/ctan/' => 1,
+ 'https://fosszone.csd.auth.gr/CTAN/' => 1,
'https://ftp.cc.uoc.gr/mirrors/CTAN/' => 1,
},
'Hungary' => {
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
index 7545c33654..695db56f17 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/71307
+depend revision/71313
name 00texlive.image
category TLCore
-revision 71305
+revision 71310
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
@@ -988,6 +988,7 @@ runfiles size=14492
tlpkg/tlpsrc/catcodes.tlpsrc
tlpkg/tlpsrc/catechis.tlpsrc
tlpkg/tlpsrc/catoptions.tlpsrc
+ tlpkg/tlpsrc/catppuccinpalette.tlpsrc
tlpkg/tlpsrc/causets.tlpsrc
tlpkg/tlpsrc/cbcoptic.tlpsrc
tlpkg/tlpsrc/cbfonts-fd.tlpsrc
@@ -4901,7 +4902,7 @@ depend setting_available_architectures:aarch64-linux amd64-freebsd amd64-netbsd
name 00texlive.installer
category TLCore
-revision 71307
+revision 71313
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
@@ -35809,7 +35810,7 @@ catalogue-topics book-pub class doc-templ expl3
name beebe
category Package
-revision 71298
+revision 71313
catalogue biblio
shortdesc A collection of bibliographies
relocated 1
@@ -35817,7 +35818,7 @@ longdesc A collection of BibTeX bibliographies on TeX-related topics
longdesc (including, for example, spell-checking and SGML). Each
longdesc includes a LaTeX wrapper file to typeset the bibliography.
containersize 926160
-containerchecksum e50a83522ecd7e5e1146c8e432be12393896538353bee54ecbb2a162e7fecab60f137e1c1818104b5e70d7d774e699c27844f582ddbebb493bf3a3e2806c8e59
+containerchecksum 2508d082aba08930da10ea8f5b9b556ff456f6ccdef68cf6a3c43b5fe059fa64342afccfbb38a2c6592fd251ff04577a1d43b45883e42f32d9d91f5d49560db1
runfiles size=2282
RELOC/bibtex/bib/beebe/epodd.bib
RELOC/bibtex/bib/beebe/font.bib
@@ -50758,6 +50759,35 @@ catalogue-license lppl1.3
catalogue-topics macro-supp keyval
catalogue-version 0.2.7i
+name catppuccinpalette
+category Package
+revision 71310
+shortdesc Provides (x)colors of catppuccin theme
+relocated 1
+longdesc A package providing (x)colors of the catppuccin palette/theme.
+containersize 2836
+containerchecksum 98effc0eef497636bf75b2442698ec92686938176f3fa07e460e31ac11c75a5caaafe1cb93acf95a707822ec0a5324265179f319f3e320e0960cca75a1aaf007
+doccontainersize 204132
+doccontainerchecksum 52014ae031f242c4a1049bc6bd899750f3043713e6de1f187a4a42aa9567f30351f240f05b15a5e172ffd6bddfb50ca23f99ad41ed3189a3932c3ac326011ce5
+docfiles size=53
+ RELOC/doc/latex/catppuccinpalette/README.md details="Readme"
+ RELOC/doc/latex/catppuccinpalette/catppuccinpalette.pdf details="Package documentation"
+srccontainersize 4960
+srccontainerchecksum 3b4f3e8fe67e36207101d00f9523835f9d6f3555685751692963e8b25eff8545db8be3c38b3a18dead51547637a1ebfc55f5c388bc5c90f0415cee2608323ac2
+srcfiles size=5
+ RELOC/source/latex/catppuccinpalette/catppuccinpalette.dtx
+ RELOC/source/latex/catppuccinpalette/catppuccinpalette.ins
+runfiles size=2
+ RELOC/tex/latex/catppuccinpalette/catppuccinpalette.sty
+catalogue-contact-announce https://github.com/atticus-sullivan/catppuccinPalette/issues/1
+catalogue-contact-bugs https://github.com/atticus-sullivan/catppuccinPalette/issues
+catalogue-contact-repository https://github.com/atticus-sullivan/catppuccinPalette/
+catalogue-contact-support https://github.com/atticus-sullivan/catppuccinPalette/discussions/categories/q-a
+catalogue-ctan /macros/latex/contrib/catppuccinpalette
+catalogue-license lppl1.3
+catalogue-topics colour
+catalogue-version 1.0.1
+
name causets
category Package
revision 66359
@@ -72104,7 +72134,7 @@ containerchecksum 889eae40b82f31c7c4b3a17740399c763dabec7986fcb39261b252afff69a0
name collection-latexextra
category Collection
-revision 71253
+revision 71310
shortdesc LaTeX additional packages
relocated 1
longdesc A very large collection of add-on packages for LaTeX.
@@ -72272,6 +72302,7 @@ depend catchfile
depend catchfilebetweentags
depend catechis
depend catoptions
+depend catppuccinpalette
depend cbcoptic
depend ccaption
depend cclicenses
@@ -73660,8 +73691,8 @@ depend zref-clever
depend zref-vario
depend zwgetfdate
depend zwpagelayout
-containersize 7180
-containerchecksum 50b2dfa369c0572271089ea9375e583dc3c1bc19f37bc65218e967c160f864d58575db2d6b7951994d2ea21e4bddddcd9eb9d5aa25114e99df9e192877875565
+containersize 7188
+containerchecksum 0c5d41b900b3204101b46f40c223e5e6d49a253990ce1b92a4320d01cfc04d93b1b15e37987463817da11c331febe73f2d9df08d87c7103364b7248c9d336580
name collection-latexrecommended
category Collection
@@ -197937,27 +197968,30 @@ catalogue-version 1.0
name liftarm
category Package
-revision 62981
-shortdesc Draw liftarms
+revision 71309
+shortdesc Geometric constructions with liftarms using TikZ and LaTeX3
relocated 1
-longdesc This package can be used to draw liftarms with TikZ. It
-longdesc provides several options for the appearance of the liftarms, a
-longdesc command which connects two liftarms and an environment to
-longdesc describe a construction.
-containersize 3420
-containerchecksum a4938aa3e9a7c844766c2b6ef5959fda39f4de50325545d64a319a9d7f80ac2b3b5c4966e1db249e83d4cca7b82a3a7a60bff90c5d425f32a2a5c5b55b2fc4e9
-doccontainersize 1861856
-doccontainerchecksum 1d4917e9a032e459ed1922b4d1ed5b525d3cc8799dedb8d435b0a387fb9c529159b620668bf5e737e87c68e434f2c01004d6f6b2100ea2484f179f2105901a73
-docfiles size=497
+longdesc This package is based on the package TikZ and can be used to
+longdesc draw geometric constructions with liftarms. There are several
+longdesc options for the appearance of the liftarms. It provides an
+longdesc environment to connect multiple liftarms using the
+longdesc Newton-Raphson method and LU decomposition. It also provides an
+longdesc environment to describe a construction and a method to animate
+longdesc a construction with one or more traces.
+containersize 6220
+containerchecksum a015ae8440a4780c667ace8ce70c7af860e84b5c54db69d87cb3521bed924e4b00e4a2c41aeecc98f1c6a9a9e684c28cd226ef8bc48be86ac650ee1a51a2317a
+doccontainersize 2035196
+doccontainerchecksum db976f11239518519cb814af99738bd2ae9181455432dd04204f25a40d2784dd074d95702a5f59eb20d80ecd8c688cf377e8c6bec0dfe0f72b63069f2d29e9fd
+docfiles size=545
RELOC/doc/latex/liftarm/README.md details="Readme"
RELOC/doc/latex/liftarm/liftarm.pdf details="Package documentation"
RELOC/doc/latex/liftarm/liftarm.tex
-runfiles size=4
+runfiles size=11
RELOC/tex/latex/liftarm/liftarm.sty
catalogue-ctan /graphics/pgf/contrib/liftarm
-catalogue-license lppl1.3
-catalogue-topics graphics pgf-tikz
-catalogue-version 2.0
+catalogue-license lppl1.3c
+catalogue-topics graphics pgf-tikz expl3
+catalogue-version 3.0
name light-latex-make
category Package
@@ -314782,7 +314816,7 @@ binfiles arch=x86_64-solaris size=1
name tex4ht
category Package
-revision 71301
+revision 71312
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
@@ -314803,10 +314837,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 1132052
-containerchecksum f43efb1142a257225cd53d9b21f97029c35cd2f5fbceff963d8a3b01a8310da0eb67c59350462627ae87aaf8e55f69b981188e256ae960b57875849e6b5cab0f
+containersize 1132084
+containerchecksum 047382f6339e0088d0733ba0bf5261c21ec6b7b931c852f5db5379b7701fd0eb1b7e22372a8e08db4739d02d8b920baf1c0cea97e575f2a57ea7026f4002bb46
doccontainersize 136384
-doccontainerchecksum 938de454982d54824af53c82249b0601496c04f8be403177ed293956cc2939ba0aaee930147c6f8d617dac10c8ec400aa429ca5d0115712db9aba759b202d2b7
+doccontainerchecksum e68c211b86459b0a4c5febc4f4a11d4c7dec06d36ea461ef5e020cc70933439026e60176d9f070b23667c50c759edaf8d4c7abf1e80b0d5d52bf56249b6b3cc9
docfiles size=260
texmf-dist/doc/generic/tex4ht/Makefile
texmf-dist/doc/generic/tex4ht/README details="Readme"
@@ -314878,8 +314912,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 1491072
-srccontainerchecksum f608b9907c7dd75552738aa824ac9842696e19eae927dc53bf563cfdf131a4df34f4a77339dff5a5ebe5d54b57505bab3487f87a01587f51e336c3bf6aadae06
+srccontainersize 1491728
+srccontainerchecksum 21a580a4e45602c79efeb3080a2dfd4b520669a2cce4d05e91d2c1d58c3ca692439d58fc519e21305a6e1e6874f7189fe68cbf1035770d55c7ef0d6005bdb18a
srcfiles size=4647
texmf-dist/source/generic/tex4ht/ChangeLog
texmf-dist/source/generic/tex4ht/Makefile
@@ -327308,7 +327342,7 @@ docfiles size=376
name texlive-scripts
category TLCore
-revision 71307
+revision 71313
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.
@@ -327316,10 +327350,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 114340
-containerchecksum be33d9328196565bc16328de637a4733690b2809d52023fb48fb28d6ba2465d5a2849d1350c1dc22a0360778191baf95100543e6580ddb482a37d2a2390eac83
-doccontainersize 435568
-doccontainerchecksum 22adf338de67929101940f319fb3edb5e5f5976e9bc214cfa21115b0841a2193db1f94296f07f8a341d87250c04b50a4bdbf9e1e6355532cca4b11ffc6e64c24
+containersize 114360
+containerchecksum 3f7c577a575f3879904012e50e194c0176eb1451e1f8a726ec844273d5a194919acc0ee5d2e477f52af52c14d0b2ff58450b1ee6b0eb8607b57b1f06c3402060
+doccontainersize 435608
+doccontainerchecksum 99064333a9fde32e41e85464593a5d0e614a5e403387271a97ed4fa7046bfe76c00de09f04be0e40b51f13888f3b7b5ad2049847f001c980160e827654b5a3af
docfiles size=569
doc.html
texmf-dist/doc/man/man1/fmtutil-sys.1
@@ -332556,17 +332590,17 @@ catalogue-version 0.1
name thuthesis
category Package
-revision 70808
+revision 71311
shortdesc Thesis template for Tsinghua University
relocated 1
longdesc This package establishes a simple and easy-to-use LaTeX
longdesc template for Tsinghua dissertations, including general
longdesc undergraduate research papers, masters theses, doctoral
longdesc dissertations, and postdoctoral reports.
-containersize 44500
-containerchecksum 735218e3e470abd1b9cb765327740600e3988c3c3149248f879e46cb69b27909e108399f1f152e520a41f9174d2327187dfebc13ecb25dfb0377ba119c11cfe7
-doccontainersize 1618176
-doccontainerchecksum 49597e39e8a07df229d8e7949045bebb53225fc7823dad2494355d37d6ca47c1d6834af1f23615a74db380033cb6714c2c1c4bfa9b66049b174733d78aa3f16f
+containersize 44544
+containerchecksum 764577d4d8155e2f34eb27ce453c2d0dc4cca558589ca68c9da1c1e0fe2bb617c01b044b11d16ee392bfb2c2afc173f5099ba8fdc04486c1052eeadb2f52c169
+doccontainersize 1620168
+doccontainerchecksum b707f43747fbd2f5d7872387516d729d15ef9b01527ee0a1b103533309819bc6c70ac722547255b8ef5a157232372ae8d1c2e0fb92574bc3ad81fb599822d719
docfiles size=433
RELOC/doc/latex/thuthesis/CHANGELOG.md
RELOC/doc/latex/thuthesis/README.md details="Readme (Chinese & English)"
@@ -332590,8 +332624,8 @@ docfiles size=433
RELOC/doc/latex/thuthesis/thuthesis-example.pdf details="Example of use (Chinese)" language="zh"
RELOC/doc/latex/thuthesis/thuthesis-example.tex
RELOC/doc/latex/thuthesis/thuthesis.pdf details="Package documentation (Chinese)" language="zh"
-srccontainersize 48920
-srccontainerchecksum 50c3765181b2a33bf9c7614cea2ffa6e81a90f67bd7e49336e5fcdaebac2092a6ef03bb54176bea0ba5c184409d868f0bc5201ca75dc2a9cf8f1445bc99c039d
+srccontainersize 48972
+srccontainerchecksum 97c5895e4ad1ec5e81f0f432815b676b05b696d97e86754b6d69bb87a0a6407492b137f9c2cde647b795af6897390c882f1929070562c13a3068fa772eb174de
srcfiles size=54
RELOC/source/latex/thuthesis/thuthesis.dtx
RELOC/source/latex/thuthesis/thuthesis.ins
@@ -332614,7 +332648,7 @@ catalogue-contact-repository https://github.com/tuna/thuthesis
catalogue-ctan /macros/latex/contrib/thuthesis
catalogue-license lppl1.3c
catalogue-topics dissertation class doc-templ std-conform chinese
-catalogue-version 7.5.0
+catalogue-version 7.5.1
name ticket
category Package
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
index 7d7c70ff0b..e4fcff282f 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
@@ -1 +1 @@
-2d3483357c3bdcee3c9c24e1167ba90b texlive.tlpdb
+45d9be136daa36be357412d1f9f2813d texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
index 8949850267..c089092b50 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
@@ -1 +1 @@
-391be824f296c4100fb08ce905869da328f1c2e894f4042bc6e56320b0c07b4e642051f8a7e640c0a295ef4ff096593f0c0df3578868a4782ddafa0c7a3c39fb texlive.tlpdb
+8fa9066d367ce4ec0549392a99da19ae98da99172632d9acd44122b00a8250f1c1e54ccf5f9aea7ce8b82e189f2b2cc9c434eae9608b734e10a336e40b0e1920 texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
index a233d12327..4d10a2573b 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+QqiBBqTOGHfhlDjHAFAmZKj3MACgkQTOGHfhlD
-jHDrfggAvCzzWLb+bLPd1To+NCunRLcR5glSW3l2LlOO9KXT8lPeqCuIQ/t6cOCr
-eao8Egv1zPXwkdN3I/yn6JZEiQIYFWh6J9sj3RgBwMYxcIvBCpYrF1PgE6rPy9MI
-c6YIhxJQ9Y1fibasSgwJVrpVpbd8+akrppjkHvNw4IThL34fdbEX5enjWwg/Qqyh
-Q+Qh357Dl908fmryQRW4oOdX9TCejFZrruNCVQOLpkzBcs3WKJHk1dVL21QR/SDi
-uucgse70AjJOXbcF5s4QSIT8UZFLfmE5UjIiwJeQ/vAfbbKflFj87WyqHTGkMOmw
-rTQEKkhahtcC6OSA50b9k9BWKhSMSQ==
-=Yppb
+iQEzBAEBCgAdFiEE2PL4YFeoV+QqiBBqTOGHfhlDjHAFAmZL4PoACgkQTOGHfhlD
+jHAfEgf+KmQabOPJZP5fMua5IGmulyfFGAZ47r/lq8+at3dbVuOAtUYdEApKYZL2
+DMmu8+ErwkDPC/eKYTV3sd5Z6xx2crHWdgCm7tYD3CERvseTWfmElw5aJcteKDgw
+KzNhDvtjK8tfloEY1T//dAKDJaYuiV1624sFXBgI+dzbL3YuOuCmYARcrBjvzK3S
+JpfiWFv3c+xxbIaYi8/H3EW9QPFxNMTLKUQYGgfoRfZXyL2/XmkUS5xn34tgm3HK
+bGBXgldrSVP1iwUZzHbAtNJLK8XOnvgAwThFDePO7SohnsaHUtiutxrPPbFNd9ut
+oweELcZ4SCDtQH3C9denbed9alBwrg==
+=gDwb
-----END PGP SIGNATURE-----
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
index 6ad92be764..98a662a964 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 fd5f7be5b2..566fa1c7dd 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-05-20-02-02
+2024-05-21-02-02