diff options
author | Norbert Preining <norbert@preining.info> | 2024-05-21 03:01:20 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2024-05-21 03:01:20 +0000 |
commit | 6e3adba09b2c9acc83d0d8ca15866aa7e532f47e (patch) | |
tree | af6be3862b2f6c21b379d0d5b048bf54c675c45e | |
parent | 225d674dde02e0571b74d1fc483d2d4d1084856a (diff) |
CTAN sync 202405210301
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 Binary files differindex ee6594d792..80d643831e 100644 --- a/FILES.byname.gz +++ b/FILES.byname.gz 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 Binary files differindex d428d1f7af..eddb6d4f1d 100644 --- a/graphics/pgf/contrib/liftarm/liftarm.pdf +++ b/graphics/pgf/contrib/liftarm/liftarm.pdf 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 Binary files differindex 1a4d6b72b0..2c48ce2ef5 100644 --- a/macros/latex/contrib/thuthesis/thuthesis-example.pdf +++ b/macros/latex/contrib/thuthesis/thuthesis-example.pdf 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 Binary files differindex 9f55312fdd..daa32de045 100644 --- a/macros/latex/contrib/thuthesis/thuthesis.pdf +++ b/macros/latex/contrib/thuthesis/thuthesis.pdf 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 Binary files differindex 6ad92be764..98a662a964 100644 --- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz +++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz @@ -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 |