From dada699771828d1aa3c78ecf55a2131e5f5799f3 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Wed, 8 Nov 2023 03:02:04 +0000 Subject: CTAN sync 202311080302 --- FILES.byname | 240 +- FILES.byname.gz | Bin 2558260 -> 2558511 bytes FILES.last07days | 229 +- biblio/ctan-bibdata/ctan.bib | 81 +- biblio/ctan-bibdata/ctan.pdf | Bin 3725247 -> 3726593 bytes fonts/newtx/README | 7 +- fonts/newtx/afm/txbex-bar.afm | 20 +- fonts/newtx/afm/txbsys.afm | 13 +- fonts/newtx/afm/txex-bar.afm | 90 +- fonts/newtx/afm/txsys.afm | 17 +- fonts/newtx/doc/newtxdoc.pdf | Bin 675906 -> 682647 bytes fonts/newtx/doc/newtxdoc.tex | 12 +- fonts/newtx/tfm/ntxbexx.tfm | Bin 1784 -> 1796 bytes fonts/newtx/tfm/ntxbsy.tfm | Bin 1988 -> 2020 bytes fonts/newtx/tfm/ntxbsy5.tfm | Bin 2004 -> 2036 bytes fonts/newtx/tfm/ntxbsy7.tfm | Bin 1984 -> 2016 bytes fonts/newtx/tfm/ntxexx.tfm | Bin 1772 -> 1788 bytes fonts/newtx/tfm/ntxsy.tfm | Bin 2000 -> 2028 bytes fonts/newtx/tfm/ntxsy5.tfm | Bin 1992 -> 2024 bytes fonts/newtx/tfm/ntxsy7.tfm | Bin 1964 -> 1992 bytes fonts/newtx/tfm/txbex-bar.tfm | Bin 888 -> 908 bytes fonts/newtx/tfm/txbsys.tfm | Bin 1616 -> 1692 bytes fonts/newtx/tfm/txex-bar.tfm | Bin 872 -> 900 bytes fonts/newtx/tfm/txsys.tfm | Bin 1580 -> 1660 bytes fonts/newtx/type1/txbex-bar.pfb | Bin 12805 -> 15466 bytes fonts/newtx/type1/txbsys.pfb | Bin 46217 -> 47027 bytes fonts/newtx/type1/txex-bar.pfb | Bin 12648 -> 15299 bytes fonts/newtx/type1/txsys.pfb | Bin 40320 -> 45943 bytes fonts/newtx/vf/ntxbexx.vf | Bin 1620 -> 1692 bytes fonts/newtx/vf/ntxbsy.vf | Bin 1820 -> 1852 bytes fonts/newtx/vf/ntxbsy5.vf | Bin 1828 -> 1860 bytes fonts/newtx/vf/ntxbsy7.vf | Bin 1888 -> 1924 bytes fonts/newtx/vf/ntxexx.vf | Bin 1648 -> 1716 bytes fonts/newtx/vf/ntxsy.vf | Bin 1772 -> 1804 bytes fonts/newtx/vf/ntxsy5.vf | Bin 1816 -> 1852 bytes fonts/newtx/vf/ntxsy7.vf | Bin 1900 -> 1932 bytes graphics/pmdraw/README.md | 73 + graphics/pmdraw/examples/example-1.tex | 36 + graphics/pmdraw/examples/example-10.tex | 37 + graphics/pmdraw/examples/example-11.tex | 37 + graphics/pmdraw/examples/example-12.tex | 101 + graphics/pmdraw/examples/example-13.tex | 126 + graphics/pmdraw/examples/example-14.tex | 76 + graphics/pmdraw/examples/example-15.tex | 76 + graphics/pmdraw/examples/example-16.tex | 127 + graphics/pmdraw/examples/example-17.tex | 70 + graphics/pmdraw/examples/example-18.tex | 52 + graphics/pmdraw/examples/example-19.tex | 53 + graphics/pmdraw/examples/example-2.tex | 39 + graphics/pmdraw/examples/example-20.tex | 171 ++ graphics/pmdraw/examples/example-21.tex | 183 ++ graphics/pmdraw/examples/example-22.tex | 179 ++ graphics/pmdraw/examples/example-23.tex | 179 ++ graphics/pmdraw/examples/example-24.tex | 160 ++ graphics/pmdraw/examples/example-25.tex | 63 + graphics/pmdraw/examples/example-3.tex | 53 + graphics/pmdraw/examples/example-4.tex | 77 + graphics/pmdraw/examples/example-5.tex | 118 + graphics/pmdraw/examples/example-6.tex | 55 + graphics/pmdraw/examples/example-7.tex | 63 + graphics/pmdraw/examples/example-8.tex | 63 + graphics/pmdraw/examples/example-9.tex | 37 + graphics/pmdraw/pmdraw.pdf | Bin 0 -> 376051 bytes graphics/pmdraw/pmdraw.sty | 903 +++++++ graphics/pmdraw/pmdraw.tex | 2811 ++++++++++++++++++++ macros/latex/contrib/hyperref/ChangeLog.txt | 7 + macros/latex/contrib/hyperref/README.md | 2 +- macros/latex/contrib/hyperref/doc/backref.pdf | Bin 206681 -> 206681 bytes .../latex/contrib/hyperref/doc/hyperref-doc.html | 1452 +++++----- macros/latex/contrib/hyperref/doc/hyperref-doc.pdf | Bin 317671 -> 318399 bytes macros/latex/contrib/hyperref/doc/hyperref-doc.tex | 11 +- .../latex/contrib/hyperref/doc/hyperref-doc7.html | 2 +- .../latex/contrib/hyperref/doc/hyperref-doc8.html | 2 +- .../latex/contrib/hyperref/doc/hyperref-doc9.html | 2 +- .../contrib/hyperref/doc/hyperref-linktarget.pdf | Bin 440050 -> 439955 bytes macros/latex/contrib/hyperref/doc/hyperref.pdf | Bin 2347765 -> 2350345 bytes macros/latex/contrib/hyperref/doc/nameref.pdf | Bin 184798 -> 184798 bytes macros/latex/contrib/hyperref/hluatex.dtx | 4 +- .../latex/contrib/hyperref/hyperref-linktarget.dtx | 4 +- macros/latex/contrib/hyperref/hyperref-patches.dtx | 2 +- macros/latex/contrib/hyperref/hyperref.dtx | 135 +- macros/latex/contrib/hyperref/xr-hyper.sty | 2 +- macros/latex/contrib/ipsum/README.md | 7 + macros/latex/contrib/ipsum/doc/ipsum-doc.pdf | Bin 0 -> 169585 bytes macros/latex/contrib/ipsum/doc/ipsum-doc.tex | 268 ++ macros/latex/contrib/ipsum/tex/ipsum.sty | 741 ++++++ support/latexmk/CHANGES | 16 +- support/latexmk/INSTALL | 2 +- support/latexmk/README | 2 +- .../latexmk/example_rcfiles/README-latexmk-rcfiles | 2 +- support/latexmk/example_rcfiles/pdflatex_latexmkrc | 6 + .../latexmk/example_rcfiles/pythontex-latexmkrc | 7 + .../example_rcfiles/schultz-texshop-latexmkrc | 77 - .../example_rcfiles/schulz-texshop-latexmkrc | 77 + support/latexmk/example_rcfiles/xr_latexmkrc | 9 +- support/latexmk/latexmk.1 | 98 +- support/latexmk/latexmk.pdf | Bin 212107 -> 215760 bytes support/latexmk/latexmk.pl | 437 +-- support/latexmk/latexmk.txt | 950 ++++--- .../texlive/tlnet/tlpkg/installer/ctan-mirrors.pl | 1 + systems/texlive/tlnet/tlpkg/texlive.tlpdb | 14 +- systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 | 2 +- systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 | 2 +- .../texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc | 16 +- systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz | Bin 2484232 -> 2483212 bytes timestamp | 2 +- 106 files changed, 9340 insertions(+), 1748 deletions(-) create mode 100644 graphics/pmdraw/README.md create mode 100644 graphics/pmdraw/examples/example-1.tex create mode 100644 graphics/pmdraw/examples/example-10.tex create mode 100644 graphics/pmdraw/examples/example-11.tex create mode 100644 graphics/pmdraw/examples/example-12.tex create mode 100644 graphics/pmdraw/examples/example-13.tex create mode 100644 graphics/pmdraw/examples/example-14.tex create mode 100644 graphics/pmdraw/examples/example-15.tex create mode 100644 graphics/pmdraw/examples/example-16.tex create mode 100644 graphics/pmdraw/examples/example-17.tex create mode 100644 graphics/pmdraw/examples/example-18.tex create mode 100644 graphics/pmdraw/examples/example-19.tex create mode 100644 graphics/pmdraw/examples/example-2.tex create mode 100644 graphics/pmdraw/examples/example-20.tex create mode 100644 graphics/pmdraw/examples/example-21.tex create mode 100644 graphics/pmdraw/examples/example-22.tex create mode 100644 graphics/pmdraw/examples/example-23.tex create mode 100644 graphics/pmdraw/examples/example-24.tex create mode 100644 graphics/pmdraw/examples/example-25.tex create mode 100644 graphics/pmdraw/examples/example-3.tex create mode 100644 graphics/pmdraw/examples/example-4.tex create mode 100644 graphics/pmdraw/examples/example-5.tex create mode 100644 graphics/pmdraw/examples/example-6.tex create mode 100644 graphics/pmdraw/examples/example-7.tex create mode 100644 graphics/pmdraw/examples/example-8.tex create mode 100644 graphics/pmdraw/examples/example-9.tex create mode 100644 graphics/pmdraw/pmdraw.pdf create mode 100644 graphics/pmdraw/pmdraw.sty create mode 100644 graphics/pmdraw/pmdraw.tex create mode 100644 macros/latex/contrib/ipsum/README.md create mode 100644 macros/latex/contrib/ipsum/doc/ipsum-doc.pdf create mode 100644 macros/latex/contrib/ipsum/doc/ipsum-doc.tex create mode 100644 macros/latex/contrib/ipsum/tex/ipsum.sty create mode 100644 support/latexmk/example_rcfiles/pdflatex_latexmkrc delete mode 100644 support/latexmk/example_rcfiles/schultz-texshop-latexmkrc create mode 100644 support/latexmk/example_rcfiles/schulz-texshop-latexmkrc diff --git a/FILES.byname b/FILES.byname index 484a5db192..a68fe34ad0 100644 --- a/FILES.byname +++ b/FILES.byname @@ -2060,12 +2060,12 @@ 2023/10/05 | 1710 | biblio/citation-style-language/README.md 2023/10/05 | 12878 | biblio/citation-style-language/vancouver.csl 2023/10/05 | 4531754 | biblio/citation-style-language.zip -2023/11/06 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx +2023/11/07 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx 2022/10/08 | 127 | biblio/ctan-bibdata/biblatex-ctan/ctan.cbx -2023/11/06 | 2825145 | biblio/ctan-bibdata/ctan.bib -2023/11/06 | 3725247 | biblio/ctan-bibdata/ctan.pdf +2023/11/07 | 2826768 | biblio/ctan-bibdata/ctan.bib +2023/11/07 | 3726593 | biblio/ctan-bibdata/ctan.pdf 2023/01/16 | 1489 | biblio/ctan-bibdata/README -2023/11/06 | 4129215 | biblio/ctan-bibdata.zip +2023/11/07 | 4132465 | 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 @@ -5422,7 +5422,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 -2023/11/06 | 227945 | FILES.last07days +2023/11/07 | 227683 | 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 @@ -84972,19 +84972,19 @@ 2023/10/03 | 635532 | fonts/newtx/afm/TeXGyreTermesX-Regular.afm 2022/01/08 | 623388 | fonts/newtx/afm/TeXGyreTermesX-Slanted.afm 2017/02/11 | 5019 | fonts/newtx/afm/txbexas.afm -2019/06/17 | 5212 | fonts/newtx/afm/txbex-bar.afm +2023/11/07 | 5909 | fonts/newtx/afm/txbex-bar.afm 2021/03/21 | 10301 | fonts/newtx/afm/txbexs.afm 2020/12/09 | 3924 | fonts/newtx/afm/txbmiaSTbb.afm 2021/10/06 | 9488 | fonts/newtx/afm/txbmiaX.afm 2023/08/17 | 13400 | fonts/newtx/afm/txbsym.afm -2022/05/20 | 10480 | fonts/newtx/afm/txbsys.afm +2023/11/07 | 10833 | fonts/newtx/afm/txbsys.afm 2019/08/25 | 5028 | fonts/newtx/afm/txexas.afm -2017/02/11 | 5184 | fonts/newtx/afm/txex-bar.afm +2023/11/07 | 5904 | fonts/newtx/afm/txex-bar.afm 2021/05/10 | 11399 | fonts/newtx/afm/txexs.afm 2019/06/02 | 3906 | fonts/newtx/afm/txmiaSTbb.afm 2021/10/21 | 10271 | fonts/newtx/afm/txmiaX.afm 2023/08/14 | 13519 | fonts/newtx/afm/txsym.afm -2019/09/12 | 10400 | fonts/newtx/afm/txsys.afm +2023/11/07 | 10753 | fonts/newtx/afm/txsys.afm 2023/09/20 | 629209 | fonts/newtx/afm/ztmb.afm 2023/09/22 | 658377 | fonts/newtx/afm/ztmbi.afm 2023/09/20 | 629679 | fonts/newtx/afm/ztmbsl.afm @@ -84999,8 +84999,8 @@ 2015/01/31 | 478 | fonts/newtx/doc/MANIFEST-newtx.txt 2013/09/09 | 188187 | fonts/newtx/doc/mathnotes.pdf 2013/09/09 | 4388 | fonts/newtx/doc/mathnotes.tex -2023/10/29 | 675906 | fonts/newtx/doc/newtxdoc.pdf -2023/10/29 | 129272 | fonts/newtx/doc/newtxdoc.tex +2023/11/07 | 682647 | fonts/newtx/doc/newtxdoc.pdf +2023/11/07 | 130069 | fonts/newtx/doc/newtxdoc.tex 2012/05/27 | 17530 | fonts/newtx/doc/sample-lib-crop.pdf 2012/05/22 | 18519 | fonts/newtx/doc/sample-libmtp-crop.pdf 2012/05/06 | 18157 | fonts/newtx/doc/sample-mtp-crop.pdf @@ -85085,7 +85085,7 @@ 2023/09/20 | 217888 | fonts/newtx/opentype/TeXGyreTermesX-Italic.otf 2023/10/29 | 226088 | fonts/newtx/opentype/TeXGyreTermesX-Regular.otf 2023/09/20 | 237316 | fonts/newtx/opentype/TeXGyreTermesX-Slanted.otf -2023/11/01 | 46326 | fonts/newtx/README +2023/11/07 | 46592 | fonts/newtx/README 2023/05/07 | 245268 | fonts/newtxsf/doc/newtxsf-doc.pdf 2023/05/07 | 6715 | fonts/newtxsf/doc/newtxsf-doc.tex 2014/09/30 | 43780 | fonts/newtxsf/doc/OFL-FAQ.txt @@ -85286,7 +85286,7 @@ 2012/06/18 | 520 | fonts/newtx/tfm/ntxbexb.tfm 2013/05/26 | 816 | fonts/newtx/tfm/ntxbexmods.tfm 2013/05/26 | 1176 | fonts/newtx/tfm/ntxbex.tfm -2021/03/21 | 1784 | fonts/newtx/tfm/ntxbexx.tfm +2023/11/06 | 1796 | fonts/newtx/tfm/ntxbexx.tfm 2021/06/02 | 1904 | fonts/newtx/tfm/ntxbmi05.tfm 2021/06/02 | 3332 | fonts/newtx/tfm/ntxbmi07.tfm 2021/06/02 | 4176 | fonts/newtx/tfm/ntxbmi0.tfm @@ -85428,11 +85428,11 @@ 2023/10/04 | 3144 | fonts/newtx/tfm/ntx-Bold-tosf-sc-ot1.tfm 2023/10/04 | 12300 | fonts/newtx/tfm/ntx-Bold-tosf-sc-t1.tfm 2023/10/04 | 11576 | fonts/newtx/tfm/ntx-Bold-tosf-t1.tfm -2022/05/20 | 2004 | fonts/newtx/tfm/ntxbsy5.tfm -2022/05/20 | 1984 | fonts/newtx/tfm/ntxbsy7.tfm +2023/11/07 | 2036 | fonts/newtx/tfm/ntxbsy5.tfm +2023/11/07 | 2016 | fonts/newtx/tfm/ntxbsy7.tfm 2020/05/18 | 1040 | fonts/newtx/tfm/ntxbsyc.tfm 2023/08/26 | 1572 | fonts/newtx/tfm/ntxbsym.tfm -2022/05/20 | 1988 | fonts/newtx/tfm/ntxbsy.tfm +2023/11/07 | 2020 | fonts/newtx/tfm/ntxbsy.tfm 2023/10/04 | 360 | fonts/newtx/tfm/ntxdnom-BoldItalic-ly1.tfm 2023/10/04 | 360 | fonts/newtx/tfm/ntxdnom-BoldItalic-ot1.tfm 2023/10/04 | 288 | fonts/newtx/tfm/ntxdnom-BoldItalic-t1.tfm @@ -85458,7 +85458,7 @@ 2020/05/18 | 760 | fonts/newtx/tfm/ntxexa.tfm 2012/06/18 | 184 | fonts/newtx/tfm/ntxexb.tfm 2013/05/25 | 816 | fonts/newtx/tfm/ntxexmods.tfm -2021/05/10 | 1772 | fonts/newtx/tfm/ntxexx.tfm +2023/11/06 | 1788 | fonts/newtx/tfm/ntxexx.tfm 2023/10/04 | 364 | fonts/newtx/tfm/ntxinfalt-BoldItalic-ly1.tfm 2023/10/04 | 364 | fonts/newtx/tfm/ntxinfalt-BoldItalic-ot1.tfm 2023/10/04 | 292 | fonts/newtx/tfm/ntxinfalt-BoldItalic-t1.tfm @@ -85673,13 +85673,13 @@ 2023/10/04 | 1452 | fonts/newtx/tfm/ntxsups-Regular-t1.tfm 2023/09/17 | 1452 | fonts/newtx/tfm/ntxsups-Regular.tfm 2023/09/17 | 1164 | fonts/newtx/tfm/ntxsups-Regular-ts1.tfm -2022/05/20 | 1992 | fonts/newtx/tfm/ntxsy5.tfm -2022/05/20 | 1964 | fonts/newtx/tfm/ntxsy7.tfm +2023/11/07 | 2024 | fonts/newtx/tfm/ntxsy5.tfm +2023/11/07 | 1992 | fonts/newtx/tfm/ntxsy7.tfm 2015/02/13 | 712 | fonts/newtx/tfm/ntxsybalt.tfm 2020/05/18 | 1028 | fonts/newtx/tfm/ntxsyc.tfm 2023/08/26 | 1560 | fonts/newtx/tfm/ntxsym.tfm 2015/02/13 | 728 | fonts/newtx/tfm/ntxsyralt.tfm -2022/05/20 | 2000 | fonts/newtx/tfm/ntxsy.tfm +2023/11/07 | 2028 | fonts/newtx/tfm/ntxsy.tfm 2022/05/19 | 7204 | fonts/newtx/tfm/ntxth-Italic-osf-ly1.tfm 2022/05/19 | 3120 | fonts/newtx/tfm/ntxth-Italic-osf-ot1.tfm 2022/05/19 | 11300 | fonts/newtx/tfm/ntxth-Italic-osf-t1.tfm @@ -85782,21 +85782,21 @@ 2021/05/07 | 6956 | fonts/newtx/tfm/t1xsl-osf.tfm 2021/05/07 | 6924 | fonts/newtx/tfm/t1xsl-tosf.tfm 2017/02/11 | 864 | fonts/newtx/tfm/txbexas.tfm -2019/06/17 | 888 | fonts/newtx/tfm/txbex-bar.tfm +2023/11/07 | 908 | fonts/newtx/tfm/txbex-bar.tfm 2021/03/21 | 1544 | fonts/newtx/tfm/txbexs.tfm 2020/12/09 | 956 | fonts/newtx/tfm/txbmiaSTbb.tfm 2021/10/06 | 1704 | fonts/newtx/tfm/txbmiaX.tfm 2012/05/19 | 1156 | fonts/newtx/tfm/txbsy5.tfm 2012/05/19 | 1160 | fonts/newtx/tfm/txbsy7.tfm -2022/05/20 | 1616 | fonts/newtx/tfm/txbsys.tfm +2023/11/07 | 1692 | fonts/newtx/tfm/txbsys.tfm 2019/06/17 | 816 | fonts/newtx/tfm/txexas.tfm -2017/02/11 | 872 | fonts/newtx/tfm/txex-bar.tfm +2023/11/07 | 900 | fonts/newtx/tfm/txex-bar.tfm 2021/05/10 | 1552 | fonts/newtx/tfm/txexs.tfm 2019/06/02 | 920 | fonts/newtx/tfm/txmiaSTbb.tfm 2021/10/21 | 1716 | fonts/newtx/tfm/txmiaX.tfm 2012/05/19 | 1172 | fonts/newtx/tfm/txsy5.tfm 2012/05/19 | 1156 | fonts/newtx/tfm/txsy7.tfm -2019/09/12 | 1580 | fonts/newtx/tfm/txsys.tfm +2023/11/07 | 1660 | fonts/newtx/tfm/txsys.tfm 2021/05/08 | 3236 | fonts/newtx/tfm/ztmbsl-lf-ot1.tfm 2021/05/07 | 11508 | fonts/newtx/tfm/ztmbsl-lf-t1.tfm 2021/05/08 | 7432 | fonts/newtx/tfm/ztmbsl-lf-texnansi.tfm @@ -86044,23 +86044,23 @@ 2013/02/12 | 20809 | fonts/newtx/type1/rtxmi7.pfb 2019/08/27 | 77528 | fonts/newtx/type1/stxscr.pfb 2017/02/11 | 24222 | fonts/newtx/type1/txbexas.pfb -2019/06/17 | 12805 | fonts/newtx/type1/txbex-bar.pfb +2023/11/07 | 15466 | fonts/newtx/type1/txbex-bar.pfb 2021/03/21 | 31874 | fonts/newtx/type1/txbexs.pfb 2020/12/09 | 15627 | fonts/newtx/type1/txbmiaSTbb.pfb 2021/10/06 | 51382 | fonts/newtx/type1/txbmiaX.pfb 2015/07/04 | 28828 | fonts/newtx/type1/txbsy5.pfb 2015/07/04 | 28622 | fonts/newtx/type1/txbsy7.pfb 2023/08/17 | 47786 | fonts/newtx/type1/txbsym.pfb -2022/05/20 | 46217 | fonts/newtx/type1/txbsys.pfb +2023/11/07 | 47027 | fonts/newtx/type1/txbsys.pfb 2019/08/25 | 23767 | fonts/newtx/type1/txexas.pfb -2017/02/11 | 12648 | fonts/newtx/type1/txex-bar.pfb +2023/11/07 | 15299 | fonts/newtx/type1/txex-bar.pfb 2021/05/10 | 33424 | fonts/newtx/type1/txexs.pfb 2019/06/02 | 15249 | fonts/newtx/type1/txmiaSTbb.pfb 2021/10/21 | 56686 | fonts/newtx/type1/txmiaX.pfb 2012/05/16 | 29142 | fonts/newtx/type1/txsy5.pfb 2012/05/15 | 29124 | fonts/newtx/type1/txsy7.pfb 2023/08/14 | 44726 | fonts/newtx/type1/txsym.pfb -2019/09/12 | 40320 | fonts/newtx/type1/txsys.pfb +2023/11/07 | 45943 | fonts/newtx/type1/txsys.pfb 2023/10/04 | 260277 | fonts/newtx/type1/ztmbi.pfb 2023/10/04 | 255251 | fonts/newtx/type1/ztmb.pfb 2023/10/04 | 233549 | fonts/newtx/type1/ztmbsl.pfb @@ -86083,7 +86083,7 @@ 2021/05/08 | 1772 | fonts/newtx/vf/ly1xsl-tosf.vf 2020/05/18 | 580 | fonts/newtx/vf/ntxbexa.vf 2013/05/26 | 1072 | fonts/newtx/vf/ntxbex.vf -2021/03/21 | 1620 | fonts/newtx/vf/ntxbexx.vf +2023/11/06 | 1692 | fonts/newtx/vf/ntxbexx.vf 2021/06/02 | 1828 | fonts/newtx/vf/ntxbmi05.vf 2021/06/02 | 2704 | fonts/newtx/vf/ntxbmi07.vf 2021/06/02 | 2740 | fonts/newtx/vf/ntxbmi0.vf @@ -86103,16 +86103,16 @@ 2023/10/04 | 956 | fonts/newtx/vf/ntx-Bold-osf-ot1.vf 2023/10/04 | 956 | fonts/newtx/vf/ntx-Bold-tlf-ot1.vf 2023/10/04 | 956 | fonts/newtx/vf/ntx-Bold-tosf-ot1.vf -2022/05/20 | 1828 | fonts/newtx/vf/ntxbsy5.vf -2022/05/20 | 1888 | fonts/newtx/vf/ntxbsy7.vf +2023/11/07 | 1860 | fonts/newtx/vf/ntxbsy5.vf +2023/11/07 | 1924 | fonts/newtx/vf/ntxbsy7.vf 2020/05/18 | 1416 | fonts/newtx/vf/ntxbsyc.vf -2022/05/20 | 1820 | fonts/newtx/vf/ntxbsy.vf +2023/11/07 | 1852 | fonts/newtx/vf/ntxbsy.vf 2020/12/20 | 1960 | fonts/newtx/vf/ntxebgbmia.vf 2020/12/20 | 2700 | fonts/newtx/vf/ntxebgbmi.vf 2020/12/20 | 1980 | fonts/newtx/vf/ntxebgmia.vf 2020/12/20 | 2592 | fonts/newtx/vf/ntxebgmi.vf 2020/05/18 | 576 | fonts/newtx/vf/ntxexa.vf -2021/05/10 | 1648 | fonts/newtx/vf/ntxexx.vf +2023/11/06 | 1716 | fonts/newtx/vf/ntxexx.vf 2023/10/04 | 956 | fonts/newtx/vf/ntx-Italic-lf-ot1.vf 2023/10/04 | 956 | fonts/newtx/vf/ntx-Italic-osf-ot1.vf 2023/10/04 | 956 | fonts/newtx/vf/ntx-Italic-tlf-ot1.vf @@ -86131,10 +86131,10 @@ 2023/10/04 | 956 | fonts/newtx/vf/ntx-Regular-osf-ot1.vf 2023/10/04 | 956 | fonts/newtx/vf/ntx-Regular-tlf-ot1.vf 2023/10/04 | 956 | fonts/newtx/vf/ntx-Regular-tosf-ot1.vf -2022/05/20 | 1816 | fonts/newtx/vf/ntxsy5.vf -2022/05/20 | 1900 | fonts/newtx/vf/ntxsy7.vf +2023/11/07 | 1852 | fonts/newtx/vf/ntxsy5.vf +2023/11/07 | 1932 | fonts/newtx/vf/ntxsy7.vf 2020/05/18 | 1416 | fonts/newtx/vf/ntxsyc.vf -2022/05/20 | 1772 | fonts/newtx/vf/ntxsy.vf +2023/11/07 | 1804 | fonts/newtx/vf/ntxsy.vf 2019/12/01 | 2740 | fonts/newtx/vf/nxlbmi015.vf 2019/12/01 | 2740 | fonts/newtx/vf/nxlbmi017.vf 2019/12/01 | 2740 | fonts/newtx/vf/nxlbmi01.vf @@ -86199,7 +86199,7 @@ 2019/11/02 | 2656 | fonts/newtx/vf/zutbmi.vf 2021/03/22 | 2176 | fonts/newtx/vf/zutmia.vf 2019/11/02 | 2552 | fonts/newtx/vf/zutmi.vf -2023/11/01 | 9636068 | fonts/newtx.zip +2023/11/07 | 9655283 | fonts/newtx.zip 2005/10/24 | 6224 | fonts/niceframe/afm/bbding10.afm 2005/10/24 | 2299 | fonts/niceframe/afm/dingbat.afm 2005/10/24 | 9099 | fonts/niceframe/afm/karta15.afm @@ -164174,6 +164174,36 @@ 1989/11/26 | 7270 | graphics/pictex/texpictex.tex 1992/08/31 | 11382 | graphics/pictex/tree.sty 2021/06/10 | 1136553 | graphics/pictex.zip +2023/10/10 | 1025 | graphics/pmdraw/examples/example-10.tex +2023/10/10 | 1025 | graphics/pmdraw/examples/example-11.tex +2023/10/12 | 3451 | graphics/pmdraw/examples/example-12.tex +2023/10/12 | 3018 | graphics/pmdraw/examples/example-13.tex +2023/10/12 | 1839 | graphics/pmdraw/examples/example-14.tex +2023/10/12 | 1826 | graphics/pmdraw/examples/example-15.tex +2023/10/12 | 3049 | graphics/pmdraw/examples/example-16.tex +2023/10/17 | 1787 | graphics/pmdraw/examples/example-17.tex +2023/10/12 | 1413 | graphics/pmdraw/examples/example-18.tex +2023/10/12 | 1452 | graphics/pmdraw/examples/example-19.tex +2023/10/10 | 875 | graphics/pmdraw/examples/example-1.tex +2023/10/17 | 4403 | graphics/pmdraw/examples/example-20.tex +2023/10/17 | 4525 | graphics/pmdraw/examples/example-21.tex +2023/10/17 | 4583 | graphics/pmdraw/examples/example-22.tex +2023/10/17 | 4591 | graphics/pmdraw/examples/example-23.tex +2023/10/16 | 3885 | graphics/pmdraw/examples/example-24.tex +2023/10/16 | 1529 | graphics/pmdraw/examples/example-25.tex +2023/10/10 | 937 | graphics/pmdraw/examples/example-2.tex +2023/10/10 | 1348 | graphics/pmdraw/examples/example-3.tex +2023/10/17 | 1901 | graphics/pmdraw/examples/example-4.tex +2023/10/17 | 2854 | graphics/pmdraw/examples/example-5.tex +2023/10/10 | 1366 | graphics/pmdraw/examples/example-6.tex +2023/10/10 | 1587 | graphics/pmdraw/examples/example-7.tex +2023/10/10 | 1584 | graphics/pmdraw/examples/example-8.tex +2023/10/10 | 1025 | graphics/pmdraw/examples/example-9.tex +2023/11/07 | 376051 | graphics/pmdraw/pmdraw.pdf +2023/11/07 | 43983 | graphics/pmdraw/pmdraw.sty +2023/11/07 | 76918 | graphics/pmdraw/pmdraw.tex +2023/11/07 | 1804 | graphics/pmdraw/README.md +2023/11/07 | 395112 | graphics/pmdraw.zip 2018/05/31 | 17537 | graphics/postage/postage.dtx 2018/05/31 | 2443 | graphics/postage/postage.ins 2018/05/30 | 335762 | graphics/postage/postage.pdf @@ -194683,7 +194713,7 @@ 2016/06/07 | 215651 | install/macros/latex/contrib/he-she.tds.zip 2023/02/26 | 450556 | install/macros/latex/contrib/hrefhide.tds.zip 2016/11/20 | 951051 | install/macros/latex/contrib/hustthesis.tds.zip -2023/10/31 | 4480772 | install/macros/latex/contrib/hyperref.tds.zip +2023/11/07 | 4485853 | install/macros/latex/contrib/hyperref.tds.zip 2023/09/11 | 1365373 | install/macros/latex/contrib/hyperxmp.tds.zip 2009/09/02 | 167274 | install/macros/latex/contrib/hyphenat.tds.zip 2009/04/05 | 198256 | install/macros/latex/contrib/IEEEconf.tds.zip @@ -225983,40 +226013,40 @@ 2010/03/06 | 1833 | macros/latex/contrib/hypernat/hypernat.tex 2010/03/06 | 187989 | macros/latex/contrib/hypernat.zip 1999/03/09 | 1563 | macros/latex/contrib/hyper/README -2023/10/31 | 28694 | macros/latex/contrib/hyperref/backref.dtx -2023/10/31 | 3161 | macros/latex/contrib/hyperref/bmhydoc.sty -2023/10/31 | 125755 | macros/latex/contrib/hyperref/ChangeLog.txt -2023/10/31 | 206681 | macros/latex/contrib/hyperref/doc/backref.pdf -2023/10/31 | 928 | macros/latex/contrib/hyperref/doc/hyperref-doc2.html -2023/10/31 | 795 | macros/latex/contrib/hyperref/doc/hyperref-doc3.html -2023/10/31 | 1030 | macros/latex/contrib/hyperref/doc/hyperref-doc4.html -2023/10/31 | 882 | macros/latex/contrib/hyperref/doc/hyperref-doc5.html -2023/10/31 | 793 | macros/latex/contrib/hyperref/doc/hyperref-doc6.html -2023/10/31 | 854 | macros/latex/contrib/hyperref/doc/hyperref-doc7.html -2023/10/31 | 795 | macros/latex/contrib/hyperref/doc/hyperref-doc8.html -2023/10/31 | 795 | macros/latex/contrib/hyperref/doc/hyperref-doc9.html -2023/10/31 | 15673 | macros/latex/contrib/hyperref/doc/hyperref-doc.css -2023/10/31 | 525392 | macros/latex/contrib/hyperref/doc/hyperref-doc.html -2023/10/31 | 317671 | macros/latex/contrib/hyperref/doc/hyperref-doc.pdf -2023/10/31 | 171497 | macros/latex/contrib/hyperref/doc/hyperref-doc.tex -2023/10/31 | 440050 | macros/latex/contrib/hyperref/doc/hyperref-linktarget.pdf -2023/10/31 | 2347765 | macros/latex/contrib/hyperref/doc/hyperref.pdf -2023/10/31 | 184798 | macros/latex/contrib/hyperref/doc/nameref.pdf -2023/10/31 | 132446 | macros/latex/contrib/hyperref/doc/paper.pdf -2023/10/31 | 384001 | macros/latex/contrib/hyperref/doc/slides.pdf -2023/10/31 | 50695 | macros/latex/contrib/hyperref/hluatex.dtx -2023/10/31 | 872111 | macros/latex/contrib/hyperref/hyperref.dtx -2023/10/31 | 5024 | macros/latex/contrib/hyperref/hyperref.ins -2023/10/31 | 19445 | macros/latex/contrib/hyperref/hyperref-linktarget.dtx -2023/10/31 | 7536 | macros/latex/contrib/hyperref/hyperref-patches.dtx -2023/10/31 | 1929 | macros/latex/contrib/hyperref/manifest.txt -2023/10/31 | 280 | macros/latex/contrib/hyperref/minitoc-hyper.sty -2023/10/31 | 28789 | macros/latex/contrib/hyperref/nameref.dtx -2023/10/31 | 284 | macros/latex/contrib/hyperref/ntheorem-hyper.sty -2023/10/31 | 247116 | macros/latex/contrib/hyperref/paperslides99.zip -2023/10/31 | 4479 | macros/latex/contrib/hyperref/README.md -2023/10/31 | 5766 | macros/latex/contrib/hyperref/xr-hyper.sty -2023/10/31 | 4300186 | macros/latex/contrib/hyperref.zip +2023/11/07 | 28694 | macros/latex/contrib/hyperref/backref.dtx +2023/11/07 | 3161 | macros/latex/contrib/hyperref/bmhydoc.sty +2023/11/07 | 125941 | macros/latex/contrib/hyperref/ChangeLog.txt +2023/11/07 | 206681 | macros/latex/contrib/hyperref/doc/backref.pdf +2023/11/07 | 928 | macros/latex/contrib/hyperref/doc/hyperref-doc2.html +2023/11/07 | 795 | macros/latex/contrib/hyperref/doc/hyperref-doc3.html +2023/11/07 | 1030 | macros/latex/contrib/hyperref/doc/hyperref-doc4.html +2023/11/07 | 882 | macros/latex/contrib/hyperref/doc/hyperref-doc5.html +2023/11/07 | 793 | macros/latex/contrib/hyperref/doc/hyperref-doc6.html +2023/11/07 | 854 | macros/latex/contrib/hyperref/doc/hyperref-doc7.html +2023/11/07 | 795 | macros/latex/contrib/hyperref/doc/hyperref-doc8.html +2023/11/07 | 795 | macros/latex/contrib/hyperref/doc/hyperref-doc9.html +2023/11/07 | 15673 | macros/latex/contrib/hyperref/doc/hyperref-doc.css +2023/11/07 | 526220 | macros/latex/contrib/hyperref/doc/hyperref-doc.html +2023/11/07 | 318399 | macros/latex/contrib/hyperref/doc/hyperref-doc.pdf +2023/11/07 | 171911 | macros/latex/contrib/hyperref/doc/hyperref-doc.tex +2023/11/07 | 439955 | macros/latex/contrib/hyperref/doc/hyperref-linktarget.pdf +2023/11/07 | 2350345 | macros/latex/contrib/hyperref/doc/hyperref.pdf +2023/11/07 | 184798 | macros/latex/contrib/hyperref/doc/nameref.pdf +2023/11/07 | 132446 | macros/latex/contrib/hyperref/doc/paper.pdf +2023/11/07 | 384001 | macros/latex/contrib/hyperref/doc/slides.pdf +2023/11/07 | 50695 | macros/latex/contrib/hyperref/hluatex.dtx +2023/11/07 | 874328 | macros/latex/contrib/hyperref/hyperref.dtx +2023/11/07 | 5024 | macros/latex/contrib/hyperref/hyperref.ins +2023/11/07 | 19473 | macros/latex/contrib/hyperref/hyperref-linktarget.dtx +2023/11/07 | 7536 | macros/latex/contrib/hyperref/hyperref-patches.dtx +2023/11/07 | 1929 | macros/latex/contrib/hyperref/manifest.txt +2023/11/07 | 280 | macros/latex/contrib/hyperref/minitoc-hyper.sty +2023/11/07 | 28789 | macros/latex/contrib/hyperref/nameref.dtx +2023/11/07 | 284 | macros/latex/contrib/hyperref/ntheorem-hyper.sty +2023/11/07 | 247116 | macros/latex/contrib/hyperref/paperslides99.zip +2023/11/07 | 4479 | macros/latex/contrib/hyperref/README.md +2023/11/07 | 5766 | macros/latex/contrib/hyperref/xr-hyper.sty +2023/11/07 | 4305174 | macros/latex/contrib/hyperref.zip 1997/08/24 | 1034 | macros/latex/contrib/hyper/scontrib/harvard.hyp 1997/08/24 | 297 | macros/latex/contrib/hyper/scontrib/README 1997/08/24 | 1381 | macros/latex/contrib/hyper/TODO @@ -226642,6 +226672,11 @@ 2012/08/16 | 2265 | macros/latex/contrib/ionumbers/Makefile 2011/06/12 | 4247 | macros/latex/contrib/ionumbers/README 2014/04/15 | 497195 | macros/latex/contrib/ionumbers.zip +2023/11/07 | 169585 | macros/latex/contrib/ipsum/doc/ipsum-doc.pdf +2023/11/07 | 5509 | macros/latex/contrib/ipsum/doc/ipsum-doc.tex +2023/11/07 | 461 | macros/latex/contrib/ipsum/README.md +2023/11/07 | 50800 | macros/latex/contrib/ipsum/tex/ipsum.sty +2023/11/07 | 183816 | macros/latex/contrib/ipsum.zip 2017/11/14 | 5128 | macros/latex/contrib/iscram/HMI.pdf 2017/11/14 | 3861 | macros/latex/contrib/iscram/iscram-class-doc.bib 2017/11/14 | 262899 | macros/latex/contrib/iscram/iscram-class-doc.pdf @@ -284293,7 +284328,7 @@ 2021/10/26 | 246523 | support/latex-make/texdepends.pdf 2021/10/26 | 1069049 | support/latex-make.zip 2006/03/12 | 5889 | support/latexmake.zip -2023/04/04 | 41032 | support/latexmk/CHANGES +2023/11/07 | 41821 | support/latexmk/CHANGES 2013/12/03 | 17993 | support/latexmk/COPYING 2022/01/28 | 2881 | support/latexmk/example_rcfiles/asymptote_latexmkrc 2017/11/20 | 853 | support/latexmk/example_rcfiles/bib2gls_latexmkrc @@ -284311,18 +284346,19 @@ 2022/01/15 | 1986 | support/latexmk/example_rcfiles/minted_latexmkrc 2014/03/04 | 991 | support/latexmk/example_rcfiles/mpost_latexmkrc 2016/10/13 | 303 | support/latexmk/example_rcfiles/nomenclature_latexmkrc +2023/05/08 | 106 | support/latexmk/example_rcfiles/pdflatex_latexmkrc 2020/02/01 | 163 | support/latexmk/example_rcfiles/pweave-latexmkrc -2022/01/28 | 1449 | support/latexmk/example_rcfiles/pythontex-latexmkrc -2018/10/25 | 3002 | support/latexmk/example_rcfiles/README-latexmk-rcfiles +2023/04/20 | 1822 | support/latexmk/example_rcfiles/pythontex-latexmkrc +2023/11/06 | 3006 | support/latexmk/example_rcfiles/README-latexmk-rcfiles 2021/09/11 | 1024 | support/latexmk/example_rcfiles/sagetex_latexmkrc -2012/08/04 | 3447 | support/latexmk/example_rcfiles/schultz-texshop-latexmkrc +2012/08/04 | 3447 | support/latexmk/example_rcfiles/schulz-texshop-latexmkrc 2019/03/26 | 1378 | support/latexmk/example_rcfiles/splitindex.latexmkrc 2020/02/13 | 2535 | support/latexmk/example_rcfiles/sweave_latexmkrc 2012/10/02 | 1161 | support/latexmk/example_rcfiles/tex4ht-latexmkrc 2021/11/20 | 2176 | support/latexmk/example_rcfiles/texinfo-latexmkrc 2018/08/06 | 2798 | support/latexmk/example_rcfiles/tikz-externalized-latexmkrc 2017/01/14 | 382 | support/latexmk/example_rcfiles/xelatex_latexmkrc -2023/03/31 | 4162 | support/latexmk/example_rcfiles/xr_latexmkrc +2023/11/06 | 3959 | support/latexmk/example_rcfiles/xr_latexmkrc 2007/01/20 | 328 | support/latexmk/extra-scripts/dvipdfm_call 2007/01/20 | 381 | support/latexmk/extra-scripts/dvipdfm_call.bat 2007/01/20 | 331 | support/latexmk/extra-scripts/dvipdfmx_call @@ -284336,14 +284372,14 @@ 2007/09/29 | 1492 | support/latexmk/extra-scripts/pst2pdf_for_latexmk_README.txt 2016/10/13 | 4828 | support/latexmk/extra-scripts/README-latexmk-scripts 2006/01/14 | 5588 | support/latexmk/extra-scripts/startacroread -2023/04/04 | 17951 | support/latexmk/INSTALL -2023/04/04 | 188084 | support/latexmk/latexmk.1 +2023/11/06 | 17951 | support/latexmk/INSTALL +2023/11/06 | 191834 | support/latexmk/latexmk.1 2022/03/15 | 1219 | support/latexmk/latexmk.cmd -2023/04/04 | 212107 | support/latexmk/latexmk.pdf -2023/04/04 | 483924 | support/latexmk/latexmk.pl -2023/04/04 | 232876 | support/latexmk/latexmk.txt -2023/04/04 | 2505 | support/latexmk/README -2023/04/04 | 512258 | support/latexmk.zip +2023/11/06 | 215760 | support/latexmk/latexmk.pdf +2023/11/06 | 491813 | support/latexmk/latexmk.pl +2023/11/06 | 237968 | support/latexmk/latexmk.txt +2023/11/06 | 2505 | support/latexmk/README +2023/11/07 | 521303 | support/latexmk.zip 1997/11/24 | 7551 | support/latexn/latexn 2023/02/27 | 22923 | support/latexpand/latexpand 2023/02/24 | 1529 | support/latexpand/LICENCE @@ -303124,7 +303160,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 -2023/11/06 | 428596 | systems/texlive/tlnet/archive/texlive-scripts.doc.r68742.tar.xz +2023/11/07 | 428680 | systems/texlive/tlnet/archive/texlive-scripts.doc.r68744.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 @@ -303146,7 +303182,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 -2023/11/06 | 114240 | systems/texlive/tlnet/archive/texlive-scripts.r68742.tar.xz +2023/11/07 | 114252 | systems/texlive/tlnet/archive/texlive-scripts.r68744.tar.xz 2022/09/13 | 580 | systems/texlive/tlnet/archive/texlive-scripts.universal-darwin.r64356.tar.xz 2023/05/14 | 60312 | systems/texlive/tlnet/archive/texlive-scripts.windows.r67095.tar.xz 2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.x86_64-cygwin.r64356.tar.xz @@ -305028,16 +305064,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 2023/08/07 | 125713 | systems/texlive/tlnet/install-tl -2023/11/06 | 5743906 | systems/texlive/tlnet/install-tl-unx.tar.gz -2023/11/06 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512 -2023/11/06 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc +2023/11/07 | 5743145 | systems/texlive/tlnet/install-tl-unx.tar.gz +2023/11/07 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512 +2023/11/07 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc 2023/05/13 | 5083 | systems/texlive/tlnet/install-tl-windows.bat -2023/11/06 | 21038445 | systems/texlive/tlnet/install-tl-windows.exe -2023/11/06 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512 -2023/11/06 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc -2023/11/06 | 26029225 | systems/texlive/tlnet/install-tl.zip -2023/11/06 | 145 | systems/texlive/tlnet/install-tl.zip.sha512 -2023/11/06 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc +2023/11/07 | 21040163 | systems/texlive/tlnet/install-tl-windows.exe +2023/11/07 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512 +2023/11/07 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc +2023/11/07 | 26029231 | systems/texlive/tlnet/install-tl.zip +2023/11/07 | 145 | systems/texlive/tlnet/install-tl.zip.sha512 +2023/11/07 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc 2023/03/19 | 1229 | systems/texlive/tlnet/README.md 2023/03/19 | 0 | systems/texlive/tlnet/TEXLIVE_2023 2023/01/17 | 8401 | systems/texlive/tlnet/tlpkg/gpg/pubring.gpg @@ -305047,7 +305083,7 @@ 2023/01/17 | 1280 | systems/texlive/tlnet/tlpkg/gpg/trustdb.gpg 2023/09/20 | 50622 | systems/texlive/tlnet/tlpkg/installer/config.guess 2010/11/11 | 11651 | systems/texlive/tlnet/tlpkg/installer/COPYING.MinGW-runtime.txt -2023/11/05 | 7508 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl +2023/11/06 | 7563 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl 2023/08/23 | 221470 | 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 @@ -305089,12 +305125,12 @@ 2023/02/21 | 20371 | systems/texlive/tlnet/tlpkg/TeXLive/TLCrypto.pm 2021/12/21 | 5429 | systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm 2023/04/08 | 28167 | systems/texlive/tlnet/tlpkg/TeXLive/TLPaper.pm -2023/11/06 | 18319509 | systems/texlive/tlnet/tlpkg/texlive.tlpdb -2023/11/06 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 +2023/11/07 | 18319509 | systems/texlive/tlnet/tlpkg/texlive.tlpdb +2023/11/07 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 2023/10/16 | 87924 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm -2023/11/06 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 -2023/11/06 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc -2023/11/06 | 2484232 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz +2023/11/07 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 +2023/11/07 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc +2023/11/07 | 2483212 | 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 @@ -315993,7 +316029,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 -2023/11/07 | 186 | timestamp +2023/11/08 | 186 | timestamp 2002/08/26 | 61898 | usergrps/dante/antrag.pdf 2002/08/26 | 118217 | usergrps/dante/antrag.ps 2021/11/11 | 917 | usergrps/dante/dtk/doc/beispiel.bib diff --git a/FILES.byname.gz b/FILES.byname.gz index 2d799cd80f..6e192b2c33 100644 Binary files a/FILES.byname.gz and b/FILES.byname.gz differ diff --git a/FILES.last07days b/FILES.last07days index 9a825187ed..e0272efb95 100644 --- a/FILES.last07days +++ b/FILES.last07days @@ -1,3 +1,98 @@ +2023/11/07 | 9655283 | fonts/newtx.zip +2023/11/07 | 928 | macros/latex/contrib/hyperref/doc/hyperref-doc2.html +2023/11/07 | 908 | fonts/newtx/tfm/txbex-bar.tfm +2023/11/07 | 900 | fonts/newtx/tfm/txex-bar.tfm +2023/11/07 | 882 | macros/latex/contrib/hyperref/doc/hyperref-doc5.html +2023/11/07 | 874328 | macros/latex/contrib/hyperref/hyperref.dtx +2023/11/07 | 854 | macros/latex/contrib/hyperref/doc/hyperref-doc7.html +2023/11/07 | 795 | macros/latex/contrib/hyperref/doc/hyperref-doc9.html +2023/11/07 | 795 | macros/latex/contrib/hyperref/doc/hyperref-doc8.html +2023/11/07 | 795 | macros/latex/contrib/hyperref/doc/hyperref-doc3.html +2023/11/07 | 793 | macros/latex/contrib/hyperref/doc/hyperref-doc6.html +2023/11/07 | 76918 | graphics/pmdraw/pmdraw.tex +2023/11/07 | 7536 | macros/latex/contrib/hyperref/hyperref-patches.dtx +2023/11/07 | 682647 | fonts/newtx/doc/newtxdoc.pdf +2023/11/07 | 5909 | fonts/newtx/afm/txbex-bar.afm +2023/11/07 | 5904 | fonts/newtx/afm/txex-bar.afm +2023/11/07 | 5766 | macros/latex/contrib/hyperref/xr-hyper.sty +2023/11/07 | 5743145 | systems/texlive/tlnet/install-tl-unx.tar.gz +2023/11/07 | 5509 | macros/latex/contrib/ipsum/doc/ipsum-doc.tex +2023/11/07 | 526220 | macros/latex/contrib/hyperref/doc/hyperref-doc.html +2023/11/07 | 521303 | support/latexmk.zip +2023/11/07 | 50800 | macros/latex/contrib/ipsum/tex/ipsum.sty +2023/11/07 | 50695 | macros/latex/contrib/hyperref/hluatex.dtx +2023/11/07 | 5024 | macros/latex/contrib/hyperref/hyperref.ins +2023/11/07 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 +2023/11/07 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc +2023/11/07 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc +2023/11/07 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc +2023/11/07 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc +2023/11/07 | 47027 | fonts/newtx/type1/txbsys.pfb +2023/11/07 | 46592 | fonts/newtx/README +2023/11/07 | 461 | macros/latex/contrib/ipsum/README.md +2023/11/07 | 45943 | fonts/newtx/type1/txsys.pfb +2023/11/07 | 4485853 | install/macros/latex/contrib/hyperref.tds.zip +2023/11/07 | 4479 | macros/latex/contrib/hyperref/README.md +2023/11/07 | 439955 | macros/latex/contrib/hyperref/doc/hyperref-linktarget.pdf +2023/11/07 | 43983 | graphics/pmdraw/pmdraw.sty +2023/11/07 | 4305174 | macros/latex/contrib/hyperref.zip +2023/11/07 | 428680 | systems/texlive/tlnet/archive/texlive-scripts.doc.r68744.tar.xz +2023/11/07 | 41821 | support/latexmk/CHANGES +2023/11/07 | 4132465 | biblio/ctan-bibdata.zip +2023/11/07 | 395112 | graphics/pmdraw.zip +2023/11/07 | 384001 | macros/latex/contrib/hyperref/doc/slides.pdf +2023/11/07 | 376051 | graphics/pmdraw/pmdraw.pdf +2023/11/07 | 3726593 | biblio/ctan-bibdata/ctan.pdf +2023/11/07 | 318399 | macros/latex/contrib/hyperref/doc/hyperref-doc.pdf +2023/11/07 | 3161 | macros/latex/contrib/hyperref/bmhydoc.sty +2023/11/07 | 28789 | macros/latex/contrib/hyperref/nameref.dtx +2023/11/07 | 28694 | macros/latex/contrib/hyperref/backref.dtx +2023/11/07 | 284 | macros/latex/contrib/hyperref/ntheorem-hyper.sty +2023/11/07 | 2826768 | biblio/ctan-bibdata/ctan.bib +2023/11/07 | 280 | macros/latex/contrib/hyperref/minitoc-hyper.sty +2023/11/07 | 26029231 | systems/texlive/tlnet/install-tl.zip +2023/11/07 | 2483212 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz +2023/11/07 | 247116 | macros/latex/contrib/hyperref/paperslides99.zip +2023/11/07 | 2350345 | macros/latex/contrib/hyperref/doc/hyperref.pdf +2023/11/07 | 21040163 | systems/texlive/tlnet/install-tl-windows.exe +2023/11/07 | 206681 | macros/latex/contrib/hyperref/doc/backref.pdf +2023/11/07 | 2036 | fonts/newtx/tfm/ntxbsy5.tfm +2023/11/07 | 2028 | fonts/newtx/tfm/ntxsy.tfm +2023/11/07 | 2024 | fonts/newtx/tfm/ntxsy5.tfm +2023/11/07 | 2020 | fonts/newtx/tfm/ntxbsy.tfm +2023/11/07 | 2016 | fonts/newtx/tfm/ntxbsy7.tfm +2023/11/07 | 1992 | fonts/newtx/tfm/ntxsy7.tfm +2023/11/07 | 19473 | macros/latex/contrib/hyperref/hyperref-linktarget.dtx +2023/11/07 | 1932 | fonts/newtx/vf/ntxsy7.vf +2023/11/07 | 1929 | macros/latex/contrib/hyperref/manifest.txt +2023/11/07 | 1924 | fonts/newtx/vf/ntxbsy7.vf +2023/11/07 | 1860 | fonts/newtx/vf/ntxbsy5.vf +2023/11/07 | 1852 | fonts/newtx/vf/ntxsy5.vf +2023/11/07 | 1852 | fonts/newtx/vf/ntxbsy.vf +2023/11/07 | 184798 | macros/latex/contrib/hyperref/doc/nameref.pdf +2023/11/07 | 183816 | macros/latex/contrib/ipsum.zip +2023/11/07 | 18319509 | systems/texlive/tlnet/tlpkg/texlive.tlpdb +2023/11/07 | 1804 | graphics/pmdraw/README.md +2023/11/07 | 1804 | fonts/newtx/vf/ntxsy.vf +2023/11/07 | 171911 | macros/latex/contrib/hyperref/doc/hyperref-doc.tex +2023/11/07 | 169585 | macros/latex/contrib/ipsum/doc/ipsum-doc.pdf +2023/11/07 | 1692 | fonts/newtx/tfm/txbsys.tfm +2023/11/07 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx +2023/11/07 | 1660 | fonts/newtx/tfm/txsys.tfm +2023/11/07 | 15673 | macros/latex/contrib/hyperref/doc/hyperref-doc.css +2023/11/07 | 15466 | fonts/newtx/type1/txbex-bar.pfb +2023/11/07 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512 +2023/11/07 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512 +2023/11/07 | 15299 | fonts/newtx/type1/txex-bar.pfb +2023/11/07 | 145 | systems/texlive/tlnet/install-tl.zip.sha512 +2023/11/07 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 +2023/11/07 | 132446 | macros/latex/contrib/hyperref/doc/paper.pdf +2023/11/07 | 130069 | fonts/newtx/doc/newtxdoc.tex +2023/11/07 | 125941 | macros/latex/contrib/hyperref/ChangeLog.txt +2023/11/07 | 114252 | systems/texlive/tlnet/archive/texlive-scripts.r68744.tar.xz +2023/11/07 | 10833 | fonts/newtx/afm/txbsys.afm +2023/11/07 | 10753 | fonts/newtx/afm/txsys.afm +2023/11/07 | 1030 | macros/latex/contrib/hyperref/doc/hyperref-doc4.html 2023/11/06 | 99253 | graphics/pstricks/base/doc/pst-news23.pdf 2023/11/06 | 92448 | macros/luatex/latex/innerscript/innerscript_code.pdf 2023/11/06 | 9239 | macros/latex/contrib/siunitx/siunitx-symbol.dtx @@ -9,6 +104,7 @@ 2023/11/06 | 8109 | graphics/pstricks/base/latex/pstricks.sty 2023/11/06 | 807 | macros/latex/contrib/q-and-a/demo/theme-ChatGPT/code/Q-and-A-example-code-1.py 2023/11/06 | 78250 | macros/latex/contrib/siunitx/CHANGELOG.md +2023/11/06 | 7563 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl 2023/11/06 | 72331 | macros/luatex/latex/innerscript/innerscript_code.dtx 2023/11/06 | 705592 | macros/latex/contrib/siunitx/siunitx.pdf 2023/11/06 | 668 | graphics/pgf/contrib/polyhedra/README.md @@ -16,7 +112,6 @@ 2023/11/06 | 6208 | macros/latex/contrib/affilauthor/affilauthor-doc.tex 2023/11/06 | 5831 | macros/latex/contrib/siunitx/siunitx-locale.dtx 2023/11/06 | 575 | macros/latex/contrib/q-and-a/demo/theme-ChatGPT/Q-and-A-demo-ChatGPT.tex -2023/11/06 | 5743906 | systems/texlive/tlnet/install-tl-unx.tar.gz 2023/11/06 | 560069 | macros/latex/contrib/q-and-a.zip 2023/11/06 | 55728 | macros/latex/contrib/siunitx/siunitx-table.dtx 2023/11/06 | 52791 | macros/latex/contrib/q-and-a/demo/lang-de/Q-and-A-demo-de.pdf @@ -28,11 +123,7 @@ 2023/11/06 | 51255 | macros/latex/contrib/homework/homework-demo-en.pdf 2023/11/06 | 5068 | macros/latex/contrib/q-and-a/demo/lang-de/Q-and-A-demo-de-content.tex 2023/11/06 | 49773 | macros/latex/contrib/q-and-a/demo/lang-en/Q-and-A-demo-en.pdf -2023/11/06 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 -2023/11/06 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc -2023/11/06 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc -2023/11/06 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc -2023/11/06 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc +2023/11/06 | 491813 | support/latexmk/latexmk.pl 2023/11/06 | 48816 | macros/latex/contrib/q-and-a/demo/lang-fr/Q-and-A-demo-fr.pdf 2023/11/06 | 4748 | macros/latex/contrib/siunitx/siunitx-abbreviations.cfg 2023/11/06 | 4636 | graphics/pstricks/base/doc/pst-news23.tex @@ -45,11 +136,9 @@ 2023/11/06 | 4336 | macros/latex/contrib/q-and-a/README.md 2023/11/06 | 43260 | macros/latex/contrib/q-and-a/demo/theme-ChatGPT/Q-and-A-demo-ChatGPT-dark.pdf 2023/11/06 | 43239 | macros/latex/contrib/q-and-a/demo/theme-ChatGPT/Q-and-A-demo-ChatGPT-light.pdf -2023/11/06 | 428596 | systems/texlive/tlnet/archive/texlive-scripts.doc.r68742.tar.xz -2023/11/06 | 4129215 | biblio/ctan-bibdata.zip +2023/11/06 | 3959 | support/latexmk/example_rcfiles/xr_latexmkrc 2023/11/06 | 39328 | macros/latex/contrib/siunitx/siunitx-complex.dtx 2023/11/06 | 37724 | macros/latex/contrib/siunitx/siunitx-print.dtx -2023/11/06 | 3725247 | biblio/ctan-bibdata/ctan.pdf 2023/11/06 | 37196 | macros/latex/contrib/q-and-a/Q-and-A.cls 2023/11/06 | 3687 | macros/latex/contrib/siunitx/siunitx.ins 2023/11/06 | 365 | macros/latex/contrib/q-and-a/doc/code/Q-and-A-doc-code-sample-content.tex @@ -72,50 +161,50 @@ 2023/11/06 | 310 | macros/latex/contrib/q-and-a/demo/lang-cn/Q-and-A-demo-cn.tex 2023/11/06 | 302 | macros/latex/contrib/q-and-a/demo/lang-en/Q-and-A-demo-en.tex 2023/11/06 | 30103 | macros/latex/contrib/homework/homework-example-sheet-answer.pdf +2023/11/06 | 3006 | support/latexmk/example_rcfiles/README-latexmk-rcfiles 2023/11/06 | 29 | macros/latex/contrib/q-and-a/demo/lang-de/code/Q-and-A-demo-de-code-list.py 2023/11/06 | 2951 | macros/latex/contrib/siunitx/siunitx-binary.dtx 2023/11/06 | 2946 | macros/latex/contrib/q-and-a/demo/theme-ChatGPT/Q-and-A-demo-ChatGPT-content.tex -2023/11/06 | 2825145 | biblio/ctan-bibdata/ctan.bib 2023/11/06 | 273398 | macros/latex/contrib/siunitx/siunitx-v2.sty 2023/11/06 | 271 | macros/latex/contrib/q-and-a/doc/code/Q-and-A-doc-code-sample-document.tex 2023/11/06 | 26 | macros/latex/contrib/q-and-a/demo/lang-fr/code/Q-and-A-demo-fr-code-list.py 2023/11/06 | 2696 | macros/latex/contrib/homework/homework-example-sheet.tex 2023/11/06 | 2636 | macros/latex/contrib/siunitx/siunitx-code.tex -2023/11/06 | 26029225 | systems/texlive/tlnet/install-tl.zip 2023/11/06 | 25 | macros/latex/contrib/q-and-a/demo/lang-en/code/Q-and-A-demo-en-code-list.py 2023/11/06 | 25 | macros/latex/contrib/q-and-a/demo/lang-cn/code/Q-and-A-demo-cn-code-list.py -2023/11/06 | 2484232 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz +2023/11/06 | 2505 | support/latexmk/README 2023/11/06 | 245837 | macros/latex/contrib/affilauthor.zip +2023/11/06 | 237968 | support/latexmk/latexmk.txt 2023/11/06 | 2360 | macros/latex/contrib/fancyvrb/Changes 2023/11/06 | 22231 | macros/latex/contrib/siunitx/siunitx.dtx 2023/11/06 | 21936 | macros/latex/contrib/homework/homework-example-sheet.pdf 2023/11/06 | 21837 | macros/latex/contrib/q-and-a/doc/code/Q-and-A-doc-code-sample-content-result.pdf +2023/11/06 | 215760 | support/latexmk/latexmk.pdf 2023/11/06 | 212414 | macros/luatex/latex/innerscript.zip 2023/11/06 | 2106 | macros/latex/contrib/q-and-a/demo/theme-ChatGPT/images/Q-and-A-demo-logo-ChatGPT.pdf -2023/11/06 | 21038445 | systems/texlive/tlnet/install-tl-windows.exe 2023/11/06 | 204 | macros/latex/contrib/q-and-a/doc/code/Q-and-A-doc-code-sample-content-result.tex 2023/11/06 | 194023 | macros/latex/contrib/fancyvrb.zip +2023/11/06 | 191834 | support/latexmk/latexmk.1 2023/11/06 | 19106 | macros/latex/contrib/q-and-a/LICENSE 2023/11/06 | 19106 | macros/latex/contrib/homework/LICENSE 2023/11/06 | 188326 | graphics/pgf/contrib/polyhedra.zip 2023/11/06 | 18441 | macros/latex/contrib/siunitx/siunitx-angle.dtx 2023/11/06 | 183790 | graphics/pgf/contrib/polyhedra/polyhedra-doc.pdf -2023/11/06 | 18319509 | systems/texlive/tlnet/tlpkg/texlive.tlpdb +2023/11/06 | 1796 | fonts/newtx/tfm/ntxbexx.tfm +2023/11/06 | 17951 | support/latexmk/INSTALL +2023/11/06 | 1788 | fonts/newtx/tfm/ntxexx.tfm 2023/11/06 | 175682 | macros/latex/contrib/q-and-a/demo/lang-cn/Q-and-A-demo-cn.pdf 2023/11/06 | 17523 | graphics/pgf/contrib/polyhedra/polyhedra.sty 2023/11/06 | 1729 | macros/latex/contrib/siunitx/siunitx-binary.cfg +2023/11/06 | 1716 | fonts/newtx/vf/ntxexx.vf 2023/11/06 | 170570 | macros/latex/contrib/fancyvrb/doc/fancyvrb-doc.pdf +2023/11/06 | 1692 | fonts/newtx/vf/ntxbexx.vf 2023/11/06 | 168660 | macros/latex/contrib/siunitx/siunitx.tex -2023/11/06 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx 2023/11/06 | 162316 | macros/latex/contrib/siunitx/siunitx-number.dtx 2023/11/06 | 1594512 | install/macros/latex/contrib/siunitx.tds.zip 2023/11/06 | 15869 | macros/latex/contrib/q-and-a/doc/Q-and-A-doc.tex 2023/11/06 | 1547221 | macros/latex/contrib/siunitx.zip -2023/11/06 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512 2023/11/06 | 15311 | macros/latex/contrib/siunitx/siunitx-quantity.dtx -2023/11/06 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512 -2023/11/06 | 145 | systems/texlive/tlnet/install-tl.zip.sha512 -2023/11/06 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 2023/11/06 | 1444 | macros/latex/contrib/q-and-a/demo/theme-ChatGPT/images/Q-and-A-demo-logo-User.pdf 2023/11/06 | 138 | macros/latex/contrib/q-and-a/demo/lang-de/code/Q-and-A-demo-de-code-func.py 2023/11/06 | 12 | macros/latex/contrib/q-and-a/DEPENDS.txt @@ -125,7 +214,6 @@ 2023/11/06 | 117 | macros/latex/contrib/q-and-a/demo/lang-en/code/Q-and-A-demo-en-code-func.py 2023/11/06 | 1179 | macros/latex/contrib/siunitx/README.md 2023/11/06 | 11783 | macros/latex/contrib/homework/README.md -2023/11/06 | 114240 | systems/texlive/tlnet/archive/texlive-scripts.r68742.tar.xz 2023/11/06 | 113778 | macros/luatex/latex/innerscript/innerscript_user_guide.pdf 2023/11/06 | 11266 | macros/latex/contrib/siunitx/siunitx-abbreviation.dtx 2023/11/06 | 11140 | graphics/pgf/contrib/polyhedra/polyhedra-doc.tex @@ -207,7 +295,6 @@ 2023/11/05 | 7528 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__jain_1999.txt.snap 2023/11/05 | 751518 | macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf 2023/11/05 | 750 | support/texlab/crates/diagnostics/src/util.rs -2023/11/05 | 7508 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl 2023/11/05 | 746 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@block_comments.txt.snap 2023/11/05 | 745 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_874.txt.snap 2023/11/05 | 742 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_simple.txt.snap @@ -1552,7 +1639,6 @@ 2023/11/01 | 9887 | macros/latex/base/format.ins 2023/11/01 | 96 | macros/latex-dev/base/doc-code.tex 2023/11/01 | 96 | macros/latex/base/doc-code.tex -2023/11/01 | 9636068 | fonts/newtx.zip 2023/11/01 | 96044 | macros/latex/contrib/l3experimental/l3galley.dtx 2023/11/01 | 9559 | macros/latex/required/tools/shellesc.dtx 2023/11/01 | 9559 | macros/latex-dev/required/tools/shellesc.dtx @@ -1606,7 +1692,6 @@ 2023/11/01 | 85099 | macros/latex-dev/required/amsmath/amsmath-2018-12-01.sty 2023/11/01 | 8481 | macros/latex/contrib/l3kernel/l3news11.tex 2023/11/01 | 84779 | macros/latex/contrib/l3kernel/l3fp-basics.dtx -2023/11/01 | 84691 | macros/latex/contrib/notebeamer/doc/images/HDU.pdf 2023/11/01 | 8425 | macros/latex/required/amsmath/changes.txt 2023/11/01 | 8425 | macros/latex-dev/required/amsmath/changes.txt 2023/11/01 | 84215 | macros/latex-dev/base/ltfssini.dtx @@ -1615,7 +1700,6 @@ 2023/11/01 | 82917 | macros/latex-dev/base/ltfssbas.dtx 2023/11/01 | 82917 | macros/latex/base/ltfssbas.dtx 2023/11/01 | 82683 | macros/latex/contrib/l3kernel/l3prefixes.pdf -2023/11/01 | 823 | macros/latex/contrib/notebeamer/README.md 2023/11/01 | 823832 | install/macros/latex/contrib/l3build.tds.zip 2023/11/01 | 82320 | macros/latex/contrib/l3kernel/l3msg.dtx 2023/11/01 | 821655 | macros/latex-dev/base/ltshipout-code.pdf @@ -1938,7 +2022,6 @@ 2023/11/01 | 47316 | macros/latex/base/ltspace.dtx 2023/11/01 | 47242 | macros/latex/contrib/l3kernel/l3fp-aux.dtx 2023/11/01 | 4716 | macros/latex/contrib/l3kernel/l3news05.tex -2023/11/01 | 46326 | fonts/newtx/README 2023/11/01 | 4574 | macros/latex/contrib/l3kernel/l3legacy.dtx 2023/11/01 | 456933 | macros/latex-dev/base/ltnews37.pdf 2023/11/01 | 456933 | macros/latex/base/ltnews37.pdf @@ -2035,7 +2118,6 @@ 2023/11/01 | 389721 | macros/latex-dev/required/latex-lab/latex-lab-new-or-1.pdf 2023/11/01 | 389003 | macros/latex/required/latex-lab/documentmetadata-support-doc.pdf 2023/11/01 | 389003 | macros/latex-dev/required/latex-lab/documentmetadata-support-doc.pdf -2023/11/01 | 38878 | macros/latex/contrib/notebeamer/doc/images/Inuyasa.jpg 2023/11/01 | 387794 | macros/latex/required/tools/ftnright.pdf 2023/11/01 | 387794 | macros/latex-dev/required/tools/ftnright.pdf 2023/11/01 | 38730 | macros/latex-dev/base/latex209.dtx @@ -2647,7 +2729,6 @@ 2023/11/01 | 12136 | macros/latex/contrib/l3kernel/l3tl-build.dtx 2023/11/01 | 12133 | macros/latex/required/tools/longtable-2020-01-07.sty 2023/11/01 | 12133 | macros/latex-dev/required/tools/longtable-2020-01-07.sty -2023/11/01 | 12057 | macros/latex/contrib/notebeamer/doc/images/titlepage.pdf 2023/11/01 | 12005 | macros/latex/required/amsmath/technote.tex 2023/11/01 | 12005 | macros/latex-dev/required/amsmath/technote.tex 2023/11/01 | 1189 | macros/latex-dev/required/graphics/graphics.ins @@ -2738,97 +2819,3 @@ 2023/11/01 | 10199 | macros/latex-dev/required/amsmath/amsopn.dtx 2023/11/01 | 10138 | macros/latex/contrib/l3experimental/l3draw-transforms.dtx 2023/11/01 | 10018 | macros/latex/contrib/l3experimental/l3draw-scopes.dtx -2023/10/31 | 992 | macros/xetex/latex/quran-id/doc/quran-id-test.tex -2023/10/31 | 96368 | systems/texlive/tlnet/archive/pgfornament-han.r68704.tar.xz -2023/10/31 | 94820 | fonts/kpfonts-otf/fonts/KpSans-BoldItalic.otf -2023/10/31 | 94764 | fonts/kpfonts-otf/fonts/KpSans-Italic.otf -2023/10/31 | 92 | fonts/kpfonts-otf/tex/KpMath-Light.fontspec -2023/10/31 | 928 | macros/latex/contrib/hyperref/doc/hyperref-doc2.html -2023/10/31 | 91 | fonts/kpfonts-otf/tex/KpMath-Sans.fontspec -2023/10/31 | 90 | fonts/kpfonts-otf/tex/KpMath-Regular.fontspec -2023/10/31 | 8846 | macros/xetex/latex/quran-id/doc/quran.png -2023/10/31 | 882 | macros/latex/contrib/hyperref/doc/hyperref-doc5.html -2023/10/31 | 88144 | systems/texlive/tlnet/archive/pstricks.r68705.tar.xz -2023/10/31 | 872111 | macros/latex/contrib/hyperref/hyperref.dtx -2023/10/31 | 86976 | fonts/kpfonts-otf/fonts/KpSans-Bold.otf -2023/10/31 | 85760 | fonts/kpfonts-otf/fonts/KpSans-Regular.otf -2023/10/31 | 854 | macros/latex/contrib/hyperref/doc/hyperref-doc7.html -2023/10/31 | 8195 | macros/xetex/latex/quran-id/tex/quran-id.sty -2023/10/31 | 795 | macros/latex/contrib/hyperref/doc/hyperref-doc9.html -2023/10/31 | 795 | macros/latex/contrib/hyperref/doc/hyperref-doc8.html -2023/10/31 | 795 | macros/latex/contrib/hyperref/doc/hyperref-doc3.html -2023/10/31 | 793 | macros/latex/contrib/hyperref/doc/hyperref-doc6.html -2023/10/31 | 78812 | macros/xetex/latex/quran-id/doc/quran-id-doc.pdf -2023/10/31 | 765 | macros/xetex/latex/quran-id/README -2023/10/31 | 7536 | macros/latex/contrib/hyperref/hyperref-patches.dtx -2023/10/31 | 7495528 | systems/texlive/tlnet/archive/pstricks.doc.r68705.tar.xz -2023/10/31 | 73552 | systems/texlive/tlnet/archive/cweb.doc.r68702.tar.xz -2023/10/31 | 6691 | macros/xetex/latex/quran-id/doc/quran-id-doc.tex -2023/10/31 | 5766 | macros/latex/contrib/hyperref/xr-hyper.sty -2023/10/31 | 525392 | macros/latex/contrib/hyperref/doc/hyperref-doc.html -2023/10/31 | 5079 | macros/latex/contrib/coloredbelts/tex/coloredbelts.sty -2023/10/31 | 50695 | macros/latex/contrib/hyperref/hluatex.dtx -2023/10/31 | 5024 | macros/latex/contrib/hyperref/hyperref.ins -2023/10/31 | 49568 | fonts/kpfonts-otf/fonts/KpMono-Italic.otf -2023/10/31 | 48260 | fonts/kpfonts-otf/fonts/KpMono-BoldItalic.otf -2023/10/31 | 480 | fonts/kpfonts-otf/tex/KpLight.fontspec -2023/10/31 | 469 | fonts/kpfonts-otf/tex/KpRoman.fontspec -2023/10/31 | 451456 | fonts/kpfonts-otf/fonts/KpMath-Light.otf -2023/10/31 | 4480772 | install/macros/latex/contrib/hyperref.tds.zip -2023/10/31 | 4479 | macros/latex/contrib/hyperref/README.md -2023/10/31 | 440050 | macros/latex/contrib/hyperref/doc/hyperref-linktarget.pdf -2023/10/31 | 4382954 | fonts/kpfonts-otf.zip -2023/10/31 | 4300186 | macros/latex/contrib/hyperref.zip -2023/10/31 | 425332 | fonts/kpfonts-otf/fonts/KpMath-Regular.otf -2023/10/31 | 42248 | fonts/kpfonts-otf/fonts/KpMono-Regular.otf -2023/10/31 | 41096 | fonts/kpfonts-otf/fonts/KpMono-Bold.otf -2023/10/31 | 384001 | macros/latex/contrib/hyperref/doc/slides.pdf -2023/10/31 | 37768 | macros/xetex/latex/quran-id/doc/quran-id-test.pdf -2023/10/31 | 35903 | fonts/kpfonts-otf/doc/Kpfonts-OTF-Doc-French.ltx -2023/10/31 | 33476 | fonts/kpfonts-otf/doc/Kpfonts-OTF-Doc-English.ltx -2023/10/31 | 317671 | macros/latex/contrib/hyperref/doc/hyperref-doc.pdf -2023/10/31 | 3161 | macros/latex/contrib/hyperref/bmhydoc.sty -2023/10/31 | 3035780 | macros/xetex/latex/quran-id/tex/qurantext-idii.translation.def -2023/10/31 | 292840 | fonts/kpfonts-otf/fonts/KpMath-Sans.otf -2023/10/31 | 28789 | macros/latex/contrib/hyperref/nameref.dtx -2023/10/31 | 28694 | macros/latex/contrib/hyperref/backref.dtx -2023/10/31 | 284 | macros/latex/contrib/hyperref/ntheorem-hyper.sty -2023/10/31 | 280 | macros/latex/contrib/hyperref/minitoc-hyper.sty -2023/10/31 | 26680 | systems/texlive/tlnet/archive/cweb.r68702.tar.xz -2023/10/31 | 257264 | fonts/kpfonts-otf/fonts/KpMath-Semibold.otf -2023/10/31 | 247116 | macros/latex/contrib/hyperref/paperslides99.zip -2023/10/31 | 2347765 | macros/latex/contrib/hyperref/doc/hyperref.pdf -2023/10/31 | 233864 | fonts/kpfonts-otf/fonts/KpMath-Bold.otf -2023/10/31 | 231 | fonts/kpfonts-otf/tex/KpSans.fontspec -2023/10/31 | 2263593 | macros/luatex/latex/autotype.zip -2023/10/31 | 206681 | macros/latex/contrib/hyperref/doc/backref.pdf -2023/10/31 | 20068 | fonts/kpfonts-otf/tex/kpfonts-otf.sty -2023/10/31 | 196420 | fonts/kpfonts-otf/fonts/KpMath-SansBold.otf -2023/10/31 | 19445 | macros/latex/contrib/hyperref/hyperref-linktarget.dtx -2023/10/31 | 1929 | macros/latex/contrib/hyperref/manifest.txt -2023/10/31 | 1865864 | systems/texlive/tlnet/archive/circuitikz.doc.r68706.tar.xz -2023/10/31 | 185 | fonts/kpfonts-otf/tex/KpMono.fontspec -2023/10/31 | 184798 | macros/latex/contrib/hyperref/doc/nameref.pdf -2023/10/31 | 1834074 | fonts/kpfonts-otf/doc/unimath-kpfonts.pdf -2023/10/31 | 180195 | fonts/kpfonts-otf/doc/Kpfonts-OTF-Doc-French.pdf -2023/10/31 | 176956 | systems/texlive/tlnet/archive/circuitikz.r68706.tar.xz -2023/10/31 | 176761 | fonts/kpfonts-otf/doc/Kpfonts-OTF-Doc-English.pdf -2023/10/31 | 171497 | macros/latex/contrib/hyperref/doc/hyperref-doc.tex -2023/10/31 | 16806 | fonts/kpfonts-otf/doc/unimath-kpfonts.ltx -2023/10/31 | 15673 | macros/latex/contrib/hyperref/doc/hyperref-doc.css -2023/10/31 | 1441530 | macros/xetex/latex/quran-id/tex/qurantext-idi.translation.def -2023/10/31 | 1350376 | systems/texlive/tlnet/archive/pgfornament-han.doc.r68704.tar.xz -2023/10/31 | 132446 | macros/latex/contrib/hyperref/doc/paper.pdf -2023/10/31 | 1319102 | macros/xetex/latex/quran-id.zip -2023/10/31 | 126664 | fonts/kpfonts-otf/fonts/KpRoman-BoldItalic.otf -2023/10/31 | 125755 | macros/latex/contrib/hyperref/ChangeLog.txt -2023/10/31 | 124228 | fonts/kpfonts-otf/fonts/KpRoman-SemiboldItalic.otf -2023/10/31 | 117168 | fonts/kpfonts-otf/fonts/KpRoman-Italic.otf -2023/10/31 | 116696 | fonts/kpfonts-otf/fonts/KpRoman-LightItalic.otf -2023/10/31 | 116612 | fonts/kpfonts-otf/fonts/KpRoman-Bold.otf -2023/10/31 | 114500 | fonts/kpfonts-otf/fonts/KpRoman-Regular.otf -2023/10/31 | 114088 | fonts/kpfonts-otf/fonts/KpRoman-Light.otf -2023/10/31 | 113644 | fonts/kpfonts-otf/fonts/KpRoman-Semibold.otf -2023/10/31 | 1030 | macros/latex/contrib/hyperref/doc/hyperref-doc4.html -2023/10/31 | 10297 | fonts/kpfonts-otf/README.md -2023/10/31 | 1018882 | macros/latex/contrib/coloredbelts.zip diff --git a/biblio/ctan-bibdata/ctan.bib b/biblio/ctan-bibdata/ctan.bib index 7bbdb042d4..561476cc88 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 06-11-2023, 02:00:38 +%% created at 07-11-2023, 02:00:36 %% %% This file is provided under the terms of the LPPL v1.3 or @@ -1189,6 +1189,25 @@ url = {https://ctan.org/pkg/aesupp}, } +@manual{ctan-affilauthor, + title = {The \texttt{affilauthor} package}, + subtitle = {Tag author and affiliation information in a key-value style}, + author = {Selvam P.}, + date = {2023-11-06}, + version = {1.0.0}, + license = {lppl1.3c}, + mirror = {https://mirror.ctan.org/macros/latex/contrib/affilauthor}, + url = {https://ctan.org/pkg/affilauthor}, + annotation = {This package provides key-value style author and affiliation + information tagging in a structured format. + Each field has a specific name similar to the bib format. + We can customize the styles as per preferences for + class layout. + Instead of giving all the information (author and affiliation) + in a single tag, we can split the information in a format of + key-value style.}, +} + @manual{ctan-afmtopl-clark, title = {The \texttt{AFMtoPL (Clark)} package}, subtitle = {Convert AFM files to PLs for use with dvitops}, @@ -24700,8 +24719,8 @@ title = {The \texttt{fancyvrb} package}, subtitle = {Sophisticated verbatim text}, author = {Timothy Van Zandt and Herbert Voß and Denis Girou and Sebastian Rahtz and Niall Mansfield}, - date = {2023-01-19}, - version = {4.5a}, + date = {2023-11-06}, + version = {4.5b}, license = {lppl1.3}, mirror = {https://mirror.ctan.org/macros/latex/contrib/fancyvrb}, url = {https://ctan.org/pkg/fancyvrb}, @@ -32185,8 +32204,8 @@ title = {The \texttt{homework} package}, subtitle = {A \LaTeX{} class for writing your homework}, author = {Jinwen XU}, - date = {2023-10-15}, - version = {}, + date = {2023-11-06}, + version = {2023-10-15a}, license = {lppl1.3c}, mirror = {https://mirror.ctan.org/macros/latex/contrib/homework}, url = {https://ctan.org/pkg/homework}, @@ -34149,19 +34168,20 @@ @manual{ctan-innerscript, title = {The \texttt{innerscript} package}, - subtitle = {Modifies automatic mathematics spacing}, + subtitle = {Small modifications to math formatting}, author = {Conrad Kosowsky}, - date = {2021-02-11}, - version = {1.1}, + date = {2023-11-06}, + version = {1.2}, license = {lppl1.3c}, mirror = {https://mirror.ctan.org/macros/luatex/latex/innerscript}, url = {https://ctan.org/pkg/innerscript}, - annotation = {This package modifies two aspects of \TeX{}'s automatic interatom - mathematics spacing. It uses LuaTeX's primitives - to make superscripts and subscripts more closely resemble - and math and to treat - subformulas as , - effectively eliminating this class.}, + annotation = {This package optionally modifies four aspects of \TeX{}’s automatic + math formatting to improve typesetting: (1) it adds extra space around + relation and operation symbols in superscripts and subscripts; (2) it removes + extra space around - delimiter pairs; + (3) it adds extra space after right delimiters in certain situations; + and (4) it forces and delimiters to completely + cover their contents. Using Lua\LaTeX{} is required.}, } @manual{ctan-inputenc, @@ -52184,8 +52204,8 @@ title = {The \texttt{pdfmanagement-testphase} package}, subtitle = {\LaTeX{} PDF management testphase bundle}, author = {{The \LaTeX{} Project Team}}, - date = {2023-10-10}, - version = {0.96a}, + date = {2023-11-06}, + version = {0.96b}, license = {lppl1.3c}, mirror = {https://mirror.ctan.org/macros/latex/contrib/pdfmanagement-testphase}, url = {https://ctan.org/pkg/pdfmanagement-testphase}, @@ -54468,6 +54488,23 @@ least.}, } +@manual{ctan-polyhedra, + title = {The \texttt{polyhedra} package}, + subtitle = {A TikZ package for drawing polyhedra}, + author = {Zafeirakis Zafeirakopoulos}, + date = {2023-11-06}, + version = {0.3}, + license = {lppl1.3c}, + mirror = {https://mirror.ctan.org/graphics/pgf/contrib/polyhedra}, + url = {https://ctan.org/pkg/polyhedra}, + annotation = {This package provides macros for creating polyhedral objects + in 2D and 3D. It requires + and + . + The macros provided can be used for drawing vertices, edges, + rays, polygons and cones.}, +} + @manual{ctan-polynom, title = {The \texttt{polynom} package}, subtitle = {Macros for manipulating polynomials}, @@ -57243,8 +57280,8 @@ title = {The \texttt{pstricks-base} package}, subtitle = {PostScript macros for \TeX{}}, author = {Herbert Voß and Denis Girou and Timothy Van Zandt}, - date = {2023-10-30}, - version = {3.19a}, + date = {2023-11-06}, + version = {3.19b}, license = {lppl1.3}, mirror = {https://mirror.ctan.org/graphics/pstricks/base}, url = {https://ctan.org/pkg/pstricks-base}, @@ -57872,7 +57909,7 @@ title = {The \texttt{Q-and-A} package}, subtitle = {Typesetting Q\&A-style conversation made easier}, author = {Jinwen XU}, - date = {2023-11-05}, + date = {2023-11-06}, version = {}, license = {lppl1.3c}, mirror = {https://mirror.ctan.org/macros/latex/contrib/q-and-a}, @@ -63216,8 +63253,8 @@ title = {The \texttt{siunitx} package}, subtitle = {A comprehensive (SI) units package}, author = {Joseph Wright}, - date = {2023-10-07}, - version = {3.3.7}, + date = {2023-11-06}, + version = {3.3.8}, license = {lppl1.3c}, mirror = {https://mirror.ctan.org/macros/latex/contrib/siunitx}, url = {https://ctan.org/pkg/siunitx}, @@ -71054,7 +71091,7 @@ title = {The \texttt{tkz-euclide} package}, subtitle = {Tools for drawing Euclidean geometry}, author = {Alain Matthes}, - date = {2023-10-26}, + date = {2023-11-06}, version = {5.04c}, license = {lppl1.3}, mirror = {https://mirror.ctan.org/macros/latex/contrib/tkz/tkz-euclide}, diff --git a/biblio/ctan-bibdata/ctan.pdf b/biblio/ctan-bibdata/ctan.pdf index d13fec5538..12990d6e2c 100644 Binary files a/biblio/ctan-bibdata/ctan.pdf and b/biblio/ctan-bibdata/ctan.pdf differ diff --git a/fonts/newtx/README b/fonts/newtx/README index ca0aae79c4..af0a4693a6 100644 --- a/fonts/newtx/README +++ b/fonts/newtx/README @@ -1,10 +1,15 @@ This package, initially based on txfonts, provides many fixes and enhancements to the txfonts package, splitting it into two separate packages---newtxtext and newtxmath, which may be run independently of one another. It provides scaling, improved metrics, and other options. In particular, newtxmath offers a libertine option which substitutes Linux Libertine (provided with TeXLive and MikTeX) italic and Greek letters for the default Times letters, providing a good match for the Libertine text font, which is heavier than Computer Modern but lighter than Times, and in my experience, looks very sharp and clear on the screen. -Current version: 1.731 2023-10-31 +Current version: 1.732 2023-11-06 This material is subject to the LaTeX Project Public License. See http://www.ctan.org/license/lppl1.3 for the details of that license. +Changes in version 1.732 +1. Introduced a sequence of curly braces to replace standard braces if you specify +the option curlybraces to newtxmath. +2. Introduced three new math symbols: \laplace, \laplac and \dAlembertian. See the package documentation for details. + Changes in version 1.731 Removed zplsups-Regular-ts1.tfm from the newtx package as it conflicted with a file of the same name in newpx. diff --git a/fonts/newtx/afm/txbex-bar.afm b/fonts/newtx/afm/txbex-bar.afm index 9342e0cdbc..2ba48b45d7 100644 --- a/fonts/newtx/afm/txbex-bar.afm +++ b/fonts/newtx/afm/txbex-bar.afm @@ -1,14 +1,14 @@ StartFontMetrics 2.0 -Comment Generated by FontForge 20170730 -Comment Creation Date: Sun Jun 16 15:43:29 2019 +Comment Generated by FontForge 20230101 +Comment Creation Date: Mon Nov 6 15:47:13 2023 FontName txbex-bar ItalicAngle 0 IsFixedPitch false UnderlinePosition -100 UnderlineThickness 50 EncodingScheme FontSpecific -FontBBox -11 -2364 2900 1444 -StartCharMetrics 93 +FontBBox -11 -3544 2900 1444 +StartCharMetrics 105 C 0 ; WX 343 ; N parenleftbigx ; B 50 -1069 313 56 ; C 1 ; WX 343 ; N parenrightbigx ; B 30 -1069 293 56 ; C 2 ; WX 359 ; N bracketleftbigx ; B 88 -1064 325 56 ; @@ -94,6 +94,18 @@ C 84 ; WX 1450 ; N oarcwider ; B 3 574 1496 832 ; C 85 ; WX 1900 ; N oarcwiderr ; B 5 560 1949 825 ; C 86 ; WX 2350 ; N oarcwidest ; B 8 541 2390 815 ; C 87 ; WX 2800 ; N oarcwideult ; B 17 538 2835 822 ; +C 88 ; WX 545 ; N braceleft.alt ; B 58 -198 487 712 ; +C 89 ; WX 545 ; N braceright.alt ; B 58 -198 487 712 ; +C 90 ; WX 655 ; N braceleftbig.alt ; B 118 -1144 567 56 ; +C 91 ; WX 655 ; N bracerightbig.alt ; B 138 -1144 587 56 ; +C 92 ; WX 649 ; N braceleftBig.alt ; B 118 -1744 561 56 ; +C 93 ; WX 649 ; N bracerightBig.alt ; B 138 -1744 581 56 ; +C 94 ; WX 729 ; N braceleftbigg.alt ; B 118 -2368 641 56 ; +C 95 ; WX 729 ; N bracerightbigg.alt ; B 138 -2368 661 56 ; +C 96 ; WX 719 ; N braceleftBigg.alt ; B 118 -2944 631 56 ; +C 97 ; WX 719 ; N bracerightBigg.alt ; B 138 -2944 651 56 ; +C 98 ; WX 719 ; N braceleft.size5 ; B 118 -3544 631 56 ; +C 99 ; WX 719 ; N braceright.size5 ; B 138 -3544 651 56 ; C 102 ; WX 369 ; N bracketleftBig ; B 88 -1398 335 56 ; C 103 ; WX 369 ; N bracketrightBig ; B 34 -1398 281 56 ; C 104 ; WX 411 ; N floorleftBig ; B 88 -1398 377 56 ; diff --git a/fonts/newtx/afm/txbsys.afm b/fonts/newtx/afm/txbsys.afm index 0e376952f4..dbbec44514 100644 --- a/fonts/newtx/afm/txbsys.afm +++ b/fonts/newtx/afm/txbsys.afm @@ -1,6 +1,6 @@ StartFontMetrics 2.0 -Comment Generated by FontForge 20220308 -Comment Creation Date: Fri May 20 10:13:09 2022 +Comment Generated by FontForge 20230101 +Comment Creation Date: Mon Nov 6 15:45:42 2023 FontName txbsys FullName txbsys FamilyName txbsys @@ -14,7 +14,7 @@ Version 3.0 EncodingScheme FontSpecific FontBBox -20 -929 1460 904 CapHeight 692 -StartCharMetrics 205 +StartCharMetrics 212 C 0 ; WX 676 ; N minus ; B 62 209 614 305 ; C 1 ; WX 250 ; N periodcentered ; B 41 173 210 342 ; C 2 ; WX 676 ; N multiply ; B 62 -17 614 531 ; @@ -220,5 +220,12 @@ C 201 ; WX 631 ; N dblbracketright ; B 54 -193 493 717 ; C 202 ; WX 410 ; N hermitconj ; B -20 0 390 536 ; C 203 ; WX 752 ; N uni2AEB ; B 62 0 690 550 ; C 204 ; WX 752 ; N nPerp ; B 62 -99 690 611 ; +C 205 ; WX 706 ; N uni22A2.alt ; B 150 0 707 678 ; +C 206 ; WX 707 ; N uni22A3.alt ; B 0 0 557 678 ; +C 215 ; WX 605 ; N braceleft.alt ; B 88 -198 517 712 ; +C 216 ; WX 605 ; N braceright.alt ; B 88 -198 517 712 ; +C 217 ; WX 719 ; N uni2206 ; B 30 0 689 677 ; +C 218 ; WX 856 ; N uni29E0 ; B 90 0 766 676 ; +C 219 ; WX 856 ; N uni29E0.alt ; B 90 0 766 676 ; EndCharMetrics EndFontMetrics diff --git a/fonts/newtx/afm/txex-bar.afm b/fonts/newtx/afm/txex-bar.afm index 76f2c70ec2..7f75648b90 100644 --- a/fonts/newtx/afm/txex-bar.afm +++ b/fonts/newtx/afm/txex-bar.afm @@ -1,30 +1,30 @@ StartFontMetrics 2.0 -Comment Generated by FontForge 20161003 -Comment Creation Date: Fri Feb 10 16:25:07 2017 +Comment Generated by FontForge 20230101 +Comment Creation Date: Mon Nov 6 15:46:29 2023 FontName txex-bar ItalicAngle 0 IsFixedPitch false UnderlinePosition -100 UnderlineThickness 50 EncodingScheme FontSpecific -FontBBox -47 -2364 2900 1444 -StartCharMetrics 93 -C 0 ; WX 343 ; N parenleftbigx ; B 50 -1064 313 56 ; -C 1 ; WX 343 ; N parenrightbigx ; B 30 -1064 293 56 ; +FontBBox -47 -3544 2900 1444 +StartCharMetrics 105 +C 0 ; WX 343 ; N parenleftbigx ; B 50 -1069 313 56 ; +C 1 ; WX 343 ; N parenrightbigx ; B 30 -1069 293 56 ; C 2 ; WX 333 ; N bracketleftbigx ; B 88 -1064 299 56 ; C 3 ; WX 333 ; N bracketrightbigx ; B 34 -1064 245 56 ; C 4 ; WX 371 ; N floorleftbigx ; B 88 -1064 337 56 ; C 5 ; WX 371 ; N floorrightbigx ; B 34 -1064 283 56 ; C 6 ; WX 371 ; N ceilingleftbigx ; B 88 -1064 337 56 ; C 7 ; WX 371 ; N ceilingrightbigx ; B 34 -1064 283 56 ; -C 8 ; WX 432 ; N braceleftbigx ; B 58 -1064 374 56 ; -C 9 ; WX 432 ; N bracerightbigx ; B 58 -1064 374 56 ; +C 8 ; WX 432 ; N braceleftbigx ; B 58 -1069 374 56 ; +C 9 ; WX 432 ; N bracerightbigx ; B 58 -1069 374 56 ; C 10 ; WX 402 ; N angleleftbigx ; B 50 -1064 352 56 ; C 11 ; WX 402 ; N anglerightbigx ; B 50 -1064 352 56 ; -C 12 ; WX 232 ; N barex ; B 86 0 146 484 ; -C 13 ; WX 436 ; N bardblex ; B 86 0 350 484 ; -C 14 ; WX 232 ; N barexbigx ; B 86 -1064 146 56 ; -C 15 ; WX 436 ; N bardblexbigx ; B 86 -1064 350 56 ; +C 12 ; WX 232 ; N barex ; B 86 -5 146 489 ; +C 13 ; WX 436 ; N bardblex ; B 86 -5 350 489 ; +C 14 ; WX 232 ; N barexbigx ; B 86 -1065 146 56 ; +C 15 ; WX 436 ; N bardblexbigx ; B 86 -1065 350 56 ; C 16 ; WX 300 ; N grouphtipdownleft ; B -7 -100 310 90 ; C 17 ; WX 300 ; N grouphtipdownright ; B -10 -100 307 90 ; C 18 ; WX 300 ; N grouphtipupleft ; B -7 0 310 190 ; @@ -48,32 +48,32 @@ C 38 ; WX 371 ; N ceilingleftBigg ; B 88 -2364 337 56 ; C 39 ; WX 371 ; N ceilingrightBigg ; B 34 -2364 283 56 ; C 40 ; WX 414 ; N braceleftBig ; B 68 -1397 346 56 ; C 41 ; WX 414 ; N bracerightBig ; B 68 -1397 345 56 ; -C 42 ; WX 450 ; N parenlefttpA ; B 50 0 420 1424 ; -C 43 ; WX 450 ; N parenrighttpA ; B 30 0 400 1424 ; -C 44 ; WX 450 ; N parenleftbtA ; B 50 0 420 1424 ; -C 45 ; WX 450 ; N parenrightbtA ; B 30 0 400 1424 ; -C 46 ; WX 450 ; N parenleftexA ; B 50 0 144 484 ; -C 47 ; WX 450 ; N parenrightexA ; B 306 0 400 484 ; -C 48 ; WX 400 ; N parenlefttp ; B 50 -1153 370 56 ; -C 49 ; WX 400 ; N parenrighttp ; B 30 -1153 350 56 ; -C 50 ; WX 363 ; N bracketlefttp ; B 88 0 329 484 ; -C 51 ; WX 363 ; N bracketrighttp ; B 34 0 275 484 ; -C 52 ; WX 363 ; N bracketleftbt ; B 88 0 329 484 ; -C 53 ; WX 363 ; N bracketrightbt ; B 34 0 275 484 ; -C 54 ; WX 363 ; N bracketleftex ; B 88 0 165 484 ; -C 55 ; WX 363 ; N bracketrightex ; B 198 0 275 484 ; -C 56 ; WX 552 ; N bracelefttp ; B 231 0 504 752 ; -C 57 ; WX 552 ; N bracerighttp ; B 48 0 321 752 ; -C 58 ; WX 552 ; N braceleftbt ; B 231 0 504 752 ; -C 59 ; WX 552 ; N bracerightbt ; B 48 0 321 752 ; -C 60 ; WX 552 ; N braceleftmid ; B 58 -438 321 484 ; -C 61 ; WX 552 ; N bracerightmid ; B 231 -438 494 484 ; -C 62 ; WX 552 ; N braceex ; B 231 0 321 242 ; -C 63 ; WX 533 ; N arrowvertex ; B 240 0 292 484 ; -C 64 ; WX 400 ; N parenleftbt ; B 50 -829 370 380 ; -C 65 ; WX 400 ; N parenrightbt ; B 30 -829 350 380 ; -C 66 ; WX 400 ; N parenleftex ; B 50 0 144 484 ; -C 67 ; WX 400 ; N parenrightex ; B 256 0 350 484 ; +C 42 ; WX 450 ; N parenlefttpA ; B 50 -20 420 1424 ; +C 43 ; WX 450 ; N parenrighttpA ; B 30 -20 400 1424 ; +C 44 ; WX 450 ; N parenleftbtA ; B 50 -6 420 1438 ; +C 45 ; WX 450 ; N parenrightbtA ; B 30 0 400 1444 ; +C 46 ; WX 450 ; N parenleftexA ; B 50 -21 144 500 ; +C 47 ; WX 450 ; N parenrightexA ; B 306 -21 400 500 ; +C 48 ; WX 400 ; N parenlefttp ; B 50 -1173 370 56 ; +C 49 ; WX 400 ; N parenrighttp ; B 30 -1173 350 56 ; +C 50 ; WX 363 ; N bracketlefttp ; B 88 -22 329 484 ; +C 51 ; WX 363 ; N bracketrighttp ; B 34 -22 275 484 ; +C 52 ; WX 363 ; N bracketleftbt ; B 88 0 329 840 ; +C 53 ; WX 363 ; N bracketrightbt ; B 34 0 275 839 ; +C 54 ; WX 363 ; N bracketleftex ; B 88 -12 165 495 ; +C 55 ; WX 363 ; N bracketrightex ; B 198 -11 275 495 ; +C 56 ; WX 552 ; N bracelefttp ; B 231 -20 504 752 ; +C 57 ; WX 552 ; N bracerighttp ; B 48 -20 321 752 ; +C 58 ; WX 552 ; N braceleftbt ; B 231 0 504 772 ; +C 59 ; WX 552 ; N bracerightbt ; B 48 0 321 772 ; +C 60 ; WX 552 ; N braceleftmid ; B 58 -462 321 507 ; +C 61 ; WX 552 ; N bracerightmid ; B 231 -461 494 507 ; +C 62 ; WX 552 ; N braceex ; B 231 -20 321 256 ; +C 63 ; WX 533 ; N arrowvertex ; B 240 -20 292 504 ; +C 64 ; WX 400 ; N parenleftbt ; B 50 -829 370 400 ; +C 65 ; WX 400 ; N parenrightbt ; B 30 -829 350 400 ; +C 66 ; WX 400 ; N parenleftex ; B 50 -21 144 500 ; +C 67 ; WX 400 ; N parenrightex ; B 256 -21 350 500 ; C 68 ; WX 666 ; N hatwide ; B 53 596 613 752 ; C 69 ; WX 1900 ; N hat4 ; B 0 589 1900 752 ; C 70 ; WX 2400 ; N hat5 ; B 0 586 2400 752 ; @@ -94,6 +94,18 @@ C 84 ; WX 1450 ; N oarcwider ; B 3 574 1496 832 ; C 85 ; WX 1900 ; N oarcwiderr ; B 4 560 1949 825 ; C 86 ; WX 2350 ; N oarcwidest ; B 8 561 2390 815 ; C 87 ; WX 2800 ; N oarcwideult ; B 17 548 2835 822 ; +C 88 ; WX 485 ; N braceleft.alt ; B 48 -198 437 712 ; +C 89 ; WX 485 ; N braceright.alt ; B 48 -198 437 712 ; +C 90 ; WX 525 ; N braceleftbig.alt ; B 58 -1144 467 56 ; +C 91 ; WX 525 ; N bracerightbig.alt ; B 58 -1144 467 56 ; +C 92 ; WX 519 ; N braceleftBig.alt ; B 58 -1744 461 56 ; +C 93 ; WX 519 ; N bracerightBig.alt ; B 58 -1744 461 56 ; +C 94 ; WX 599 ; N braceleftbigg.alt ; B 58 -2368 541 56 ; +C 95 ; WX 599 ; N bracerightbigg.alt ; B 58 -2368 541 56 ; +C 96 ; WX 589 ; N braceleftBigg.alt ; B 58 -2944 531 56 ; +C 97 ; WX 589 ; N bracerightBigg.alt ; B 58 -2944 531 56 ; +C 98 ; WX 589 ; N braceleft.size5 ; B 58 -3544 531 56 ; +C 99 ; WX 589 ; N braceright.size5 ; B 58 -3544 531 56 ; C 102 ; WX 343 ; N bracketleftBig ; B 88 -1398 309 56 ; C 103 ; WX 343 ; N bracketrightBig ; B 34 -1398 255 56 ; C 104 ; WX 371 ; N floorleftBig ; B 88 -1398 337 56 ; @@ -101,6 +113,6 @@ C 105 ; WX 371 ; N floorrightBig ; B 34 -1398 283 56 ; C 106 ; WX 371 ; N ceilingleftBig ; B 88 -1398 337 56 ; C 107 ; WX 371 ; N ceilingrightBig ; B 34 -1398 283 56 ; C 118 ; WX 939 ; N radicaltp ; B 645 -244 999 56 ; -C 119 ; WX 629 ; N arrowvertexdbl ; B 187 0 442 484 ; +C 119 ; WX 629 ; N arrowvertexdbl ; B 187 -20 442 504 ; EndCharMetrics EndFontMetrics diff --git a/fonts/newtx/afm/txsys.afm b/fonts/newtx/afm/txsys.afm index 11cc2b58d7..c05efcda2e 100644 --- a/fonts/newtx/afm/txsys.afm +++ b/fonts/newtx/afm/txsys.afm @@ -1,6 +1,6 @@ StartFontMetrics 2.0 -Comment Generated by FontForge 20190801 -Comment Creation Date: Thu Sep 12 14:29:00 2019 +Comment Generated by FontForge 20230101 +Comment Creation Date: Mon Nov 6 15:45:33 2023 FontName txsys FullName txsys FamilyName txsys @@ -13,7 +13,7 @@ UnderlineThickness 50 Version 3.0 EncodingScheme FontSpecific FontBBox -47 -944 2835 838 -StartCharMetrics 205 +StartCharMetrics 212 C 0 ; WX 636 ; N minus ; B 62 229 574 285 ; C 1 ; WX 250 ; N periodcentered ; B 70 202 181 313 ; C 2 ; WX 636 ; N multiply ; B 56 -5 580 520 ; @@ -36,8 +36,8 @@ C 18 ; WX 636 ; N reflexsubset ; B 52 -58 584 572 ; C 19 ; WX 636 ; N reflexsuperset ; B 52 -58 584 572 ; C 20 ; WX 636 ; N lessequal ; B 62 -58 574 574 ; C 21 ; WX 636 ; N greaterequal ; B 62 -58 574 574 ; -C 22 ; WX 636 ; N precedesequal ; B 62 -58 574 590 ; -C 23 ; WX 636 ; N followsequal ; B 62 -58 574 590 ; +C 22 ; WX 636 ; N precedesequal ; B 62 -58 574 591 ; +C 23 ; WX 636 ; N followsequal ; B 62 -58 574 591 ; C 24 ; WX 636 ; N similar ; B 56 177 581 337 ; C 25 ; WX 636 ; N approxequal ; B 56 75 581 439 ; C 26 ; WX 636 ; N propersubset ; B 52 8 584 506 ; @@ -219,5 +219,12 @@ C 201 ; WX 546 ; N dblbracketright ; B 54 -243 408 757 ; C 202 ; WX 410 ; N hermitconj ; B -18 0 392 536 ; C 203 ; WX 712 ; N uni2AEB ; B 62 0 650 550 ; C 204 ; WX 712 ; N nPerp ; B 62 -74 650 616 ; +C 205 ; WX 706 ; N uni22A2.alt ; B 150 0 707 678 ; +C 206 ; WX 707 ; N uni22A3.alt ; B 0 0 557 678 ; +C 215 ; WX 535 ; N braceleft.alt ; B 73 -198 462 712 ; +C 216 ; WX 535 ; N braceright.alt ; B 73 -198 462 712 ; +C 217 ; WX 664 ; N uni2206 ; B 33 0 631 676 ; +C 218 ; WX 856 ; N uni29E0 ; B 90 0 766 676 ; +C 219 ; WX 856 ; N uni29E0.alt ; B 90 0 766 676 ; EndCharMetrics EndFontMetrics diff --git a/fonts/newtx/doc/newtxdoc.pdf b/fonts/newtx/doc/newtxdoc.pdf index a7e7083b8f..e2206ca01a 100644 Binary files a/fonts/newtx/doc/newtxdoc.pdf and b/fonts/newtx/doc/newtxdoc.pdf differ diff --git a/fonts/newtx/doc/newtxdoc.tex b/fonts/newtx/doc/newtxdoc.tex index df038a7787..e7c72ca40d 100644 --- a/fonts/newtx/doc/newtxdoc.tex +++ b/fonts/newtx/doc/newtxdoc.tex @@ -15,7 +15,7 @@ \usepackage{url} \usepackage{trace} \usepackage{fonttable} -\usepackage[debugshow]{tracefnt} +%\usepackage[debugshow]{tracefnt} \usepackage{xcolor} \usepackage{array,booktabs} % some ad-hoc symbol fonts @@ -63,7 +63,6 @@ \title{New TX font package} \author{Michael Sharpe} \date{\today} % Activate to display a given date or no date - \begin{document} \makeatletter %\expandafter\show\csname @textsuperior\endcsname @@ -89,6 +88,15 @@ This package is meant to be a replacement for Young Ryu's {\tt txfonts}. It is \item Superior letters and figures distinct from numerators have been added along with some special features. The text switch \verb|\sustyle| (or \verb|\sufigures|) or the commands \verb|\textsu|, \verb|\textsup|, \verb|\textsups| may be used to invoke ordinary superiors. The command \verb|\textsuperscript| is reserved for a form of superiors that respond to adjustments you may specify in the package options, and which are used for footnote marker typesetting: \verb|supscale| rescales them, \verb|supsraised| specifies an amount to move them vertically, and \verb|supLspaced|, \verb|supRspaced| specify additional kerning to be applied at the left and right. These changes are applied in the order: scaling, raising, kerning. All except \verb|supscale| should be dimensions with units like {\tt em} which will scale properly. Their relative vertical positions stack up like this: X\textinf{12}X\textde{345}X\textnu{678}X\textsu{90}. There is also a {\tt supscolor} option that will apply a color specified in a form understood by {\tt xcolor}, like {\tt red!70!black}. +\item +Version 1.732 introduces some new mathematical glyphs. First, there are new curly braces invoked by the option {\tt curlybraces} with {\tt height+depth} of 940, 1200, 1800, 2400, 3000 and 3600 em units. Second, there are three new math symbols: +\begin{itemize} +\item +\verb|\laplace|, $\laplace$, which is an inverted \verb|\nabla|, having more weight in the bottom segment than \verb|\Delta|, $\Delta$. +\item +\verb|\laplac|, $\laplac$. This is the unicode-math name for the official d'Alembertian operator, {\tt U+29E0}. Unlike $\laplace$, it has more weight in the left and top segments than \verb|\laplace|. +\item \verb|\dAlembertian|, $\dAlembertian$, rotates $\laplac$ by 180${}^\circ$, making for a glyph whose weight distribution is a better match for the Laplacian. +\end{itemize} % \item A word of warning---there is a difference between XeLaTeX and LuaLaTeX that is very irritating. When processing some of the commands where there may be a numeric argument, such as, for example, \verb|{\addfontfeature{VerticalPosition=Superior}5}|, the output will be as expected with XeLaTeX but not with LuaLaTeX if you have set the document figures to be anything but the default tabular, lining. This happens even though the {\tt sups} table has entries for all other forms ({\tt oldstyle}, {\tt taboldstyle} and {\tt lining}) of main body figures, and the {\tt sups} lookup is ahead of the {\tt lnum}, {\tt tnum}, {\tt onum} and {\tt pnum} lookups. (Similarly for the {\tt subs}, {\tt numr} and {\tt dnom} tables.) The only solution I can see for the moment is to undo any possible figure features other than tabular lining before adding another feature. I've done this in {\tt newtxtext.sty} for the basic commands, like the font switches \verb|\sustyle| and \verb|\infstyle|, and their related commands \verb|\textsu{}| and \verb|\textinf{}|, all of which are safe to use with both XeLaTeX and LuaLaTeX. (Likewise for \verb|\destyle|, \verb|\nustyle| and \verb|\textde{}|, \verb|\textnum{}|.) \item Option {\tt scosf}, which specifies oldstyle figure within small caps, has been extended and now works in all LaTeX engines with both the \verb|\scshape| switch and the macro \verb|\textsc{}|. \end{itemize} diff --git a/fonts/newtx/tfm/ntxbexx.tfm b/fonts/newtx/tfm/ntxbexx.tfm index 39012ca426..19cfebbb5a 100644 Binary files a/fonts/newtx/tfm/ntxbexx.tfm and b/fonts/newtx/tfm/ntxbexx.tfm differ diff --git a/fonts/newtx/tfm/ntxbsy.tfm b/fonts/newtx/tfm/ntxbsy.tfm index 2c1e4c107c..8e43ff72db 100644 Binary files a/fonts/newtx/tfm/ntxbsy.tfm and b/fonts/newtx/tfm/ntxbsy.tfm differ diff --git a/fonts/newtx/tfm/ntxbsy5.tfm b/fonts/newtx/tfm/ntxbsy5.tfm index cb5e9ba3fa..e2b8116d30 100644 Binary files a/fonts/newtx/tfm/ntxbsy5.tfm and b/fonts/newtx/tfm/ntxbsy5.tfm differ diff --git a/fonts/newtx/tfm/ntxbsy7.tfm b/fonts/newtx/tfm/ntxbsy7.tfm index 872c6bf545..c45b85676d 100644 Binary files a/fonts/newtx/tfm/ntxbsy7.tfm and b/fonts/newtx/tfm/ntxbsy7.tfm differ diff --git a/fonts/newtx/tfm/ntxexx.tfm b/fonts/newtx/tfm/ntxexx.tfm index 34008c4fa1..d08626018d 100644 Binary files a/fonts/newtx/tfm/ntxexx.tfm and b/fonts/newtx/tfm/ntxexx.tfm differ diff --git a/fonts/newtx/tfm/ntxsy.tfm b/fonts/newtx/tfm/ntxsy.tfm index 667976e6d0..ea392568c3 100644 Binary files a/fonts/newtx/tfm/ntxsy.tfm and b/fonts/newtx/tfm/ntxsy.tfm differ diff --git a/fonts/newtx/tfm/ntxsy5.tfm b/fonts/newtx/tfm/ntxsy5.tfm index 22f4900be4..1bf17022e1 100644 Binary files a/fonts/newtx/tfm/ntxsy5.tfm and b/fonts/newtx/tfm/ntxsy5.tfm differ diff --git a/fonts/newtx/tfm/ntxsy7.tfm b/fonts/newtx/tfm/ntxsy7.tfm index dec513892e..4be297e5f2 100644 Binary files a/fonts/newtx/tfm/ntxsy7.tfm and b/fonts/newtx/tfm/ntxsy7.tfm differ diff --git a/fonts/newtx/tfm/txbex-bar.tfm b/fonts/newtx/tfm/txbex-bar.tfm index accc75f8d3..89ecd9d043 100644 Binary files a/fonts/newtx/tfm/txbex-bar.tfm and b/fonts/newtx/tfm/txbex-bar.tfm differ diff --git a/fonts/newtx/tfm/txbsys.tfm b/fonts/newtx/tfm/txbsys.tfm index de9df268da..4f74b9b38e 100644 Binary files a/fonts/newtx/tfm/txbsys.tfm and b/fonts/newtx/tfm/txbsys.tfm differ diff --git a/fonts/newtx/tfm/txex-bar.tfm b/fonts/newtx/tfm/txex-bar.tfm index d7ee4740b0..7afa197c3b 100644 Binary files a/fonts/newtx/tfm/txex-bar.tfm and b/fonts/newtx/tfm/txex-bar.tfm differ diff --git a/fonts/newtx/tfm/txsys.tfm b/fonts/newtx/tfm/txsys.tfm index 6298a9b500..e60f7af1ef 100644 Binary files a/fonts/newtx/tfm/txsys.tfm and b/fonts/newtx/tfm/txsys.tfm differ diff --git a/fonts/newtx/type1/txbex-bar.pfb b/fonts/newtx/type1/txbex-bar.pfb index ecf35354a7..acda4716bc 100644 Binary files a/fonts/newtx/type1/txbex-bar.pfb and b/fonts/newtx/type1/txbex-bar.pfb differ diff --git a/fonts/newtx/type1/txbsys.pfb b/fonts/newtx/type1/txbsys.pfb index 8aa690314e..812b781aa3 100644 Binary files a/fonts/newtx/type1/txbsys.pfb and b/fonts/newtx/type1/txbsys.pfb differ diff --git a/fonts/newtx/type1/txex-bar.pfb b/fonts/newtx/type1/txex-bar.pfb index fbf0f95633..36790bfbde 100644 Binary files a/fonts/newtx/type1/txex-bar.pfb and b/fonts/newtx/type1/txex-bar.pfb differ diff --git a/fonts/newtx/type1/txsys.pfb b/fonts/newtx/type1/txsys.pfb index 4e0637ffaf..5d7fc879a7 100644 Binary files a/fonts/newtx/type1/txsys.pfb and b/fonts/newtx/type1/txsys.pfb differ diff --git a/fonts/newtx/vf/ntxbexx.vf b/fonts/newtx/vf/ntxbexx.vf index 0923e47121..1dfb58f240 100644 Binary files a/fonts/newtx/vf/ntxbexx.vf and b/fonts/newtx/vf/ntxbexx.vf differ diff --git a/fonts/newtx/vf/ntxbsy.vf b/fonts/newtx/vf/ntxbsy.vf index 56df5b442c..7fb409d635 100644 Binary files a/fonts/newtx/vf/ntxbsy.vf and b/fonts/newtx/vf/ntxbsy.vf differ diff --git a/fonts/newtx/vf/ntxbsy5.vf b/fonts/newtx/vf/ntxbsy5.vf index a59c07d427..5ae108cac0 100644 Binary files a/fonts/newtx/vf/ntxbsy5.vf and b/fonts/newtx/vf/ntxbsy5.vf differ diff --git a/fonts/newtx/vf/ntxbsy7.vf b/fonts/newtx/vf/ntxbsy7.vf index 223bc23b53..8f66e9b86b 100644 Binary files a/fonts/newtx/vf/ntxbsy7.vf and b/fonts/newtx/vf/ntxbsy7.vf differ diff --git a/fonts/newtx/vf/ntxexx.vf b/fonts/newtx/vf/ntxexx.vf index 7f47998615..bb96b928bc 100644 Binary files a/fonts/newtx/vf/ntxexx.vf and b/fonts/newtx/vf/ntxexx.vf differ diff --git a/fonts/newtx/vf/ntxsy.vf b/fonts/newtx/vf/ntxsy.vf index 21c70c92eb..f56fb0b4db 100644 Binary files a/fonts/newtx/vf/ntxsy.vf and b/fonts/newtx/vf/ntxsy.vf differ diff --git a/fonts/newtx/vf/ntxsy5.vf b/fonts/newtx/vf/ntxsy5.vf index c98b3697ac..46e97beebd 100644 Binary files a/fonts/newtx/vf/ntxsy5.vf and b/fonts/newtx/vf/ntxsy5.vf differ diff --git a/fonts/newtx/vf/ntxsy7.vf b/fonts/newtx/vf/ntxsy7.vf index 7b37e2f37f..a93505aed1 100644 Binary files a/fonts/newtx/vf/ntxsy7.vf and b/fonts/newtx/vf/ntxsy7.vf differ diff --git a/graphics/pmdraw/README.md b/graphics/pmdraw/README.md new file mode 100644 index 0000000000..a2feb8f4e5 --- /dev/null +++ b/graphics/pmdraw/README.md @@ -0,0 +1,73 @@ +pmdraw +====== + + + + +The `pmdraw` package allows you to draw elements of the Partition +Monoids, commonly referred to diagrams. The package provides a lot of +flexibility to draw most diagrams and can be customised as needed. + +The package makes use of the `tikz` and `keyval` packages. + + +Usage +----- + +The usage of the package requires some basic understanding of +partition diagrams as well as the interface used. Please read the +manual for a complete explanation. + + +Contact +------- + +If you discover a bug, please be so kind and send me a minimum working +example of the bug in action and I will work on fixing it. My details +are . + + +Author +------- + +- Matthias Fresacher + + +License +------- + +Copyright 2023-10-16 Matthias Fresacher + +This work may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either version 1.3 +of this license or (at your option) any later version. +The latest version of this license is found via +. + +This work has the LPPL maintenance status `maintained`. + +The Current Maintainer of this work is Matthias Fresacher. + + +Contents +------- + +This work consists of the files `pmdraw.sty`, `pmdraw.tex` and the +examples in the folder `examples`, in addition to the derived file +`pmdraw.pdf`. diff --git a/graphics/pmdraw/examples/example-1.tex b/graphics/pmdraw/examples/example-1.tex new file mode 100644 index 0000000000..74ee80e96b --- /dev/null +++ b/graphics/pmdraw/examples/example-1.tex @@ -0,0 +1,36 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |`````````````````````````````x| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````````````````````| +% *------------------------------* + +\pmdBrick[ % Options + degree=5, + levels top=4, + levels bottom=3 +]{ % Upper non transversal edges + {1}{2} + {3}{4} + [level=2]{2}{4} + [level=3]{2}{5} + [level=4]{1}{5} +}{ % Lower non transversal edges + {1}{2} + {3}{4} + [level=2]{2}{4} + [level=3]{2}{5} +}{ % Transversal edges + \pmdEmpty +} \ No newline at end of file diff --git a/graphics/pmdraw/examples/example-10.tex b/graphics/pmdraw/examples/example-10.tex new file mode 100644 index 0000000000..ae6535244e --- /dev/null +++ b/graphics/pmdraw/examples/example-10.tex @@ -0,0 +1,37 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |`````````````````````````````x| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````````````````````| +% *------------------------------* + +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=17 + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + [height=1.75]{11}{1} + [height=1.5]{12}{2} + [height=1.25]{13}{3} + [height=1]{14}{4} + [height=0.75]{15}{5} + [height=0.5]{16}{6} + [height=0.25]{17}{7} + } + } +} \ No newline at end of file diff --git a/graphics/pmdraw/examples/example-11.tex b/graphics/pmdraw/examples/example-11.tex new file mode 100644 index 0000000000..84c6ae8a93 --- /dev/null +++ b/graphics/pmdraw/examples/example-11.tex @@ -0,0 +1,37 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |`````````````````````````````x| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````````````````````| +% *------------------------------* + +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=14 + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + [height=1.75]{11}{1} + [height=1.25]{12}{2} + [height=0.75]{13}{3} + [height=0.25]{14}{4} + [height=0.5]{1}{11} + [height=1]{2}{12} + [height=1.5]{3}{13} + } + } +} \ No newline at end of file diff --git a/graphics/pmdraw/examples/example-12.tex b/graphics/pmdraw/examples/example-12.tex new file mode 100644 index 0000000000..2e72dc7519 --- /dev/null +++ b/graphics/pmdraw/examples/example-12.tex @@ -0,0 +1,101 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |`````````````````````````````x| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````````````````````| +% *------------------------------* + +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=16, + row sep=3, % Must be before levels key + levels=3, + vertices options={ + \fill[red] (#1,#2) circle (.5); + }, + edges upper={very thick}, + edges transversal={red,very thick}, + brace={ + left=1, + right=4, + label={4}, + options={ + \draw [ + red, + very thick, + decorate, + decoration={calligraphic brace,mirror,amplitude=6pt} + ] (#1-0.17,-0.5) -- (#2+0.17,-0.5) node[pos=0.5,below=6pt]{\(#3\)}; + } + } + ]{ % Upper non transversal edges + {4}{5} + [ % Options + options={ + \draw[blue] (#1,3) arc (180:270:\pmdraw{edgeHeight}); % Draw left arch + \draw[blue] (#1+\pmdraw{edgeHeight},3-\pmdraw{edgeHeight}) -- (#2-\pmdraw{edgeHeight},3-\pmdraw{edgeHeight}); % Draw straight line + \draw[blue] (#2-\pmdraw{edgeHeight},3-\pmdraw{edgeHeight}) arc (270:360:\pmdraw{edgeHeight}); % Draw right arc + } + ]{4}{6} + [level=2]{4}{7} + [level=3]{4}{8} + }{ % Lower non transversal edges + {4}{5} + [ + options={ + \draw[green] (#1,0) arc (180:90:\pmdraw{edgeHeight}); % Draw left arch + \draw[green] (#1+\pmdraw{edgeHeight},\pmdraw{edgeHeight}) -- (#2-\pmdraw{edgeHeight},\pmdraw{edgeHeight}); % Draw straight line + \draw[green] (#2-\pmdraw{edgeHeight},\pmdraw{edgeHeight}) arc (90:0:\pmdraw{edgeHeight}); % Draw right arc + } + ]{4}{6} + [level=2]{4}{7} + [level=3]{4}{8} + } + { % Transversal edges + [height=1.75]{11}{1} + [height=1.25]{12}{2} + [height=0.75]{13}{3} + [height=0.25]{14}{4} + [height=0.5]{1}{11} + [height=1]{2}{12} + [height=1.5]{3}{13} + [ + options={ + \draw[dashed] (#1, 3) -- (#2, 0); % Draw straight line + } + ]{16}{16} + {15}{15} + } + } + { % Brick 2 + [ % Options + degree=14, + row sep=3, % Must be before levels key + levels=3 + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + [height=1.75]{11}{1} + [height=1.25]{12}{2} + [height=0.75]{13}{3} + [height=0.25]{14}{4} + [height=0.5]{1}{11} + [height=1]{2}{12} + [height=1.5]{3}{13} + } + } +} \ No newline at end of file diff --git a/graphics/pmdraw/examples/example-13.tex b/graphics/pmdraw/examples/example-13.tex new file mode 100644 index 0000000000..716e8b1165 --- /dev/null +++ b/graphics/pmdraw/examples/example-13.tex @@ -0,0 +1,126 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |`````````````````````````````x| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````````````````````| +% *------------------------------* + +\pmdProduct +[ % Options + row sep=3, + diagram sep=2, + dots options={ + \draw (#1,#2) node[red] {\(\dots\dots\)}; + } +]{ % Added edges + {1}{3} + {7}{11} + {18}{21} +}{ % Top Diagram + { % Brick 1 + [ % Options + degree top=3, + degree bottom=4 + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{2} + {2}{3} + {3}{4} + {7}{1} + } + }{ % Brick 2 + [ % Options + degree top=7, + blank bottom=1, + degree bottom=5, + levels=2 + ]{ % Upper non transversal edges + [level=2]{3}{16} + {4}{5} + {6}{7} + }{ % Lower non transversal edges + {3}{4} + {5}{6} + }{ % Transversal edges + {1}{2} + } + }{ % Brick 3 + [ % Options + blank top=3, + degree top=5, + blank bottom=4, + degree bottom=4, + levels=2 + ]{ % Upper non transversal edges + {4}{5} + {6}{7} + }{ % Lower non transversal edges + {5}{6} + {7}{8} + }{ % Transversal edges + \pmdEmpty + } + } +}{ % Bottom Diagram + { % Brick 1 + [ % Options + degree top=3, + degree bottom=4 + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{2} + {2}{3} + {3}{4} + [height=1.5]{7}{1} + } + }{ % Brick 2 + [ % Options + degree top=7, + blank bottom=1, + degree bottom=5, + levels=2 + ]{ % Upper non transversal edges + [level=2]{3}{16} + {4}{5} + {6}{7} + }{ % Lower non transversal edges + {3}{4} + {5}{6} + }{ % Transversal edges + {1}{2} + } + }{ % Brick 3 + [ % Options + blank top=3, + degree top=5, + blank bottom=4, + degree bottom=4, + levels=2 + ]{ % Upper non transversal edges + {4}{5} + {6}{7} + }{ % Lower non transversal edges + {5}{6} + {7}{8} + }{ % Transversal edges + \pmdEmpty + } + } +} \ No newline at end of file diff --git a/graphics/pmdraw/examples/example-14.tex b/graphics/pmdraw/examples/example-14.tex new file mode 100644 index 0000000000..72d2b8ead0 --- /dev/null +++ b/graphics/pmdraw/examples/example-14.tex @@ -0,0 +1,76 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |`````````````````````````````x| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````````````````````| +% *------------------------------* + +\pmdDiagram +[ % Options + row sep=3, + diagram sep=2, + dots options={ + \draw (#1,#2) node[red] {\(\mid\)}; + } +]{ + { % Brick 1 + [ % Options + degree top=3, + degree bottom=4 + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{2} + {2}{3} + {3}{4} + {7}{1} + } + }{ % Brick 2 + [ % Options + degree top=7, + blank bottom=1, + degree bottom=5, + levels=2 + ]{ % Upper non transversal edges + [level=2]{3}{16} + {4}{5} + {6}{7} + }{ % Lower non transversal edges + {3}{4} + {5}{6} + }{ % Transversal edges + {1}{2} + } + }{ % Brick 3 + [ % Options + blank top=-1, + degree top=9, + blank bottom=4, + degree bottom=4, + levels=2 + ]{ % Upper non transversal edges + {0}{1} + {2}{3} + {4}{5} + {6}{7} + }{ % Lower non transversal edges + {5}{6} + {7}{8} + }{ % Transversal edges + \pmdEmpty + } + } +} \ No newline at end of file diff --git a/graphics/pmdraw/examples/example-15.tex b/graphics/pmdraw/examples/example-15.tex new file mode 100644 index 0000000000..bed21df510 --- /dev/null +++ b/graphics/pmdraw/examples/example-15.tex @@ -0,0 +1,76 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |`````````````````````````````x| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````````````````````| +% *------------------------------* + +\pmdDiagram +[ % Options + row sep=3, + diagram sep=2, + dots options={ + \draw (#1,#2) node {}; + } +]{ + { % Brick 1 + [ % Options + degree top=3, + degree bottom=4 + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{2} + {2}{3} + {3}{4} + {7}{1} + } + }{ % Brick 2 + [ % Options + degree top=7, + blank bottom=1, + degree bottom=5, + levels=2 + ]{ % Upper non transversal edges + [level=2]{3}{16} + {4}{5} + {6}{7} + }{ % Lower non transversal edges + {3}{4} + {5}{6} + }{ % Transversal edges + {1}{2} + } + }{ % Brick 3 + [ % Options + blank top=-1, + degree top=9, + blank bottom=4, + degree bottom=4, + levels=2 + ]{ % Upper non transversal edges + {0}{1} + {2}{3} + {4}{5} + {6}{7} + }{ % Lower non transversal edges + {5}{6} + {7}{8} + }{ % Transversal edges + \pmdEmpty + } + } +} \ No newline at end of file diff --git a/graphics/pmdraw/examples/example-16.tex b/graphics/pmdraw/examples/example-16.tex new file mode 100644 index 0000000000..4a5f4f90bb --- /dev/null +++ b/graphics/pmdraw/examples/example-16.tex @@ -0,0 +1,127 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |`````````````````````````````x| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````````````````````| +% *------------------------------* + +\pmdProduct +[ % options + row sep=3, + diagram sep=2, + dots options={ + \draw (#1,#2) node[red] {\(\dots\dots\)}; + }, + edges added={dashed,blue} +]{ % Added edges + {1}{3} + {7}{11} + {18}{21} +}{ % Top Diagram + { % Brick 1 + [ % Options + degree top=3, + degree bottom=4 + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{2} + {2}{3} + {3}{4} + {7}{1} + } + }{ % Brick 2 + [ % Options + degree top=7, + blank bottom=1, + degree bottom=5, + levels=2 + ]{ % Upper non transversal edges + [level=2]{3}{16} + {4}{5} + {6}{7} + }{ % Lower non transversal edges + {3}{4} + {5}{6} + }{ % Transversal edges + {1}{2} + } + }{ % Brick 3 + [ % Options + blank top=3, + degree top=5, + blank bottom=4, + degree bottom=4, + levels=2 + ]{ % Upper non transversal edges + {4}{5} + {6}{7} + }{ % Lower non transversal edges + {5}{6} + {7}{8} + }{ % Transversal edges + \pmdEmpty + } + } +}{ % Bottom Diagram + { % Brick 1 + [ % Options + degree top=3, + degree bottom=4 + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{2} + {2}{3} + {3}{4} + [height=1.5]{7}{1} + } + }{ % Brick 2 + [ % Options + degree top=7, + blank bottom=1, + degree bottom=5, + levels=2 + ]{ % Upper non transversal edges + [level=2]{3}{16} + {4}{5} + {6}{7} + }{ % Lower non transversal edges + {3}{4} + {5}{6} + }{ % Transversal edges + {1}{2} + } + }{ % Brick 3 + [ % Options + blank top=3, + degree top=5, + blank bottom=4, + degree bottom=4, + levels=2 + ]{ % Upper non transversal edges + {4}{5} + {6}{7} + }{ % Lower non transversal edges + {5}{6} + {7}{8} + }{ % Transversal edges + \pmdEmpty + } + } +} \ No newline at end of file diff --git a/graphics/pmdraw/examples/example-17.tex b/graphics/pmdraw/examples/example-17.tex new file mode 100644 index 0000000000..8b23ff0903 --- /dev/null +++ b/graphics/pmdraw/examples/example-17.tex @@ -0,0 +1,70 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |`````````````````````````````x| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````````````````````| +% *------------------------------* + +\pmdDiagram[grid]{ + { % Brick 1 + [ % Options + degree=2, + brace node=red, + edges transversal=blue, + brace={ + left=1, + right=4, + label={p - 1} + } + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + } + { % Brick 2 + [ % Options + degree top=6, + degree bottom=5, + dots node=blue, + edges upper=red, + edges lower=green, + edges transversal=blue + ]{ % Upper non transversal edges + {3}{4} + {5}{6} + }{ % Lower non transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + [height=1]{2}{10} + {1}{1} + } + }{ % Brick 3 + [ % Options + degree top=2, + blank top=1, + degree bottom=3 + ]{ % Upper non transversal edges + {2}{3} + }{ % Lower non transversal edges + {1}{2} + }{ % Transversal edges + \pmdEmpty + } + } +} \ No newline at end of file diff --git a/graphics/pmdraw/examples/example-18.tex b/graphics/pmdraw/examples/example-18.tex new file mode 100644 index 0000000000..136fd35d72 --- /dev/null +++ b/graphics/pmdraw/examples/example-18.tex @@ -0,0 +1,52 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |`````````````````````````````x| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````````````````````| +% *------------------------------* + +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=5, + levels top=1, + levels bottom=1, + labels, + labels top node={red,above=16pt} + ]{ % Upper non transversal edges + [height=1.1]{2}{5} + }{ % Lower non transversal edges + [height=0.3]{2}{5} + }{ % Transversal edges + {1}{1} + } + }{ % Brick 2 + [ % Options + degree=2, + levels top=1, + levels bottom=1, + labels, + labels bottom options={ + \draw (#1,#2) node[below=6pt] {\(#3''\)}; + }, + labels bottom start=6 + ]{ % Upper non transversal edges + {1}{2} + }{ % Lower non transversal edges + {1}{2} + }{ % Transversal edges + {1}{2} + } + } +} \ No newline at end of file diff --git a/graphics/pmdraw/examples/example-19.tex b/graphics/pmdraw/examples/example-19.tex new file mode 100644 index 0000000000..14b31e8211 --- /dev/null +++ b/graphics/pmdraw/examples/example-19.tex @@ -0,0 +1,53 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |`````````````````````````````x| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````````````````````| +% *------------------------------* + +\pmdDiagram[grid]{ + { % Brick 1 + [ % Options + degree=5, + levels top=1, + levels bottom=1, + labels, + labels top node={red,above=16pt} + ]{ % Upper non transversal edges + [height=1.1]{2}{5} + }{ % Lower non transversal edges + [height=0.3]{2}{5} + }{ % Transversal edges + {1}{1} + } + }{ % Brick 2 + [ % Options + degree=2, + levels top=1, + levels bottom=1, + labels, + labels bottom options={ + \draw (#1,#2) node[below=6pt] {\(#3''\)}; + }, + labels bottom start=6, + labels top start=-4 + ]{ % Upper non transversal edges + {1}{2} + }{ % Lower non transversal edges + {1}{2} + }{ % Transversal edges + {1}{2} + } + } +} \ No newline at end of file diff --git a/graphics/pmdraw/examples/example-2.tex b/graphics/pmdraw/examples/example-2.tex new file mode 100644 index 0000000000..3b72c7bf01 --- /dev/null +++ b/graphics/pmdraw/examples/example-2.tex @@ -0,0 +1,39 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |`````````````````````````````x| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````````````````````| +% *------------------------------* + +\pmdBrick[ % Options + blank top=2, + degree top=5, + blank bottom=1, + degree bottom=4, + levels top=4, + levels bottom=3 +]{ % Upper non transversal edges + {3}{4} + {5}{6} + [level=2]{4}{6} + [level=3]{4}{7} + [level=4]{3}{7} +}{ % Lower non transversal edges + {1}{2} + {3}{4} + [level=2]{2}{4} + [level=3]{2}{5} +}{ % Transversal edges + \pmdEmpty +} \ No newline at end of file diff --git a/graphics/pmdraw/examples/example-20.tex b/graphics/pmdraw/examples/example-20.tex new file mode 100644 index 0000000000..f6f179ff5a --- /dev/null +++ b/graphics/pmdraw/examples/example-20.tex @@ -0,0 +1,171 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |`````````````````````````````x| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````````````````````| +% *------------------------------* + +\usetikzlibrary{patterns} + +\newcommand{\blockStyles}{ + \tikzstyle{typeI} = [ + very thick, + rounded corners=5pt, + red, + preaction={fill, red!3} + ] + \tikzstyle{typeT} = [ + very thick, + rounded corners=5pt, + dash pattern={on 7.5pt off 2.5pt}, + green, + preaction={fill, green!3} + ] + \tikzstyle{typeB} = [ + very thick, + rounded corners=5pt, + dash pattern={on 2.5pt off 2.5pt}, + blue, + preaction={fill, blue!3} + ] + \tikzstyle{typeO} = [ + very thick, + rounded corners=5pt, + dash pattern={on 2.5pt off 2.5pt on 7.5pt off 2.5pt}, + orange, + preaction={fill, orange!3} + ] + \tikzstyle{typeU} = [ + very thick, + rounded corners=5pt, + dash pattern={on 2.5pt off 2.5pt on 2.5pt off 2.5pt on 7.5pt off 2.5pt}, + violet, + preaction={fill, violet!3} + ] + \tikzstyle{typeN} = [ + very thick, + rounded corners=5pt, + dash pattern={on 7.5pt off 2.5pt on 7.5pt off 2.5pt on 2.5pt off 2.5pt}, + yellow, + preaction={fill, yellow!3} + ] +} + +\pmdProduct[ % Options + decorate before={ + \blockStyles + \draw[typeI] (0.6, 2.4) -- (1.4, 2.4) -- (1.4, 0.7) -- (3.4, 0.7) -- (3.4, -3.4) -- (2.6, -3.4) -- (2.6, -1.7) -- (0.6, -1.7) -- cycle; + \draw[typeT] (1.6, 1.3) rectangle (3.4, 2.4); + \draw[typeB] (0.6, -3.4) rectangle (2.4, -2.3); + } +]{ % Added edges + {1}{3} +}{ % Top Diagram + { % Brick 1 + [ % Options + degree=3 + ]{ % Upper non transversal edges + {2}{3} + }{ % Lower non transversal edges + {2}{3} + }{ % Transversal edges + {1}{1} + } + } +}{ % Bottom Diagram + { % Brick 1 + [ % Options + degree=3 + ]{ % Upper non transversal edges + {1}{2} + }{ % Lower non transversal edges + {1}{2} + }{ % Transversal edges + {3}{3} + } + } +} +\hspace{5em} +\pmdProduct[ % Options + decorate before={ + \blockStyles + \draw[typeI] (0.6, 2.4) -- (1.4, 2.4) -- (1.4, 0.7) -- (10.4, 0.7) -- (10.4, -3.4) -- (9.6, -3.4) -- (9.6, -1.7) -- (0.6, -1.7) -- cycle; + \foreach \x in {0,2,7} { + \begin{scope}[shift={(\x,0)}] + \draw[typeT] (1.6, 1.3) rectangle (3.4, 2.4); + \end{scope} + } + \foreach \x in {0,2,4,7} { + \begin{scope}[shift={(\x,0)}] + \draw[typeB] (0.6, -3.4) rectangle (2.4, -2.3); + \end{scope} + } + } +]{ % Added edges + {1}{5} + {9}{10} +}{ % Top Diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non transversal edges + {2}{3} + {4}{5} + }{ % Lower non transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + {1}{1} + } + }{ % Brick 2 + [ % Options + blank top=2, + degree top=2, + blank bottom=2, + degree bottom=2 + ]{ % Upper non transversal edges + {3}{4} + }{ % Lower non transversal edges + {3}{4} + }{ % Transversal edges + \pmdEmpty + } + } +}{ % Bottom Diagram + { % Brick 1 + [ % Options + degree=6 + ]{ % Upper non transversal edges + {1}{2} + {3}{4} + {5}{6} + }{ % Lower non transversal edges + {1}{2} + {3}{4} + {5}{6} + }{ % Transversal edges + \pmdEmpty + } + }{ % Brick 2 + [ % Options + degree=3 + ]{ % Upper non transversal edges + {1}{2} + }{ % Lower non transversal edges + {1}{2} + }{ % Transversal edges + {3}{3} + } + } +} \ No newline at end of file diff --git a/graphics/pmdraw/examples/example-21.tex b/graphics/pmdraw/examples/example-21.tex new file mode 100644 index 0000000000..3c97be7e11 --- /dev/null +++ b/graphics/pmdraw/examples/example-21.tex @@ -0,0 +1,183 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |`````````````````````````````x| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````````````````````| +% *------------------------------* + +\usetikzlibrary{patterns} + +\newcommand{\blockStyles}{ + \tikzstyle{typeI} = [ + very thick, + rounded corners=5pt, + red, + preaction={fill, red!3} + ] + \tikzstyle{typeT} = [ + very thick, + rounded corners=5pt, + dash pattern={on 7.5pt off 2.5pt}, + green, + preaction={fill, green!3} + ] + \tikzstyle{typeB} = [ + very thick, + rounded corners=5pt, + dash pattern={on 2.5pt off 2.5pt}, + blue, + preaction={fill, blue!3} + ] + \tikzstyle{typeO} = [ + very thick, + rounded corners=5pt, + dash pattern={on 2.5pt off 2.5pt on 7.5pt off 2.5pt}, + orange, + preaction={fill, orange!3} + ] + \tikzstyle{typeU} = [ + very thick, + rounded corners=5pt, + dash pattern={on 2.5pt off 2.5pt on 2.5pt off 2.5pt on 7.5pt off 2.5pt}, + violet, + preaction={fill, violet!3} + ] + \tikzstyle{typeN} = [ + very thick, + rounded corners=5pt, + dash pattern={on 7.5pt off 2.5pt on 7.5pt off 2.5pt on 2.5pt off 2.5pt}, + yellow, + preaction={fill, yellow!3} + ] +} + +\pmdProduct[ % Options + decorate before={ + \blockStyles + \draw[typeO] (0.6, -1.9) rectangle (4.4, 0.7); + \foreach \x in {0,2} { + \begin{scope}[shift={(\x,0)}] + \draw[typeB] (0.6, -3.4) rectangle (2.4, -2.3); + \draw[typeT] (0.6, 1.3) rectangle (2.4, 2.4); + \end{scope} + } + } +]{ % Added edges + {1}{4} +}{ % Top Diagram + { % Brick 1 + [ % Options + degree=4 + ]{ % Upper non transversal edges + {1}{2} + {3}{4} + }{ % Lower non transversal edges + {1}{2} + {3}{4} + }{ % Transversal edges + \pmdEmpty + } + } +}{ % Bottom Diagram + { % Brick 1 + [ % Options + degree=4, + levels top=2 + ]{ % Upper non transversal edges + [level=2]{1}{4} + {2}{3} + }{ % Lower non transversal edges + {1}{2} + {3}{4} + }{ % Transversal edges + \pmdEmpty + } + } +} +\hspace{5em} +\pmdProduct[ % Options + decorate before={ + \blockStyles + \draw[typeO] (0.6, -1.9) rectangle (11.4, 0.7); + \foreach \x in {0,2,4,7,9} { + \begin{scope}[shift={(\x,0)}] + \draw[typeB] (0.6, -3.4) rectangle (2.4, -2.3); + \draw[typeT] (0.6, 1.3) rectangle (2.4, 2.4); + \end{scope} + } + } +]{ % Added edges + {1}{5} + {9}{11} +}{ % Top Diagram + { % Brick 1 + [ % Options + degree=6 + ]{ % Upper non transversal edges + {1}{2} + {3}{4} + {5}{6} + }{ % Lower non transversal edges + {1}{2} + {3}{4} + {5}{6} + }{ % Transversal edges + \pmdEmpty + } + }{ % Brick 2 + [ % Options + degree=4 + ]{ % Upper non transversal edges + {1}{2} + {3}{4} + }{ % Lower non transversal edges + {1}{2} + {3}{4} + }{ % Transversal edges + \pmdEmpty + } + } +}{ % Bottom Diagram + { % Brick 1 + [ % Options + degree top=5, + levels top=2, + degree bottom=6 + ]{ % Upper non transversal edges + [level=2]{1}{11} + {2}{3} + {4}{5} + }{ % Lower non transversal edges + {1}{2} + {3}{4} + {5}{6} + }{ % Transversal edges + \pmdEmpty + } + }{ % Brick 2 + [ % Options + blank top=1, + degree top=3, + degree bottom=4, + levels top=2 + ]{ % Upper non transversal edges + {2}{3} + }{ % Lower non transversal edges + {1}{2} + {3}{4} + }{ % Transversal edges + \pmdEmpty + } + } +} \ No newline at end of file diff --git a/graphics/pmdraw/examples/example-22.tex b/graphics/pmdraw/examples/example-22.tex new file mode 100644 index 0000000000..1f551db62b --- /dev/null +++ b/graphics/pmdraw/examples/example-22.tex @@ -0,0 +1,179 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |`````````````````````````````x| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````````````````````| +% *------------------------------* + +\usetikzlibrary{patterns} + +\newcommand{\blockStyles}{ + \tikzstyle{typeI} = [ + very thick, + rounded corners=5pt, + red, + preaction={fill, red!3} + ] + \tikzstyle{typeT} = [ + very thick, + rounded corners=5pt, + dash pattern={on 7.5pt off 2.5pt}, + green, + preaction={fill, green!3} + ] + \tikzstyle{typeB} = [ + very thick, + rounded corners=5pt, + dash pattern={on 2.5pt off 2.5pt}, + blue, + preaction={fill, blue!3} + ] + \tikzstyle{typeO} = [ + very thick, + rounded corners=5pt, + dash pattern={on 2.5pt off 2.5pt on 7.5pt off 2.5pt}, + orange, + preaction={fill, orange!3} + ] + \tikzstyle{typeU} = [ + very thick, + rounded corners=5pt, + dash pattern={on 2.5pt off 2.5pt on 2.5pt off 2.5pt on 7.5pt off 2.5pt}, + violet, + preaction={fill, violet!3} + ] + \tikzstyle{typeN} = [ + very thick, + rounded corners=5pt, + dash pattern={on 7.5pt off 2.5pt on 7.5pt off 2.5pt on 2.5pt off 2.5pt}, + yellow, + preaction={fill, yellow!3} + ] +} + +\pmdProduct[ % Options + decorate before={ + \blockStyles + \draw[typeU] (0.6, 2.4) -- (1.4, 2.4) -- (1.4, 0.7) -- (3.6, 0.7) -- (3.6, 2.4) -- (4.4, 2.4) -- (4.4, -1.7) -- (0.6, -1.7) -- cycle; + \draw[typeT] (1.6, 1.3) rectangle (3.4, 2.4); + \foreach \x in {0,2} { + \begin{scope}[shift={(\x,0)}] + \draw[typeB] (0.6, -3.4) rectangle (2.4, -2.3); + \end{scope} + } + } +]{ % Added edges + {1}{4} +}{ % Top Diagram + { % Brick 1 + [ % Options + degree=4 + ]{ % Upper non transversal edges + {2}{3} + }{ % Lower non transversal edges + {2}{3} + }{ % Transversal edges + {1}{1} + {4}{4} + } + } +}{ % Bottom Diagram + { % Brick 1 + [ % Options + degree=4 + ]{ % Upper non transversal edges + {1}{2} + {3}{4} + }{ % Lower non transversal edges + {1}{2} + {3}{4} + }{ % Transversal edges + \pmdEmpty + } + } +} +\hspace{5em} +\pmdProduct[ % Options + decorate before={ + \blockStyles + \draw[typeU] (0.6, 2.4) -- (1.4, 2.4) -- (1.4, 0.7) -- (10.6, 0.7) -- (10.6, 2.4) -- (11.4, 2.4) -- (11.4, -1.7) -- (0.6, -1.7) -- cycle; + \foreach \x in {0,2,4,7,9} { + \begin{scope}[shift={(\x,0)}] + \draw[typeB] (0.6, -3.4) rectangle (2.4, -2.3); + \end{scope} + } + \foreach \x in {1,3,8} { + \begin{scope}[shift={(\x,0)}] + \draw[typeT] (0.6, 1.3) rectangle (2.4, 2.4); + \end{scope} + } + } +]{ % Added edges + {1}{5} + {9}{11} +}{ % Top Diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non transversal edges + {2}{3} + {4}{5} + }{ % Lower non transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + {1}{1} + } + }{ % Brick 2 + [ % Options + blank top=2, + blank bottom=2, + degree=3 + ]{ % Upper non transversal edges + {3}{4} + }{ % Lower non transversal edges + {3}{4} + }{ % Transversal edges + {5}{5} + } + } +}{ % Bottom Diagram + { % Brick 1 + [ % Options + degree=6 + ]{ % Upper non transversal edges + {1}{2} + {3}{4} + {5}{6} + }{ % Lower non transversal edges + {1}{2} + {3}{4} + {5}{6} + }{ % Transversal edges + \pmdEmpty + } + }{ % Brick 2 + [ % Options + degree=4 + ]{ % Upper non transversal edges + {1}{2} + {3}{4} + }{ % Lower non transversal edges + {1}{2} + {3}{4} + }{ % Transversal edges + \pmdEmpty + } + } +} \ No newline at end of file diff --git a/graphics/pmdraw/examples/example-23.tex b/graphics/pmdraw/examples/example-23.tex new file mode 100644 index 0000000000..016bee3c5c --- /dev/null +++ b/graphics/pmdraw/examples/example-23.tex @@ -0,0 +1,179 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |`````````````````````````````x| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````````````````````| +% *------------------------------* + +\usetikzlibrary{patterns} + +\newcommand{\blockStyles}{ + \tikzstyle{typeI} = [ + very thick, + rounded corners=5pt, + red, + preaction={fill, red!3} + ] + \tikzstyle{typeT} = [ + very thick, + rounded corners=5pt, + dash pattern={on 7.5pt off 2.5pt}, + green, + preaction={fill, green!3} + ] + \tikzstyle{typeB} = [ + very thick, + rounded corners=5pt, + dash pattern={on 2.5pt off 2.5pt}, + blue, + preaction={fill, blue!3} + ] + \tikzstyle{typeO} = [ + very thick, + rounded corners=5pt, + dash pattern={on 2.5pt off 2.5pt on 7.5pt off 2.5pt}, + orange, + preaction={fill, orange!3} + ] + \tikzstyle{typeU} = [ + very thick, + rounded corners=5pt, + dash pattern={on 2.5pt off 2.5pt on 2.5pt off 2.5pt on 7.5pt off 2.5pt}, + violet, + preaction={fill, violet!3} + ] + \tikzstyle{typeN} = [ + very thick, + rounded corners=5pt, + dash pattern={on 7.5pt off 2.5pt on 7.5pt off 2.5pt on 2.5pt off 2.5pt}, + yellow, + preaction={fill, yellow!3} + ] +} + +\pmdProduct[ % Options + decorate before={ + \blockStyles + \draw[typeN] (0.6, -3.4) -- (1.4, -3.4) -- (1.4, -1.7) -- (3.6, -1.7) -- (3.6, -3.4) -- (4.4, -3.4) -- (4.4, 0.7) -- (0.6, 0.7) -- cycle; + \draw[typeB] (1.6, -3.4) rectangle (3.4, -2.3); + \foreach \x in {0,2} { + \begin{scope}[shift={(\x,0)}] + \draw[typeT] (0.6, 1.3) rectangle (2.4, 2.4); + \end{scope} + } + } +]{ % Added edges + {1}{4} +}{ % Top Diagram + { % Brick 1 + [ % Options + degree=4 + ]{ % Upper non transversal edges + {1}{2} + {3}{4} + }{ % Lower non transversal edges + {1}{2} + {3}{4} + }{ % Transversal edges + \pmdEmpty + } + } +}{ % Bottom Diagram + { % Brick 1 + [ % Options + degree=4 + ]{ % Upper non transversal edges + {2}{3} + }{ % Lower non transversal edges + {2}{3} + }{ % Transversal edges + {1}{1} + {4}{4} + } + } +} +\hspace{5em} +\pmdProduct[ % Options + decorate before={ + \blockStyles + \draw[typeN] (0.6, -3.4) -- (1.4, -3.4) -- (1.4, -1.7) -- (10.6, -1.7) -- (10.6, -3.4) -- (11.4, -3.4) -- (11.4, 0.7) -- (0.6, 0.7) -- cycle; + \foreach \x in {0,2,4,7,9} { + \begin{scope}[shift={(\x,0)}] + \draw[typeT] (0.6, 1.3) rectangle (2.4, 2.4); + \end{scope} + } + \foreach \x in {1,3,8} { + \begin{scope}[shift={(\x,0)}] + \draw[typeB] (0.6, -3.4) rectangle (2.4, -2.3); + \end{scope} + } + } +]{ % Added edges + {1}{5} + {9}{11} +}{ % Top Diagram + { % Brick 1 + [ % Options + degree=6 + ]{ % Upper non transversal edges + {1}{2} + {3}{4} + {5}{6} + }{ % Lower non transversal edges + {1}{2} + {3}{4} + {5}{6} + }{ % Transversal edges + \pmdEmpty + } + }{ % Brick 2 + [ % Options + degree=4 + ]{ % Upper non transversal edges + {1}{2} + {3}{4} + }{ % Lower non transversal edges + {1}{2} + {3}{4} + }{ % Transversal edges + \pmdEmpty + } + } +}{ % Bottom Diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non transversal edges + {2}{3} + {4}{5} + }{ % Lower non transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + {1}{1} + } + }{ % Brick 2 + [ % Options + blank top=2, + blank bottom=2, + degree=3 + ]{ % Upper non transversal edges + {3}{4} + }{ % Lower non transversal edges + {3}{4} + }{ % Transversal edges + {5}{5} + } + } +} \ No newline at end of file diff --git a/graphics/pmdraw/examples/example-24.tex b/graphics/pmdraw/examples/example-24.tex new file mode 100644 index 0000000000..a4169912f7 --- /dev/null +++ b/graphics/pmdraw/examples/example-24.tex @@ -0,0 +1,160 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |`````````````````````````````x| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````````````````````| +% *------------------------------* + +\pmdProduct[ % Options + decorate after={ + \draw (1, 2) node[above=6pt] {\( x \)\strut}; + \draw (2, 2) node[above=6pt] {\( y \)\strut}; + } +]{ % Added edges + {1}{3} +}{ % Top diagram + { % Brick 1 + [ + degree=3 + ]{ % Upper non transversal edges + {1}{2} + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + \pmdEmpty + } + } +}{ % Bottom diagram + { % Brick 1 + [ + degree=3 + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + \pmdEmpty + } + } +} +\hspace{2em} +\pmdProduct[ % Options + decorate after={ + \draw (1, 2) node[above=6pt] {\( x \)}; + \draw (1, 0) node[left=6pt] {\( y \)}; + \draw (1, -1) node[left=6pt] {\( j''' \)}; + \draw (1, -3) node[left=6pt] {\( z \)}; + } +]{ % Added edges + {1}{3} +}{ % Top diagram + { % Brick 1 + [ + degree=3 + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + } + } +}{ % Bottom diagram + { % Brick 1 + [ + degree=3 + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + } + } +} +\hspace{2em} +\pmdProduct[ % Options + decorate after={ + \draw (1, 2) node[above=6pt] {\( x \)}; + \draw (1, 0) node[left=6pt] {\( y \)}; + \draw (1, -1) node[left=6pt] {\( j''' \)}; + \draw (2, -1) node[below=4pt] {\( z \)}; + \draw (2, 0) node[above right=0pt] {\( k'' \)}; + \draw (2, 2) node[above=6pt] {\( w \)}; + } +]{ % Added edges + {1}{3} +}{ % Top diagram + { % Brick 1 + [ + degree=3 + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + } +}{ % Bottom diagram + { % Brick 1 + [ + degree=3 + ]{ % Upper non transversal edges + {1}{2} + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + \pmdEmpty + } + } +} +\hspace{2em} +\pmdProduct[ % Options + decorate after={ + \draw (1, 2) node[above=6pt] {\( x \)}; + \draw (1, 0) node[left=6pt] {\( y \)}; + \draw (1, -1) node[left=6pt] {\( j''' \)}; + \draw (2, -1) node[below=4pt] {\( z \)}; + \draw (2, 0) node[above=4pt] {\( k'' \)}; + \draw (3, 0) node[above=4pt] {\( w \)}; + } +]{ % Added edges + {1}{4} +}{ % Top diagram + { % Brick 1 + [ + degree=4 + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + {2}{3} + }{ % Transversal edges + {1}{1} + } + } +}{ % Bottom diagram + { % Brick 1 + [ + degree=4 + ]{ % Upper non transversal edges + {1}{2} + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + \pmdEmpty + } + } +} \ No newline at end of file diff --git a/graphics/pmdraw/examples/example-25.tex b/graphics/pmdraw/examples/example-25.tex new file mode 100644 index 0000000000..b3ae92b546 --- /dev/null +++ b/graphics/pmdraw/examples/example-25.tex @@ -0,0 +1,63 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |`````````````````````````````x| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````````````````````| +% *------------------------------* + +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=5, + brace={ + left=4, + right=7, + label={p - 3} + } + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{2} + {2}{3} + {3}{1} + {4}{4} + {5}{5} + } + } + { % Brick 2 + [ % Options + degree=5 + ]{ % Upper non transversal edges + {2}{3} + {4}{5} + }{ % Lower non transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + {1}{1} + } + }{ % Brick 3 + [ % Options + degree=2 + ]{ % Upper non transversal edges + {1}{2} + }{ % Lower non transversal edges + {1}{2} + }{ % Transversal edges + \pmdEmpty + } + } +} \ No newline at end of file diff --git a/graphics/pmdraw/examples/example-3.tex b/graphics/pmdraw/examples/example-3.tex new file mode 100644 index 0000000000..5654553405 --- /dev/null +++ b/graphics/pmdraw/examples/example-3.tex @@ -0,0 +1,53 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |`````````````````````````````x| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````````````````````| +% *------------------------------* + +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=5, + levels top=4, + levels bottom=3 + ]{ % Upper non transversal edges + {1}{2} + {3}{4} + [level=2]{2}{4} + [level=3]{2}{5} + [level=4]{1}{5} + [level=3]{5}{7} + }{ % Lower non transversal edges + {1}{2} + {3}{4} + [level=2]{2}{4} + [level=3]{2}{5} + }{ % Transversal edges + {1}{1} + } + }{ % Brick 2 + [ % Options + degree=4 + ]{ % Upper non transversal edges + {1}{2} + {3}{4} + }{ % Lower non transversal edges + {1}{2} + }{ % Transversal edges + {1}{2} + {3}{4} + } + } +} \ No newline at end of file diff --git a/graphics/pmdraw/examples/example-4.tex b/graphics/pmdraw/examples/example-4.tex new file mode 100644 index 0000000000..953fec4e42 --- /dev/null +++ b/graphics/pmdraw/examples/example-4.tex @@ -0,0 +1,77 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |`````````````````````````````x| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````````````````````| +% *------------------------------* + +\pmdDiagram{ + { % Brick 1 + [ % Options + degree top=3, + degree bottom=4, + brace={ + left=2, + right=7, + label={p} + } + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{2} + {2}{3} + {3}{4} + {7}{1} + } + }{ % Brick 2 + [ % Options + degree top=7, + blank bottom=1, + degree bottom=5, + levels=2, + brace={ + left=4, + right=12, + label={q}, + above + } + ]{ % Upper non transversal edges + [level=2]{3}{13} + {4}{5} + {6}{7} + }{ % Lower non transversal edges + {3}{4} + {5}{6} + }{ % Transversal edges + {1}{2} + } + }{ % Brick 3 + [ % Options + degree top=5, + blank bottom=1, + degree bottom=4, + levels=2 + ]{ % Upper non transversal edges + {1}{2} + {3}{4} + }{ % Lower non transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + \pmdEmpty + } + } +} \ No newline at end of file diff --git a/graphics/pmdraw/examples/example-5.tex b/graphics/pmdraw/examples/example-5.tex new file mode 100644 index 0000000000..5e5f7529d8 --- /dev/null +++ b/graphics/pmdraw/examples/example-5.tex @@ -0,0 +1,118 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |`````````````````````````````x| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````````````````````| +% *------------------------------* + +\pmdProduct{ % Added edges + {1}{3} + {7}{11} + {15}{18} +}{ % Top Diagram + { % Brick 1 + [ % Options + degree top=3, + degree bottom=4 + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{2} + {2}{3} + {3}{4} + {7}{1} + } + }{ % Brick 2 + [ % Options + degree top=7, + blank bottom=1, + degree bottom=5, + levels=2 + ]{ % Upper non transversal edges + [level=2]{3}{13} + {4}{5} + {6}{7} + }{ % Lower non transversal edges + {3}{4} + {5}{6} + }{ % Transversal edges + {1}{2} + } + }{ % Brick 3 + [ % Options + degree top=5, + blank bottom=1, + degree bottom=4, + levels=2 + ]{ % Upper non transversal edges + {1}{2} + {3}{4} + }{ % Lower non transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + \pmdEmpty + } + } +}{ % Bottom Diagram + { % Brick 1 + [ % Options + degree top=3, + degree bottom=4 + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{2} + {2}{3} + {3}{4} + {7}{1} + } + }{ % Brick 2 + [ % Options + degree top=7, + blank bottom=1, + degree bottom=5, + levels=2, + no dots + ]{ % Upper non transversal edges + [level=2]{3}{13} + {4}{5} + {6}{7} + }{ % Lower non transversal edges + {3}{4} + {5}{6} + }{ % Transversal edges + {1}{2} + } + }{ % Brick 3 + [ % Options + degree top=5, + blank bottom=1, + degree bottom=4, + levels=2 + ]{ % Upper non transversal edges + {1}{2} + {3}{4} + }{ % Lower non transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + \pmdEmpty + } + } +} \ No newline at end of file diff --git a/graphics/pmdraw/examples/example-6.tex b/graphics/pmdraw/examples/example-6.tex new file mode 100644 index 0000000000..6061318eb2 --- /dev/null +++ b/graphics/pmdraw/examples/example-6.tex @@ -0,0 +1,55 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |`````````````````````````````x| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````````````````````| +% *------------------------------* + +\pmdProduct[ % Options + decorate after={ + \draw[very thick,red,rounded corners=5pt] (0.6, -3.4) rectangle (1.4, 2.4); + } +]{ % Added edges + {1}{4} +}{ % Top Diagram + { % Brick 1 + [ % Options + degree=4 + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + {3}{3} + {4}{4} + } + } +}{ % Bottom Diagram + { % Brick 1 + [ % Options + degree=4 + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + {3}{3} + {4}{4} + } + } +} \ No newline at end of file diff --git a/graphics/pmdraw/examples/example-7.tex b/graphics/pmdraw/examples/example-7.tex new file mode 100644 index 0000000000..50d66775ca --- /dev/null +++ b/graphics/pmdraw/examples/example-7.tex @@ -0,0 +1,63 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |`````````````````````````````x| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````````````````````| +% *------------------------------* + +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=2, + brace={ + left=1, + right=4, + label={p} + } + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree top=5, + degree bottom=6 + ]{ % Upper non transversal edges + {2}{3} + {4}{5} + }{ % Lower non transversal edges + {3}{4} + {5}{6} + }{ % Transversal edges + [height=1]{10}{2} + {1}{1} + } + }{ % Brick 3 + [ % Options + degree top=3, + blank bottom=1, + degree bottom=2 + ]{ % Upper non transversal edges + {1}{2} + }{ % Lower non transversal edges + {2}{3} + }{ % Transversal edges + \pmdEmpty + } + } +} \ No newline at end of file diff --git a/graphics/pmdraw/examples/example-8.tex b/graphics/pmdraw/examples/example-8.tex new file mode 100644 index 0000000000..61e9ef6457 --- /dev/null +++ b/graphics/pmdraw/examples/example-8.tex @@ -0,0 +1,63 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |`````````````````````````````x| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````````````````````| +% *------------------------------* + +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=2, + brace={ + left=1, + right=4, + label={p} + } + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree top=6, + degree bottom=5 + ]{ % Upper non transversal edges + {3}{4} + {5}{6} + }{ % Lower non transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + [height=1]{2}{10} + {1}{1} + } + }{ % Brick 3 + [ % Options + degree top=2, + blank top=1, + degree bottom=3 + ]{ % Upper non transversal edges + {2}{3} + }{ % Lower non transversal edges + {1}{2} + }{ % Transversal edges + \pmdEmpty + } + } +} \ No newline at end of file diff --git a/graphics/pmdraw/examples/example-9.tex b/graphics/pmdraw/examples/example-9.tex new file mode 100644 index 0000000000..39d5cc3319 --- /dev/null +++ b/graphics/pmdraw/examples/example-9.tex @@ -0,0 +1,37 @@ +%!TEX root = ../pmdraw.tex + +% *------------------------------* +% |`````````````````````````````x| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````````````````````| +% *------------------------------* + +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=17 + ]{ % Upper non transversal edges + \pmdEmpty + }{ % Lower non transversal edges + \pmdEmpty + }{ % Transversal edges + [height=0.25]{1}{11} + [height=0.5]{2}{12} + [height=0.75]{3}{13} + [height=1]{4}{14} + [height=1.25]{5}{15} + [height=1.5]{6}{16} + [height=1.75]{7}{17} + } + } +} \ No newline at end of file diff --git a/graphics/pmdraw/pmdraw.pdf b/graphics/pmdraw/pmdraw.pdf new file mode 100644 index 0000000000..4f598dde7e Binary files /dev/null and b/graphics/pmdraw/pmdraw.pdf differ diff --git a/graphics/pmdraw/pmdraw.sty b/graphics/pmdraw/pmdraw.sty new file mode 100644 index 0000000000..9799aa628b --- /dev/null +++ b/graphics/pmdraw/pmdraw.sty @@ -0,0 +1,903 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{pmdraw}[2023-11-08 v1.0 pmdraw] + +% *------------------------------* +% |4````````````````````````````9| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |9````````````````````````````6| +% *------------------------------* + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% Required packages % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% \RequirePackage{datetime} +\RequirePackage{keyval} +\RequirePackage{tikz} +\usetikzlibrary{math,decorations.pathreplacing,calligraphy,backgrounds} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% Internal control and option commands % +% - loosely ordered alphabetically % +% - includes default values where appropriate % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\newcommand{\pmdraw@braceLabel}{} % Label of brace + +\newcommand{\pmdraw@diagSep}{1} % Vertical separation between bottom row of top diagram and top row of bottom diagram in product diagram + +\newcommand{\pmdraw@drawAedgesOptions}{} % Draw options for added edges in product diagram +\newcommand{\pmdraw@drawAedges}[2]{ % Draws added edges in product diagram from #1 vertex to #2 vertex, assumes #1<#2 + \foreach \x in {#1,...,#2} { % For each vertex in range + \draw[dotted,thick,apply style/.expand once=\pmdraw@drawAedgesOptions] (\x,0) -- (\x,-\pmdraw@diagSep); % Draw concatenation edge + } + \pmdraw@AedgesLoop % Restart for loop +} + +\newcommand{\pmdraw@drawBraceDrawOptions}{} % Draw options for brace +\newcommand{\pmdraw@drawBraceNodeOptions}{} % Node options for brace +\newcommand{\pmdraw@drawBraceDefault}[3]{ % Draws brace a brace starting from #1 vertex to #2 vertex with label #3, assumes #1<#2 - DEFAULT + \ifnum\pmdraw@ifProdDiag=1 % If drawing a product diagram or if placing brace above diagram + \draw[ + very thick, + decorate, + decoration={calligraphic brace,amplitude=6pt}, + apply style/.expand once=\pmdraw@drawBraceDrawOptions + ] (#1-0.17,\pmdraw@rowSep+0.5) -- (#2+0.17,\pmdraw@rowSep+0.5) + node[ + pos=0.5, + above=6pt, + apply style/.expand once=\pmdraw@drawBraceNodeOptions + ] {\(#3\)}; % Draw brace on top of diagram + \else % If not drawing a product diagram or if placing brace below diagram + \draw[ + very thick, + decorate, + decoration={calligraphic brace,mirror,amplitude=6pt}, + apply style/.expand once=\pmdraw@drawBraceDrawOptions + ] (#1-0.17,-0.5) -- (#2+0.17,-0.5) + node[ + pos=0.5, + below=6pt, + apply style/.expand once=\pmdraw@drawBraceNodeOptions + ] {\(#3\)}; % Draw brace on bottom of diagram + \fi% +} +\let\pmdraw@drawBrace\pmdraw@drawBraceDefault % Draws brace a brace starting from #1 vertex to #2 vertex with label #3, assumes #1<#2 + +\newcommand{\pmdraw@drawDotsDrawOptions}{} % Draw options for dots between bricks +\newcommand{\pmdraw@drawDotsNodeOptions}{} % Node options for dots between bricks +\newcommand{\pmdraw@drawDotsDefault}[2]{ % Draws dots between bricks at (#1,#2) - DEFAULT + \draw[apply style/.expand once=\pmdraw@drawDotsDrawOptions] (#1,#2) node[apply style/.expand once=\pmdraw@drawDotsNodeOptions] {\(\dots\)}; +} +\let\pmdraw@drawDots\pmdraw@drawDotsDefault % Draws dots between bricks at (#1,#2) + +\newcommand{\pmdraw@drawLabelBDrawOptions}{} % Draw options for label of a vertex in bottom row +\newcommand{\pmdraw@drawLabelBNodeOptions}{} % Node options for label of a vertex in bottom row +\newcommand{\pmdraw@drawLabelBottomDefault}[3]{ % For bottom row, draws the label #3 for a vertex at (#1,#2) - DEFAULT + \draw[apply style/.expand once=\pmdraw@drawLabelBDrawOptions] (#1,#2) node[below=6pt,apply style/.expand once=\pmdraw@drawLabelBNodeOptions] {\(#3'\)}; +} +\let\pmdraw@drawLabelBottom\pmdraw@drawLabelBottomDefault % For bottom row, draws the label #3 for a vertex at (#1,#2) + +\newcommand{\pmdraw@drawLabelTDrawOptions}{} % Draw options for label of a vertex in top row +\newcommand{\pmdraw@drawLabelTNodeOptions}{} % Node options for label of a vertex in top row +\newcommand{\pmdraw@drawLabelTopDefault}[3]{ % For top row, draws the label #3 for a vertex at (#1,#2) - DEFAULT + \draw[apply style/.expand once=\pmdraw@drawLabelTDrawOptions] (#1,#2) node[above=6pt,apply style/.expand once=\pmdraw@drawLabelTNodeOptions] {\(#3\)}; +} +\let\pmdraw@drawLabelTop\pmdraw@drawLabelTopDefault % For top row, draws the label #3 for a vertex at (#1,#2) + +\newcommand{\pmdraw@drawLedgesDrawOptions}{} % Draw options for lower non-transversal edges +\newcommand{\pmdraw@drawLedgesDrawDefault}[2]{ % Draws lower non-transversal edge from #1 vertex to #2 vertex, assumes #1<#2 - DEFAULT + \draw[apply style/.expand once=\pmdraw@drawLedgesDrawOptions] (#1,0) arc (180:90:\pmdraw{edgeHeight}); % Draw left arch + \draw[apply style/.expand once=\pmdraw@drawLedgesDrawOptions] (#1+\pmdraw{edgeHeight},\pmdraw{edgeHeight}) -- (#2-\pmdraw{edgeHeight},\pmdraw{edgeHeight}); % Draw straight line + \draw[apply style/.expand once=\pmdraw@drawLedgesDrawOptions] (#2-\pmdraw{edgeHeight},\pmdraw{edgeHeight}) arc (90:0:\pmdraw{edgeHeight}); % Draw right arc +} +\let\pmdraw@drawLedgesDraw\pmdraw@drawLedgesDrawDefault % Draws lower non-transversal edge from #1 vertex to #2 vertex, assumes #1<#2 + +\newcommand{\pmdraw@drawTedgesDrawOptions}{} % Draw options for transversal edges +\newcommand{\pmdraw@drawTedgesDrawDefault}[2]{ % Draws transversal edge from #1 vertex in top row to #2 vertex in bottom row - DEFAULT + \ifnum\pmdraw@ifTedgeHorizontal=0 % If drawing a straight line edge + \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptions] (#1,\pmdraw@rowSep) -- (#2,0); % Draw straight line + \else % If transversal edge is drawn horizontally + \ifnum#1>#2 % If edge goes from top right to bottom left + \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptions] (#2,0) arc (180:90:\pmdraw{Tlevel}); % Draw bottom arch + \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptions] (#2+\pmdraw{Tlevel},\pmdraw{Tlevel}) -- (#1-\pmdraw@rowSep+\pmdraw{Tlevel}, \pmdraw{Tlevel}); % Draw straight line + \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptions] (#1-\pmdraw@rowSep+\pmdraw{Tlevel},\pmdraw{Tlevel}) arc (270:360:{\pmdraw@rowSep-\pmdraw{Tlevel}}); % Draw top arc + \else % If edge goes from top left to bottom right + \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptions] (#2,0) arc (0:90:\pmdraw{Tlevel}); % Draw bottom arch + \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptions] (#2-\pmdraw{Tlevel},\pmdraw{Tlevel}) -- (#1+\pmdraw@rowSep-\pmdraw{Tlevel}, \pmdraw{Tlevel}); % Draw straight line + \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptions] (#1+\pmdraw@rowSep-\pmdraw{Tlevel},\pmdraw{Tlevel}) arc (270:180:{\pmdraw@rowSep-\pmdraw{Tlevel}}); % Draw top arc + \fi% + \renewcommand{\pmdraw@ifTedgeHorizontal}{0} % Reset flag to default + \fi% +} +\let\pmdraw@drawTedgesDraw\pmdraw@drawTedgesDrawDefault % Draws transversal edge from #1 vertex in top row to #2 vertex in bottom row + +\newcommand{\pmdraw@drawUedgesDrawOptions}{} % Draw options for upper non-transversal edges +\newcommand{\pmdraw@drawUedgesDrawDefault}[2]{ % Draws upper non-transversal edge from #1 vertex to #2 vertex, assumes #1<#2 - DEFAULT + \draw[apply style/.expand once=\pmdraw@drawUedgesDrawOptions] (#1,\pmdraw@rowSep) arc (180:270:\pmdraw{edgeHeight}); % Draw left arch + \draw[apply style/.expand once=\pmdraw@drawUedgesDrawOptions] (#1+\pmdraw{edgeHeight},\pmdraw@rowSep-\pmdraw{edgeHeight}) -- (#2-\pmdraw{edgeHeight},\pmdraw@rowSep-\pmdraw{edgeHeight}); % Draw straight line + \draw[apply style/.expand once=\pmdraw@drawUedgesDrawOptions] (#2-\pmdraw{edgeHeight},\pmdraw@rowSep-\pmdraw{edgeHeight}) arc (270:360:\pmdraw{edgeHeight}); % Draw right arc +} +\let\pmdraw@drawUedgesDraw\pmdraw@drawUedgesDrawDefault % Draws upper non-transversal edge from #1 vertex to #2 vertex, assumes #1<#2 + +\newcommand{\pmdraw@drawVertexOptions}{} % Draw options for vertices +\newcommand{\pmdraw@drawVertex}[2]{ % Draws a vertex at (#1,#2) + \fill[apply style/.expand once=\pmdraw@drawVertexOptions] (#1,#2) circle (.17); +} + +\newcommand{\pmdraw@hookAfterBrick}{} % Hook after drawing a brick +\newcommand{\pmdraw@hookAfterDiagram}{} % Hook after drawing a diagram +\newcommand{\pmdraw@hookBeforeBrick}{} % Hook before drawing a brick +\newcommand{\pmdraw@hookBeforeDiagram}{} % Hook before drawing a diagram + +\newcommand{\pmdraw@ifDiagWDots}{0} % Boolean if drawing a diagram with dots +\newcommand{\pmdraw@ifEdgesFirst}{0} % Boolean if drawing edges before vertices +\newcommand{\pmdraw@ifGrid}{0} % Boolean if displaying helper grid +\newcommand{\pmdraw@ifLabelsB}{0} % Boolean if displaying labels for vertices in bottom row +\newcommand{\pmdraw@ifLabelsT}{0} % Boolean if displaying labels for vertices in top row +\newcommand{\pmdraw@ifProdDiag}{0} % Boolean if drawing a product diagram +\newcommand{\pmdraw@ifTedgesFirst}{0} % Boolean if drawing transversal edges before non-transversal edges +\newcommand{\pmdraw@ifTedgeHorizontal}{0} % Boolean if transversal edge is drawn horizontally + +\newcommand{\pmdraw@NTedgesHeight}{-1000} % Height of non-transversal edges if manually set, a value of -1000 sets height automatically + +\newcommand{\pmdraw@reset}{% Resets user keys and other flags to default values after drawing diagram + \renewcommand{\pmdraw@diagSep}{1}% Resets vertical space between product diagrams + \renewcommand{\pmdraw@drawAedgesOptions}{}% Resets draw options for added edges in product diagram + \let\pmdraw@drawDots\pmdraw@drawDotsDefault% Resets drawing of dots between bricks + \renewcommand{\pmdraw@hookAfterDiagram}{}% Clears hook after drawing a diagram + \renewcommand{\pmdraw@hookBeforeDiagram}{}% Clears hook before drawing a diagram + \renewcommand{\pmdraw@ifGrid}{0}% Hides grid + \renewcommand{\pmdraw@ifDiagWDots}{0}% Reset if drawing a diagram with dots + \renewcommand{\pmdraw@rowSep}{2}% Resets vertical separation between rows of vertices in brick + \setcounter{pmdraw@blankB}{0}% Resets number of blank vertices in bottom row to the left of brick + \setcounter{pmdraw@blankT}{0}% Resets number of blank vertices in top row to the left of brick + \setcounter{pmdraw@bottomShift}{0}% Resets shift on right end of bottom row of brick + \setcounter{pmdraw@topShift}{0}% Resets shift on right end of top row of brick + \setcounter{pmdraw@ifDiagWDotsFirst}{1}% Reset if drawing first brick of diagram +} + +\newcommand{\pmdraw@rowSep}{2} % Vertical separation between rows of vertices in brick + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% Counters % +% - loosely ordered alphabetically % +% - includes default values where appropriate % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\newcounter{pmdraw@blankB} % Number of blank vertices in bottom row to the left of brick +\newcounter{pmdraw@blankT} % Number of blank vertices in top row to the left of brick + +\newcounter{pmdraw@bottomTotal} % Size of bottom row of brick +\newcounter{pmdraw@bottomShift} % Shift on right end of bottom row of brick + +\newcounter{pmdraw@braceL} % Left starting vertex of brace +\newcounter{pmdraw@braceR} % Right terminating vertex of brace + +\newcounter{pmdraw@brickShift} % Shift required for bricks after dots in diagram with dots + +\newcounter{pmdraw@degreeB} % Degree (number of vertices) of bottom row of brick +\newcounter{pmdraw@degreeT} % Degree (number of vertices) of top row of brick + +\newcounter{pmdraw@ifDiagWDotsFirst} % In drawing with dots, boolean if drawing first brick of diagram +\setcounter{pmdraw@ifDiagWDotsFirst}{1} + +\newcounter{pmdraw@labelStartB} % Starting value of labels of vertices in bottom row +\setcounter{pmdraw@labelStartB}{1} +\newcounter{pmdraw@labelStartT} % Starting value of labels of vertices in top row +\setcounter{pmdraw@labelStartT}{1} + +\newcounter{pmdraw@NTlevel} % Level corresponding to a height for a non-transversal edge + +\newcounter{pmdraw@topTotal} % Size of top row of brick +\newcounter{pmdraw@topShift} % Shift on right end of top row of brick + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% Keys for bricks % +% - ordered as per manual % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% To pass draw options to \draw command +% Verbatim copy from: +% https://tex.stackexchange.com/a/64237 +\tikzset{apply style/.code={\tikzset{#1}}} + +\define@key{pmdraw@brick}{degree}{ % Sets degree (number of vertices per row) of diagram + \setcounter{pmdraw@degreeB}{#1} % Sets degree (number of vertices per row) for bottom row + \setcounter{pmdraw@degreeT}{#1} % Sets degree (number of vertices per row) for top row +} +\define@key{pmdraw@brick}{degree bottom}{ % Sets degree (number of vertices per row) for bottom row + \setcounter{pmdraw@degreeB}{#1} +} +\define@key{pmdraw@brick}{degree top}{ % Sets degree (number of vertices per row) for top row + \setcounter{pmdraw@degreeT}{#1} +} + +\define@key{pmdraw@brick}{blank bottom}{ % Sets the number of blank vertices on left of bottom row + \setcounter{pmdraw@blankB}{#1} +} +\define@key{pmdraw@brick}{blank top}{ % Sets the number of blank vertices on left of top row + \setcounter{pmdraw@blankT}{#1} +} + +\define@key{pmdraw@brick}{row sep}{ % Sets vertical separation between rows of vertices in brick + \renewcommand{\pmdraw@rowSep}{#1} +} + +\define@key{pmdraw@brick}{vertices}{ % Sets the draw options of vertices + \renewcommand{\pmdraw@drawVertexOptions}{#1} +} +\define@key{pmdraw@brick}{vertices options}{ % Sets the draw command of vertices + \renewcommand{\pmdraw@drawVertex}[2]{#1} +} + +\define@key{pmdraw@brick}{labels}[]{ % Draws labels for vertices + \renewcommand{\pmdraw@ifLabelsB}{1} + \renewcommand{\pmdraw@ifLabelsT}{1} +} +\define@key{pmdraw@brick}{labels bottom}[]{ % Draws labels for bottom vertices + \renewcommand{\pmdraw@ifLabelsB}{1} +} +\define@key{pmdraw@brick}{labels top}[]{ % Draws labels for top vertices + \renewcommand{\pmdraw@ifLabelsT}{1} +} + +\define@key{pmdraw@brick}{labels start}{ % Sets starting number for vertex labels + \setcounter{pmdraw@labelStartT}{#1} + \setcounter{pmdraw@labelStartB}{#1} +} +\define@key{pmdraw@brick}{labels bottom start}{ % Sets starting number for bottom vertex labels + \setcounter{pmdraw@labelStartB}{#1} +} +\define@key{pmdraw@brick}{labels top start}{ % Sets starting number for top vertex labels + \setcounter{pmdraw@labelStartT}{#1} +} + +\define@key{pmdraw@brick}{labels bottom draw}{ % Sets the draw options for labels of bottom vertices + \renewcommand{\pmdraw@drawLabelBDrawOptions}{#1} +} +\define@key{pmdraw@brick}{labels bottom node}{ % Sets the node options for labels of bottom vertices + \renewcommand{\pmdraw@drawLabelBNodeOptions}{#1} +} +\define@key{pmdraw@brick}{labels top draw}{ % Sets the draw options for labels of top vertices + \renewcommand{\pmdraw@drawLabelTDrawOptions}{#1} +} +\define@key{pmdraw@brick}{labels top node}{ % Sets the node options for labels of top vertices + \renewcommand{\pmdraw@drawLabelTNodeOptions}{#1} +} + +\define@key{pmdraw@brick}{labels bottom options}{ % Sets the draw command of labels of bottom vertices + \renewcommand{\pmdraw@drawLabelBottom}[3]{#1} +} +\define@key{pmdraw@brick}{labels top options}{ % Sets the draw command of labels of bottom vertices + \renewcommand{\pmdraw@drawLabelTop}[3]{#1} +} + +\define@key{pmdraw@brick}{no dots}[]{ % Does not draw dots in bricks + \setcounter{pmdraw@ifDiagWDotsFirst}{1} +} + +\define@key{pmdraw@brick}{dots draw}{ % Sets the draw options for drawing of dots + \renewcommand{\pmdraw@drawDotsDrawOptions}{#1} +} +\define@key{pmdraw@brick}{dots node}{ % Sets the node options for drawing of dots + \renewcommand{\pmdraw@drawDotsNodeOptions}{#1} +} + + +\define@key{pmdraw@brick}{levels}[1]{ % Sets number of horizontal levels for non-transversal edges and evenly spaces them + \tikzmath{ + \pmdraw{edgeSepU} = (0.5*\pmdraw@rowSep)/(#1 + 1); % Calculates vertical separation between each edge + \pmdraw{edgeSepL} = \pmdraw{edgeSepU}; % Calculates vertical separation between each edge + } +} +\define@key{pmdraw@brick}{levels bottom}{ % Sets number of horizontal levels for lower non-transversal edges and evenly spaces them + \tikzmath{ + \pmdraw{edgeSepL} = (0.5*\pmdraw@rowSep)/(#1 + 1); % Calculates vertical separation between each edge + } +} +\define@key{pmdraw@brick}{levels top}{ % Sets number of horizontal levels for upper non-transversal edges and evenly spaces them + \tikzmath{ + \pmdraw{edgeSepU} = (0.5*\pmdraw@rowSep)/(#1 + 1); % Calculates vertical separation between each edge + } +} + +\define@key{pmdraw@brick}{levels sep}{ % Sets vertical separation of horizontal levels for non-transversal edges + \tikzmath{ + \pmdraw{edgeSepU} = #1; + \pmdraw{edgeSepL} = \pmdraw{edgeSepU}; + } +} +\define@key{pmdraw@brick}{levels sep bottom}{ % Sets vertical separation of lower horizontal levels for non-transversal edges + \tikzmath{ + \pmdraw{edgeSepL} = #1; + } +} +\define@key{pmdraw@brick}{levels sep top}{ % Sets vertical separation of upper horizontal levels for non-transversal edges + \tikzmath{ + \pmdraw{edgeSepU} = #1; + } +} + +\define@key{pmdraw@brick}{edges}{ % Sets the draw options of all edges + \renewcommand{\pmdraw@drawUedgesDrawOptions}{#1} + \renewcommand{\pmdraw@drawLedgesDrawOptions}{#1} + \renewcommand{\pmdraw@drawTedgesDrawOptions}{#1} +} +\define@key{pmdraw@brick}{edges non-transversal}{ % Sets the draw options of non-transversal edges + \renewcommand{\pmdraw@drawUedgesDrawOptions}{#1} + \renewcommand{\pmdraw@drawLedgesDrawOptions}{#1} +} +\define@key{pmdraw@brick}{edges upper}{ % Sets the draw options of upper non-transversal edges + \renewcommand{\pmdraw@drawUedgesDrawOptions}{#1} +} +\define@key{pmdraw@brick}{edges lower}{ % Sets the draw options of lower non-transversal edges + \renewcommand{\pmdraw@drawLedgesDrawOptions}{#1} +} +\define@key{pmdraw@brick}{edges transversal}{ % Sets the draw options of transversal edges + \renewcommand{\pmdraw@drawTedgesDrawOptions}{#1} +} + +\define@key{pmdraw@brick}{edges first}[]{ % Draws edges before vertices + \renewcommand{\pmdraw@ifEdgesFirst}{1} +} +\define@key{pmdraw@brick}{transversals first}[]{ % Draws transversal edges before non-transversal edges + \renewcommand{\pmdraw@ifTedgesFirst}{1} +} + +\define@key{pmdraw@brick}{brace}{ % Draws a brace + \setkeys{pmdraw@brace}{#1} % Processes details of brace + \pmdraw@drawBrace{\value{pmdraw@braceL}}{\value{pmdraw@braceR}}{\pmdraw@braceLabel} % Draws brace + \let\pmdraw@drawBrace\pmdraw@drawBraceDefault % Resets brace options if changed +} + +\define@key{pmdraw@brick}{brace draw}{ % Sets the draw options for drawing of brace + \renewcommand{\pmdraw@drawBraceDrawOptions}{#1} +} +\define@key{pmdraw@brick}{brace node}{ % Sets the node options for drawing of brace + \renewcommand{\pmdraw@drawBraceNodeOptions}{#1} +} + +\define@key{pmdraw@brick}{decorate before}{ % Hook for decorations before brick is drawn + \renewcommand{\pmdraw@hookBeforeBrick}{#1} +} +\define@key{pmdraw@brick}{decorate after}{ % Hook for decorations after brick is drawn + \renewcommand{\pmdraw@hookAfterBrick}{#1} +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% Keys for edges % +% - ordered as per manual % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\define@key{pmdraw@NTedges}{level}{ % Sets level of non-transversal edge + \setcounter{pmdraw@NTlevel}{#1} +} +\define@key{pmdraw@NTedges}{height}{ % Sets manual height of non-transversal edge + \renewcommand{\pmdraw@NTedgesHeight}{#1} +} +\define@key{pmdraw@NTedges}{options}{ % Sets the draw command of non-transversal edge + \renewcommand{\pmdraw@drawUedgesDraw}[2]{#1} + \renewcommand{\pmdraw@drawLedgesDraw}[2]{#1} +} + +\define@key{pmdraw@Tedges}{height}{ % Sets manual height of transversal edge + \tikzmath{ + \pmdraw{Tlevel} = #1; + } + \renewcommand{\pmdraw@ifTedgeHorizontal}{1} % Flags manual height +} +\define@key{pmdraw@Tedges}{options}{ % Sets the draw command of transversal edge + \renewcommand{\pmdraw@drawTedgesDraw}[2]{#1} +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% Keys for brace % +% - ordered as per manual % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\define@key{pmdraw@brace}{left}{ % Sets starting position of brace + \setcounter{pmdraw@braceL}{#1} +} +\define@key{pmdraw@brace}{right}{ % Sets terminating position of brace + \setcounter{pmdraw@braceR}{#1} +} +\define@key{pmdraw@brace}{label}{ % Sets label of brace + \renewcommand{\pmdraw@braceLabel}{#1} +} +\define@key{pmdraw@brace}{above}[]{ % Set flag to draw brace above diagram + \renewcommand{\pmdraw@ifProdDiag}{1} +} +\define@key{pmdraw@brace}{options}{ % Sets the draw command of brace + \renewcommand{\pmdraw@drawBrace}[3]{#1} +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% Keys for diagrams and product diagrams % +% - ordered as per manual % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\define@key{pmdraw@diagram}{row sep}{ % Sets vertical separation between rows of vertices in diagram + \renewcommand{\pmdraw@rowSep}{#1} +} +\define@key{pmdraw@diagram}{dots options}{ % Sets the draw command of dots between bricks + \renewcommand{\pmdraw@drawDots}[2]{#1} +} +\define@key{pmdraw@diagram}{grid}[]{ % Flag for drawing coordinate grid + \renewcommand{\pmdraw@ifGrid}{1} +} +\define@key{pmdraw@diagram}{decorate before}{ % Hook before drawing diagrams + \renewcommand{\pmdraw@hookBeforeDiagram}{#1} +} +\define@key{pmdraw@diagram}{decorate after}{ % Hook after drawing diagrams + \renewcommand{\pmdraw@hookAfterDiagram}{#1} +} + +\define@key{pmdraw@diagram}{diagram sep}{ % Sets vertical separation between bottom row of top diagram and top row of bottom diagram in product diagram + \renewcommand{\pmdraw@diagSep}{#1} +} +\define@key{pmdraw@diagram}{edges added}{ % Sets the draw options for drawing of added edges in product diagram + \renewcommand{\pmdraw@drawAedgesOptions}{#1} +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% User commands % +% - loosely ordered alphabetically % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\newcommand{\pmdBrick}[4][]{ % Draws brick + % #1 Options + % #2 Upper non-transversal edges, as list []{}{}, eg [level=1]{2}{3} + % #3 Lower non-transversal edges, as list []{}{}, eg [level=1]{2}{3} + % #4 Transversals, as list []{}{}, eg [level=1]{2}{3} + \pmdDiagram{{[#1]{#2}{#3}{#4}}} % Uses complete diagram method to draw brick +} + +\newcommand{\pmdDiagram}[2][]{% Draws diagram + % #1 Options + % #2 List of bricks + \setkeys{pmdraw@diagram}{#1}% Processes options + \renewcommand{\pmdraw@ifDiagWDots}{1}% Flags that diagram has dots + \setcounter{pmdraw@brickShift}{0}% Reset shifting of individual bricks + \ifmmode% If drawing diagram in a maths equation + \,% Add space + \ifnum\pmdraw@ifGrid=1% If displaying helper grid + \begin{tikzpicture}[scale=.5,baseline=0.405cm,show grid=true]% + \else% If not displaying helper grid + \begin{tikzpicture}[scale=.5,baseline=0.405cm]% + \fi% + \pmdraw@hookBeforeDiagram% Hook before drawing diagrams + \pmdraw@bricksLoop% Commences loop for each brick to be drawn + #2% + \pmdEmpty% Terminates loop + \pmdraw@hookAfterDiagram% Hook after drawing diagrams + \end{tikzpicture}% + \,% Add space + \else% If drawing diagram in normal text + \raisebox{0.5cm}{% Raise diagram so bottom row is on text baseline + \ifnum\pmdraw@ifGrid=1% If displaying helper grid + \begin{tikzpicture}[scale=.5,baseline=0.405cm,show grid=true]% + \else% If not displaying helper grid + \begin{tikzpicture}[scale=.5,baseline=0.405cm]% + \fi% + \pmdraw@hookBeforeDiagram% Hook before drawing diagrams + \pmdraw@bricksLoop% Commences loop for each brick to be drawn + #2% + \pmdEmpty% Terminates loop + \pmdraw@hookAfterDiagram% Hook after drawing diagrams + \end{tikzpicture}% + }% + \fi% + \pmdraw@reset% Resets user keys and other flags to default values +} + +\newcommand{\pmdEmpty}{} % Indicates no edges, internally halts input loops, always is = {} + +\newcommand{\pmdProduct}[4][]{% Draws product diagram + % #1 Options + % #2 List of added edges + % #3 Top diagram as list of bricks + % #4 Bottom diagram as list of bricks + \setkeys{pmdraw@diagram}{#1}% Processes options + \ifmmode% If drawing diagram in a maths equation + \,% Add space + \ifnum\pmdraw@ifGrid=1% If displaying helper grid + \begin{tikzpicture}[scale=.5,baseline=-.3475cm,show grid=true]% + \else% If not displaying helper grid + \begin{tikzpicture}[scale=.5,baseline=-.3475cm]% + \fi% + \pmdraw@hookBeforeDiagram% Hook before drawing diagrams + \pmdraw@AedgesLoop% Commences loop for added edges to be drawn + #2% + \pmdEmpty% Terminates loop + \renewcommand{\pmdraw@ifDiagWDots}{1}% Flags that diagram has dot + \renewcommand{\pmdraw@ifProdDiag}{1}% Flags that diagram is product + \setcounter{pmdraw@brickShift}{0}% Reset shifting of individual bricks + \pmdraw@bricksLoop% Commences loop for each brick to be drawn + #3% + \pmdEmpty% Terminates loop + \renewcommand{\pmdraw@ifProdDiag}{0}% Resets flag that diagram is product + \setcounter{pmdraw@ifDiagWDotsFirst}{1}% Reset if drawing first brick of diagram + \setcounter{pmdraw@brickShift}{0}% Reset shifting of individual bricks + \begin{scope}[shift={(0,-\pmdraw@diagSep-\pmdraw@rowSep)}]% Shift coordinates to be underneath top diagram + \pmdraw@bricksLoop% Commences loop for each brick to be drawn + #4% + \pmdEmpty% Terminates loop + \renewcommand{\pmdraw@ifDiagWDots}{0}% Reset if drawing a diagram with dots + \setcounter{pmdraw@ifDiagWDotsFirst}{1}% Reset if drawing first brick of diagram + \end{scope}% + \pmdraw@hookAfterDiagram% Hook after drawing diagrams + \end{tikzpicture}% + \,% Add space + \else% If drawing diagram in normal text + \raisebox{2cm}{% Raise diagram so bottom row is on text baseline + \ifnum\pmdraw@ifGrid=1% If displaying helper grid + \begin{tikzpicture}[scale=.5,baseline=0.405cm,show grid=true]% + \else% If not displaying helper grid + \begin{tikzpicture}[scale=.5,baseline=0.405cm]% + \fi% + \pmdraw@hookBeforeDiagram% Hook before drawing diagrams + \pmdraw@AedgesLoop% Commences loop for added edges to be drawn + #2% + \pmdEmpty% Terminates loop + \renewcommand{\pmdraw@ifDiagWDots}{1}% Flags that diagram has dot + \renewcommand{\pmdraw@ifProdDiag}{1}% Flags that diagram is product + \setcounter{pmdraw@brickShift}{0}% Reset shifting of individual bricks + \pmdraw@bricksLoop% Commences loop for each brick to be drawn + #3% + \pmdEmpty% Terminates loop + \renewcommand{\pmdraw@ifProdDiag}{0}% Resets flag that diagram is products + \setcounter{pmdraw@ifDiagWDotsFirst}{1}% Reset if drawing first brick of diagram + \setcounter{pmdraw@brickShift}{0}% Reset shifting of individual bricks + \begin{scope}[shift={(0,-\pmdraw@diagSep-\pmdraw@rowSep)}]% Shift coordinates to be underneath top diagram + \pmdraw@bricksLoop% Commences loop for each brick to be drawn + #4% + \pmdEmpty% Terminates loop + \renewcommand{\pmdraw@ifDiagWDots}{0}% Reset if drawing a diagram with dots + \setcounter{pmdraw@ifDiagWDotsFirst}{1}% Reset if drawing first brick of diagram + \end{scope}% + \pmdraw@hookAfterDiagram% Hook after drawing diagrams diagram + \end{tikzpicture}% + }% + \fi% + \pmdraw@reset% Resets user keys and other flags to default values +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% For loop commands % +% - loosely ordered alphabetically % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\newcommand{\pmdraw@AedgesLoop}{% Starts loop for added edges in product diagram + \@ifnextchar\pmdEmpty{}{% If not at end of list + \pmdraw@drawAedges% Draw each edge + } +} +\newcommand{\pmdraw@bricksLoop}{% Starts loop to iterate over each brick in diagram + \@ifnextchar\pmdEmpty{}{% If not at end of list + \pmdraw@drawBrickInit% Draw each brick + } +} +\newcommand{\pmdraw@LedgesLoop}{% Starts loop for lower non-transversal edges + \@ifnextchar\pmdEmpty{}{% If not at end of list + \pmdraw@drawLedges% Draw each edge + } +} +\newcommand{\pmdraw@TedgesLoop}{% Starts loop for transversal edges + \@ifnextchar\pmdEmpty{}{% If not at end of list + \pmdraw@drawTedges% Draw each edge + } +} +\newcommand{\pmdraw@UedgesLoop}{% Starts loop for upper non-transversal edges + \@ifnextchar\pmdEmpty{}{% If not at end of list + \pmdraw@drawUedges% Draw each edge + } +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% Draw commands % +% - loosely ordered alphabetically % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\newcommand{\pmdraw@drawBottomVertices}{% Draws bottom row of vertices + \setcounter{pmdraw@bottomTotal}{\value{pmdraw@blankB}}% Store size of bottom row of vertices + \addtocounter{pmdraw@bottomTotal}{\value{pmdraw@degreeB}}% Store size of bottom row of vertices + \ifnum\value{pmdraw@ifDiagWDotsFirst}=1% If drawing first brick of diagram + \setcounter{pmdraw@ifDiagWDotsFirst}{0}% Mark that first brick has been drawn + \else% If not drawing first brick of diagram + \pmdraw@drawDots{0.5*\value{pmdraw@topShift}+0.5*\value{pmdraw@blankT}}{\pmdraw@rowSep}% Draw upper dots + \pmdraw@drawDots{0.5*\value{pmdraw@bottomShift}+0.5*\value{pmdraw@blankB}}{0}% Draw lower dots + \fi% + \ifnum\value{pmdraw@topTotal}>\value{pmdraw@bottomTotal}% If top row is longer than bottom row + \ifnum\pmdraw@ifDiagWDots=1% If drawing a diagram with dots + \addtocounter{pmdraw@brickShift}{\value{pmdraw@topTotal}}% Keep track of size of diagram + % Store shifts + \setcounter{pmdraw@topShift}{-\value{pmdraw@topTotal}}% + \addtocounter{pmdraw@topShift}{\value{pmdraw@topTotal}}% + \setcounter{pmdraw@bottomShift}{-\value{pmdraw@topTotal}}% + \addtocounter{pmdraw@bottomShift}{\value{pmdraw@bottomTotal}}% + \else% If drawing a diagram without dots + \setcounter{pmdraw@brickShift}{\value{pmdraw@topTotal}}% Keep track of size of diagram + \fi% + \else% If bottom row is longer than top row + \ifnum\pmdraw@ifDiagWDots=1% If drawing a diagram with dots + \addtocounter{pmdraw@brickShift}{\value{pmdraw@bottomTotal}}% Keep track of size of diagram + % Store shifts + \setcounter{pmdraw@topShift}{-\value{pmdraw@bottomTotal}}% + \addtocounter{pmdraw@topShift}{\value{pmdraw@topTotal}}% + \setcounter{pmdraw@bottomShift}{-\value{pmdraw@bottomTotal}}% + \addtocounter{pmdraw@bottomShift}{\value{pmdraw@bottomTotal}}% + \else% If drawing a diagram without dots + \setcounter{pmdraw@brickShift}{\value{pmdraw@bottomTotal}}% Keep track of size of diagram + \fi% + \fi% + \foreach \x in {1,...,\value{pmdraw@degreeB}} {% For each vertex in row + \pmdraw@drawVertex{\x + \value{pmdraw@blankB}}{0}% Draw lower vertex + \ifnum\pmdraw@ifLabelsB=1% If drawing labels + \pmdraw@drawLabelBottom{\x + \value{pmdraw@blankT}}{0}{\thepmdraw@labelStartB}% Draw label + \stepcounter{pmdraw@labelStartB}% Update label counter + \fi + }% +} +\newcommand{\pmdraw@drawBrickInit}[1]{% Initialises the drawing of a brick + \ifnum\value{pmdraw@ifDiagWDotsFirst}=0% If not drawing first brick in diagram + \stepcounter{pmdraw@brickShift}% Makes space for dots to left of current brick + \fi% + \begin{scope}[shift={(\value{pmdraw@brickShift},0)}]% Shift brick to the right of already drawn bricks + \pmdraw@drawBrick#1% Draw brick + \end{scope}% + \pmdraw@bricksLoop% Restart for loop +} +\newcommand{\pmdraw@drawBrick}[4][]{% Draws a brick + % #1 Options + % #2 Upper non-transversal edges, as list []{}{}, eg [level=1]{2}{3} + % #3 Lower non-transversal edges, as list []{}{}, eg [level=1]{2}{3} + % #4 Transversals, as list []{}{}, eg [level=1]{2}{3} + \setkeys{pmdraw@brick}{levels,#1}% Processes options and set default levels + \pmdraw@hookBeforeBrick% Hook before drawing brick + \ifnum\pmdraw@ifEdgesFirst=0% If drawing vertices first + \pmdraw@drawTopVertices% Draw base diagram + \pmdraw@drawBottomVertices% Draw base diagram + \ifnum\pmdraw@ifTedgesFirst=0% If drawing non-transversals first + \pmdraw@UedgesLoop% Draws upper edges + #2% + \pmdEmpty% + \pmdraw@LedgesLoop% Draws lower edges + #3% + \pmdEmpty% + \pmdraw@TedgesLoop% Draws transversals + #4% + \pmdEmpty% + \else% If drawing transversal first + \pmdraw@TedgesLoop% Draws transversals + #4% + \pmdEmpty% + \pmdraw@UedgesLoop% Draws upper edges + #2% + \pmdEmpty% + \pmdraw@LedgesLoop% Draws lower edges + #3% + \pmdEmpty% + \fi% + \else % If drawing edges first + \ifnum\pmdraw@ifTedgesFirst=0% If drawing non-transversals first + \pmdraw@UedgesLoop% Draws upper edges + #2% + \pmdEmpty% + \pmdraw@LedgesLoop% Draws lower edges + #3% + \pmdEmpty% + \pmdraw@TedgesLoop% Draws transversals + #4% + \pmdEmpty% + \else% If drawing transversal first + \pmdraw@TedgesLoop% Draws transversals + #4% + \pmdEmpty% + \pmdraw@UedgesLoop% Draws upper edges + #2% + \pmdEmpty% + \pmdraw@LedgesLoop% Draws lower edges + #3% + \pmdEmpty% + \fi% + \pmdraw@drawTopVertices% Draw base diagram + \pmdraw@drawBottomVertices% Draw base diagram + \fi% + \pmdraw@hookAfterBrick% Hook after drawing brick + % Resets user keys and other flags to default values + \renewcommand{\pmdraw@drawBraceDrawOptions}{}% + \renewcommand{\pmdraw@drawBraceNodeOptions}{}% + \renewcommand{\pmdraw@drawDotsDrawOptions}{}% + \renewcommand{\pmdraw@drawDotsNodeOptions}{}% + \renewcommand{\pmdraw@drawLabelBDrawOptions}{}% + \renewcommand{\pmdraw@drawLabelBNodeOptions}{}% + \renewcommand{\pmdraw@drawLabelTDrawOptions}{}% + \renewcommand{\pmdraw@drawLabelTNodeOptions}{}% + \renewcommand{\pmdraw@drawLedgesDrawOptions}{}% + \renewcommand{\pmdraw@drawTedgesDrawOptions}{}% + \renewcommand{\pmdraw@drawUedgesDrawOptions}{}% + \renewcommand{\pmdraw@drawVertexOptions}{}% + \renewcommand{\pmdraw@hookBeforeBrick}{}% + \renewcommand{\pmdraw@hookAfterBrick}{}% + \renewcommand{\pmdraw@ifEdgesFirst}{0}% + \renewcommand{\pmdraw@ifLabelsB}{0}% + \renewcommand{\pmdraw@ifLabelsT}{0}% + \renewcommand{\pmdraw@ifTedgesFirst}{0}% + \let\pmdraw@drawLabelBottom\pmdraw@drawLabelBottomDefault% + \let\pmdraw@drawLabelTop\pmdraw@drawLabelTopDefault% + \let\pmdraw@drawLabelBottom\pmdraw@drawLabelBottomDefault% + \setcounter{pmdraw@blankB}{0}% + \setcounter{pmdraw@blankT}{0}% + \setcounter{pmdraw@labelStartB}{1}% + \setcounter{pmdraw@labelStartT}{1}% +} +\newcommand{\pmdraw@drawLedges}[3][]{% Draws lower non-transversal edge, #1 options, #2 L vertex, #3 R vertex + \setcounter{pmdraw@NTlevel}{1}% Store default level of edge + \setkeys{pmdraw@NTedges}{#1}% Processes options + \ifdim\pmdraw@NTedgesHeight pt=-1000pt% If using default heights + \tikzmath{% + \pmdraw{edgeHeight}=\value{pmdraw@NTlevel}*\pmdraw{edgeSepL};% Calculates height based on level of edge + }% + \else% If using manual heights + \tikzmath{% + \pmdraw{edgeHeight}=\pmdraw@NTedgesHeight;% Set manual height + }% + \fi% + \pmdraw@drawLedgesDraw{#2}{#3}% Draw edge + % Resets user keys and other flags to default values + \renewcommand{\pmdraw@NTedgesHeight}{-1000}% + \let\pmdraw@drawLedgesDraw\pmdraw@drawLedgesDrawDefault% + \pmdraw@LedgesLoop% Restart for loop +} +\newcommand{\pmdraw@drawTedges}[3][]{% Draws transversal edge, #1 options, #2 upper vertex, #3 lower vertex + \setkeys{pmdraw@Tedges}{#1}% Processes options + \pmdraw@drawTedgesDraw{#2}{#3}% Draw edge + \let\pmdraw@drawTedgesDraw\pmdraw@drawTedgesDrawDefault% Resets user keys and other flags to default values + \pmdraw@TedgesLoop% Restart for loop +} +\newcommand{\pmdraw@drawTopVertices}{% Draws top row of vertices + \setcounter{pmdraw@topTotal}{\value{pmdraw@blankT}}% Store size of top row of vertices + \addtocounter{pmdraw@topTotal}{\value{pmdraw@degreeT}}% Store size of top row of vertices + \foreach \x in {1,...,\value{pmdraw@degreeT}} {% For each vertex in row + \pmdraw@drawVertex{\x + \value{pmdraw@blankT}}{\pmdraw@rowSep}% Draw upper vertex + \ifnum\pmdraw@ifLabelsT=1% If drawing labels + \pmdraw@drawLabelTop{\x + \value{pmdraw@blankT}}{\pmdraw@rowSep}{\thepmdraw@labelStartT}% Draw label + \stepcounter{pmdraw@labelStartT}% Update label counter + \fi + }% +} +\newcommand{\pmdraw@drawUedges}[3][]{% Draws upper non-transversal edge, #1 options, #2 L vertex, #3 R vertex + \setcounter{pmdraw@NTlevel}{1}% Store default level of edge + \setkeys{pmdraw@NTedges}{#1}% Processes options + \ifdim\pmdraw@NTedgesHeight pt=-1000pt% If using default heights + \tikzmath{ + \pmdraw{edgeHeight}=\value{pmdraw@NTlevel}*\pmdraw{edgeSepU};% Calculates height based on level of edge + } + \else% If using manual heights + \tikzmath{ + \pmdraw{edgeHeight}=\pmdraw@rowSep-\pmdraw@NTedgesHeight;% Set manual height + } + \fi% + \pmdraw@drawUedgesDraw{#2}{#3}% Draw edge + % Resets user keys and other flags to default values + \renewcommand{\pmdraw@NTedgesHeight}{-1000}% + \let\pmdraw@drawLedgesDraw\pmdraw@drawLedgesDrawDefault% + \let\pmdraw@drawUedgesDraw\pmdraw@drawUedgesDrawDefault% + \pmdraw@UedgesLoop% Restart for loop +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% Grid creation % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% This is a verbatim copy of: +% https://tex.stackexchange.com/a/467908 + +\newif\if@showgrid@grid +\newif\if@showgrid@left +\newif\if@showgrid@right +\newif\if@showgrid@below +\newif\if@showgrid@above +\tikzset{% + every show grid/.style={}, + show grid/.style={execute at end picture={\@showgrid{grid=true,#1}}},% + show grid/.default={true}, + show grid/.cd, + labels/.style={font={\sffamily\small},help lines}, + xlabels/.style={}, + ylabels/.style={}, + keep bb/.code={\useasboundingbox (current bounding box.south west) rectangle (current bounding box.north west);}, + true/.style={left,below}, + false/.style={left=false,right=false,above=false,below=false,grid=false}, + none/.style={left=false,right=false,above=false,below=false}, + all/.style={left=true,right=true,above=true,below=true}, + grid/.is if=@showgrid@grid, + left/.is if=@showgrid@left, + right/.is if=@showgrid@right, + below/.is if=@showgrid@below, + above/.is if=@showgrid@above, + false, +} + +\def\@showgrid#1{% + \begin{scope}[every show grid,show grid/.cd,#1] + \if@showgrid@grid + \begin{pgfonlayer}{background} + \draw [help lines] + (current bounding box.south west) grid + (current bounding box.north east); +% + \pgfpointxy{1}{1}% + \edef\xs{\the\pgf@x}% + \edef\ys{\the\pgf@y}% + \pgfpointanchor{current bounding box}{south west} + \edef\xa{\the\pgf@x}% + \edef\ya{\the\pgf@y}% + \pgfpointanchor{current bounding box}{north east} + \edef\xb{\the\pgf@x}% + \edef\yb{\the\pgf@y}% + \pgfmathtruncatemacro\xbeg{ceil(\xa/\xs)} + \pgfmathtruncatemacro\xend{floor(\xb/\xs)} + \if@showgrid@below + \foreach \X in {\xbeg,...,\xend} { + \node [below,show grid/labels,show grid/xlabels] at (\X,\ya) {\X}; + } + \fi + \if@showgrid@above + \foreach \X in {\xbeg,...,\xend} { + \node [above,show grid/labels,show grid/xlabels] at (\X,\yb) {\X}; + } + \fi + \pgfmathtruncatemacro\ybeg{ceil(\ya/\ys)} + \pgfmathtruncatemacro\yend{floor(\yb/\ys)} + \if@showgrid@left + \foreach \Y in {\ybeg,...,\yend} { + \node [left,show grid/labels,show grid/ylabels] at (\xa,\Y) {\Y}; + } + \fi + \if@showgrid@right + \foreach \Y in {\ybeg,...,\yend} { + \node [right,show grid/labels,show grid/ylabels] at (\xb,\Y) {\Y}; + } + \fi + \end{pgfonlayer} + \fi + \end{scope} +} +\tikzset{every show grid/.style={show grid/keep bb}}% Keep the original bounding box! + +\endinput \ No newline at end of file diff --git a/graphics/pmdraw/pmdraw.tex b/graphics/pmdraw/pmdraw.tex new file mode 100644 index 0000000000..a3c9a93fb7 --- /dev/null +++ b/graphics/pmdraw/pmdraw.tex @@ -0,0 +1,2811 @@ +\documentclass{ltxdoc} + +% *------------------------------* +% |2````````````````````````````7| +% |`````____````____`````````````| +% |````|MFMF\ /MFMF|````````````| +% |````|MF|MF\/MF|MF|````````````| +% |````|MF|\MFMF/|MF|_______`````| +% |````|MF|``````|MFMFMFMFMF|````| +% |````|MF|``````|MF|````````````| +% |````|MF|``````|MF|___`````````| +% |``````````````|MFMFMF|````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |``````````````|MF|````````````| +% |8````````````````````````````2| +% *------------------------------* + +\usepackage{pmdraw} +\usepackage{xcolor} +\usepackage{fancyvrb} +\usepackage{hyperref} + +\begin{document} + +\hypersetup{colorlinks, linkcolor=blue, urlcolor=blue} + +\title{The \textsf{pmdraw} package\thanks{This document + corresponds to \textsf{pmdraw}~v1.0, 2023-11-08.}} +\author{Matthias Fresacher \\ \texttt{matthias.ypg37@slmail.me}} + +\maketitle + +\begin{abstract} +The \texttt{pmdraw} package allows you to draw elements of the Partition Monoids, commonly referred to diagrams. The package provides a lot of flexibility to draw most diagrams and can be customised as needed. +\end{abstract} + +\tableofcontents + +\newpage +\section{Introduction} + +\subsection{Motivation} + +Partition monoids and their closely related algebras are well studied objects with applications in theoretical physics and representation theory in mathematics. The elements of these monoids are called diagrams because they can be drawn graphically as a graph following certain conventions. + +My PhD thesis examines properties of these partition monoids and hence I needed to draw a large number of diagrams in a neat and consistent way. This thesis work formed the basis of this package with only customisability and the manual needed to be added to complete this package. + +\subsection{Acknowledgments} + +Most importantly, I thank James East, my PhD supervisor for allowing me to get a little sidetracked in my PhD research and develop and publish this package rather than work on my thesis like I should have. + +This package has at its core the basic drawing macro of a diagram as used by James East and Nik Ru\v{s}kuc in their 2022 publication {\it Classification of congruences of twisted partition monoids} in Advances in Mathematics. I thank them both for allowing me to build on their work. + +I thank everybody that has helped me proof read, spot bugs, provide feedback, suggest improvements or has otherwise contributed to this package. Those that are happy to be named are (in chronological order): +\begin{itemize} + \item Nik Ru\v{s}kuc +\end{itemize} + +This package heavily uses commands that can accept an arbitrary number of arguments as inputs. I thank \texttt{egreg} for their template upon which my commands are based (\url{https://tex.stackexchange.com/a/72915}). + +As this was my first time using keys, I thank David Carlisle for their very helpful example (\url{https://tex.stackexchange.com/a/542555}). + +As it turns out, passing my keys to the \verb`\draw` command of \texttt{tikz} is a little more tricky than one might expect. I thank Andrew Stacey for their solution (\url{https://tex.stackexchange.com/a/64237}). + +I thank Partha~D.~for their ready to use out of the box macro for adding grid lines to a \texttt{tikz} drawing (\url{https://tex.stackexchange.com/a/467908}). + +I also thank everybody on \url{https://tex.stackexchange.com} who has answered a questions or solved a problem. There are too many to list you all. Thank you. + +\section{Bugs and known problems} + +\subsection{Bugs} + +If you discover a bug, please be so kind and send me a minimum working example of the bug in action and I will work on fixing it. + +I would like this package to be as perfect as it can be but I will need your help with this as there simply are too many keys to test every combination or use case. + +The following are a list of currently known bugs that will be addressed: +\begin{enumerate} + \item None at the moment +\end{enumerate} + +\subsection{Incompatibilities} + +The following are a list of known problems or incompatibilities that are not scheduled to be resolved anytime soon: +\begin{enumerate} + \item None at the moment +\end{enumerate} + +\section{Usage} + +To use the package, one must understand that all diagrams are created from a basic building block called a brick. + +\subsection{Bricks} + +\DescribeMacro{brick} +A \texttt{brick} is a diagram that contains no dots. For example, +\begin{center} + \pmdBrick[ % Options + degree=5 + ]{ % Upper non-transversal edges + {1}{2} + {2}{5} + }{ % Lower non-transversal edges + {1}{2} + {3}{4} + }{ % Transversal edges + {1}{1} + {3}{4} + } +\end{center} +is a brick whilst +\begin{center} + \pmdDiagram{ + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + {2}{3} + {4}{5} + }{ % Lower non-transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + {1}{1} + } + }{ % Brick 2 + [ % Options + degree=2 + ]{ % Upper non-transversal edges + {1}{2} + }{ % Lower non-transversal edges + {1}{2} + }{ % Transversal edges + \pmdEmpty + } + } + } +\end{center} +is not a brick. +\DescribeMacro{} +The syntax for a brick contains four components and is as follows: +\begin{center} + \texttt{~=~[]\{\}\{\}\{\}} +\end{center} +where +\DescribeMacro{brick/} +the \texttt{} are described in Section~\ref{sec: brick/options}. + +\DescribeMacro{} +is a list of upper non-transversal edges. An upper non-transversal edges has three components \texttt{~=~[]\{\}\{\}} where +\DescribeMacro{Uedges/}\DescribeMacro{Ledges/} +the \texttt{} are described in Section~\ref{sec: NT edge/options}, +\DescribeMacro{} +\texttt{\{\}} is the starting vertex and +\DescribeMacro{} +\texttt{\{\}} is the terminating vertex of the edge. Both \texttt{\{\}} and \texttt{\{\}} are a \( x \)-coordinate and it is assumed that \( \texttt{\{\}} < \texttt{\{\}} \). + +\DescribeMacro{list} +A \texttt{list} of upper non-transversal edges is simply each upper non-transversal edge written after the other. For example a list with one upper non-transversal edges is +\begin{verbatim} + {1}{2} +\end{verbatim} +whilst one with three upper non-transversal edges may be +\begin{verbatim} + {1}{2}[level=1]{3}{4}{5}{6} +\end{verbatim} +For ease of reading this will coded as +\begin{verbatim} + {1}{2} + [level=1]{3}{4} + {5}{6} +\end{verbatim} +\DescribeMacro{\pmdEmpty} +Should a list be empty, the command \verb`\pmdEmpty` should be used. + +\DescribeMacro{} +is a list of lower non-transversal edges. A lower non-transversal edges has the same three components as an upper non-transversal edge, namely \texttt{~=~[]\{\}\{\}}. + +\DescribeMacro{} +is a list of transversal edges. A transversal edges has three components \texttt{~=~[]\{\}\{\}} where +\DescribeMacro{Tedges/} +the \texttt{} are described in Section~\ref{sec: T edge/options}, +\DescribeMacro{} +\texttt{\{\}} is the top vertex and +\DescribeMacro{} +\texttt{\{\}} is the bottom vertex of the edge. Both \texttt{\{\}} and \texttt{\{\}} are a \( x \)-coordinate. + +An example \texttt{} and the resultant diagram is: +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5 +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} + {4}{5} +}{ % Transversal edges + \pmdEmpty +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5 +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} + {4}{5} +}{ % Transversal edges + \pmdEmpty +} + \end{minipage} + \end{minipage}% +\end{center} + +\subsection{Draw commands} + +This package has three draw commands. + +\DescribeMacro{\pmdBrick} +draws a brick and has the syntax \verb`\pmdBrick`. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5 +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} + {4}{5} +}{ % Transversal edges + \pmdEmpty +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5 +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} + {4}{5} +}{ % Transversal edges + \pmdEmpty +} + \end{minipage} + \end{minipage}% +\end{center} + +\DescribeMacro{\pmdDiagram} +draws arbitrarily many bricks separated by dots and has the syntax +\begin{verbatim} +\pmdDiagram[]{} +\end{verbatim} +where +\DescribeMacro{diagram/} +the \texttt{} are described in Section~\ref{sec: diagram/options} and +\DescribeMacro{} +\texttt{} is a list of \texttt{}-s, with each brick enclosed in curly brackets. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=2, + brace={ + left=1, + right=4, + label={n} + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree=1 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=2, + brace={ + left=1, + right=4, + label={n} + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree=1 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + } + } +} +\end{center} + +It should be noted that \verb`\pmdBrick` is simply a wrapper for a single brick that calls \verb`\pmdDiagram` with no diagram options. This means that, for example, the \texttt{grid} key is not available for \verb`\pmdBrick` and \verb`\pmdDiagram` must be used instead to access the \texttt{grid} key. + +For edges that go across multiple bricks, know that the coordinate positions of the vertices extends infinitely in both directions. If using default settings, the dots between bricks occupies one vertex position. To help with counting and identifying the correct coordinate position, the \texttt{grid} flag may also be used, see Section~\ref{sec: diagram/options all}. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=3, + brace={ + left=2, + right=6, + label={n} + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{6} + {3}{5} + } + }{ % Brick 2 + [ % Options + degree=2 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{-1} + {2}{-2} + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=3, + brace={ + left=2, + right=6, + label={n} + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{6} + {3}{5} + } + }{ % Brick 2 + [ % Options + degree=2 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{-1} + {2}{-2} + } + } +} +\end{center} + +\DescribeMacro{\pmdProduct} +draws two diagrams on top of each other as is the case during multiplication or concatenation and has the syntax +\begin{verbatim} +\pmdProduct[]{}{}{} +\end{verbatim} +where +\DescribeMacro{diagram/} +the \texttt{} are described in Section~\ref{sec: diagram/options}. + +\DescribeMacro{} +is a list of edges that are added during the concatenation process. An added edge has two components, namely \texttt{~=~\{\}\{\}}, where \texttt{\{\}} is the starting vertex and \texttt{\{\}} is the terminating vertex of the collection of added edges. Both \texttt{\{\}} and \texttt{\{\}} are a \( x \)-coordinate and it is assumed that \( \texttt{\{\}} < \texttt{\{\}} \). + +\DescribeMacro{} +is a list of bricks that correspond to the top diagram, with each brick enclosed in curly brackets. + +\DescribeMacro{} +is a list of bricks that correspond to the bottom diagram, with each brick enclosed in curly brackets. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdProduct{ % Added edges + {1}{5} + {7}{8} +}{ % Top diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + {3}{3} + {4}{4} + {5}{5} + } + }{ % Brick 2 + [ % Options + degree=2 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + } +}{ % Bottom diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + {2}{3} + {4}{5} + }{ % Lower non-transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + {1}{1} + } + }{ % Brick 2 + [ % Options + degree=2 + ]{ % Upper non-transversal edges + {1}{2} + }{ % Lower non-transversal edges + {1}{2} + }{ % Transversal edges + \pmdEmpty + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdProduct{ % Added edges + {1}{5} + {7}{8} +}{ % Top diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + {3}{3} + {4}{4} + {5}{5} + } + }{ % Brick 2 + [ % Options + degree=2 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + } +}{ % Bottom diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + {2}{3} + {4}{5} + }{ % Lower non-transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + {1}{1} + } + }{ % Brick 2 + [ % Options + degree=2 + ]{ % Upper non-transversal edges + {1}{2} + }{ % Lower non-transversal edges + {1}{2} + }{ % Transversal edges + \pmdEmpty + } + } +} +\end{center} + +\subsection{Brick options} \label{sec: brick/options} + +The following are all of the keys that are available for bricks. + +\subsubsection{Vertex options} + +\DescribeMacro{degree} +specifies the degree, that is, the number of vertices in the top and bottom row of the diagram. Must be a positive integer and must be provided unless using \texttt{degree top} and \texttt{degree bottom}. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5 +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5 +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} + \end{minipage} + \end{minipage}% +\end{center} + +\DescribeMacro{degree top} \DescribeMacro{degree bottom} +specifies the degree, that is, the number of vertices in the top (bottom) row of the diagram. Must be a positive integer and must be provided as a pair \texttt{degree top} and \texttt{degree bottom}. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree top=5, + degree bottom=4 +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree top=5, + degree bottom=4 +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} + \end{minipage} + \end{minipage}% +\end{center} + +\DescribeMacro{blank top} \DescribeMacro{blank bottom} +specifies the number of blank vertices to the left of the top (bottom) row of the diagram. Default is zero. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + blank top=1, + degree top=4, + degree bottom=5 +]{ % Upper non-transversal edges + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + blank top=1, + degree top=4, + degree bottom=5 +]{ % Upper non-transversal edges + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {3}{4} +} + \end{minipage} + \end{minipage}% +\end{center} + +It should also be noted that the \texttt{blank top} and \texttt{blank bottom} can also be used to create more space between bricks and the dots between bricks by setting a large number. Likewise if set to \( -1 \) and the dots is redefined to not draw, the space between bricks can be removed altogether. See Examples~13-15. + +\DescribeMacro{row sep} +specifies the vertical separation between rows of vertices. Default is two. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5, + row sep=4 +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5, + row sep=4 +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} + \end{minipage} + \end{minipage}% +\end{center} + +\DescribeMacro{vertices} +passes through options to the \verb`\draw` command of vertices. The default is no argument. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5, + vertices=blue +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5, + vertices=blue +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} + \end{minipage} + \end{minipage}% +\end{center} + +\DescribeMacro{vertices options} +allows for the redefinition of the command that draws the vertices. It has two arguments, the \( x \) and \( y \)-position of the vertex. The default is +\begin{verbatim} +\fill[apply style/.expand once=\pmdraw@drawVertexOptions] (#1,#2) circle (.17); +\end{verbatim} +An example use is +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5, + vertices options={ + \draw[very thick] (#1,#2) circle (.25); + } +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdBrick[ % Options + degree=5, + vertices options={ + \draw[very thick] (#1,#2) circle (.25); + } +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{center} + +\DescribeMacro{labels}\DescribeMacro{labels top}\DescribeMacro{labels bottom} +flags that allow for the drawing of labels for the vertices. Use \texttt{labels} for labels on both the top and bottom or set individually. The default is no labels. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5, + labels bottom +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5, + labels bottom +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} + \end{minipage} + \end{minipage}% +\end{center} + +\DescribeMacro{labels start}\DescribeMacro{labels top start}\DescribeMacro{labels bottom start} +sets the starting value of the labels for the vertices. The default is one. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5, + labels, + labels top start=3, + labels bottom start=-2 +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5, + labels, + labels top start=3, + labels bottom start=-2 +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} + \end{minipage} + \end{minipage}% +\end{center} + +\DescribeMacro{labels top draw}\DescribeMacro{labels top node}\DescribeMacro{labels bottom draw}\DescribeMacro{labels bottom node} +passes through options to the \verb`\draw` and \verb`node` command of the labels of vertices. The default is no argument. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5, + labels, + labels top node=red, + labels bottom node={right=2pt} +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdBrick[ % Options + degree=5, + labels, + labels top node=red, + labels bottom node={right=2pt} +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{center} + +\DescribeMacro{labels top options}\DescribeMacro{labels bottom options} +allows for the redefinition of the command that draws the labels of the vertices. They have three arguments, the \( x \) and \( y \)-position of the vertex and the label value. The default for the top is +\begin{verbatim} +\draw[apply style/.expand once=\pmdraw@drawLabelTDrawOptions] (#1,#2) + node[above=6pt,apply style/.expand once=\pmdraw@drawLabelTNodeOptions] {\(#3\)}; +\end{verbatim} +and for the bottom +\begin{verbatim} +\draw[apply style/.expand once=\pmdraw@drawLabelBDrawOptions] (#1,#2) + node[below=6pt,apply style/.expand once=\pmdraw@drawLabelBNodeOptions] {\(#3'\)}; +\end{verbatim} +An example use is +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5, + labels, + labels bottom options={ + \draw (#1,#2) node[below=6pt,blue] {\(#3''\)}; + } +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdBrick[ % Options + degree=5, + labels, + labels bottom options={ + \draw (#1,#2) node[below=6pt,blue] {\(#3''\)}; + } +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{center} + +\DescribeMacro{no dots} +The \texttt{no dots} flag removes the drawing of dots to the left of the current brick in diagrams. Default is to draw dots except for the first brick. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=2, + brace={ + left=1, + right=4, + label={n} + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree=1, + no dots + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=2, + brace={ + left=1, + right=4, + label={n} + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree=1, + no dots + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + } + } +} +\end{center} + + +\DescribeMacro{dots draw}\DescribeMacro{dots node} +passes through options to the \verb`\draw` and \verb`node` command of the dots. The default is no argument. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=2, + brace={ + left=1, + right=4, + label={n} + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree=1, + dots node=red + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=2, + brace={ + left=1, + right=4, + label={n} + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree=1, + dots node=red + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + } + } +} +\end{center} + +\subsubsection{Edge options} + +These options should be read in conjunction with Section~\ref{sec: edge/options}. + +\DescribeMacro{levels} +specifies how many horizontal levels there are for non-transversal edges. Default is one. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5, + levels=3 +]{ % Upper non-transversal edges + [level=3]{1}{5} + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Lower non-transversal edges + [level=3]{1}{5} + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Transversal edges + \pmdEmpty +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5, + levels=3 +]{ % Upper non-transversal edges + [level=3]{1}{5} + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Lower non-transversal edges + [level=3]{1}{5} + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Transversal edges + \pmdEmpty +} + \end{minipage} + \end{minipage}% +\end{center} + +\DescribeMacro{levels top} \DescribeMacro{levels bottom} +specifies how many horizontal levels there are for upper (lower) non-transversal edges. Default is one. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5, + levels top=3, + levels bottom=2 +]{ % Upper non-transversal edges + [level=3]{1}{5} + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Lower non-transversal edges + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Transversal edges + \pmdEmpty +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5, + levels top=3, + levels bottom=2 +]{ % Upper non-transversal edges + [level=3]{1}{5} + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Lower non-transversal edges + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Transversal edges + \pmdEmpty +} + \end{minipage} + \end{minipage}% +\end{center} + +\DescribeMacro{levels sep} +specifies the vertical separation between horizontal levels for non-transversal edges. Default is evenly spaced within the space available for the given number of \texttt{levels}. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5, + levels=3, + levels sep=0.3 +]{ % Upper non-transversal edges + [level=3]{1}{5} + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Lower non-transversal edges + [level=3]{1}{5} + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Transversal edges + \pmdEmpty +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5, + levels=3, + levels sep=0.3 +]{ % Upper non-transversal edges + [level=3]{1}{5} + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Lower non-transversal edges + [level=3]{1}{5} + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Transversal edges + \pmdEmpty +} + \end{minipage} + \end{minipage}% +\end{center} + +\DescribeMacro{levels sep top} \DescribeMacro{levels sep bottom} +specifies the vertical separation between horizontal levels for upper (lower) non-transversal edges. Default is evenly spaced within the space available for the given number of \texttt{levels}. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5, + levels=3, + levels sep top=0.4, + levels sep bottom=0.15 +]{ % Upper non-transversal edges + [level=3]{1}{5} + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Lower non-transversal edges + [level=3]{1}{5} + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Transversal edges + \pmdEmpty +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5, + levels=3, + levels sep top=0.4, + levels sep bottom=0.15 +]{ % Upper non-transversal edges + [level=3]{1}{5} + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Lower non-transversal edges + [level=3]{1}{5} + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Transversal edges + \pmdEmpty +} + \end{minipage} + \end{minipage}% +\end{center} + +\DescribeMacro{edges}\DescribeMacro{edges non-transversal}\DescribeMacro{edges upper}\DescribeMacro{edges lower}\DescribeMacro{edges transversal} +pass through options to the \verb`\draw` command of their respective edge types. The default is no argument. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5, + edges upper=blue, + edges lower={red, dotted, very thick}, + edges transversal=dashed +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdBrick[ % Options + degree=5, + edges upper=blue, + edges lower={red, dotted, very thick}, + edges transversal=dashed +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{center} + +\DescribeMacro{edges first} +flag ensures edges are drawn before vertices. The default is vertices are drawn first. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5, + edges lower={red, very thick}, + edges first +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5, + edges lower={red, very thick}, + edges first +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} + \end{minipage} + \end{minipage}% +\end{center} + +\DescribeMacro{transversals first} +flag ensures transversal edges are drawn before non-transversal edges. The default is non-transversal edges are drawn first. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5, + edges lower={red, very thick}, + transversals first +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5, + edges lower={red, very thick}, + transversals first +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} + \end{minipage} + \end{minipage}% +\end{center} + +\subsubsection{Brace} + +\DescribeMacro{brace} +specifies instructions for the drawing of a brace with the brace keys. These are described in Section~\ref{sec: brace}. The default is no brace is drawn. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=2, + brace={ + left=1, + right=4, + label={n} + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree=1 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=2, + brace={ + left=1, + right=4, + label={n} + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree=1 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + } + } +} +\end{center} + +\DescribeMacro{brace draw}\DescribeMacro{brace node} +passes through options to the \verb`\draw` and \verb`node` command of the brace. Must be given before the \texttt{brace} key. The default is no argument. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=2, + brace draw=thin, + brace node={pos=0.25}, + brace={ + left=1, + right=4, + label={n} + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree=1 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=2, + brace draw=thin, + brace node={pos=0.25}, + brace={ + left=1, + right=4, + label={n} + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree=1 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + } + } +} +\end{center} + +\subsubsection{Decorations} + +\DescribeMacro{decorate before}\DescribeMacro{decorate after} +provides a hook to draw additional \texttt{tikz} elements before and after the brick is drawn. The default is empty. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5, + decorate after={ + \draw[ + very thick, + red, + rounded corners=5pt + ] (0.6, -0.4) rectangle (1.4, 2.4); + } +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdBrick[ % Options + degree=5, + decorate after={ + \draw[ + very thick, + red, + rounded corners=5pt + ] (0.6, -0.4) rectangle (1.4, 2.4); + } +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + {1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{center} + +These hooks can also be used for more sophisticated manipulation of diagrams be inserting not just \texttt{tikz} elements but arbitrary code before and after draw a brick. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=4 + ]{ % Upper non-transversal edges + {2}{3} + }{ % Lower non-transversal edges + {2}{3} + }{ % Transversal edges + {1}{1} + {4}{4} + } + }{ % Brick 2 + [ % Options + degree=3, + decorate before={\begin{scope}[red,shift={(1,1)},rotate=30]}, + decorate after={\end{scope}} + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{2} + {2}{3} + {3}{1} + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=4 + ]{ % Upper non-transversal edges + {2}{3} + }{ % Lower non-transversal edges + {2}{3} + }{ % Transversal edges + {1}{1} + {4}{4} + } + }{ % Brick 2 + [ % Options + degree=3, + decorate before={\begin{scope}[red,shift={(1,1)},rotate=30]}, + decorate after={\end{scope}} + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{2} + {2}{3} + {3}{1} + } + } +} +\end{center} + +\subsubsection{Drawing order} \label{sec: order} + +For clarity, this is the default drawing order for a brick: +\begin{enumerate} + \item \texttt{decorate before} + \item Top row of vertices + \item Bottom row of vertices + \item Upper non-transversal edges + \item Lower non-transversal edges + \item Transversal edges + \item \texttt{decorate after} +\end{enumerate} + +This order can be altered using the \texttt{edges first} and \texttt{transversals first} flags. + +For the drawing order of a diagram and product diagram, see the \texttt{decorate before} and \texttt{decorate after} keys in Section~\ref{sec: diagram/options all}. + +\subsection{Edge options} \label{sec: edge/options} + +\subsubsection{non-transversal edge options} \label{sec: NT edge/options} + +\DescribeMacro{level} +specifies the horizontal level of a non-transversal edges. Default is one. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5, + levels=3 +]{ % Upper non-transversal edges + [level=3]{1}{5} + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Lower non-transversal edges + [level=3]{1}{5} + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Transversal edges + \pmdEmpty +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5, + levels=3 +]{ % Upper non-transversal edges + [level=3]{1}{5} + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Lower non-transversal edges + [level=3]{1}{5} + [level=2]{1}{4} + [level=1]{2}{3} +}{ % Transversal edges + \pmdEmpty +} + \end{minipage} + \end{minipage}% +\end{center} + +\DescribeMacro{height} +specifies a manually set horizontal height of a non-transversal edges. Default is to use levels. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5 +]{ % Upper non-transversal edges + {1}{5} + [height=1.75]{1}{4} +}{ % Lower non-transversal edges + [height=1.25]{1}{5} + {1}{4} +}{ % Transversal edges + \pmdEmpty +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} +\pmdBrick[ % Options + degree=5 +]{ % Upper non-transversal edges + {1}{5} + [height=1.75]{1}{4} +}{ % Lower non-transversal edges + [height=1.25]{1}{5} + {1}{4} +}{ % Transversal edges + \pmdEmpty +} + \end{minipage} + \end{minipage}% +\end{center} + +\DescribeMacro{options} +allows for the redefinition of the command that draws the non-transversal edge. It has two arguments, the start and end \( x \)-position of the edge. The default for an upper non-transversal is +\begin{verbatim} + \draw[apply style/.expand once=\pmdraw@drawUedgesDrawOptions] + (#1,\pmdraw@rowSep) arc (180:270:\pmdraw{edgeHeight}); % Draw left arch + \draw[apply style/.expand once=\pmdraw@drawUedgesDrawOptions] + (#1+\pmdraw{edgeHeight},\pmdraw@rowSep-\pmdraw{edgeHeight}) + -- (#2-\pmdraw{edgeHeight},\pmdraw@rowSep-\pmdraw{edgeHeight}); % Draw straight line + \draw[apply style/.expand once=\pmdraw@drawUedgesDrawOptions] + (#2-\pmdraw{edgeHeight},\pmdraw@rowSep-\pmdraw{edgeHeight}) + arc (270:360:\pmdraw{edgeHeight}); % Draw right arc +\end{verbatim} +and for a lower non-transversal +\begin{verbatim} + \draw[apply style/.expand once=\pmdraw@drawLedgesDrawOptions] + (#1,0) arc (180:90:\pmdraw{edgeHeight}); % Draw left arch + \draw[apply style/.expand once=\pmdraw@drawLedgesDrawOptions] + (#1+\pmdraw{edgeHeight},\pmdraw{edgeHeight}) + -- (#2-\pmdraw{edgeHeight},\pmdraw{edgeHeight}); % Draw straight line + \draw[apply style/.expand once=\pmdraw@drawLedgesDrawOptions] + (#2-\pmdraw{edgeHeight},\pmdraw{edgeHeight}) + arc (90:0:\pmdraw{edgeHeight}); % Draw right arc +\end{verbatim} +An example use is +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdBrick[ % Options + degree=5 +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + [options={ + \draw[blue, very thick] (#1,0) -- (#2,0); + }]{1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdBrick[ % Options + degree=5 +]{ % Upper non-transversal edges + {1}{2} + {2}{5} +}{ % Lower non-transversal edges + [options={ + \draw[blue, very thick] (#1,0) -- (#2,0); + }]{1}{2} + {3}{4} +}{ % Transversal edges + {1}{1} + {3}{4} +} +\end{center} + +\subsubsection{Transversal edge options} \label{sec: T edge/options} + +\DescribeMacro{height} +draws transversal edges with a horizontal component and specifies the manually set horizontal height of the transversal edges. Default is to use non-horizontal transversal edges. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree top=5, + degree bottom=6 + ]{ % Upper non-transversal edges + {2}{3} + {4}{5} + }{ % Lower non-transversal edges + {3}{4} + {5}{6} + }{ % Transversal edges + [height=1]{10}{2} + {1}{1} + } + }{ % Brick 2 + [ % Options + degree top=3, + blank bottom=1, + degree bottom=2 + ]{ % Upper non-transversal edges + {1}{2} + }{ % Lower non-transversal edges + {2}{3} + }{ % Transversal edges + \pmdEmpty + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree top=5, + degree bottom=6 + ]{ % Upper non-transversal edges + {2}{3} + {4}{5} + }{ % Lower non-transversal edges + {3}{4} + {5}{6} + }{ % Transversal edges + [height=1]{10}{2} + {1}{1} + } + }{ % Brick 2 + [ % Options + degree top=3, + blank bottom=1, + degree bottom=2 + ]{ % Upper non-transversal edges + {1}{2} + }{ % Lower non-transversal edges + {2}{3} + }{ % Transversal edges + \pmdEmpty + } + } +} +\end{center} + +\DescribeMacro{options} +allows for the redefinition of the command that draws the transversal edge. It has two arguments, the \( x \)-position of the edge in the top row of vertices and the \( x \)-position of the edge in the bottom row of vertices. The default is +\begin{verbatim} + \ifnum\pmdraw@ifTedgeHorizontal=0 % If drawing a straight line edge + \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptions] + (#1,\pmdraw@rowSep) -- (#2,0); % Draw straight line + \else % If transversal edge is drawn horizontally + \ifnum#1>#2 % If edge goes from top right to bottom left + \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptions] + (#2,0) arc (180:90:\pmdraw{Tlevel}); % Draw bottom arch + \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptions] + (#2+\pmdraw{Tlevel},\pmdraw{Tlevel}) + -- (#1-\pmdraw@rowSep+\pmdraw{Tlevel}, \pmdraw{Tlevel}); % Draw straight line + \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptions] + (#1-\pmdraw@rowSep+\pmdraw{Tlevel},\pmdraw{Tlevel}) + arc (270:360:{\pmdraw@rowSep-\pmdraw{Tlevel}}); % Draw top arc + \else % If edge goes from top left to bottom right + \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptions] + (#2,0) arc (0:90:\pmdraw{Tlevel}); % Draw bottom arch + \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptions] + (#2-\pmdraw{Tlevel},\pmdraw{Tlevel}) + -- (#1+\pmdraw@rowSep-\pmdraw{Tlevel}, \pmdraw{Tlevel}); % Draw straight line + \draw[apply style/.expand once=\pmdraw@drawTedgesDrawOptions] + (#1+\pmdraw@rowSep-\pmdraw{Tlevel},\pmdraw{Tlevel}) + arc (270:180:{\pmdraw@rowSep-\pmdraw{Tlevel}}); % Draw top arc + \fi% + \renewcommand{\pmdraw@ifTedgeHorizontal}{0} % Reset flag to default + \fi% +\end{verbatim} +An example use is +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree top=5, + degree bottom=6 + ]{ % Upper non-transversal edges + {2}{3} + {4}{5} + }{ % Lower non-transversal edges + {3}{4} + {5}{6} + }{ % Transversal edges + [options={ + \draw (#2,0) -- (#2+1,1); % Draw bottom line + \draw (#2+1,1) -- (#1-1, 1); % Draw straight line + \draw (#1-1,1) -- (#1,2); % Draw top line + }]{10}{2} + {1}{1} + } + }{ % Brick 2 + [ % Options + degree top=3, + blank bottom=1, + degree bottom=2 + ]{ % Upper non-transversal edges + {1}{2} + }{ % Lower non-transversal edges + {2}{3} + }{ % Transversal edges + \pmdEmpty + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree top=5, + degree bottom=6 + ]{ % Upper non-transversal edges + {2}{3} + {4}{5} + }{ % Lower non-transversal edges + {3}{4} + {5}{6} + }{ % Transversal edges + [options={ + \draw (#2,0) -- (#2+1,1); % Draw bottom line + \draw (#2+1,1) -- (#1-1, 1); % Draw straight line + \draw (#1-1,1) -- (#1,2); % Draw top line + }]{10}{2} + {1}{1} + } + }{ % Brick 2 + [ % Options + degree top=3, + blank bottom=1, + degree bottom=2 + ]{ % Upper non-transversal edges + {1}{2} + }{ % Lower non-transversal edges + {2}{3} + }{ % Transversal edges + \pmdEmpty + } + } +} +\end{center} + + +\subsection{Brace} \label{sec: brace} + +\DescribeMacro{brick/brace} +As part of a diagram, it may be useful to draw a brace. The options of a brace are as follows: + +\DescribeMacro{left}\DescribeMacro{right} +specifies the \( x \)-position of the start/left and end/right of the brace. Both must be provided. + +\DescribeMacro{label} +specifies the label to be printed with the brace. Default is empty. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=2, + brace={ + left=1, + right=4, + label={n} + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree=1 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=2, + brace={ + left=1, + right=4, + label={n} + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree=1 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + } + } +} +\end{center} + +\DescribeMacro{above} +The \texttt{above} flag draws the brace above the diagram. Default is below. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=2, + brace={ + left=1, + right=4, + label={n}, + above + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree=1 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=2, + brace={ + left=1, + right=4, + label={n}, + above + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree=1 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + } + } +} +\end{center} + +\DescribeMacro{options} +allows for the redefinition of the command that draws the brace. It has three arguments, the \( x \)-position start and end of the brace, as well as the label of the brace. The default is +\begin{verbatim} + \ifnum\pmdraw@ifProdDiag=1 % If drawing a product diagram + % or if placing brace above diagram + \draw[ + very thick, + decorate, + decoration={calligraphic brace,amplitude=6pt}, + apply style/.expand once=\pmdraw@drawBraceDrawOptions + ] (#1-0.17,\pmdraw@rowSep+0.5) -- (#2+0.17,\pmdraw@rowSep+0.5) + node[ + pos=0.5, + above=6pt, + apply style/.expand once=\pmdraw@drawBraceNodeOptions + ] {\(#3\)}; % Draw brace on top of diagram + \else % If not drawing a product diagram or if placing brace below diagram + \draw[ + very thick, + decorate, + decoration={calligraphic brace,mirror,amplitude=6pt}, + apply style/.expand once=\pmdraw@drawBraceDrawOptions + ] (#1-0.17,-0.5) -- (#2+0.17,-0.5) + node[ + pos=0.5, + below=6pt, + apply style/.expand once=\pmdraw@drawBraceNodeOptions + ] {\(#3\)}; % Draw brace on bottom of diagram + \fi% +\end{verbatim} +it should be noted that the flag \verb`\pmdraw@ifProdDiag` is both used for when drawing a product diagram but also when placing the brace above the diagram as this clearly must be the default for the top diagram in a product diagram. +An example use is +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=2, + brace={ + left=1, + right=4, + label={n}, + options={ + \draw[ + red, + very thick, + decorate, + decoration={calligraphic brace,mirror,amplitude=6pt} + ] (#1-0.17,-0.5) -- (#2+0.17,-0.5) + node[pos=0.25,below=6pt]{\(#3\)}; + } + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree=1 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdDiagram{ + { % Brick 1 + [ % Options + degree=2, + brace={ + left=1, + right=4, + label={n}, + options={ + \draw[ + red, + very thick, + decorate, + decoration={calligraphic brace,mirror,amplitude=6pt} + ] (#1-0.17,-0.5) -- (#2+0.17,-0.5) + node[pos=0.25,below=6pt]{\(#3\)}; + } + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree=1 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + } + } +} +\end{center} + +\subsection{Diagram options} \label{sec: diagram/options} + +\subsubsection{For all (product) diagrams} \label{sec: diagram/options all} + +The following options can be used for both diagrams (\verb`\pmdDiagram`) and product diagrams (\verb`\pmdProduct`). + +\DescribeMacro{row sep} +same as \texttt{row sep} option in bricks but applied to all bricks within (product) diagram. + +\DescribeMacro{dots options} +allows for the redefinition of the command that draws dots between bricks. It has two arguments, the \( x \) and \( y \)-position of the dots. The default is +\begin{verbatim} + \draw[apply style/.expand once=\pmdraw@drawDotsDrawOptions] + (#1,#2) node[apply style/.expand once=\pmdraw@drawDotsNodeOptions] {\(\dots\)}; +\end{verbatim} +An example use is +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdDiagram[ % Options + dots options={ + \draw[red] (#1,#2) node {\(\dots\dots\)}; + } +]{ + { % Brick 1 + [ % Options + degree=2, + brace={ + left=1, + right=5, + label={n} + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree=1, + blank top=1, + blank bottom=1 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {2}{2} + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdDiagram[ % Options + dots options={ + \draw[red] (#1,#2) node {\(\dots\dots\)}; + } +]{ + { % Brick 1 + [ % Options + degree=2, + brace={ + left=1, + right=5, + label={n} + } + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + } + }{ % Brick 2 + [ % Options + degree=1, + blank top=1, + blank bottom=1 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {2}{2} + } + } +} +\end{center} + +\DescribeMacro{grid} +As it can get confusing where things are drawn and the different coordinate scopes between all the bricks and diagrams, the \texttt{grid} flag draws the base coordinate grid that the first drawn brick is based on. This should help with all coordinate related inquiries. Default is no grid. + +It should be noted that the \texttt{grid} key is not available for \verb`\pmdBrick` and \verb`\pmdDiagram` must be used instead when needing a grid for a single brick only. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdDiagram[ % Options + grid +]{ + { % Brick 1 + [ % Options + degree top=5, + degree bottom=6, + ]{ % Upper non-transversal edges + {2}{3} + {4}{5} + }{ % Lower non-transversal edges + {3}{4} + {5}{6} + }{ % Transversal edges + [height=1]{10}{2} + {1}{1} + } + }{ % Brick 2 + [ % Options + degree top=3, + blank bottom=1, + degree bottom= + ]{ % Upper non-transversal edges + {1}{2} + }{ % Lower non-transversal edges + {2}{3} + }{ % Transversal edges + \pmdEmpty + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdDiagram[ % Options + grid +]{ + { % Brick 1 + [ % Options + degree top=5, + degree bottom=6 + ]{ % Upper non-transversal edges + {2}{3} + {4}{5} + }{ % Lower non-transversal edges + {3}{4} + {5}{6} + }{ % Transversal edges + [height=1]{10}{2} + {1}{1} + } + }{ % Brick 2 + [ % Options + degree top=3, + blank bottom=1, + degree bottom=2 + ]{ % Upper non-transversal edges + {1}{2} + }{ % Lower non-transversal edges + {2}{3} + }{ % Transversal edges + \pmdEmpty + } + } +} +\end{center} + +\DescribeMacro{decorate before}\DescribeMacro{decorate after} +same as \texttt{decorate before} and \texttt{decorate after} in bricks but these are drawn before (after) all bricks are drawn. For clarity, this is default drawing order for a diagram: +\begin{enumerate} + \item \texttt{diagram/decorate before} + \item Brick loop: + \begin{enumerate} + \item \texttt{brick/decorate before} + \item Draws brick + \item \texttt{brick/decorate after} + \end{enumerate} + \item \texttt{diagram/decorate after} +\end{enumerate} +And this is default drawing order for a product diagram: +\begin{enumerate} + \item \texttt{diagram/decorate before} + \item Draws added edges + \item Top diagram: + \begin{enumerate} + \item Brick loop: + \begin{enumerate} + \item \texttt{brick/decorate before} + \item Draws brick + \item \texttt{brick/decorate after} + \end{enumerate} + \end{enumerate} + \item Bottom diagram: + \begin{enumerate} + \item Brick loop: + \begin{enumerate} + \item \texttt{brick/decorate before} + \item Draws brick + \item \texttt{brick/decorate after} + \end{enumerate} + \end{enumerate} + \item \texttt{diagram/decorate after} +\end{enumerate} + +For the drawing order of a brick see Section~\ref{sec: order}. + +\subsubsection{For product diagrams only} + +The following options can only be used for product diagrams (\verb`\pmdProduct`). + +\DescribeMacro{diagram sep} +specifies the vertical separation between the bottom row of vertices in top diagram and the top row of vertices in bottom diagram. Default is one. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdProduct[ % Options + diagram sep=2 +]{ % Added edges + {1}{5} +}{ % Top diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + {3}{3} + {4}{4} + {5}{5} + } + } +}{ % Bottom diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + {2}{3} + {4}{5} + }{ % Lower non-transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + {1}{1} + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdProduct[ % Options + diagram sep=2 +]{ % Added edges + {1}{5} +}{ % Top diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + {3}{3} + {4}{4} + {5}{5} + } + } +}{ % Bottom diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + {2}{3} + {4}{5} + }{ % Lower non-transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + {1}{1} + } + } +} +\end{center} + +\DescribeMacro{edges added} +passes through options to the \verb`\draw` command of the added edges. The default is no argument. +\begin{center} + \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax} + \begin{minipage}[c]{0.4\linewidth} +\begin{verbatim} +\pmdProduct[ % Options + edges added={red,very thick} +]{ % Added edges + {1}{5} +}{ % Top diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + {3}{3} + {4}{4} + {5}{5} + } + } +}{ % Bottom diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + {2}{3} + {4}{5} + }{ % Lower non-transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + {1}{1} + } + } +} +\end{verbatim} + \end{minipage} + \hfill + \begin{minipage}[c]{0.4\linewidth} + \end{minipage} + \end{minipage}% +\end{center} +\begin{center} +\pmdProduct[ % Options + edges added={red,very thick} +]{ % Added edges + {1}{5} +}{ % Top diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + \pmdEmpty + }{ % Lower non-transversal edges + \pmdEmpty + }{ % Transversal edges + {1}{1} + {2}{2} + {3}{3} + {4}{4} + {5}{5} + } + } +}{ % Bottom diagram + { % Brick 1 + [ % Options + degree=5 + ]{ % Upper non-transversal edges + {2}{3} + {4}{5} + }{ % Lower non-transversal edges + {2}{3} + {4}{5} + }{ % Transversal edges + {1}{1} + } + } +} +\end{center} + +\section{Future features/work} + +I have attempted to make most use cases easy to use with dedicated functionality that does not require significant \LaTeX\ knowledge whilst at the same time provide more advanced interfaces to allow for hopefully almost complete customisability for those who put in the effort. + +Having said that, please do let me know if there are features or improvements you will like to see added. + +The following are some of the aims for the future for this package: +\begin{enumerate} + \item Fix bugs. + \item Add warning and error messages to log. + \item Allow all brick keys to work as diagram keys that apply to all bricks in a diagram. This will require setting up a flag for each key so that the diagram key sets the brick key but the brick key is not reset after drawing the first brick. This process also will need to be able to handle when a single brick has a custom special different key value and that this is reset to the digram key value and not the global default key value. + \item Allow appropriate diagram keys to work as brick keys. Notably the \texttt{grid} key. + \item Create a \texttt{tikz} key for passing options to the \texttt{tikz} environment. Have as an example a different scale for diagram. + \item The creation of user profiles that allows for fast and efficient setting of default key values that are different to the package defaults. Hence within a diagram, there can be a number of differetn diagram styles that can be accessed with one command. + \item Allow for adjusting the horizontal spacing of vertices. Need to think about making that a simple scale factor so that integer interface for edge positions is the same but then hooks will have very messy coordinates or keep it as absolute coordinates with messy edges. Alternatively, do both, allowing the user to choose which option to do and somehow distinguish between the two in the background. +\end{enumerate} + +\section{Examples} + +This section is simply a collection of example diagrams. The code for them can be found in the \texttt{examples} folder. Perhaps you will find them useful as a starting point for your diagrams or to see what this package is capable of. + +\usetikzlibrary{patterns} + +\foreach \example in {1,...,25}{ + \paragraph{Example~\example} + \begin{center} + \input{examples/example-\example} + \end{center} +} + +\end{document} \ No newline at end of file diff --git a/macros/latex/contrib/hyperref/ChangeLog.txt b/macros/latex/contrib/hyperref/ChangeLog.txt index af20a60665..660a34563e 100644 --- a/macros/latex/contrib/hyperref/ChangeLog.txt +++ b/macros/latex/contrib/hyperref/ChangeLog.txt @@ -1,3 +1,10 @@ +2023-11-07 Ulrike Fischer + * improve thm code, issue 304 + * insert socket for varwidth, issue 204 and 293 + +2023-10-31 Ulrike Fischer + * hyperref-linktarget.dtx: switch to e-type + =========== Version: 2023-10-27 v7.01d diff --git a/macros/latex/contrib/hyperref/README.md b/macros/latex/contrib/hyperref/README.md index db3ef2e790..0e47cc5012 100644 --- a/macros/latex/contrib/hyperref/README.md +++ b/macros/latex/contrib/hyperref/README.md @@ -1,6 +1,6 @@ # README for hyperref bundle -Version 2023-10-27 v7.01d +Version 2023-11-07 v7.01e ## INTRODUCTION diff --git a/macros/latex/contrib/hyperref/doc/backref.pdf b/macros/latex/contrib/hyperref/doc/backref.pdf index 6ee096db1f..1a9546b24e 100644 Binary files a/macros/latex/contrib/hyperref/doc/backref.pdf and b/macros/latex/contrib/hyperref/doc/backref.pdf differ diff --git a/macros/latex/contrib/hyperref/doc/hyperref-doc.html b/macros/latex/contrib/hyperref/doc/hyperref-doc.html index 074b2c47ed..c84196a6c6 100644 --- a/macros/latex/contrib/hyperref/doc/hyperref-doc.html +++ b/macros/latex/contrib/hyperref/doc/hyperref-doc.html @@ -25,7 +25,7 @@ href="https://github.com/latex3/hyperref/issues" class="url" >https://github.com/latex3/hyperref/issues)
2023-10-27 v7.01d
+class="ec-lmr-12">2023-11-07 v7.01e

Contents

@@ -214,80 +214,82 @@ href="#x1-8800011.1.23" id="QQ2-1-88">natbib
11.1.24 nomencl
11.1.25 ntheorem-hyper +href="#x1-9000011.1.25" id="QQ2-1-90">ntheorem
11.1.26 prettyref +href="#x1-9100011.1.26" id="QQ2-1-91">ntheorem-hyper
11.1.27 setspace +href="#x1-9200011.1.27" id="QQ2-1-92">prettyref
11.1.28 sidecap +href="#x1-9300011.1.28" id="QQ2-1-93">setspace
11.1.29 subfigure +href="#x1-9400011.1.29" id="QQ2-1-94">sidecap
11.1.30 titleref +href="#x1-9500011.1.30" id="QQ2-1-95">subfigure
11.1.31 tabularx +href="#x1-9600011.1.31" id="QQ2-1-96">titleref
11.1.32 titlesec +href="#x1-9700011.1.32" id="QQ2-1-97">tabularx
11.1.33 ucs/utf8x.def +href="#x1-9800011.1.33" id="QQ2-1-98">titlesec
11.1.34 varioref +href="#x1-9900011.1.34" id="QQ2-1-99">ucs/utf8x.def
11.1.35 verse +href="#x1-10000011.1.35" id="QQ2-1-100">varioref
11.1.36 vietnam +href="#x1-10100011.1.36" id="QQ2-1-101">verse
11.1.37 XeTeX +href="#x1-10200011.1.37" id="QQ2-1-102">vietnam +
11.1.38 XeTeX
12 Limitations +href="#x1-10400012" id="QQ2-1-104">Limitations
12.1 Wrapped/broken link support +href="#x1-10500012.1" id="QQ2-1-105">Wrapped/broken link support
12.2 Links across pages +href="#x1-10600012.2" id="QQ2-1-106">Links across pages
12.3 Footnotes +href="#x1-10700012.3" id="QQ2-1-107">Footnotes
13 Hints +href="#x1-10800013" id="QQ2-1-108">Hints
13.1 Spaces in option values +href="#x1-10900013.1" id="QQ2-1-109">Spaces in option values
13.2 Index with makeindex +href="#x1-11000013.2" id="QQ2-1-110">Index with makeindex
13.3 Warning Warning "bookmark level for unknown <foobar> defaults to 0"
13.4 Link anchors in figures +href="#x1-11200013.4" id="QQ2-1-112">Link anchors in figures
13.5 Additional unicode characters in bookmarks and pdf information entries: +href="#x1-11300013.5" id="QQ2-1-113">Additional unicode characters in bookmarks and pdf information entries:
13.6 Footnotes +href="#x1-11400013.6" id="QQ2-1-114">Footnotes
13.7 Subordinate counters +href="#x1-11500013.7" id="QQ2-1-115">Subordinate counters
14 History and acknowledgments +href="#x1-11600014" id="QQ2-1-116">History and acknowledgments
15 GNU Free Documentation License +href="#x1-11700015" id="QQ2-1-117">GNU Free Documentation License
15.1 Applicability and definitions +href="#x1-11900015.1" id="QQ2-1-119">Applicability and definitions
15.2 Verbatim copying +href="#x1-12000015.2" id="QQ2-1-120">Verbatim copying
15.3 Copying in quantity +href="#x1-12100015.3" id="QQ2-1-121">Copying in quantity
15.4 Modifications +href="#x1-12200015.4" id="QQ2-1-122">Modifications
15.5 Combining documents +href="#x1-12300015.5" id="QQ2-1-123">Combining documents
15.6 Collections of documents +href="#x1-12400015.6" id="QQ2-1-124">Collections of documents
15.7 Aggregation with independent works +href="#x1-12500015.7" id="QQ2-1-125">Aggregation with independent works
15.8 Translation +href="#x1-12600015.8" id="QQ2-1-126">Translation
15.9 Termination +href="#x1-12700015.9" id="QQ2-1-127">Termination
15.10 Future revisions of this license +href="#x1-12800015.10" id="QQ2-1-128">Future revisions of this license

1 hyperref has a long history and has seen many changes over time. The introduction mentions workflows, drivers and problems that are no longer (or only in edge cases) relevant. The documentation reflects this varied history: changes and extensions and explanations were and are spread over various papers and sources or have -been incorporated later and so are not always in a coherent order and in sync which each +been incorporated later and so are not always in a coherent order and in sync which each other.

This history is continuing: If you are using the new LATEX PDF management which is currently distributed as a testphase package }

A base URL is established, which is prepended to other specified URLs, to make it easier to write -portable documents. -

URL is written +into the catalog. +

}{text}
-

The link to the image referenced by the URL is inserted, using

The link to the image referenced by the URL is inserted, using text as the anchor. -

For drivers that produce HTML, the image itself is inserted by the browser, with the

For drivers that produce HTML, the image itself is inserted by the browser, with the text being ignored completely. -

}{text}
-

A target area of the document (the

A target area of the document (the text) is marked, and given the name category.name -

}{text}
-

text is made into a link to URL#category.name -

]{text}
-

text is made into a link to the same place as \ref{label} would be linked. -

}{text}
-

}{text}
-

A simple internal link is created with

A simple internal link is created with \hypertarget, with two parameters of an anchor name, and anchor \hyperlink has two arguments, the name class="ec-lmvtt-10">\hypertarget, and the text which be used as the link on the page. -

Note that in HTML parlance, the

Note that in HTML parlance, the \hyperlink command inserts a notional # in front of each link, making it relative to the current testdocument; \href expects a full URL. -

\phantomsection
-

This sets an anchor at this location. It works similar to

This sets an anchor at this location. It works similar to \hypertarget{}{} with an automatically chosen anchor name. Often it is used in conjunction with \addcontentsline for sectionlike things (index, @@ -4563,10 +4567,10 @@ Example: \addcontentsline{toc}{chapter}{\indexname} \printindex -

-

Now the entry in the table of contents (and bookmarks) for the index points to the start of the index page, +

+

Now the entry in the table of contents (and bookmarks) for the index points to the start of the index page, not to a location before this page. -

}{label}
-

This retrieves the anchor or the page anchor from a label in an expandable way. It takes +

This retrieves the anchor or the page anchor from a label in an expandable way. It takes \HyperDestNameFilter into account. It can e.g. be used with the \bookmark from the bookmark @@ -4595,12 +4599,12 @@ package to set a destination to a label:

 \bookmark[dest=\hyperget{anchor}{sec}]{section}
 
-

-

As

+

As pageanchor retrieves the page number from the label it can’t be use together with the option plainpages. -

{currentanchor}{}
-

This retrieves the last anchor that has been set. It too takes

This retrieves the last anchor that has been set. It too takes \HyperDestNameFilter into account. -

\autoref class="ec-lmvtt-10">{label}
-

This is a replacement for the usual

This is a replacement for the usual \ref command that places a contextual label in front of the reference. This gives your users a bigger target to click for hyperlinks (e.g. ‘section 2’ instead of merely the number ‘2’). -

The label is worked out from the context of the original

The label is worked out from the context of the original \label command by hyperref by using the macros listed below (shown with their default values). The macros can be (re)defined in documents using @@ -4636,16 +4640,16 @@ macros listed below (shown with their default values). The macros can be (re)def class="ec-lmvtt-10">\(re)newcommand; note that some of these macros are already defined in the standard document classes. The mixture of lowercase and uppercase initial letters is deliberate and corresponds to the author’s practice. -

For each macro below,

For each macro below, hyperref checks \*autorefname before \*name. For instance, it looks for \figureautorefname before \figurename. -

+

class="td01">Macro +

Figure

+

Table

+

Part

+

Appendix

+

Equation

+

item

+

chapter

+

section

+

subsection

+

subsubsection

+

paragraph

+

footnote

class="td01">\AMSname +

Equation

+

Theorem

+

page

@@ -4766,7 +4770,7 @@ class="td01"> class="td01">
-

Default

\figurename -

Figure

\tablename -

Table

\partname -

Part

\appendixname -

Appendix

\equationname -

Equation

\Itemname -

item

\chaptername -

chapter

\sectionname -

section

\subsectionname -

subsection

\subsubsectionname -

subsubsection

\paragraphname -

paragraph

\Hfootnotename -

footnote

-

Equation

\theoremname -

Theorem

\page -

page

-

Example for a redefinition if

Example for a redefinition if babel is used:

@@ -4777,8 +4781,8 @@ class="ec-lmss-10">babel is used:   \def\subsectionautorefname{Unterkapitel}% } -

-

Hint:

+

Hint: \autoref works via the counter name that the reference is based on. Sometimes \autoref chooses the wrong name, if the counter is used for different things. For example, it happens with @@ -4818,8 +4822,8 @@ We will use \autoref{a} to prove \auto \end{document} -

-

+

{label}
-

It replaces

It replaces \pageref and adds the name for page in front of the page reference. First \pageautorefname is checked before \pagename. -

For instances where you want a reference to use the correct counter, but not to create a +

For instances where you want a reference to use the correct counter, but not to create a link, there are starred forms (these starred forms exist even if hyperref has been loaded with implicit=false): -

\ref*{label}
-

{label}
-

\autoref*{label}
-

{label}
-

A typical use would be to write +

A typical use would be to write

 \hyperref[other]{that nice section (\ref*{other}) we read before}
 
-

-

We want

+

We want \ref*{other} to generate the correct number, but not to form a link, since we do this ourselves with \hyperref. -

}{TeXstring}
-

\pdfstringdef returns a macro containing the PDF string. (Currently this is done globally, but do not rely on it.) All the following tasks, definitions and redefinitions are made in a group to keep them local:

  • -

    Switching to PD1 or PU encoding +

    Switching to PD1 or PU encoding

  • -

    Defining the “octal sequence commands” (

    Defining the “octal sequence commands” (\345): \edef\3{\string\3}

  • -

    Special glyphs of TeX:

    Special glyphs of TeX: \{, \%, \&, \space, \dots, etc.

  • -

    National glyphs (

    National glyphs (german.sty, french.sty, etc.)

  • -

    Logos:

    Logos: \TeX, \eTeX, \MF, etc.

  • -

    Disabling commands that do not provide useful functionality in bookmarks:

    Disabling commands that do not provide useful functionality in bookmarks: \label, \index, \def, \let, etc.

  • -

    LaTeX’s font commands like

    LaTeX’s font commands like \textbf, etc.

  • -

    Support for

    Support for \xspace provided by the xspace package

-

In addition, parentheses are protected to avoid the danger of unsafe unbalanced parentheses in +

In addition, parentheses are protected to avoid the danger of unsafe unbalanced parentheses in the PDF string. For further details, see Heiko Oberdiek’s EuroTeX paper distributed with hyperref. -

{NoHyper}…\end{NoHyper}
-

Sometimes we just don’t want the wretched package interfering with us. Define an environment we +

Sometimes we just don’t want the wretched package interfering with us. Define an environment we can put in manually, or include in a style file, which stops the hypertext functions doing anything. This is used, for instance, in the Elsevier classes, to stop hyperref playing havoc in the front matter. -

+

6.1 Bookmark macros

-

+

6.1.1 Setting bookmarks
-

Usually

Usually hyperref automatically adds bookmarks for \section and similar macros. But they can also set manually. -

}{name}
-

creates a bookmark with the specified text and at the given level (default is 0). As name for the +

creates a bookmark with the specified text and at the given level (default is 0). As name for the internal anchor name is used (in conjunction with level). Therefore the name must be unique (similar to \label). -

}{name}
-

creates a bookmark at the current level. -

creates a bookmark at the current level. +

}{name}
-

creates a bookmark one step down in the bookmark hierarchy. Internally the current level is increased +

creates a bookmark one step down in the bookmark hierarchy. Internally the current level is increased by one. -

}{name}
-

creates a bookmark below the current bookmark level. However after the command the current +

creates a bookmark below the current bookmark level. However after the command the current bookmark level has not changed. -

Hint: Package bookmark replaces hyperref’s bookmark organization by a new algorithm:

  • -

    Usually only one LaTeX run is needed. +

    Usually only one LaTeX run is needed.

  • -

    More control over the bookmark appearance (color, font). +

    More control over the bookmark appearance (color, font).

  • -

    Different bookmark actions are supported (external file links, URLs, …).

-

Therefore I recommend using this package. -

+

Different bookmark actions are supported (external file links, URLs, …). +

Therefore I recommend using this package. +

6.1.2 Replacement macros
-

hyperref takes the text for bookmarks from the arguments of commands like \section, which can contain things like math, colors, or font changes, none of which will display in bookmarks as is. -

}{PDFstring}
-

For example, +

For example,

@@ -5100,8 +5104,8 @@ class="ec-lmvtt-10">}  
 }
 \section{\texorpdfstring{\textcolor{red}}{}{Red} Mars}
 
-

-

+

\pdfstringdef executes the hook before it expands the string. Therefore, you can use this hook to perform additional tasks or to disable additional commands. @@ -5113,8 +5117,8 @@ perform additional tasks or to disable additional commands.   \renewcommand{\mycommand}[1]{}% } -

-

However, for disabling commands, an easier way is via

+

However, for disabling commands, an easier way is via \pdfstringdefDisableCommands, which adds its argument to the definition of \pdfstringdefPreHook (‘@’ can here be used as letter in command @@ -5128,11 +5132,11 @@ names):   \let\textcolor\@gobble } -

-

+

+

6.2 Pagelabels

-

{page number format}
-

This allows to change format of the page number shown in the tool bar of a PDF viewer for a specific +

This allows to change format of the page number shown in the tool bar of a PDF viewer for a specific page, for example -

\thispdfpagelabel{Empty Page-\roman{page}} -

The command affects the page on which it is executed, so asynchronous page breaking should be +

The command affects the page on which it is executed, so asynchronous page breaking should be taken into account. It should be used in places where for example \thispagestyle can be use too. -

+

6.3 Utility macros

-

{dimen specification}
-

\hypercalcbp takes a TeX dimen specification and converts it to bp and returns the number without the unit. This is useful for options pdfview, -

-

The origin of the PDF coordinate system is the lower left corner. -

Note, for calculations you need either package

+

The origin of the PDF coordinate system is the lower left corner. +

Note, for calculations you need either package calc or ε-TEX. Nowadays the latter should automatically be enabled for LATEX formats. Users without ε-TEX, please, look in the source documentation hyperref.dtx for further limitations. -

Also

Also \hypercalcbp cannot be used in option specifications of \documentclass and \usepackage, because LATEX expands the option lists of these commands. However package hyperref is not yet loaded and an undefined control sequence error would arise. -

+

7 New Features5

7.1 Option ‘pdflinkmargin’

-

Option ‘pdflinkmargin’ is an experimental option for specifying a link margin, if the driver supports this. +

Option ‘pdflinkmargin’ is an experimental option for specifying a link margin, if the driver supports this. Default is 1 pt for supporting drivers. -

+

pdfTeX
-

+

  • -

    The link area also depends on the surrounding box. +

    The link area also depends on the surrounding box.

  • -

    Settings have local effect. +

    Settings have local effect.

  • -

    When a page is shipped out, pdfTeX uses the current setting of the link margin for all +

    When a page is shipped out, pdfTeX uses the current setting of the link margin for all links on the page.

pdfmark
-

+

  • -

    Settings have global effect.

+

Settings have global effect.

xetex
-

+

  • -

    Settings must be done in the preamble or the first page and then have global effect. +

    Settings must be done in the preamble or the first page and then have global effect. The key inserts the new (x)dvipdfmx special \special{dvipdfmx:config g #1} (with Other drivers

    -

    Unsupported.

-

+

Unsupported. +

7.2 Field option ‘calculatesortkey’

-

Fields with calculated values are calculated in document order by default. If calculated field values +

Fields with calculated values are calculated in document order by default. If calculated field values depend on other calculated fields that appear later in the document, then the correct calculation order can be specified with option ‘calculatesortkey’. Its value is used as key to lexicographically sort the calculated fields. The sort key do not need to be unique. Fields that share the same key are sorted in document order. -

Currently the field option ‘calculatesortkey’ is only supported by the driver for pdfTeX. -

+

Currently the field option ‘calculatesortkey’ is only supported by the driver for pdfTeX. +

7.3 Option ‘next-anchor’

-

This option allows to overwrite the anchor name of the next anchor. This makes it possible to give for +

This option allows to overwrite the anchor name of the next anchor. This makes it possible to give for example the heading of the table of contents an anchor name which can be referenced with a \bookmark command from the bookmark package: @@ -5274,14 +5278,14 @@ command from the bookmark package: \tableofcontents \bookmark[dest=\HyperDestNameFilter{toc},level=section]{\contentsname} -

-

+

+

7.4 Option ‘localanchorname’

-

WhenDeprecated 2022-04-27 v7.00o an anchor is set (e.g. via

WhenDeprecated 2022-04-27 v7.00o an anchor is set (e.g. via \refstepcounter, then the anchor name is globally set to the current anchor name. -

For example: +

For example:

@@ -5289,28 +5293,28 @@ globally set to the current anchor name.
     \begin{equation}\end{equation}
     \label{sec:foobar}
 
-

With the default global setting (localanchorname=false) a reference to ‘sec:foobar’ jumps to the +

With the default global setting (localanchorname=false) a reference to ‘sec:foobar’ jumps to the equation before. With option ‘localanchorname’ the anchor of the equation is forgotten after the environment and the reference ‘sec:foobar’ jumps to the section title. -

Option ‘localanchorname’ is an experimental option, there might be situations, where the anchor +

Option ‘localanchorname’ is an experimental option, there might be situations, where the anchor name is not available as expected. -

The option is deprecated: it makes it difficult for package authors to add targets for links if it is +

The option is deprecated: it makes it difficult for package authors to add targets for links if it is unclear if \@currentHref is set locally or globally. -

+

7.5 Option ‘customdriver’

-

The value of option ‘customdriver’ is the name of an external driver file without extension ‘.def’. The file +

The value of option ‘customdriver’ is the name of an external driver file without extension ‘.def’. The file must have \ProvidesFile with a version date and number that match the date and number of ‘hyperref’, otherwise a warning is given. -

Because the interface, what needs to be defined in the driver, is not well defined and +

Because the interface, what needs to be defined in the driver, is not well defined and quite messy, the option is mainly intended to ease developing, testing, debugging the driver part. -

+

7.6 Option ‘psdextra’

-

LaTeX’s NFSS is used to assist the conversion of arbitrary TeX strings to PDF strings (bookmarks, PDF +

LaTeX’s NFSS is used to assist the conversion of arbitrary TeX strings to PDF strings (bookmarks, PDF information entries). Many math command names (\geq, \notin, ...) are not in control of NFSS, @@ -5324,17 +5328,17 @@ on means that the short names are available. Then \geq can directly be used instead of \textgeq. -

+

7.7 \XeTeXLinkBox

-

When XeTeX generates a link annotation, it does not look at the boxes (as the other drivers), but only +

When XeTeX generates a link annotation, it does not look at the boxes (as the other drivers), but only at the character glyphs. If there are no glyphs (images, rules, ...), then it does not generate a link annotation. Macro \XeTeXLinkBox puts its argument in a box and adds spaces at the lower left and upper right corners. An additional margin can be specified by setting it to the dimen register \XeTeXLinkMargin. The default is 2pt. -

Example: +

Example:

@@ -5351,8 +5355,8 @@ class="ec-lmvtt-10">\XeTeXLinkMargin. The default is 2pt.
     }
     \end{document}
 
-

-

+

+

7.8 \IfHyperBooleanExists and \IfHyperBoolean

@@ -5360,7 +5364,7 @@ class="ec-lmvtt-10">\XeTeXLinkMargin. The default is 2pt.
  \IfHyperBooleanExists{OPTION}{YES}{NO}
 
-

If a

If a hyperref OPTION is a boolean, that means it takes values ‘true’ or ‘false’, then \IfHyperBooleanExists calls YES, otherwise NO. @@ -5369,25 +5373,25 @@ calls YES, otherwise NO.

  \IfHyperBoolean{OPTION}{YES}{NO}
 
-

Macro

Macro \IfHyperBoolean calls YES, if OPTION exists as boolean and is enabled. Otherwise NO is executed. -

Both macros are expandable. Additionally option ‘stoppedearly’ is available. It is enabled if +

Both macros are expandable. Additionally option ‘stoppedearly’ is available. It is enabled if \MaybeStopEarly or \MaybeStopNow end hyperref prematurely. -

+

7.9 \unichar

-

If a Unicode character is not supported by puenc.def, it can be given by using

If a Unicode character is not supported by puenc.def, it can be given by using \unichar. Its name and syntax is inherited from package ‘ucs’. However it is defined independently for use in hyperref’s \pdfstringdef (that converts arbitrary TeX code to PDF strings or tries to do this). -

Macro

Macro \unichar takes a TeX number as argument, examples for U+263A (WHITE SMILING FACE): @@ -5396,7 +5400,7 @@ FACE):     \unichar{"263A}% hexadecimal notation     \unichar{9786}% decimal notation -

‘"’ must not be a babel shorthand character or otherwise active. Otherwise prefix it with +

‘"’ must not be a babel shorthand character or otherwise active. Otherwise prefix it with \string: @@ -5404,18 +5408,18 @@ class="ec-lmvtt-10">\string:

     \unichar{\string"263A}% converts ‘"’ to ‘"’ with catcode 12 (other)
 
-

Users of (n)german packages or babel options may use

Users of (n)german packages or babel options may use \dq instead:

     \unichar{\dq 263A}% \dq is double quote with catcode 12 (other)
 
-

-

+

+

7.10 \ifpdfstringunicode

-

Some features of the PDF specification needs PDF strings. Examples are bookmarks or the entries in the +

Some features of the PDF specification needs PDF strings. Examples are bookmarks or the entries in the information dictionary. The PDF specification allows two encodings ‘PDFDocEncoding’ (8-bit encoding) and ‘Unicode’ (UTF-16). The user can help using \texorpdfstring to replace complicate TeX constructs @@ -5426,7 +5430,7 @@ class="ec-lmvtt-10">\ifpdfstringunicode. It is only allowed class="ec-lmvtt-10">\texorpdfstring and takes two arguments, the first allows the full range of Unicode. The second is limited to the characters available in PDFDocEncoding. -

As example we take a macro definition for the Vietnamese name of Hàn Thế Thành. Correctly written +

As example we take a macro definition for the Vietnamese name of Hàn Thế Thành. Correctly written it needs some accented characters, one character even with a double accent. Class ‘tugboat.cls’ defines a macro for the typesetted name: @@ -5438,9 +5442,9 @@ macro for the typesetted name:       ~Th\‘anh%     } -

It’s not entirely correct, the second accent over the ‘e’ is not an acute, but a hook. However standard +

It’s not entirely correct, the second accent over the ‘e’ is not an acute, but a hook. However standard LaTeX does not provide such an accent. -

Now we can extend the definition to support

Now we can extend the definition to support hyperref. The first and the last word are already supported automatically. Characters with two or more accents are a difficult business in LaTeX, because the NFSS2 macros of the LaTeX kernel do not support more than one accent. Therefore also puenc.def @@ -5452,7 +5456,7 @@ is:

     % U+1EC3 LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
 
-

Thus we can put this together: +

Thus we can put this together:

@@ -5463,7 +5467,7 @@ is:
       ~Th\‘anh%
     }
 
-

For PDFDocEncoding (PD1) the variant above has dropped the second accent. Alternatively we could +

For PDFDocEncoding (PD1) the variant above has dropped the second accent. Alternatively we could provide a representation without accents instead of wrong accents: @@ -5482,12 +5486,12 @@ provide a representation without accents instead of wrong accents:       }%     } -

-

+

+

7.11 Customizing index style file with \nohyperpage

-

Since version 2008/08/14 v6.78f. -

For hyperlink support in the index,

Since version 2008/08/14 v6.78f. +

For hyperlink support in the index, hyperref inserts \hyperpage into the index macros. After processing with Makeindex, -

(See manual page/documentation of Makeindex that explains the keys that can be used in style files for +

(See manual page/documentation of Makeindex that explains the keys that can be used in style files for Makeindex.) Customized versions of delim_r, delim_n, -

(Depending on the typesetting tradition some space “

(Depending on the typesetting tradition some space “\\,” or “~” should be put before the first f inside \nohyperpage.) -

+

7.12 Experimental option ‘ocgcolorlinks’

-

The idea are colored links, when viewed, but printed without colors. This new experimental option +

The idea are colored links, when viewed, but printed without colors. This new experimental option ‘ocgcolorlinks’ uses Optional Content Groups, a feature introduced in PDF 1.5. -

A better implementation which hasn’t the disadvantage to prevent line breaks is in the ocgx2 +

A better implementation which hasn’t the disadvantage to prevent line breaks is in the ocgx2 package. Check its documentation for details how to use it.

  • -

    The option must be given for package loading:

    The option must be given for package loading: \usepackage[ocgcolorlinks]{hyperref}

  • -

    Main disadvantage: Links cannot be broken across lines. PDF reference 1.7: 4.10.2 “Making +

    Main disadvantage: Links cannot be broken across lines. PDF reference 1.7: 4.10.2 “Making Graphical Content Optional”: Graphics state operations, such as setting the color, ..., are still applied. Therefore the link text is put in a box and set twice, with and without color.

  • -

    The feature can be switched of by

    The feature can be switched of by \hypersetup{ocgcolorlinks=false} inside the document.

  • -

    Supported drivers: pdftex, dvipdfm +

    Supported drivers: pdftex, dvipdfm

  • -

    The PDF version should be at least 1.5. It is automatically set for pdfTeX, LuaTeX and +

    The PDF version should be at least 1.5. It is automatically set for pdfTeX, LuaTeX and dvipdfmx.

-

+

7.13 Option ‘pdfa’

-

The new option ‘pdfa’ tries to avoid violations of PDF/A in code generated by

The new option ‘pdfa’ tries to avoid violations of PDF/A in code generated by hyperref. However, the result is usually not in PDF/A, because many features aren’t controlled by hyperref (XMP metadata, fonts, colors, driver dependend low level stuff, ...). -

Currently, option ‘pdfa’ sets and disables the following items: +

Currently, option ‘pdfa’ sets and disables the following items:

  • -

    Enabled annotation flags: Print, NoZoom, NoRotate [PDF/A 6.5.3]. +

    Enabled annotation flags: Print, NoZoom, NoRotate [PDF/A 6.5.3].

  • -

    Disabled annotation flags: Hidden, Invisible, NoView [PDF/A 6.5.3]. +

    Disabled annotation flags: Hidden, Invisible, NoView [PDF/A 6.5.3].

  • -

    Disabled: Launch action (

    Disabled: Launch action ([PDF/A 6.6.1].

  • -

    Restricted: Named actions (NextPage, PrevPage, FirstPage, LastPage) [PDF/A 6.6.1]. +

    Restricted: Named actions (NextPage, PrevPage, FirstPage, LastPage) [PDF/A 6.6.1].

  • -

    Many things are disabled in PDF formulars: +

    Many things are disabled in PDF formulars:

    • -

      JavaScript actions [PDF/A 6.6.1] +

      JavaScript actions [PDF/A 6.6.1]

    • -

      Trigger events (additional actions) [PDF/A 6.6.2] +

      Trigger events (additional actions) [PDF/A 6.6.2]

    • -

      Push button (because of JavaScript) +

      Push button (because of JavaScript)

    • -

      Interactive Forms: Flag NeedAppearances is the default ‘false’ (Because of this, +

      Interactive Forms: Flag NeedAppearances is the default ‘false’ (Because of this, hyperref’s implementation of Forms looks ugly). [PDF/A 6.9]

-

The default value of the new option ‘pdfa’ is ‘false’. It influences the loading of the package and +

The default value of the new option ‘pdfa’ is ‘false’. It influences the loading of the package and cannot be changed after hyperref is loaded (\usepackage{hyperref}). -

+

7.14 Option ‘linktoc’ added

-

The new option ‘linktoc’ allows more control which part of an entry in the table of contents is made into +

The new option ‘linktoc’ allows more control which part of an entry in the table of contents is made into a link:

  • -

    ‘linktoc=none’ (no links) +

    ‘linktoc=none’ (no links)

  • -

    ‘linktoc=section’ (default behaviour, same as ‘linktocpage=false’) +

    ‘linktoc=section’ (default behaviour, same as ‘linktocpage=false’)

  • -

    ‘linktoc=page’ (same as ‘linktocpage=true’) +

    ‘linktoc=page’ (same as ‘linktocpage=true’)

  • -

    ‘linktoc=all’ (both the section and page part are links)

-

+

‘linktoc=all’ (both the section and page part are links) +

7.15 Option ‘pdfnewwindow’ changed

-

Before 6.77b: +

Before 6.77b:

  • -

    pdfnewwindow=true

    pdfnewwindow=true /NewWindow true

  • -

    pdfnewwindow=false

    pdfnewwindow=false (absent)

  • -

    unused pdfnewwindow

    unused pdfnewwindow (absent)

-

Since 6.77b: +

Since 6.77b:

  • -

    pdfnewwindow=true

    pdfnewwindow=true /NewWindow true

  • -

    pdfnewwindow=false

    pdfnewwindow=false /NewWindow false

  • -

    pdfnewwindow=

    pdfnewwindow= (absent)

  • -

    unused pdfnewwindow

    unused pdfnewwindow (absent)

-

Rationale: There is a difference between setting to ‘false’ and an absent entry. In the former case the +

Rationale: There is a difference between setting to ‘false’ and an absent entry. In the former case the new document replaces the old one, in the latter case the PDF viewer application should respect the user preference. -

+

7.16 Flag options for PDF forms

-

PDF form field macros (

PDF form field macros (\TextField, \CheckBox, ...) support boolean flag options. The option name is the lowercase version of the names in the PDF specification (1.7): -

http://www.adobe.com/devnet/pdf/pdf_reference.html -

http://www.adobe.com/devnet/acrobat/pdfs/pdf_reference.pdf -

Options (convert to lowercase) except flags in square brackets: +

Options (convert to lowercase) except flags in square brackets:

  • -

    Table 8.16 Annotation flags (page 608): -

    +

    Table 8.16 Annotation flags (page 608): +


    1 Invisible
    2 Hidden (PDF 1.2)
    3 Print (PDF 1.2) @@ -5681,23 +5685,23 @@ class="ec-lmvtt-10">http://www.adobe.com/devnet/acrobat/pdfs/pdf_reference.pdf10 LockedContents (PDF 1.7)
  • -

    Table 8.70 Field flags common to all field types (page 676): -

    +

    Table 8.70 Field flags common to all field types (page 676): +


    1 ReadOnly
    2 Required
    3 NoExport
  • -

    Table 8.75 Field flags specific to button fields (page 686): -

    +

    Table 8.75 Field flags specific to button fields (page 686): +


    15 NoToggleToOff (Radio buttons only)
    16 Radio (set: radio buttons, clear: check box, pushbutton: clear)
    17 Pushbutton
    26 RadiosInUniso (PDF 1.5)
  • -

    Table 8.77 Field flags specific to text fields (page 691): -

    +

    Table 8.77 Field flags specific to text fields (page 691): +


    13 Multiline
    14 Password
    21 FileSelect (PDF 1.4) @@ -5708,8 +5712,8 @@ class="ec-lmvtt-10">http://www.adobe.com/devnet/acrobat/pdfs/pdf_reference.pdf
  • -

    Table 8.79 Field flags specific to choice fields (page 693): -

    +

    Table 8.79 Field flags specific to choice fields (page 693): +


    18 Combo (set: combo box, clear: list box)
    19 Edit (only useful if Combo is set)
    20 (Sort) for authoring tools, not PDF viewers @@ -5718,8 +5722,8 @@ class="ec-lmvtt-10">http://www.adobe.com/devnet/acrobat/pdfs/pdf_reference.pdf27 CommitOnSelChange (PDF 1.5)
  • -

    Table 8.86 Flags for submit-form actions (page 704): -

    +

    Table 8.86 Flags for submit-form actions (page 704): +


    [1 Include/Exclude] unsupported, use ‘noexport’ (table 8.70) instead
    2 IncludeNoValueFields
    [3 ExportFormat] handled by option ‘export’ @@ -5734,35 +5738,35 @@ class="ec-lmvtt-10">http://www.adobe.com/devnet/acrobat/pdfs/pdf_reference.pdf12 ExclFKey (PDF 1.4)
    14 EmbedForm (PDF 1.5)
-

New option ‘export’ sets the export format of a submit action. Valid values are (upper- or +

New option ‘export’ sets the export format of a submit action. Valid values are (upper- or lowercase):

  • -

    FDF +

    FDF

  • -

    HTML +

    HTML

  • -

    XFDF +

    XFDF

  • -

    PDF (not supported by Acrobat Reader)

-

+

PDF (not supported by Acrobat Reader) +

7.17 Option ‘pdfversion’

-

This is an experimental option. It notifies ‘hyperref’ about the intended PDF version. Currently this is +

This is an experimental option. It notifies ‘hyperref’ about the intended PDF version. Currently this is used in code for PDF forms (implementation notes 116 and 122 of PDF spec 1.7). -

Values: 1.2, 1.3, 1.4, 1.5, 1.6, 1.7. Values below 1.2 are not supported, because most drivers expect +

Values: 1.2, 1.3, 1.4, 1.5, 1.6, 1.7. Values below 1.2 are not supported, because most drivers expect higher PDF versions. -

The option must be used early, not after

The option must be used early, not after \usepackage{hyperref}. -

In theory this option should also set the PDF version, but this is not generally supported. +

In theory this option should also set the PDF version, but this is not generally supported.

  • -

    pdfTeX below 1.10a: unsupported. pdfTeX

    pdfTeX below 1.10a: unsupported. pdfTeX 1.10a and < 1.30: \pdfoptionpdfminorversion pdfTeX 1.30: \pdfminorversion

  • -

    dvipdfm: configuration file, example: TeX Live 2007, texmf/dvipdfm/config/config, entry ‘V +

    dvipdfm: configuration file, example: TeX Live 2007, texmf/dvipdfm/config/config, entry ‘V 2’.

  • -

    dvipdfmx: configuration file, example: TeX Live 2007, texmf/dvipdfm/dvipdfmx.cfg, entry +

    dvipdfmx: configuration file, example: TeX Live 2007, texmf/dvipdfm/dvipdfmx.cfg, entry ‘V 4’.

  • -

    Ghostscript: option -dCompatibilityLevel (this is set in ‘ps2pdf12’, ‘ps2pdf13’, ‘ps2pdf14’).

-

The current PDF version is used as default if this version can be detected (only pdfTeX

Ghostscript: option -dCompatibilityLevel (this is set in ‘ps2pdf12’, ‘ps2pdf13’, ‘ps2pdf14’). +

The current PDF version is used as default if this version can be detected (only pdfTeX 1.10a). Otherwise the lowest version 1.2 is assumed. Thus ‘hyperref’ tries to avoid PDF code that breaks this version, but is free to use ignorable higher PDF features. -

+

7.18 Field option ‘name’

-

Many form objects uses the label argument for several purposes: +

Many form objects uses the label argument for several purposes:

  • -

    Layouted label. +

    Layouted label.

  • -

    As name in HTML structures.

-

Code that is suitable for layouting with TeX can break in the structures of the output format. If option +

As name in HTML structures. +

Code that is suitable for layouting with TeX can break in the structures of the output format. If option ‘name’ is given, then its value is used as name in the different output structures. Thus the value should consist of letters only. -

+

7.19 Option ‘pdfencoding’

-

The PDF format allows two encodings for bookmarks and entries in the information dictionary: +

The PDF format allows two encodings for bookmarks and entries in the information dictionary: PDFDocEncoding and Unicode as UTF-16BE. Option pdfencoding selects between these encodings:

  • -

    pdfdoc uses PDFDocEncoding. It uses just one byte per character, but the supported characters are limited (244 in PDF-1.7).

  • -

    unicode sets Unicode. It is encoded as UTF-16BE. Two bytes are used for most characters, surrogates need four bytes.

  • -

    auto PDFDocEncoding if the string does not contain characters outside the encoding (outside ascii if an unicode engine is used) and Unicode otherwise. This option is not intended for the unicode engines.

-

All drivers use

All drivers use unicode by default now. If another encoding should be forced, it should be done in hypersetup. -

+

7.20 Color options/package hycolor

-

See documentation of package ‘hycolor’. -

+

See documentation of package ‘hycolor’. +

7.21 Option pdfusetitle

-

If option pdfusetitle is set then

If option pdfusetitle is set then hyperref tries to derive the values for pdftitle and pdfauthor from \title and \author. An optional argument for \title and \author is supported (class amsart). -

+

7.22 Starred form of \autoref

-

\autoref* generates a reference without link as \ref* or \pageref*. -

+

7.23 Link border style

-

Links can be underlined instead of the default rectangle or options

Links can be underlined instead of the default rectangle or options colorlinks, frenchlinks. This is done by option pdfborderstyle={/S/U/W 1} -

Some remarks: +

Some remarks:

  • -

    AR7/Linux seems to have a bug, that don’t use the default value

    AR7/Linux seems to have a bug, that don’t use the default value 1 for the width, but zero, thus that the underline is not visible without /W 1. The same applies for dashed pdfborderstyle=/S/D/D[3 2]/W 1

  • -

    The syntax is described in the PDF specification, look for “border style”, eg. Table 8.13 +

    The syntax is described in the PDF specification, look for “border style”, eg. Table 8.13 “Entries in a border style dictionary” (specification for version 1.6)

  • -

    The border style is removed by pdfborderstyle= This is automatically done if option +

    The border style is removed by pdfborderstyle= This is automatically done if option colorlinks is enabled.

  • -

    Be aware that not all PDF viewers support this feature, not even Acrobat Reader itself: -

    Some support: +

    Be aware that not all PDF viewers support this feature, not even Acrobat Reader itself: +

    Some support:

    • -

      AR7/Linux:

      AR7/Linux: underline and dashed, but the border width must be given.

    • -

      xpdf 3.00:

      xpdf 3.00: underline and dashed

    -

    Unsupported: +

    Unsupported:

    • -

      AR5/Linux +

      AR5/Linux

    • -

      ghostscript 8.50

    +

    ghostscript 8.50

-

+

7.24 Option bookmarksdepth

-

The depth of the bookmarks can be controlled by the new option

The depth of the bookmarks can be controlled by the new option bookmarksdepth. The option acts globally and distinguishes three cases:

  • -

    bookmarksdepth without value Then hyperref uses the current value of counter tocdepth. This @@ -5915,12 +5919,12 @@ class="ec-lmss-10">tocdepth. This

  • -

    bookmarksdepth=<number>, the value is number (also negative): The depth for the bookmarks are set to this number.

  • -

    bookmarksdepth=<name> The <name> is a document division name (part, chapter, ...). It must not start with a digit or minus to avoid mixing up with the number case. Internally hyperref uses @@ -5933,32 +5937,32 @@ class="ec-lmvtt-10">\toclevel@<name>. Example     \hypersetup{bookmarksdepth=4} % same as before     \hypersetup{bookmarksdepth} % counter "tocdepth" is used -

-

+

+

7.25 Option pdfescapeform

-

There are many places where arbitrary strings end up as PS or PDF strings. The PS/PDF strings in +

There are many places where arbitrary strings end up as PS or PDF strings. The PS/PDF strings in parentheses form require the protection of some characters, e.g. unmatched left or right parentheses need escaping or the escape character itself (backslash). Since 2006/02/12 v6.75a the PS/PDF driver should do this automatically. However I assume a problem with compatibility, especially regarding the form part where larger amounts of JavaScript code can be present. It would be a pain to remove all the escaping, because an additional escaping layer can falsify the code. -

Therefore a new option pdfescapeform was introduced: +

Therefore a new option pdfescapeform was introduced:

  • -

    pdfescapeform=false Escaping for the formulars are disabled, this is the compatibility +

    pdfescapeform=false Escaping for the formulars are disabled, this is the compatibility behaviour, therefore this is the default.

  • -

    pdfescapeform=true Then the PS/PDF drivers do all the necessary escaping. This is the +

    pdfescapeform=true Then the PS/PDF drivers do all the necessary escaping. This is the logical choice and the recommended setting. For example, the user writes JavaScript as JavaScript and do not care about escaping characters for PS/PDF output.

-

+

7.26 Default driver setting

-

(hyperref

(hyperref 6.72s) If no driver is given, hyperref tries its best to guess the most suitable driver. Thus it loads hyperref.cfg:

     \providecommand*{\Hy@defaultdriver}{hdvips}
 
-

for dvips, or +

for dvips, or

     \providecommand*{\Hy@defaultdriver}{hypertex}
 
-

for the default behaviour of

for the default behaviour of hyperref. -

See also the new option ‘driverfallback’. -

+

See also the new option ‘driverfallback’. +

7.27 Backref entries

-

Alternative interface for formatting of backref entries, example: +

Alternative interface for formatting of backref entries, example:

@@ -6081,11 +6085,11 @@ class="ec-lmss-10">hyperref.
 
 \end{document}
 
-

-

+

+

7.28 \phantomsection

-

Set an anchor at this location. It is often used in conjunction with

Set an anchor at this location. It is often used in conjunction with \addcontentsline for sectionlike things (index, bibliography, preface). \addcontentsline refers to the latest previous location where an anchor is @@ -6098,13 +6102,13 @@ set.   \addcontentsline{toc}{chapter}{\indexname}   \printindex -

-

Now the entry in the table of contents (and bookmarks) for the index points to the start of the index +

+

Now the entry in the table of contents (and bookmarks) for the index points to the start of the index page, not to a location before this page. -

+

7.29 puenc encoding, puenc-greekbasic.def and puenc-extra.def

-

The

The unicode option loads for the bookmarks puenc.def which contains quite a lot definitions of commands for the bookmarks. As hyperref uses two strategies.

  • -

    A number of command are only defined conditionally: The commands for the cyrillic block +

    A number of command are only defined conditionally: The commands for the cyrillic block if \CYRDZE is defined, greek if \textBeta is defined, and hebrew if \hebdalet is defined. -

    The greek block is in an extra file,

    The greek block is in an extra file, puenc-greekbasic.def, which can be loaded manually if needed.

  • -

    Other commands are moved to an extra file

    Other commands are moved to an extra file puenc-extra.def which is not loaded automatically, but can be loaded in the preamble if needed. Currently this file contains all definitions for the accent \G.

-

+

8 Acrobat-specific behavior

-

If you want to access the menu options of Acrobat Reader or Exchange, the following macro is provided +

If you want to access the menu options of Acrobat Reader or Exchange, the following macro is provided in the appropriate drivers: -

}{text}
-

The

The text is used to create a button which activates the appropriate menuoption. The following table lists the option names you can use—comparison of this with the menus in Acrobat Reader or Exchange will show what they do. Obviously some are only appropriate to Exchange. -

+

-

style="vertical-align:baseline;" id="TBL-45-1-"> class="td01">FileExport +

Properties

@@ -6249,7 +6253,7 @@ class="td10"> style="vertical-align:baseline;" id="TBL-45-9-"> +

About

@@ -6364,18 +6368,18 @@ class="td01"> class="td01">
File -

Open, +

Open, Close, Scan, Save, @@ -6181,7 +6185,7 @@ class="td10"> class="td01">FileImport

-

ImportImage, +

ImportImage, ImportNotes, AcroForm:ImportFDF

-

ExportNotes, +

ExportNotes, AcroForm:ExportFDF

FileDocumentInfo -

GeneralInfo, +

GeneralInfo, OpenInfo, FontsInfo, SecurityInfo, @@ -6207,7 +6211,7 @@ class="td10"> class="td01">FilePreferences

-

GeneralPrefs, +

GeneralPrefs, NotePrefs, FullScreenPrefs, Weblink:Prefs, @@ -6219,7 +6223,7 @@ class="td10"> style="vertical-align:baseline;" id="TBL-45-6-">

Edit -

Undo, +

Undo, Cut, Copy, Paste, @@ -6235,13 +6239,13 @@ class="td10"> style="vertical-align:baseline;" id="TBL-45-7-">

-

Properties

EditFields -

AcroForm:Duplicate, +

AcroForm:Duplicate, AcroForm:TabOrder

Document -

Cpt:CapturePages, +

Cpt:CapturePages, AcroForm:Actions, CropPages, RotatePages, @@ -6265,7 +6269,7 @@ class="td10"> style="vertical-align:baseline;" id="TBL-45-10-">

View -

ActualSize, +

ActualSize, FitVisible, FitWidth, FitPage, @@ -6289,7 +6293,7 @@ class="td10"> style="vertical-align:baseline;" id="TBL-45-11-">

Tools -

Hand, +

Hand, ZoomIn, ZoomOut, SelectText, @@ -6311,7 +6315,7 @@ class="td10"> class="td01">ToolsSearch

-

AcroSrch:Query, +

AcroSrch:Query, AcroSrch:Indexes, AcroSrch:Results, AcroSrch:Assist, @@ -6323,7 +6327,7 @@ class="td10"> style="vertical-align:baseline;" id="TBL-45-13-">

Window -

ShowHideToolBar, +

ShowHideToolBar, ShowHideMenuBar, ShowHideClipboard, Cascade, @@ -6334,7 +6338,7 @@ class="td10"> style="vertical-align:baseline;" id="TBL-45-14-">

Help -

HelpUserGuide, +

HelpUserGuide, HelpTutorial, HelpExchange, HelpScan, @@ -6349,7 +6353,7 @@ class="td10"> style="vertical-align:baseline;" id="TBL-45-15-">

Help(Windows) -

About

-

+

9 PDF and HTML forms

-

You must put your fields inside a

You must put your fields inside a Form environment. The environment does some general setups, so should be used only once in a document. Using simply \Form at the begin of the document is possible too. -

There are six macros to prepare fields: +

There are six macros to prepare fields: -

]{label}
-

]{label}
-

}{choices}
-

]{label}
-

]{label}
-

]{label}
-

The way forms and their labels are laid out is determined by: -

The way forms and their labels are laid out is determined by: +

}{field}
-

}{field}
-

}{field}
-

These macros default to #1 #2 -

What is actually shown in the field is determined by: -

These macros default to #1 #2 +

What is actually shown in the field is determined by: +

}{height}
-

}{height}
-

}{height}
-

}{height}
-

\MakeButtonField{text}
-

These macros default to

These macros default to \vbox to #2{\hbox #1{\hfill}\vfill}, except the l to #1; it is used for buttons, and the special \Submit and \Reset macros. -

You may also want to redefine the following macros: +

You may also want to redefine the following macros:

@@ -6584,13 +6588,13 @@ class="ec-lmvtt-10">\Reset macros.
 \def\DefaultHeightofTextMultiline{4\baselineskip}
 \def\DefaultWidthofText{3cm}
 
-

-

+

+

9.1 Forms environment parameters

-

+

action encoding method @@ -6645,16 +6649,16 @@ class="td01">
URL -

The URL that will receive the form data if a

The URL that will receive the form data if a Submit button is included in the form

name -

The encoding for the string set to the URL; FDF-encoding +

The encoding for the string set to the URL; FDF-encoding is usual, and html is the only valid value

name -

Used only when generating HTML; values can be

Used only when generating HTML; values can be post or get

-

+

9.2 Forms optional parameters

-

Note that all colors must be expressed as RGB triples, in the range 0..1 (i.e. 

Note that all colors must be expressed as RGB triples, in the range 0..1 (i.e. color=0 0 0.5) -

+

-

+

10 Defining a new driver

-

A

A hyperref driver has to provide definitions for eight macros: -

1.

1. \hyper@anchor -

2.

2. \hyper@link -

3.

3. \hyper@linkfile -

4.

4. \hyper@linkurl -

5.

5. \hyper@anchorstart -

6.

6. \hyper@anchorend -

7.

7. \hyper@linkstart -

8.

8. \hyper@linkend -

The draft option defines the macros as follows +

The draft option defines the macros as follows

@@ -7149,17 +7153,17 @@ class="ec-lmvtt-10">\hyper@linkend
 \let\hyper@linkstart\@gobbletwo
 \let\hyper@linkend\@empty
 
-

-

+

+

11 Special support for other packages

-

Package

Package hyperref aims to cooperate with other packages, but while the long term goal is to remove patches and to move link support into the kernel, classes and packages there are still several possible sources for conflict, such as

  • -

    Packages that manipulate the bibliographic mechanism. Peter William’s

    Packages that manipulate the bibliographic mechanism. Peter William’s harvard package is supported. However, the recommended package is either Patrick Daly’s natbib package @@ -7171,7 +7175,7 @@ class="ec-lmss-10">biblatex package. Both class="ec-lmss-10">hyperref.

  • -

    Packages that changes

    Packages that changes \label and \ref macros. Since LaTeX 2023-06-01 the kernel and \label has a hook for external packages. There should be no need for external packages and classes to redefine them.

  • -

    Packages that do anything serious with the index. +

    Packages that do anything serious with the index.

  • -

    Packages that do anything serious with sectioning commands and the toc.

-

The

Packages that do anything serious with sectioning commands and the toc. +

The hyperref package is distributed with a variant of the xr, \ref mechanisms.

11.1 Package Compatibility

-

Currently only package loading orders are available: -

+

Currently only package loading orders are available: +

11.1.1 algorithm
@@ -7211,11 +7215,11 @@ class="ec-lmvtt-10">\ref mechanisms.   \usepackage{hyperref}   \usepackage[chapter]{algorithm}% eg. -

-

+

+

11.1.2 amsmath
-

The environments equation and eqnarray are not supported too well. For example, there might be +

The environments equation and eqnarray are not supported too well. For example, there might be spacing problems (eqnarray isn’t recommended anyway, see CTAN:info/l2tabu/, the situation for equation is unclear, because nobody is interested in investigating). Consider using the environments that package amsmath provide, e.g. gather for equation. The environment equation can even redefined to use @@ -7227,11 +7231,11 @@ gather:   \let\equation\gather   \let\endequation\endgather -

-

+

+

11.1.3 amsrefs
-

The documentation of

The documentation of amsrefs claims that the package must be loaded after hyperref (it is unclear if that is really true) so the recommended package loading order is: @@ -7241,11 +7245,11 @@ is really true) so the recommended package loading order is:   \usepackage{hyperref}   \usepackage{amsrefs} -

-

+

+

11.1.4 arydshln, longtable
-

Package

Package longtable must be put before hyperref and arydshln, -

-

+

+

11.1.5 babel/magyar.ldf
-

The old version 2005/03/30 v1.4j will not work. You need at least version 1.5, maintained by Péter +

The old version 2005/03/30 v1.4j will not work. You need at least version 1.5, maintained by Péter Szabó, see CTAN:language/hungarian/babel/. -

+

11.1.6 babel/spanish.ldf
-

Babel’s spanish.ldf redefines ‘

Babel’s spanish.ldf redefines ‘\.’ to support ‘\...’. In bookmarks (\pdfstringdef) only ‘\.’ is supported. If ‘\...’ is needed, \texorpdfstring{\...}{\dots} can be used instead. -

+

11.1.7 bibentry
-

Workaround: +

Workaround:

@@ -7298,20 +7302,20 @@ class="ec-lmvtt-10">\texorpdfstring{\...}{\dots} can be use
     \nobibliography{database}
   \endgroup
 
-

-

+

+

11.1.8 bigfoot
-

hyperref does not support package bigfoot. And package bigfoot does not support hyperref’s footnotes and disables them (hyperfootnotes=false). -

+

11.1.9 chappg
-

Package

Package chappg uses \@addtoreset that is redefined by hyperref. The package order is therefore: @@ -7321,11 +7325,11 @@ class="ec-lmss-10">hyperref. The package order is therefore:   \usepackage{hyperref}   \usepackage{chappg} -

-

+

+

11.1.10 count1to
-

Package ‘count1to’ adds several

Package ‘count1to’ adds several \@addtoreset commands that confuse ‘hyperref’. Therefore \theH<...> has to be fixed: @@ -7341,27 +7345,27 @@ has to be fixed:     \renewcommand*{\theHsubparagraph}{\theHparagraph.\arabic{subparagraph}}%   } -

-

+

+

11.1.11 dblaccnt
-

pd1enc.def or puenc.def should be loaded before: +

pd1enc.def or puenc.def should be loaded before:

   \usepackage{hyperref}
   \usepackage{dblaccnt}
 
-

or see entry for

or see entry for vietnam. -

+

11.1.12 easyeqn
-

Not compatible, breaks. -

+

Not compatible, breaks. +

11.1.13 ellipsis
-

This packages redefines

This packages redefines \textellipsis after package hyperref (pd1enc.def/puenc.def should be loaded before): @@ -7371,10 +7375,10 @@ before):   \usepackage{hyperref}   \usepackage{ellipsis} -

-

(this will lead to wrong ellipsis in the bookmarks, so

+

(this will lead to wrong ellipsis in the bookmarks, so \texorpdfstring is needed). -

+

11.1.14 float
@@ -7383,22 +7387,22 @@ class="ec-lmvtt-10">\texorpdfstring is needed).  \usepackage{float}   \usepackage{hyperref} -

+

  • -

    Several

    Several \caption commands are not supported inside one float object.

  • -

    Anchor are set at top of the float object, if its style is controlled by float.sty.

-

+

Anchor are set at top of the float object, if its style is controlled by float.sty. +

11.1.15 endnotes
-

Unsupported. -

+

Unsupported. +

11.1.16 foiltex
-

Update to version 2008/01/28 v2.1.4b: Since version 6.77a

Update to version 2008/01/28 v2.1.4b: Since version 6.77a hyperref does not hack into \@begindvi, it uses package ‘atbegshi’ instead, that hooks into hyperref is now obsolete and causes an undefined error message about \@hyperfixhead. This is fixed in FoilTeX 2.1.4b. -

+

11.1.17 footnote
-

This package is not supported, you have to disable

This package is not supported, you have to disable hyperref’s footnote support by using option hyperfootnotes=false. -

+

11.1.18 linguex
@@ -7423,8 +7427,8 @@ class="ec-lmvtt-10">hyperfootnotes=false.  \usepackage{hyperref}   \usepackage{linguex} -

-

+

+

11.1.19 ltabptch
@@ -7434,12 +7438,12 @@ class="ec-lmvtt-10">hyperfootnotes=false.   \usepackage{ltabptch}   \usepackage{hyperref} -

-

+

+

11.1.20 mathenv
-

Unsupported. -

Both

Unsupported. +

Both mathenv and hyperref messes around with environment eqnarray. You can load hyperref to avoid an error message. But \label will not work inside environment eqnarray properly, for example. -

+

11.1.21 minitoc-hyper
-

This package is obsolete, use the up-to-date original package

This package is obsolete, use the up-to-date original package minitoc instead. -

+

11.1.22 multind
@@ -7463,8 +7467,8 @@ class="ec-lmss-10">minitoc instead.  \usepackage{multind}   \usepackage{hyperref} -

-

+

+

11.1.23 natbib
@@ -7473,23 +7477,31 @@ class="ec-lmss-10">minitoc instead.  \usepackage{natbib}   \usepackage{hyperref} -

-

+

+

11.1.24 nomencl
-

Example for introducing links for the page numbers: +

Example for introducing links for the page numbers:

       \renewcommand*{\pagedeclaration}[1]{\unskip, \hyperpage{#1}}
 
-

+

11.1.25 ntheorem-hyper
-

This package is obsolete, use the up-to-date original package ntheorem +

This package is not fully supported. The thref option should not be used at all as it breaks the \label +command. It also not garantied that links to theorems always work properly as the package redefines +many internals and but offers no proper interface for hyperlinks. +

+

11.1.26 ntheorem-hyper
+

This package is obsolete, use the up-to-date original package ntheorem instead. -

For equations the following might work: +

For equations the following might work:

@@ -7499,10 +7511,10 @@ class="ec-lmss-10">ntheorem instead.
     But the mapping from the equation number to the anchor name
     is not available in general.
 
-

-

-

11.1.26 prettyref
+

+

+

11.1.27 prettyref
@@ -7525,30 +7537,30 @@ class="ec-lmss-10">ntheorem instead.
 %%% example for prettyref %%%
       
 
-

-

-

11.1.27 setspace
+

+

+

11.1.28 setspace
  \usepackage{setspace}
   \usepackage{hyperref}
 
-

-

-

11.1.28 sidecap
-

Nothing special is needed anymore. -

+

+

11.1.29 subfigure
-

The package is obsolete. Use either sidecap +

Nothing special is needed anymore. +

+

11.1.30 subfigure
+

The package is obsolete. Use either subfig or subcaption -

-

11.1.30 titleref
+

+

11.1.31 titleref
@@ -7556,31 +7568,31 @@ class="ec-lmss-10">subcaption
   \usepackage{titleref}% without usetoc
   \usepackage{hyperref}
 
-

-

-

11.1.31 tabularx
-

Linked footnotes are not supported inside environment

+

+

11.1.32 tabularx
+

Linked footnotes are not supported inside environment tabularx, because they uses the optional argument of \footnotetext, see section ‘Limitations’. Before version 2011/09/28 6.82i hyperref had disabled footnotes entirely by hyperfootnotes=false. -

-

11.1.32 titlesec
-

+

11.1.33 titlesec
+

nameref supports titlesec, but hyperref does not (unsolved is the anchor setting, missing with unnumbered section, perhaps problems with page breaks with numbered ones). -

-

11.1.33 ucs/utf8x.def
-

Note: utf8 is now the default in LaTeX and

+

11.1.34 ucs/utf8x.def
+

Note: utf8 is now the default in LaTeX and ucs is no longer recommended. -

The first time a multibyte UTF8 sequence is called, it does some calculations and stores the result in +

The first time a multibyte UTF8 sequence is called, it does some calculations and stores the result in a macro for speeding up the next calls of that UTF8 sequence. However this makes the first call non-expandable and will break if used in information entries or bookmarks. Package ucs offers @@ -7596,18 +7608,18 @@ class="ec-lmvtt-10">\PreloadUnicodePage to solve this:     \PrerenderUnicode{^^c3^^b6}% or \PrerenderUnicodePage{1}     \hypersetup{pdftitle={Umlaut example: ^^c3^^b6}} -

The notation with two carets avoids trouble with 8-bit bytes for the README file, you can use the +

The notation with two carets avoids trouble with 8-bit bytes for the README file, you can use the characters directly. -

-

11.1.34 varioref
-

Most previous problems with

+

11.1.35 varioref
+

Most previous problems with varioref should be resolved. There is only an open issue regarding \vrefformat (https://github.com/latex3/hyperref/issues/225). -

It is recommended to load

It is recommended to load varioref always with the option nospace, see the documentation. @@ -7615,15 +7627,15 @@ class="ec-lmvtt-10">nospace, see the documentation.

     \usepackage[nospace]{varioref}
 
-

-

-

11.1.35 verse
-

Version 2005/08/22 v2.22 contains support for hyperref. -

+

+

11.1.36 vietnam
+ id="x1-10100011.1.36">verse +

Version 2005/08/22 v2.22 contains support for hyperref. +

+

11.1.37 vietnam
@@ -7632,21 +7644,21 @@ class="ec-lmss-10">hyperref.
   \usepackage{vietnam}
   \usepackage{hyperref}
 
-

-

-

11.1.37 XeTeX
-

Default for the encoding of bookmarks is

+

+

11.1.38 XeTeX
+

Default for the encoding of bookmarks is pdfencoding=unicode. That means the strings are always treated as unicode strings. If auto or pdfdoc is forced it applies only if the string restricts to the printable ASCII set, The reason is that the \special does not support PDFDocEncoding. -

In older versions

In older versions hyperref contained special conversion code from UTF-16BE back to UTF-8 in a number of places for xetex to avoid the xdvipdfmx warning -

Failed to convert input string to UTF16... -

This is no longer needed with a current xdvipdfmx, so this code has been removed. +

This is no longer needed with a current xdvipdfmx, so this code has been removed. \csname HyPsd@XeTeXBigCharstrue\endcsname should no longer be used. -

+

12 LimitationsLimitations7

+ id="x1-104001f7">

12.1 Wrapped/broken link support

-

Only few drivers support automatically wrapped/broken links, e.g. pdftex, dvipdfmx, hypertex. Other + id="x1-10500012.1">Wrapped/broken link support +

Only few drivers support automatically wrapped/broken links, e.g. pdftex, dvipdfmx, hypertex. Other drivers lack this feature, e.g. dvips, dvipsone. -

Workarounds: +

Workarounds:

  • -

    For long section or caption titles in the table of contents or list of figures/tables option +

    For long section or caption titles in the table of contents or list of figures/tables option linktocpage can be used. Then the page number will be a link, and the overlong section title is not forced into an one line link with overfull \hbox warning.

  • -

    \url”s are caught by package breakurl.

  • -

    The option

    The option breaklinks is intended for internal use. But it can be used to force link wrapping, e.g. when printing a document. However, when such a document is converted to PDF and viewed with a PDF viewer, the active link area will be misplaced. -

    Another limitation: some penalties are “optimized” by TeX, thus there are missing break +

    Another limitation: some penalties are “optimized” by TeX, thus there are missing break points, especially within \url. (See thread “hyperref.sty, breaklinks and url.sty 3.2” in comp.text.tex 2005-09).

-

+

12.2 Links across pages

-

In general they have problems: + id="x1-10600012.2">Links across pages +

In general they have problems:

  • -

    Some driver doesn’t support them at all (see above). +

    Some driver doesn’t support them at all (see above).

  • -

    The driver allows it, but the link result might include the footer and/or header. This can +

    The driver allows it, but the link result might include the footer and/or header. This can currently (2023) be avoided by using the PDF management and to load at least the new-or-1 module from latex-lab: @@ -7710,12 +7722,12 @@ class="ec-lmvtt-10">\url. (See thread “hyperref.st       \DocumentMetadata{testphase=new-or-1}        -

    +

-

+

12.3 Footnotes

-

LaTeX allows the separation of the footnote mark and the footnote text (Footnotes +

LaTeX allows the separation of the footnote mark and the footnote text (\footnotemark, \footnotetext). This interface might be enough for visual typesetting. But the relation between @@ -7732,14 +7744,14 @@ class="ec-lmss-10">hyperref does not support the optional argument of \footnotemark and \footnotetext. -

+

13 HintsHints8

+ id="x1-108001f8">

13.1 Spaces in option values

-

Unhappily LaTeX strips spaces from options if they are given in Spaces in option values +

Unhappily LaTeX strips spaces from options if they are given in \documentclass or \usepackage (or \RequirePackage), e.g.:

     \usepackage[pdfborder=0 0 1]{hyperref}
 
-

Package

Package hyperref now gets

     pdfborder=001
 
-

and the result is an invalid PDF file. As workaround braces can be used: +

and the result is an invalid PDF file. As workaround braces can be used:

     \usepackage[pdfborder={0 0 1}]{hyperref}
 
-

Some options can also be given in

Some options can also be given in \hypersetup

     \hypersetup{pdfborder=0 0 1}
 
-

In

In \hypersetup the options are directly processed as key value options (see package keyval) without space stripping in the value part. -

Alternatively, LaTeX’s option handling system can be adapted to key value options by one of the +

Alternatively, LaTeX’s option handling system can be adapted to key value options by one of the packages kvoptions-patch (from project kvoptions) or xkvltxp (from project xsetkeys). -

+

13.2 Index with makeindex

+ id="x1-11000013.2">Index with makeindex
  • -

    Package

    Package hyperref adds \hyperpage commands by the encap mechanism (see documentation of Makeindex), if option hyperindex is set (default). \romannumbering, ...), then the page an class="ec-lmvtt-10">plainpages=false is recommended.

  • -

    The encap mechanism of Makeindex allows to use one command only (see documentation of +

    The encap mechanism of Makeindex allows to use one command only (see documentation of Makeindex). If the user sets such a command, hyperref suppresses its \hyperpage command. With @@ -7813,23 +7825,23 @@ class="ec-lmvtt-10">\hyperpage command. With       ...       \index{Some example|main} -

    +

  • -

    Scientic Word/Scientific WorkPlace users can use package robustindex with hyperindex=false. +

    Scientic Word/Scientific WorkPlace users can use package robustindex with hyperindex=false.

  • -

    Other encap characters can be set by option

    Other encap characters can be set by option encap. Example for use of “?”:

                \usepackage[encap=?]{hyperref}
     
    -

    +

  • -

    Another possibility is the insertion of

    Another possibility is the insertion of \hyperpage by a style file for makeindex. For this case, hyperref’s insertion will be disabled by \hyperpage will be defined regardless o encap_suffix "}" %%% cut %%% hyperindex.ist %%% cut %%% -

-

+

+

13.3 Warning Warning "bookmark level for unknown <foobar> defaults to 0"

-

Getting rid of it: +

Getting rid of it:

@@ -7863,33 +7875,33 @@ class="ec-lmvtt-10">"bookmark level for unknown <foobar> defaults
 \providecommand*{\toclevel@<foobar>}{0}
 \makeatother
 
-

-

+

+

13.4 Link anchors in figures

-

The caption command increments the counter and here is the place where Link anchors in figures +

The caption command increments the counter and here is the place where hyperref set the corresponding anchor. Unhappily the caption is set below the figure, so the figure is not visible if a link jumps to a figure. In this case, try package hypcap that implements a method to circumvent the problem. -

+

13.5 Additional unicode characters in bookmarks and pdf information entries:

+ id="x1-11300013.5">Additional unicode characters in bookmarks and pdf information entries:
 \documentclass[pdftex]{article}
 \usepackage[unicode]{hyperref}
 
-

-

Support for additional unicode characters: -

Example:

+

Support for additional unicode characters: +

Example: \.{a} and \d{a} -

1. Get a list with unicode data, eg: -

http://www.unicode.org/Public/UNIDATA/UnicodeData.txt -

2. Identify the characters (

1. Get a list with unicode data, eg: +

http://www.unicode.org/Public/UNIDATA/UnicodeData.txt +

2. Identify the characters (\.{a}, \d{a}): @@ -7898,9 +7910,9 @@ class="ec-lmvtt-10">\d{a}):     0227;LATIN SMALL LETTER A WITH DOT ABOVE;...     1EA1;LATIN SMALL LETTER A WITH DOT BELOW;... -

-

3. Calculate the octal code: -

The first characters of the line in the file are hex values, convert each byte and prepend them with a +

+

3. Calculate the octal code: +

The first characters of the line in the file are hex values, convert each byte and prepend them with a backslash. (This will go into the PDF file.) @@ -7908,10 +7920,10 @@ backslash. (This will go into the PDF file.)     0227 -> \002\047     1EA1 -> \036\241 -

-

4. Transform into a form understood by

+

4. Transform into a form understood by hyperref: -

Hyperref must know where the first byte starts, this is marked by

Hyperref must know where the first byte starts, this is marked by 9 (8 and 9 cannot occur in octal numbers): @@ -7920,8 +7932,8 @@ numbers):     \002\047 -> \9002\047     \036\241 -> \9036\241 -

-

Optional:

+

Optional: 8 is used for abbreviations: @@ -7930,8 +7942,8 @@ class="ec-lmvtt-10">8 is used for abbreviations:     \9002\047 -> \82\047 -

-

5. Declare the character with LaTeX: +

+

5. Declare the character with LaTeX:

@@ -7943,11 +7955,11 @@ class="ec-lmvtt-10">8 is used for abbreviations:
 \end{document}
       
 
-

-

+

+

13.6 Footnotes

-

The footnote support is rather limited. It is beyond the scope to use Footnotes +

The footnote support is rather limited. It is beyond the scope to use \footnotemark and \footnotetext out of order or reusing -

+

-

+

13.7 Subordinate counters

-

Some counters do not have unique values and require the value of other counters to be unique. For + id="x1-11500013.7">Subordinate counters +

Some counters do not have unique values and require the value of other counters to be unique. For example, sections or figures might be numbered within chapters or \newtheorem is used with an optional counter argument. Internally LaTeX uses \@addtoreset to catch this situation. A class="ec-lmvtt-10">\numberwithin of package amsmath is caught by hyperref. -

However, if the definition of subordinate counters take place before

However, if the definition of subordinate counters take place before hyperref is loaded, the old meaning of \@addtoreset is called without hyperref’s additions. Then the companion counter class="ec-lmvtt-10">\theH<counter> can be redefined accordingly. Or move the definition of subordinate counters after hyperref is loaded. -

Example for

Example for \newtheorem, problematic case: @@ -8039,14 +8051,14 @@ class="ec-lmvtt-10">\newtheorem, problematic case:     \newtheorem{corA}{CorollaryA}[section]     \usepackage{hyperref} -

Solution a) +

Solution a)

     \usepackage{hyperref}
     \newtheorem{corA}{CorollaryA}[section}
 
-

Solution b) +

Solution b)

@@ -8054,11 +8066,11 @@ class="ec-lmvtt-10">\newtheorem, problematic case:
     \usepackage{hyperref}
     \newcommand*{\theHcorA}{\theHsection.\number\value{corA}}
 
-

-

+

+

14 History and acknowledgments

-

The original authors of History and acknowledgments +

The original authors of hyperbasics.tex and hypertex.sty, from which this package descends, are Tanmoy Bhattacharya and Thorsten Ohl. Package

Tanmoy found a great many of the bugs, and (even better) often provided fixes, which has +

Tanmoy found a great many of the bugs, and (even better) often provided fixes, which has made the package more robust. The days spent on RevTeX are entirely due to him! The investigations of Bill Moss into the later versions including native PDF support uncovered a good many bugs, and his testing is appreciated. Hans Hagen provided a lot of insight into PDF. -

Berthold Horn provided help, encouragement and sponsorship for the

Berthold Horn provided help, encouragement and sponsorship for the dvipsone and dviwindo drivers. Sergey Lesenko provided the changes needed for hyper package (developed in parallel with hyperref) showed me solutions for some problems. Hopefully the two packages will combine one day. -

The forms creation section owes a great deal to: T. V. Raman, for encouragement, support and +

The forms creation section owes a great deal to: T. V. Raman, for encouragement, support and ideas; Thomas Merz, whose book Web Publishing with Acrobat/PDF provided crucial insights; D. P. Story, whose detailed article about pdfmarks and forms solved many practical problems; and Hans Hagen, who explained how to do it in pdftex. -

Steve Peter recreated the manual source in July 2003 after it had been lost. -

Especial extra thanks to David Carlisle for the

Steve Peter recreated the manual source in July 2003 after it had been lost. +

Especial extra thanks to David Carlisle for the backref module, the ps2pdf and dviwindo support, frequent general rewrites of my bad code, and for working on changes to the xr package to suit @@ -8106,62 +8118,62 @@ class="ec-lmss-10">hyperref.

15 GNU Free Documentation License

-

Version 1.2, November 2002 -

Copyright GNU Free Documentation License +

Version 1.2, November 2002 +

Copyright © 2000,2001,2002 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. -

+

Preamble

-

The purpose of this License is to make a manual, textbook, or other functional and useful document + id="x1-118000">Preamble +

The purpose of this License is to make a manual, textbook, or other functional and useful document “free” in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. -

This License is a kind of “copyleft”, which means that derivative works of the document must +

This License is a kind of “copyleft”, which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. -

We have designed this License in order to use it for manuals for free software, because free software +

We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. -

+

15.1 Applicability and definitions

-

This License applies to any manual or other work, in any medium, that contains a notice placed by + id="x1-11900015.1">Applicability and definitions +

This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The “Document”, below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as “you”. You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. -

A “Modified Version” of the Document means any work containing the Document or a +

A “Modified Version” of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. -

A “Secondary Section” is a named appendix or a front-matter section of the Document that deals +

A “Secondary Section” is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document’s overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. -

The “Invariant Sections” are certain Secondary Sections whose titles are designated, as being those of +

The “Invariant Sections” are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. -

The “Cover Texts” are certain short passages of text that are listed, as Front-Cover Texts or +

The “Cover Texts” are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. -

A “Transparent” copy of the Document means a machine-readable copy, represented in a format +

A “Transparent” copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or @@ -8170,7 +8182,7 @@ otherwise Transparent file format whose markup, or absence of markup, has been a discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not “Transparent” is called “Opaque”. -

Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo +

Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include @@ -8178,41 +8190,41 @@ proprietary formats that can be read and edited only by proprietary word process or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. -

The “Title Page” means, for a printed book, the title page itself, plus such following pages as are +

The “Title Page” means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, “Title Page” means the text near the most prominent appearance of the work’s title, preceding the beginning of the body of the text. -

A section “Entitled XYZ” means a named subunit of the Document whose title either is precisely +

A section “Entitled XYZ” means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as “Acknowledgements”, “Dedications”, “Endorsements”, or “History”.) To “Preserve the Title” of such a section when you modify the Document means that it remains a section “Entitled XYZ” according to this definition. -

The Document may include Warranty Disclaimers next to the notice which states that this +

The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. -

+

15.2 Verbatim copying

-

You may copy and distribute the Document in any medium, either commercially or noncommercially, + id="x1-12000015.2">Verbatim copying +

You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 15.3. -

You may also lend copies, under the same conditions stated above, and you may publicly display +href="#x1-12100015.3">15.3. +

You may also lend copies, under the same conditions stated above, and you may publicly display copies. -

+

15.3 Copying in quantity

-

If you publish printed copies (or copies in media that commonly have printed covers) of the Document, + id="x1-12100015.3">Copying in quantity +

If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document’s license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly @@ -8221,10 +8233,10 @@ words of the title equally prominent and visible. You may add other material on addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. -

If the required texts for either cover are too voluminous to fit legibly, you should put the first ones +

If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. -

If you publish or distribute Opaque copies of the Document numbering more than 100, you must +

If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free @@ -8233,75 +8245,75 @@ begin distribution of Opaque copies in quantity, to ensure that this Transparent remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. -

It is requested, but not required, that you contact the authors of the Document well before +

It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. -

+

15.4 Modifications

-

You may copy and distribute a Modified Version of the Document under the conditions of sections 15.2 + id="x1-12200015.4">Modifications +

You may copy and distribute a Modified Version of the Document under the conditions of sections 15.2 and 15.3 above, provided that you release the Modified Version under precisely this License, with the +href="#x1-12100015.3">15.3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: -

+

  1. -

    Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, + class="enumerate" id="x1-122002x1"> +

    Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.

  2. -

    List on the Title Page, as authors, one or more persons or entities responsible for authorship + class="enumerate" id="x1-122004x2"> +

    List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.

  3. -

    State on the Title page the name of the publisher of the Modified Version, as the publisher. + class="enumerate" id="x1-122006x3"> +

    State on the Title page the name of the publisher of the Modified Version, as the publisher.

  4. -

    Preserve all the copyright notices of the Document. + class="enumerate" id="x1-122008x4"> +

    Preserve all the copyright notices of the Document.

  5. -

    Add an appropriate copyright notice for your modifications adjacent to the other copyright + class="enumerate" id="x1-122010x5"> +

    Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.

  6. -

    Include, immediately after the copyright notices, a license notice giving the public permission + class="enumerate" id="x1-122012x6"> +

    Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.

  7. -

    Preserve in that license notice the full lists of Invariant Sections and required Cover Texts + class="enumerate" id="x1-122014x7"> +

    Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document’s license notice.

  8. -

    Include an unaltered copy of this License. + class="enumerate" id="x1-122016x8"> +

    Include an unaltered copy of this License.

  9. -

    Preserve the section Entitled “History”, Preserve its Title, and add to it an item stating at + class="enumerate" id="x1-122018x9"> +

    Preserve the section Entitled “History”, Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled “History” in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.

  10. -

    Preserve the network location, if any, given in the Document for public access to a + class="enumerate" id="x1-122020x10"> +

    Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the “History” section. You may omit a network location for a work that was published at least four years before the @@ -8310,99 +8322,99 @@ Version:

  11. -

    For any section Entitled “Acknowledgements” or “Dedications”, Preserve the Title of the + class="enumerate" id="x1-122022x11"> +

    For any section Entitled “Acknowledgements” or “Dedications”, Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.

  12. -

    Preserve all the Invariant Sections of the Document, unaltered in their text and in their + class="enumerate" id="x1-122024x12"> +

    Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.

  13. -

    Delete any section Entitled “Endorsements”. Such a section may not be included in the + class="enumerate" id="x1-122026x13"> +

    Delete any section Entitled “Endorsements”. Such a section may not be included in the Modified Version.

  14. -

    Do not retitle any existing section to be Entitled “Endorsements” or to conflict in title with + class="enumerate" id="x1-122028x14"> +

    Do not retitle any existing section to be Entitled “Endorsements” or to conflict in title with any Invariant Section.

  15. -

    Preserve any Warranty Disclaimers. + class="enumerate" id="x1-122030x15"> +

    Preserve any Warranty Disclaimers.

-

If the Modified Version includes new front-matter sections or appendices that qualify as Secondary +

If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version’s license notice. These titles must be distinct from any other section titles. -

You may add a section Entitled “Endorsements”, provided it contains nothing but endorsements of +

You may add a section Entitled “Endorsements”, provided it contains nothing but endorsements of your Modified Version by various parties–for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. -

You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as +

You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. -

The author(s) and publisher(s) of the Document do not by this License give permission to use their +

The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. -

+

15.5 Combining documents

-

You may combine the Document with other documents released under this License, under the terms + id="x1-12300015.5">Combining documents +

You may combine the Document with other documents released under this License, under the terms defined in section 15.4 above for modified versions, provided that you include in the combination all of +href="#x1-12200015.4">15.4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. -

The combined work need only contain one copy of this License, and multiple identical Invariant +

The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. -

In the combination, you must combine any sections Entitled “History” in the various original +

In the combination, you must combine any sections Entitled “History” in the various original documents, forming one section Entitled “History”; likewise combine any sections Entitled “Acknowledgements”, and any sections Entitled “Dedications”. You must delete all sections Entitled “Endorsements”. -

+

15.6 Collections of documents

-

You may make a collection consisting of the Document and other documents released under this License, + id="x1-12400015.6">Collections of documents +

You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. -

You may extract a single document from such a collection, and distribute it individually under this +

You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. -

+

15.7 Aggregation with independent works

-

A compilation of the Document or its derivatives with other separate and independent documents or + id="x1-12500015.7">Aggregation with independent works +

A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an “aggregate” if the copyright resulting from the compilation is not used to limit the legal rights of the compilation’s users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. -

If the Cover Text requirement of section 15.3 is applicable to these copies of the Document, then if +

If the Cover Text requirement of section 15.3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document’s Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. -

+

15.8 Translation

-

Translation is considered a kind of modification, so you may distribute translations of the Document + id="x1-12600015.8">Translation +

Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 15.4. Replacing Invariant Sections with translations requires special +href="#x1-12200015.4">15.4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of @@ -8411,53 +8423,53 @@ provided that you also include the original English version of this License and versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. -

If a section in the Document is Entitled “Acknowledgements”, “Dedications”, or “History”, the +

If a section in the Document is Entitled “Acknowledgements”, “Dedications”, or “History”, the requirement (section 15.4) to Preserve its Title (section 15.1) will typically require changing the actual +href="#x1-12200015.4">15.4) to Preserve its Title (section 15.1) will typically require changing the actual title. -

+

15.9 Termination

-

You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under + id="x1-12700015.9">Termination +

You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. -

+

15.10 Future revisions of this license

-

The Free Software Foundation may publish new, revised versions of the GNU Free Documentation + id="x1-12800015.10">Future revisions of this license +

The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/. -

Each version of the License is given a distinguishing version number. If the Document specifies that a +

Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License “or any later version” applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. -

+

Addendum: how to use this license for your documents

-

To use this License in a document you have written, include a copy of the License in the document and + id="x1-129000">Addendum: how to use this license for your documents +

To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: -

+

-

Copyright

Copyright © YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled “GNU Free Documentation License”.

-

If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the “with...Texts.” +

If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the “with...Texts.” line with this: -

with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and +

with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. -

If you have Invariant Sections without Cover Texts, or some other combination of the three, merge +

If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. -

If your document contains nontrivial examples of program code, we recommend releasing these +

If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. diff --git a/macros/latex/contrib/hyperref/doc/hyperref-doc.pdf b/macros/latex/contrib/hyperref/doc/hyperref-doc.pdf index ffc86541b6..06eca0ae05 100644 Binary files a/macros/latex/contrib/hyperref/doc/hyperref-doc.pdf and b/macros/latex/contrib/hyperref/doc/hyperref-doc.pdf differ diff --git a/macros/latex/contrib/hyperref/doc/hyperref-doc.tex b/macros/latex/contrib/hyperref/doc/hyperref-doc.tex index e7e21d6196..cfc4058afb 100644 --- a/macros/latex/contrib/hyperref/doc/hyperref-doc.tex +++ b/macros/latex/contrib/hyperref/doc/hyperref-doc.tex @@ -166,7 +166,7 @@ } \makeatother \title{Hypertext marks in \hologo{LaTeX}: a manual for \xpackage{hyperref}} -\date{2023-10-27 v7.01d} +\date{2023-11-07 v7.01e} \begin{document} @@ -1407,7 +1407,8 @@ alias command. \end{cmdsyntax} \noindent A base \emph{URL} is established, which is prepended to other -specified URLs, to make it easier to write portable documents. +specified URLs, to make it easier to write portable documents. When creating a PDF +the command can be used only once as the \emph{URL} is written into the catalog. \begin{cmdsyntax} \ci{hyperimage}\verb|{|\emph{imageURL}\verb|}{|\emph{text}\verb|}| @@ -3111,6 +3112,12 @@ Example for introducing links for the page numbers: \renewcommand*{\pagedeclaration}[1]{\unskip, \hyperpage{#1}} \end{verbatim} +\subsubsection{ntheorem} + +This package is not fully supported. The \texttt{thref} option should not be used at all as +it breaks the \verb+\label+ command. It also not garantied that links to theorems always work +properly as the package redefines many internals and but offers no proper interface for hyperlinks. + \subsubsection{ntheorem-hyper} This package is obsolete, use the up-to-date original diff --git a/macros/latex/contrib/hyperref/doc/hyperref-doc7.html b/macros/latex/contrib/hyperref/doc/hyperref-doc7.html index 775f79225f..767dd0b5b4 100644 --- a/macros/latex/contrib/hyperref/doc/hyperref-doc7.html +++ b/macros/latex/contrib/hyperref/doc/hyperref-doc7.html @@ -11,7 +11,7 @@

-

6It will be merged with the 7 7This section moved from the README file, needs more integration into the manual

diff --git a/macros/latex/contrib/hyperref/doc/hyperref-doc9.html b/macros/latex/contrib/hyperref/doc/hyperref-doc9.html index 00d37bbe57..da2b18955e 100644 --- a/macros/latex/contrib/hyperref/doc/hyperref-doc9.html +++ b/macros/latex/contrib/hyperref/doc/hyperref-doc9.html @@ -13,7 +13,7 @@
8 8This section moved from the README file, needs more integration into the manual
diff --git a/macros/latex/contrib/hyperref/doc/hyperref-linktarget.pdf b/macros/latex/contrib/hyperref/doc/hyperref-linktarget.pdf index f72a822cbd..1305ef1528 100644 Binary files a/macros/latex/contrib/hyperref/doc/hyperref-linktarget.pdf and b/macros/latex/contrib/hyperref/doc/hyperref-linktarget.pdf differ diff --git a/macros/latex/contrib/hyperref/doc/hyperref.pdf b/macros/latex/contrib/hyperref/doc/hyperref.pdf index 907a70d08a..04ea790337 100644 Binary files a/macros/latex/contrib/hyperref/doc/hyperref.pdf and b/macros/latex/contrib/hyperref/doc/hyperref.pdf differ diff --git a/macros/latex/contrib/hyperref/doc/nameref.pdf b/macros/latex/contrib/hyperref/doc/nameref.pdf index 60b61c8557..5b2f5f320e 100644 Binary files a/macros/latex/contrib/hyperref/doc/nameref.pdf and b/macros/latex/contrib/hyperref/doc/nameref.pdf differ diff --git a/macros/latex/contrib/hyperref/hluatex.dtx b/macros/latex/contrib/hyperref/hluatex.dtx index ada09a282d..d8309b3eb9 100644 --- a/macros/latex/contrib/hyperref/hluatex.dtx +++ b/macros/latex/contrib/hyperref/hluatex.dtx @@ -1,6 +1,6 @@ % \iffalse % Source File: hluatex.dtx -% 2023-10-27 v7.01d +% 2023-11-07 v7.01e % % Copyright % 2016-2019 Oberdiek Package Support Group @@ -31,7 +31,7 @@ % % \begin{macrocode} %<*luatex> -%% 2023-10-27 v7.01d +%% 2023-11-07 v7.01e %% force unicode encoding, see issue #101 %% code mostly copied from hxetex.def \HyPsd@LoadUnicode diff --git a/macros/latex/contrib/hyperref/hyperref-linktarget.dtx b/macros/latex/contrib/hyperref/hyperref-linktarget.dtx index 58ff089276..d013b89980 100644 --- a/macros/latex/contrib/hyperref/hyperref-linktarget.dtx +++ b/macros/latex/contrib/hyperref/hyperref-linktarget.dtx @@ -53,7 +53,7 @@ % }^^A % } % -% \date{Version 2023-10-27 v7.01d} +% \date{Version 2023-11-07 v7.01e} % % \maketitle % \begin{documentation} @@ -412,7 +412,7 @@ \cs_new_protected:Npn \@@_target_raise:n #1 { \mode_if_vertical:TF - { #1 } + { \UseSocket{hyp/raisedlink}{#1} } { \Hy@SaveSpaceFactor \penalty\@M diff --git a/macros/latex/contrib/hyperref/hyperref-patches.dtx b/macros/latex/contrib/hyperref/hyperref-patches.dtx index 1e8213d599..2c1209001a 100644 --- a/macros/latex/contrib/hyperref/hyperref-patches.dtx +++ b/macros/latex/contrib/hyperref/hyperref-patches.dtx @@ -55,7 +55,7 @@ % }^^A % } % -% \date{Version 2023-10-27 v7.01d} +% \date{Version 2023-11-07 v7.01e} % % \maketitle % \begin{documentation} diff --git a/macros/latex/contrib/hyperref/hyperref.dtx b/macros/latex/contrib/hyperref/hyperref.dtx index 0c5340d50b..c6fccc9cfd 100644 --- a/macros/latex/contrib/hyperref/hyperref.dtx +++ b/macros/latex/contrib/hyperref/hyperref.dtx @@ -51,7 +51,7 @@ %\ProvidesFile{puvnenc.def} %\ProvidesFile{puarenc.def} %\ProvidesFile{psdextra.def} -% [2023-10-27 v7.01d % +% [2023-11-07 v7.01e % % Hypertext links for LaTeX] % Dummy hyperref (SR)] % Hyperref documentation driver file] @@ -4312,9 +4312,16 @@ \global\Hy@SavedSpaceFactor=\the\Hy@SavedSpaceFactor\relax }% } +% \end{macrocode} +% Packages like varwidth need an option to change the handling in vmode. +% (Issue \#204). With a new format we therefore insert a socket. +% \begin{macrocode} +\@ifl@t@r\fmtversion{2023-11-01} + {\NewSocket{hyp/raisedlink}{1}} + {\providecommand\UseSocket[2]{#2}} \def\Hy@raisedlink#1{% \ifvmode - #1% + \UseSocket{hyp/raisedlink}{#1}% \else \Hy@SaveSpaceFactor \penalty\@M @@ -10692,6 +10699,20 @@ \def\hypergetpageref#1{\getrefbykeydefault{#1}{page}{0}} % \end{macrocode} % +% \section{Package varwidth support} +% 2023-11-07: varwidth needs a special configuration point to inserts its handler. +% We use a socket for this. +% +% \begin{macrocode} +\@ifl@t@r\fmtversion{2023-11-01} + { + \AddToHook{package/varwidth/after} + { + \NewSocketPlug{hyp/raisedlink}{varwidth}{\@vwid@wrap{#1}} + \appto\@vwid@setup{\AssignSocketPlug{hyp/raisedlink}{varwidth}} + } + }{} +% \end{macrocode} % \section{Package titlesec and titletoc support} % % This code is contributed by Javier Bezos @@ -10734,30 +10755,6 @@ }{} % \end{macrocode} % -% -% \section{Package varioref support} -% -% Package nameref uses five arguments for the ref system. -% Fix provided by Felix Neubauer (\Email{felix.neubauer@gmx.net}). -% This fix will no longer be needed with latex 2021-11-15. -% \begin{macrocode} -\@ifl@t@r\fmtversion{2021-11-15} - {}% - { - \AtBeginDocument{% - \def\Hy@varioref@undefined{{??}{??}{}{}{}} - \@ifpackageloaded{varioref}{% - \def\vref@pagenum#1#2{% - \@ifundefined{r@#2}{% - \expandafter\let\csname r@#2\endcsname\Hy@varioref@undefined - }{}% - \edef#1{\getpagerefnumber{#2}}% - }% - }{} - } - } -% \end{macrocode} -% % \section{Package longtable support} % % Sometimes the anchor of the longtable goes to the previous @@ -10967,14 +10964,52 @@ } % \end{macrocode} % -% Support for theorems. We move the target into the para hook to -% avoid spacing problem. The patch will not apply to -% \texttt{cleveref} but hopefully it does the right thing anyway. +% \section{Support for theorems} +% +% Hyperlink support in theorems has to resolve typically three problems: +% \begin{itemize} +% \item The \cs{refstepcounter} can be issued to early. The target it produces +% can be separated from the theorem and then the link if wrong (see testfiles thm-005-xx). +% It can also affect spacing. +% This means that it is better if this \cs{refstepcounter} doesn't produce a target. +% +% \item The natural place for the target (before the theorem label) is normally not printed +% directly but delayed to the next paragraph begin (through the \cs{item} code or by other means). +% and \cs{label} commands used directly at the begin of the environment are perhaps +% processed \emph{before} the target is created +% and so do not know the correct \cs{@currentHref} value. That means that if +% \cs{refstepcounter} does not produce a target, it should nevertheless update the target +% name. +% +% \item The target should be placed (in horizontal mode) before the theorem label to avoid +% side effects on spacing. For this a suitable place must be +% found depending on the actual theorem definition. +% \end{itemize} +% +% Theorems typically issue the \cs{refstepcounter} in \cs{@thm}. +% The first two points can therefore be resolved by patching this command +% and replacing the \cs{refstepcounter}. +% +% The last point is the most complicated. Simply moving at the point \cs{refstepcounter} +% is encountered into the next para hook doesn't work, as this can be in a header if there is page +% break. The next item hook doesn't work for the same reason, +% also not every theorem environment actually use \cs{item} (e.g. {amsthm} and ams-classes). +% Patching (or using a hook) \cs{@begintheorem} doesn't work either as {ntheorem} +% redefines this on the fly. +% +% For now we move the target creation into the item hook. This is not perfect, +% as it can end up in header or be to much to the right, but there is not really +% a better place. +% +% The patch will not apply to +% \texttt{cleveref}, this means that with cleveref there +% can be a page break between target and theorem but beside this +% it hopefully it does the right thing. % \cs{@currentHref} is updated directly for labels set before % the actual start of the paragraph. The target can be behind % a target created from a following list, so we restore \cs{@currentHref} -% just in case -% +% just in case. +% Later we could use sockets here (or hope that the packages take this over. % % \begin{macrocode} \newcommand\Hy@theorem@refstepcounter[1] @@ -10982,33 +11017,37 @@ \H@refstepcounter{#1}% \hyper@makecurrent{#1}% \global\let\Hy@dth@currentHref\@currentHref + \Hy@theorem@makelinktarget{\Hy@dth@currentHref}% + } +\newcommand\Hy@theorem@makelinktarget[1] + { \AddToHookNext{cmd/item/before} {\AddToHookNext{para/begin} {\let\Hy@tempa\@currentHref - \MakeLinkTarget*{\Hy@dth@currentHref}% + \MakeLinkTarget*{#1}% \Hy@dth@currentHref \global\let\@currentHref\Hy@tempa }% - }% - } + }% + } % \end{macrocode} % amsthm doesn't issue an item in the theorem, we delay the target into % \cs{deferred@thm@head} and hope that it always begins a paragraph. % \begin{macrocode} -\AddToHook{package/amsthm/after} - { - \renewcommand\Hy@theorem@refstepcounter[1] +\AddToHook{begindocument} + {% + \@ifundefined{deferred@thm@head}{} {% - \H@refstepcounter{#1}% - \hyper@makecurrent{#1}% - \global\let\Hy@dth@currentHref\@currentHref - \AddToHookNext{cmd/deferred@thm@head/before} - {\AddToHookNext{para/begin} - {\let\Hy@tempa\@currentHref - \MakeLinkTarget*{\Hy@dth@currentHref}% - \global\let\@currentHref\Hy@tempa - }% - }% - } + \renewcommand\Hy@theorem@makelinktarget[1] + {% + \AddToHookNext{cmd/deferred@thm@head/before} + {\AddToHookNext{para/begin} + {\let\Hy@tempa\@currentHref + \MakeLinkTarget*{#1}% + \global\let\@currentHref\Hy@tempa + }% + }% + }% + }% } \@ifundefined{hyper@nopatch@thm}{% \AtBeginDocument{% diff --git a/macros/latex/contrib/hyperref/xr-hyper.sty b/macros/latex/contrib/hyperref/xr-hyper.sty index 4fe22f0e44..929f1d8cdd 100644 --- a/macros/latex/contrib/hyperref/xr-hyper.sty +++ b/macros/latex/contrib/hyperref/xr-hyper.sty @@ -57,7 +57,7 @@ %% \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{xr-hyper} - [2023-10-27 v7.01d eXternal References (DPC)] + [2023-11-07 v7.01e eXternal References (DPC)] \def\externaldocument{\@testopt\XR@cite{}} \let\externalcitedocument\externaldocument diff --git a/macros/latex/contrib/ipsum/README.md b/macros/latex/contrib/ipsum/README.md new file mode 100644 index 0000000000..6d6958bcfc --- /dev/null +++ b/macros/latex/contrib/ipsum/README.md @@ -0,0 +1,7 @@ +ipsum is a package to work with multilingual 'dummy texts'. +---------------------------------------------------------------------------- +ipsum est un pakage pour afficher des paragraphes multilangues type "dummy". +---------------------------------------------------------------------------- +Author : Cédric Pierquet +email : cpierquet@outlook.fr +Licence : Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt \ No newline at end of file diff --git a/macros/latex/contrib/ipsum/doc/ipsum-doc.pdf b/macros/latex/contrib/ipsum/doc/ipsum-doc.pdf new file mode 100644 index 0000000000..6bfc05c3df Binary files /dev/null and b/macros/latex/contrib/ipsum/doc/ipsum-doc.pdf differ diff --git a/macros/latex/contrib/ipsum/doc/ipsum-doc.tex b/macros/latex/contrib/ipsum/doc/ipsum-doc.tex new file mode 100644 index 0000000000..65baec2bce --- /dev/null +++ b/macros/latex/contrib/ipsum/doc/ipsum-doc.tex @@ -0,0 +1,268 @@ +% !TeX TXS-program:compile = txs:///pdflatex + +\documentclass[11pt,a4paper]{ltxdoc} +\usepackage{ipsum} +\usepackage{fancyvrb} +\usepackage{fancyhdr} +\usepackage{fontawesome5} +\fancyhf{} +\renewcommand{\headrulewidth}{0pt} +%\rhead{\sffamily\small\affloetalab[Legende]} +\lfoot{\sffamily\small [ipsum]} +\cfoot{\sffamily\small - \thepage{} -} +\rfoot{\hyperlink{matoc}{\small\faArrowAltCircleUp[regular]}} +\usepackage{hologo} +\providecommand\tikzlogo{Ti\textit{k}Z} +\providecommand\TeXLive{\TeX{}Live\xspace} +\providecommand\PSTricks{\textsf{PSTricks}\xspace} +\let\pstricks\PSTricks +\let\TikZ\tikzlogo + +\usepackage{hyperref} +\urlstyle{same} +\hypersetup{pdfborder=0 0 0} +\usepackage[margin=2cm]{geometry} +\setlength{\parindent}{0pt} +\def\TPversion{0.1.0} +\def\TPdate{07/11/2023} +\usepackage{tcolorbox} +\tcbuselibrary{skins,hooks} +\usepackage{soul} +\sethlcolor{lightgray!25} +\NewDocumentCommand\MontreCode{ m }{% + \hl{\vphantom{\texttt{pf}}\texttt{#1}}% +} +\NewDocumentCommand\GenSample{ O{#2} m }{% + %\hfill\textbf{\textsf{LANG=#1}}\par\smallskip + \hrule\par\smallskip + \ipsum\par\smallskip + \hrule\par\smallskip + \ipsum[5-6]\par\smallskip + \hrule\par\smallskip + \ipsum[2]\par\smallskip + \hrule\par\smallskip + \ipsum[1-3]\par\smallskip + \hrule\par\smallskip + \ipsum[6-7]\par\smallskip + \hrule\par\smallskip + \ipsum[2-4]\par\smallskip + \hrule\par\smallskip + \ipsum[8-9]\par\smallskip + \hrule\par\smallskip +} + +\begin{document} + +\pagestyle{fancy} + +\thispagestyle{empty} + +\begin{center} + \begin{minipage}{0.88\linewidth} + \begin{tcolorbox}[colframe=yellow,colback=yellow!15] + \begin{center} + \begin{tabular}{c} + {\Huge \texttt{ipsum}}\\ + \\ + {\LARGE Creating "Dummy Text"} \\ + {\LARGE with multilingual support.} \\ + \\ + {\small \texttt{Version \TPversion{} -- \TPdate}} + \end{tabular} + \end{center} + \end{tcolorbox} +\end{minipage} +\end{center} + +\begin{center} + \begin{tabular}{c} + \texttt{Cédric Pierquet}\\ + {\ttfamily c pierquet -- at -- outlook . fr}\\ + \texttt{\url{https://github.com/cpierquet/ipsum}} \\ + \\ + \texttt{Thanks to \url{https://ipsum.one/} for the paragraphs, with free license !} +\end{tabular} +\end{center} + +\hrule + +\vfill + +\begin{tcolorbox}[colframe=lightgray,colback=lightgray!5] +\ipsum[6] +\end{tcolorbox} + +\begin{tcolorbox}[colframe=lightgray,colback=lightgray!5] +\ipsum[4] +\end{tcolorbox} + +\begin{tcolorbox}[colframe=lightgray,colback=lightgray!5] +\ipsum[2] +\end{tcolorbox} + +\begin{tcolorbox}[colframe=lightgray,colback=lightgray!5] +\ipsum[6-9] +\end{tcolorbox} + +\begin{tcolorbox}[colframe=lightgray,colback=lightgray!5] +\ipsum[1-3] +\end{tcolorbox} + +\vfill~ + +\pagebreak + +\phantomsection + +\hypertarget{matoc}{} + +\tableofcontents + +\vspace*{5mm} + +\hrule + +\vspace*{5mm} + +\section{Introduction} + +\subsection{Description} + +With this package you can create dummy text, in several languages. + +Use \cmd{\ipsum} to get some paragraphs/sentences/lists, with optional languages and optional numbers. + +Details can be found at \url{https://ipsum.one/}. + +\subsection{Loading} + +To load the package, simply use : + +\begin{quote} +\begin{verbatim} +\usepackage{blindtext} +\end{verbatim} +\end{quote} + +\vfill + +\subsection{History} + +\begin{quote} +\begin{verbatim} +0.1.0 : Initial version +\end{verbatim} +\end{quote} + +\pagebreak + +\section{The macros} + +\subsection{General usage} + +In order to print one or several paragraphs/sentences/lists, the command is : + +\begin{quote} +\begin{verbatim} +\ipsum[range] +\end{verbatim} +\end{quote} + +Available \textsf{Lang} are : + +\begin{multicols}{4} + \begin{itemize} + \item \texttt{LAT} : Latin (def.) + \item \texttt{EN~} : English + \item \texttt{FR~} : French + \item \texttt{DE~} : German + \item \texttt{ES~} : Spanish + \item \texttt{PT~} : Portuguese + \item \texttt{IT~} : Italian + \item \texttt{NL~} : Dutch + \end{itemize} +\end{multicols} + +Available \textsf{Type} are : + +\begin{multicols}{2} + \begin{itemize} + \item \texttt{par~} : paragraphs (def.) + \item \texttt{sent} : sentences + \item \texttt{enum} : enumerated list + \item \texttt{item} : itemized list + \end{itemize} +\end{multicols} + +The \textsf{range} can be given (by default it's \texttt{1}) : + +\begin{itemize} + \item by one number, between \texttt{1} and \texttt{7} ; + \item by two numbers, \texttt{a-b} (with $\mathtt{1 \leq a < b \leq 7}$ for paragraphs, and $\mathtt{1 \leq a < b \leq 9}$ for others). +\end{itemize} + +\subsection{Samples} + +Each language is illustrated with : + +\begin{quote} +\begin{verbatim} +\ipsum %the first sentence +\ipsum[5-6] %the 5/6th sentences +\ipsum[2] %the second paragraph +\ipsum[1-3] %the first three +\ipsum[6-7] %the last two +\ipsum[2-4] %enumlist with 2/3/4th sentences +\ipsum[8-9] %itemist with last two sentences +\end{verbatim} +\end{quote} + +\pagebreak + +\subsubsection{Lang = Default} + +\GenSample[Default]{LAT} + +\pagebreak + +\subsubsection{Lang = EN} + +\GenSample{EN} + +\pagebreak + +\subsubsection{Lang = FR} + +\GenSample{FR} + +\pagebreak + +\subsubsection{Lang = DE} + +\GenSample{DE} + +\pagebreak + +\subsubsection{Lang = ES} + +\GenSample{ES} + +\pagebreak + +\subsubsection{Lang = PT} + +\GenSample{PT} + +\pagebreak + +\subsubsection{Lang = IT} + +\GenSample{IT} + +\pagebreak + +\subsubsection{Lang = NL} + +\GenSample{NL} + +\end{document} \ No newline at end of file diff --git a/macros/latex/contrib/ipsum/tex/ipsum.sty b/macros/latex/contrib/ipsum/tex/ipsum.sty new file mode 100644 index 0000000000..526f10a413 --- /dev/null +++ b/macros/latex/contrib/ipsum/tex/ipsum.sty @@ -0,0 +1,741 @@ +% Author : C. Pierquet +% licence : Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txtf +% Source : https://ipsum.one/ + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{ipsum}[2023/11/07 0.1.0 Multilanguage simply dummy texts] + +%====HISTORIQUE +% v 0.1.0 Initial version + +%====PACKAGES +\RequirePackage{xstring} +\RequirePackage{xintexpr} +\RequirePackage{simplekv} + +%====KEYS +\defKV[ipsumdummy]{% + Lang=\def\ipsumlg{#1},% + Type=\def\ipsumtype{#1} +} +\setKVdefault[ipsumdummy]{% + Lang=LAT,% + Type=par +} + +%====PARAGRAPHS +%==[LAT] +\xdef\ipsum@par@LAT@A{% +Nam quis enim. Quisque ornare dui a tortor. Fusce consequat lacus pellentesque metus. Duis euismod. Duis non quam. Maecenas vitae dolor in ipsum auctor vehicula. Vivamus nec nibh eget wisi varius pulvinar. Cras a lacus. Etiam et massa. Donec in nisl sit amet dui imperdiet vestibulum. Duis porttitor nibh id eros.\par +} +\xdef\ipsum@par@LAT@B{% +Fusce adipiscing justo nec ante. Nullam in enim. Pellentesque felis orci, sagittis ac, malesuada et, facilisis in, ligula. Nunc non magna sit amet mi aliquam dictum. In mi. Curabitur sollicitudin justo sed quam. Aenean imperdiet. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae Donec lacinia nonummy lectus. Proin vel urna. Fusce sit amet orci ac magna iaculis pharetra. Duis sagittis massa in tellus. Aenean vel velit vel felis consectetuer pharetra.\par +} +\xdef\ipsum@par@LAT@C{% +Morbi malesuada hendrerit dui. Nunc mauris leo, dapibus sit amet, vestibulum et, commodo id, est. Pellentesque purus. Pellentesque tristique, nunc ac pulvinar adipiscing, justo eros consequat lectus, sit amet posuere lectus neque vel augue. Cras consectetuer libero ac eros. Ut eget massa. Fusce sit amet enim eleifend sem dictum auctor. In eget risus luctus wisi convallis pulvinar. Vivamus sapien risus, tempor in, viverra in, aliquet pellentesque, eros. Aliquam euismod libero a sem.\par +} +\xdef\ipsum@par@LAT@D{% +Fusce mollis dui eu leo. Sed sapien augue, porta at, posuere ut, ultrices molestie, est. Vivamus quis pede nec erat placerat tincidunt. Aenean odio dui, facilisis non, vehicula et, bibendum a, libero. Etiam leo turpis, venenatis eleifend, nonummy sit amet, aliquam non, mi. Maecenas eget mi. Sed nec diam. Integer orci tellus, pellentesque nec, bibendum quis, sodales ut, nibh. Duis laoreet aliquet orci. Curabitur sit amet sem sit amet nibh fermentum faucibus. Donec adipiscing, ipsum id fringilla convallis, elit massa cursus augue, at lobortis massa augue nec ligula. Proin ac lacus.\par +} +\xdef\ipsum@par@LAT@E{% +Donec vel augue. Morbi a turpis sed libero consequat porta. Quisque lacinia consequat odio. Sed vehicula sollicitudin purus. Vestibulum eget est. In hac habitasse platea dictumst. Sed blandit, tortor a auctor imperdiet, wisi nibh ornare leo, ac dictum nibh enim eu orci. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aliquam tincidunt ullamcorper justo. Etiam accumsan lacus nec ante. Ut dictum luctus mauris. Ut metus. Maecenas gravida. Proin iaculis. Integer convallis, justo iaculis ullamcorper sollicitudin, lectus neque tincidunt mi, at condimentum sem quam vel diam. Aenean sit amet purus.\par +} +\xdef\ipsum@par@LAT@F{% +Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae Aliquam interdum porttitor tortor. Donec ultricies justo eget sapien. Proin ac est. Aliquam erat volutpat. In tempus scelerisque ligula. Morbi scelerisque urna. Duis ac nisl. Donec sed leo. Fusce posuere orci mollis nunc. Sed arcu enim, pharetra nec, aliquam eu, consectetuer sit amet, eros. Sed id enim. Etiam mattis est at elit. Pellentesque est risus, pellentesque nec, dignissim vitae, egestas vitae, sapien. Maecenas et eros non libero iaculis facilisis. Mauris porttitor tempor justo. Sed sollicitudin neque nec libero.\par +} +\xdef\ipsum@par@LAT@G{% +Morbi tincidunt posuere arcu. Cras venenatis est vitae dolor. Vivamus scelerisque semper mi. Donec ipsum arcu, consequat scelerisque, viverra id, dictum at, metus. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut pede sem, tempus ut, porttitor bibendum, molestie eu, elit. Suspendisse potenti. Sed id lectus sit amet purus faucibus vehicula. Praesent sed sem non dui pharetra interdum. Nam viverra ultrices magna.\par +} +%==[FR] +\xdef\ipsum@par@FR@A{% +Sans qu’elle daignât le dire à personne, un accès de fièvre d’un de ses fils la mettait presque dans le même état que si l’enfant eût été mort. Un éclat de rire grossier, un haussement d’épaules, accompagné de quelque maxime triviale sur la folie des femmes, avaient constamment accueilli les confidences de ce genre de chagrins, que le besoin d’épanchement l’avait portée à faire à son mari, dans les premières années de leur mariage. Ces sortes de plaisanteries, quand surtout elles portaient sur les maladies de ses enfants, retournaient le poignard dans le cœur de Mme de Rênal. Voilà ce qu’elle trouva au lieu des flatteries empressées et mielleuses du couvent jésuitique où elle avait passé sa jeunesse. Son éducation fut faite par la douleur. Trop fière pour parler de ce genre de chagrins, même à son amie Mme Derville, elle se figura que tous les hommes étaient comme son mari, M. Valenod et le sous-préfet Charcot de Maugiron. La grossièreté, et la plus brutale insensibilité à tout ce qui n’était pas intérêt d’argent, de préséance ou de croix ; la haine aveugle pour tout raisonnement qui les contrariait, lui parurent des choses naturelles à ce sexe, comme porter des bottes et un chapeau de feutre.\par +} +\xdef\ipsum@par@FR@B{% +On rit beaucoup, on admira ; tel est l’esprit à l’usage de Verrières. Julien était déjà debout, tout le monde se leva malgré le décorum ; tel est l’empire du génie. Mme Valenod le retint encore un quart d’heure ; il fallait bien qu’il entendît les enfants réciter leur catéchisme ; ils firent les plus drôles de confusions, dont lui seul s’aperçut. Il n’eut garde de les relever. Quelle ignorance des premiers principes de la religion! pensait-il. Il saluait enfin et croyait pouvoir s’échapper ; mais il fallut essuyer une fable de La Fontaine.\par +} +\xdef\ipsum@par@FR@C{% +Mais la demoiselle du comptoir avait remarqué la charmante figure de ce jeune bourgeois de campagne, qui, arrêté à trois pas du poêle, et son petit paquet sous le bras, considérait le buste du roi, en beau plâtre blanc. Cette demoiselle, grande Franc-Comtoise, fort bien faite, et mise comme il le faut pour faire valoir un café, avait déjà dit deux fois, d’une petite voix qui cherchait à n’être entendue que de Julien : Monsieur! Monsieur! Julien rencontra de grands yeux bleus fort tendres, et vit que c’était à lui qu’on parlait.\par +} +\xdef\ipsum@par@FR@D{% +Il est vrai que cet arrangement a été critiqué par les bonnes têtes de l’endroit. Une fois, c’était un jour de dimanche, il y a quatre ans de cela, M. de Rênal, revenant de l’église en costume de maire, vit de loin le vieux Sorel, entouré de ses trois fils, sourire en le regardant. Ce sourire a porté un jour fatal dans l’âme de M. le maire, il pense depuis lors qu’il eût pu obtenir l’échange à meilleur marché.\par +} +\xdef\ipsum@par@FR@E{% +Il vit de loin la croix de fer doré sur la porte ; il approcha lentement ; ses jambes semblaient se dérober sous lui. Voilà donc cet enfer sur la terre, dont je ne pourrai sortir! Enfin il se décida à sonner. Le bruit de la cloche retentit comme dans un lieu solitaire. Au bout de dix minutes, un homme pâle, vêtu de noir, vint lui ouvrir. Julien le regarda et aussitôt baissa les yeux. Ce portier avait une physionomie singulière. La pupille saillante et verte de ses yeux s’arrondissait comme celle d’un chat ; les contours immobiles de ses paupières annonçaient l’impossibilité de toute sympathie ; ses lèvres minces se développaient en demi-cercle sur des dents qui avançaient. Cependant cette physionomie ne montrait pas le crime, mais plutôt cette insensibilité parfaite qui inspire bien plus de terreur à la jeunesse. Le seul sentiment que le regard rapide de Julien put deviner sur cette longue figure dévote fut un mépris profond pour tout ce dont on voudrait lui parler, et qui ne serait pas l’intérêt du ciel.\par +} +\xdef\ipsum@par@FR@F{% +Ma femme a réellement beaucoup de tête ! se disait, le lendemain à six heures du matin, le maire de Verrières, en descendant à la scie du père Sorel. Quoi que je lui aie dit, pour conserver la supériorité qui m’appartient, je n’avais pas songé que si je ne prends pas ce petit abbé Sorel, qui, dit-on, sait le latin comme un ange, le directeur du dépôt, cette âme sans repos, pourrait bien avoir la même idée que moi et me l’enlever. Avec quel ton de suffisance il parlerait du précepteur de ses enfants !... Ce précepteur, une fois à moi, portera-t-il la soutane ?\par +} +\xdef\ipsum@par@FR@G{% +M. de Rênal était absorbé dans ce doute, lorsqu’il vit de loin un paysan, homme de près de six pieds, qui, dès le petit jour, semblait fort occupé à mesurer des pièces de bois déposées le long du Doubs, sur le chemin de halage. Le paysan n’eut pas l’air fort satisfait de voir approcher M. le maire ; car ces pièces de bois obstruaient le chemin, et étaient déposées là en contravention.\par +} +%==[EN] +\xdef\ipsum@par@EN@A{% +On Wednesday night the weather was very bad, my balance was strangely variable, and I was obliged to lean with my knees and elbows against the sideboard, to prevent myself from falling. Portmanteaus and bags came in and out of my cabin; an unusual hubbub reigned in the adjoining saloon, in which two or three hundred packages were making expeditions from one end to the other, knocking the tables and chairs with loud crashes; doors slammed, the boards creaked, the partitions made that groaning noise peculiar to pine wood; bottles and glasses jingled together in their racks, and a cataract of plates and dishes rolled about on the pantry floors.\par +} +\xdef\ipsum@par@EN@B{% +I said that the length of the 'Great Eastern' exceeded two hectometres. For the benefit of those partial to comparisons, I will add that it is a third longer than the 'Pont des Arts;' in reality this steam-ship measures 673 feet at the load water-line, between the perpendiculars; the upper deck is 680 feet from stem to stern; that is to say, its length is double that of the largest transatlantic steamers; its width amidships is about 71 feet, and behind the paddles about 107 feet.\par +} +\xdef\ipsum@par@EN@C{% +After having left the Doctor, I spent the rest of the day with Fabian; we had gone to the stern, which Pitferge called 'walking in the country.' There alone, and leaning over the taffrail, we surveyed the great expanse of water, while around us rose the briny vapours distilled from the spray; small rainbows, formed by the refraction of the sun's rays, spanned the foaming waves. Below us, at a distance of forty feet, the screw was beating the water with a tremendous force, making its copper gleam in the midst of what appeared to be a vast conglomeration of liquefied emeralds, the fleecy track extending as far as the eye could reach, mingled in a milky path the foam from the screw, and the paddle engines, whilst the white and black fringed plumage of the sea-gulls flying above, cast rapid shadows over the sea.\par +} +\xdef\ipsum@par@EN@D{% +The church was the great saloon, formed by the upper-deck at the stern, the exterior of which, from its width and regularity of structure, reminded one very much of the hotel of the Ministère des Finances, in the Rue de Rivoli. I entered. Numbers of the faithful were already in their places.\par +} +\xdef\ipsum@par@EN@E{% +The church was the great saloon, formed by the upper-deck at the stern, the exterior of which, from its width and regularity of structure, reminded one very much of the hotel of the Ministère des Finances, in the Rue de Rivoli. I entered. Numbers of the faithful were already in their places.\par +} +\xdef\ipsum@par@EN@F{% +Everything was finished by evening; not a trace of mud was visible on the well-swept boulevards, for an army of sweepers had been at work. There was a full cargo; provisions, goods, and coal filled the stewards' room, the store, and the coal houses. However, the steamer had not yet sunk to the load water-line, and did not draw the necessary thirty-three feet. It was an inconvenient position for the wheels, for the paddles not being sufficiently immersed, caused a great diminution in the speed.\par +} +\xdef\ipsum@par@EN@G{% +Thus the reason for rearranging the ship to this purpose, and the consequent necessity of filling up the tanks and replacing the boilers, of enlarging the saloons in which so many people were to live during the voyage, and of building extra dining saloons, finally the arrangement of a thousand berths in the sides of the gigantic hull.\par +} +%==[DE] +\xdef\ipsum@par@DE@A{% +Ingenieur Und Dr.Krokowskis Lächeln zog sich gleichsam zurück, bü te an Kraft und Herzlichkeit für den Augenblick etwas ein. Das ist wacker.Und Sie werden hier also keinerlei ärztliche Behandlung in Anspruch nehmen, weder in körperlicher noch in psychischer Hinsicht Nein, ich danke tausendmal sagte Hans Castorp und wäre fast einen Schritt zurückgewichen.\par +} +\xdef\ipsum@par@DE@B{% +Das mit der Seelenzergliederung war zu stark, das hätte nicht kommen dürfen.Au erdem bin ich doch auch wohl ein bi chen abgespannt von der Reise.Leidest du auch so an kalten Fü en Gleichzeitig hat man dann so ein hei es Gesicht, das ist unangenehm.\par +} +\xdef\ipsum@par@DE@C{% +Raum, der sich drehend und fliehend zwischen ihn und seine Pflanzstätte wälzt, bewährt Kräfte, die man gewöhnlich der Zeit vorbehalten glaubt von Stunde zu Stunde stellt er innere Veränderungen her, die den von ihr bewirkten sehr ähnlich sind, aber sie in gewisser Weise übertreffen.\par +} +\xdef\ipsum@par@DE@D{% +August, August sagte Hans Castorp. Aber mich friert Mich friert abscheulich, nämlich am Körper, denn im Gesicht bin ich auffallend echauffiert, da, fühle doch mal, wie ich brenne Diese Zumutung, man solle sein Gesicht befühlen, pa te ganz und gar nicht zu Hans Castorps Natur und berührte ihn selber peinlich.\par +} +\xdef\ipsum@par@DE@E{% +Gleich wann Na, in drei Wochen. Ach so, du fährst wohl schon wieder nach Hause in deinen Gedanken, antwortete Joachim. Nun, warte nur, du kommst ja eben erst an.Drei Wochen sind freilich fast nichts für uns hier oben, aber für dich, der du zu Besuch hier bist und überhaupt nur drei Wochen bleiben sollst, für dich ist es doch eine Menge Zeit.\par +} +\xdef\ipsum@par@DE@F{% +Leichen Ach so Na, höre mal rief Hans Castorp.Und plötzlich geriet er ins Lachen, in ein heftiges, unbezwingliches Lachen, das seine Brust erschütterte und sein vom kühlen Wind etwas steifes Gesicht zu einer leise schmerzenden Grimasse verzog.\par +} +\xdef\ipsum@par@DE@G{% +Gletscher und Firnen und die gewaltigen Bergesriesen Diese Dinger sind doch nicht sehr hoch, wie mir scheint. Doch, sie sind hoch, antwortete Joachim. Du siehst die Baumgrenze fast überall, sie markiert sich ja auffallend scharf, die Fichten hören auf, und damit hört alles auf, aus ist es, Felsen, wie du bemerkst.\par +} +%==[IT] +\xdef\ipsum@par@IT@A{% +Quinci non passa mai anima buona e però, se Caron di te si lagna, ben puoi sapere omai che l suo dir suona.Finito questo, la buia campagna tremò sì forte, che de lo spavento la mente di sudore ancor mi bagna.La terra lagrimosa diede vento, che balenò una luce vermiglia la qual mi vinse ciascun sentimento e caddi come l uom cui sonno piglia.\par +} +\xdef\ipsum@par@IT@B{% +Così discesi del cerchio primaio giù nel secondo, che men loco cinghia e tanto più dolor, che punge a guaio.Stavvi Minòs orribilmente, e ringhia essamina le colpe ne l intrata giudica e manda secondo ch avvinghia.Dico che quando l anima mal nata li vien dinanzi, tutta si confessa e quel conoscitor de le peccata vede qual loco d inferno è da essa cignesi con la coda tante volte quantunque gradi vuol che giù sia messa.\par +} +\xdef\ipsum@par@IT@C{% +Quando vidi costui nel gran diserto, Miserere di me, gridai a lui, qual che tu sii, od ombra od omo certo.Rispuosemi Non omo, omo già fui, e li parenti miei furon lombardi, mantoani per patrïa ambedui.Nacqui sub Iulio, ancor che fosse tardi, e vissi a Roma sotto l buono Augusto nel tempo de li dèi falsi e bugiardi.\par +} +\xdef\ipsum@par@IT@D{% +Quinci fuor quete le lanose gote al nocchier de la livida palude, che ntorno a li occhi avea di fiamme rote.Ma quell anime, ch eran lasse e nude, cangiar colore e dibattero i denti, ratto che nteser le parole crude.Bestemmiavano Dio e lor parenti, l umana spezie e l loco e l tempo e l seme di lor semenza e di lor nascimenti.\par +} +\xdef\ipsum@par@IT@E{% +Quali fioretti dal notturno gelo chinati e chiusi, poi che l sol li mbianca, si drizzan tutti aperti in loro stelo, tal mi fec io di mia virtude stanca, e tanto buono ardire al cor mi corse, ch i cominciai come persona franca Oh pietosa colei che mi soccorse e te cortese ch ubidisti tosto a le vere parole che ti porse Tu m hai con disiderio il cor disposto sì al venir con le parole tue, ch i son tornato nel primo proposto.\par +} +\xdef\ipsum@par@IT@F{% +Questi parea che contra me venisse con la test alta e con rabbiosa fame, sì che parea che l aere ne tremesse.Ed una lupa, che di tutte brame sembiava carca ne la sua magrezza, e molte genti fé già viver grame, questa mi porse tanto di gravezza con la paura ch uscia di sua vista, ch io perdei la speranza de l altezza.\par +} +\xdef\ipsum@par@IT@G{% +GIntesi ch a così fatto tormento enno dannati i peccator carnali, che la ragion sommettono al talento.E come li stornei ne portan l ali nel freddo tempo, a schiera larga e piena, così quel fiato li spiriti mali di qua, di là, di giù, di sù li mena nulla speranza li conforta mai, non che di posa, ma di minor pena.\par +} +%==[SP] +\xdef\ipsum@par@ES@A{% +Vicente López, hemos contemplado con satisfacción en la sala de sus ilustres descendientes, fue preciso que todo Madrid se transformase que la desamortización edificara una ciudad nueva sobre los escombros de los conventos que el Marqués de Pontejos adecentase este lugarón que las reformas arancelarias del 49 y del 68, pusieran patas arriba todo el comercio madrileño que el grande ingenio de Salamanca idease los primeros ferrocarriles que Madrid se colocase, por arte del vapor, a cuarenta horas de París, y por fin, que hubiera muchas guerras y revoluciones y grandes trastornos en la riqueza individual.\par +} +\xdef\ipsum@par@ES@B{% +D.Baldomero no lo decía así pero sus vagas ideas sobre el asunto se condensaban en una expresión de moda y muy socorrida el mundo marcha.Felizmente para Juanito, estaba allí su madre, en quien se equilibraban maravillosamente el corazón y la inteligencia.\par +} +\xdef\ipsum@par@ES@C{% +Envolverse en él es como vestirse con un cuadro.La industria moderna no inventará nada que iguale a la ingenua poesía del mantón, salpicado de flores, flexible, pegadizo y mate, con aquel fleco que tiene algo de los enredos del sueño y aquella brillantez de color que iluminaba las muchedumbres en los tiempos en que su uso era general.\par +} +\xdef\ipsum@par@ES@D{% +Juanito Santa Cruz y Miquis llevaron un día una sartén no sé si a la clase de Novar o a la de Uribe, que explicaba Metafísica y frieron un par de huevos.Otras muchas tonterías de este jaez cuenta Villalonga, las cuales no copio por no alargar este relato.\par +} +\xdef\ipsum@par@ES@E{% +Porque Madrid no tenía de metrópoli más que el nombre y la vanidad ridícula.Era un payo con casaca de gentil-hombre y la camisa desgarrada y sucia.Por fin el paleto se disponía a ser señor de verdad.Isabel Cordero, que se anticipaba a su época, presintió la traída de aguas del Lozoya, en aquellos veranos ardorosos en que el Ayuntamiento refrescaba y alimentaba las fuentes del Berro y de la Teja con cubas de agua sacada de los pozos en aquellos tiempos en que los portales eran sentinas y en que los vecinos iban de un cuarto a otro con el pucherito en la mano, pidiendo por favor un poco de agua para afeitarse.\par +} +\xdef\ipsum@par@ES@F{% +Dígase lo que se quiera, hija, aquella educación no era buena.Hoy no se puede criar a los hijos de esa manera.Yo qué quieres que te diga, creo que en lo esencial Juanito no ha de faltarnos.Es de casta honrada, tiene la formalidad en la masa de la sangre.\par +} +\xdef\ipsum@par@ES@G{% +Pedro Mata opinaba del propio modo, aplicando a la sociedad y a la política el sistema de la medicina expectante.La naturaleza se cura sola no hay más que dejarla. Las fuerzas reparatrices lo hacen todo, ayudadas del aire.El hombre se educa sólo en virtud de las suscepciones constantes que determina en su espíritu la conciencia, ayudada del ambiente social.\par +} +%==[PT] +\xdef\ipsum@par@PT@A{% +Não resuscito Morto tenho eu vivido a vida toda.Trazeis-me rosas d onde as heis trazido, Boa velhinha e minha boa amiga Rosas no inverno permitti que o diga, Sois feiticeira d onde as heis colhido Na primavera de meus annos, ólho, Mas vejo abrolhos e não vejo flôres E vós colhêl-as, como as eu não colho.\par +} +\xdef\ipsum@par@PT@B{% +Então, se por encanto Fallando em ti, mas só, Todo banhado em pranto Me visses, tinhas dó.Tinhas.A piedade É filha da mulher, Que sempre quiz metade D uma afflicção qualquer.Havias ao teu rosto De me apertar a mim, D encher, fartar de gosto, Todo este abysmo sim.\par +} +\xdef\ipsum@par@PT@C{% +Abraços, abraços Que mal nos farão Se Deus me deu braços, Foi essa a razão.Um dia que o alto Me vinha abraçar, Fiquei-lhe d um salto Suspensa no ar.Amores, amores.Deixál-os dizer Se Deus me deu flôres, Foi para as colher.Eu tenho um moreno, Tenho um de outra côr, Tenho um mais pequeno, Tenho outro maior.\par +} +\xdef\ipsum@par@PT@D{% +Astros fio-me em vós, e Deus permitta Que os infelizes sempre em vós se fiem.Intima voz do fundo, bem do fundo D alma me diz e as lagrimas me saltam Vês os milhões de soes que o espaço esmaltam Pisa a terra a teus pés, inda ha mais mundo.Ha depois d esta vida inda outra vida.\par +} +\xdef\ipsum@par@PT@E{% +Bemdito seja Deus Além n aquelle serro Parece que raspou Com uma pá de ferro A terra que encontrou.Nem um só pé de trigo És lá capaz de vêr.Já eu disse commigo Como póde isto ser As arvores arranca O vento muito bem Serve-lhe de alavanca A rama que ellas tem.\par +} +\xdef\ipsum@par@PT@F{% +Foi um diluvio d agua E o furacão, que fez, Emilia até dá mágoa Tantos estragos vês Esta infeliz víuva, Foi-lhe o telhado ao ar Depois, já nem da chuva Tinha onde se abrigar.De mais a mais sósinha, Sem ter nenhum dos seus Aqui ao pé ceguinha.\par +} +\xdef\ipsum@par@PT@G{% +Não cabe Em nossa pobre lingua O que a alma sente, á mingua De voz, que só Deus sabe.Um dia, não sei que eu tinha...Uma tristeza tamanha E lembra-me ir á montanha, Que temos aqui vizinha, Onde em tempo me entretinha Horas e horas sósinha Quando ainda se não estranha Que n uma teia de aranha Se prenda uma innocentinha, Ou atraz d uma avesinha Se cance a vêr se a apanha.\par +} +%==[NL] +\xdef\ipsum@par@NL@A{% +Leidschen makker bij mij gelogeerd, met wien ik te Zomerzorg eten zou, om vervolgens over Velzerend naar Velzen te wandelen, waar wij den nacht zouden doorbrengen om s morgens naar de Breezaap te gaan en aldaar wat te botaniseeren, waarvan wij beide groote liefhebbers zijn. +} +\xdef\ipsum@par@NL@B{% +Rampen, die benauwen, kwellen en schokken, en die niet zelden een grooten en hevigen invloed hebben op de vorming van het karakter.De eerste en grootste hebben wij al gehad.Het is, met verlof van Pestalozzi en Prinsen, de school.Dat is een kanker een dagelijks weerkeerend verdriet. +} +\xdef\ipsum@par@NL@C{% +Welnu, er zijn er meer dan men denkt.Het grootworden, hoe schoon en voortreffelijk een uitvinding ook, is de oorzaak veler smarten.Want vooreerst, men steekt lange bloote armen uit de mouwen, groote en den kous uit de broek.Daarbij schaamt men zich dan gewoonlijk dat men nog rijglaarsjes of schoenen met gespen draagt, omdat er altijd eenige voorlijke knapen zijn, die al halve-laarzen hebben, en vroegtijdige juffertjes, die zich op schoenen met lange linten verheffen. +} +\xdef\ipsum@par@NL@D{% +Hebje nog altijd dat strooien soortje zei hij, de punt van degene, die hij genomen had, met het ongeloovigste gezicht van de wereld afbijtende, en toen zijn vroeger onderwerp weer opnemende, daar hij nog niet genoeg van had Jongens, ik vind dat het zoo mal staat als iemand niet rooken kan. +} +\xdef\ipsum@par@NL@E{% +Spreek mij niet van groote-menschen-jammeren Zij halen niet bij deze. Geen koopman die op springen staat ziet met meer angst den dag tegemoet waarop hij zal worden omvergegooid, 11 dan een blijde jongen of vroolijk meisje den dag, waarop men scheiden zal van den dubbelen tand Wij zijn aan de physieke rampen. +} +\xdef\ipsum@par@NL@F{% +Meergemelde natuuronderzoeker heeft even de Dreef verlaten, om in de verrukking van deze vreemdelingen te deelen, maar gaat nu door een allerliefst laantje, waarin de ochtendzon allergeestigst door t hoog geboomte speelt, op de logementen af. +} +\xdef\ipsum@par@NL@G{% +Malle dingen Anders een goed fatsoen.Ik hou niet van die ronde boorden. Boerhave en de nederige inwoner van het malle, kleine stadje waren er mooi mee hij verbeeldde t niet gezien te hebben. Kanje nog al niet rooken, Hildebrand Ik vloog naar den portecigares en bood hem dien aan. +} + +%====SENTENCES +%==[LAT] +\xdef\ipsum@sentence@LAT@A{quam sollicitudin a hendrerit eget pretium ut} +\xdef\ipsum@sentence@LAT@B{orci aliquam erat elit pharetra nec aliquet} +\xdef\ipsum@sentence@LAT@C{porta sapien curabitur sit amet libero eget} +\xdef\ipsum@sentence@LAT@D{auctor at ultrices eu sagittis ut purus} +\xdef\ipsum@sentence@LAT@E{erat volutpat curabitur ullamcorper est in mauris} +\xdef\ipsum@sentence@LAT@F{arcu turpis ac sem aliquam aliquet dapibus} +\xdef\ipsum@sentence@LAT@G{neque ac ipsum nunc fermentum massa at} +\xdef\ipsum@sentence@LAT@H{sed massa nunc euismod mauris luctus adipiscing} +\xdef\ipsum@sentence@LAT@I{nulla velit vel lectus cras dapibus mauris} +%==[FR] +\xdef\ipsum@sentence@FR@A{Sa réponse fut parfaite, et surtout longue comme un mandement ; elle laissait} +\xdef\ipsum@sentence@FR@B{Elle est pourtant bien jolie, cette main ! quel charme ! quelle noblesse} +\xdef\ipsum@sentence@FR@C{Bientôt, il ne fut plus question dans Verrières que de voir qui l’emporterait} +\xdef\ipsum@sentence@FR@D{Le soleil est fort chaud dans ces montagnes ; lorsqu’il brille d’aplomb} +\xdef\ipsum@sentence@FR@E{Esclaves du temps de la domination espagnole, ils conservent encore ce} +\xdef\ipsum@sentence@FR@F{Tout occupés à suivre exactement la marque noire tracée sur la pièce} +\xdef\ipsum@sentence@FR@G{Le lendemain, dès cinq heures, avant que Mme de Rênal fût visible} +\xdef\ipsum@sentence@FR@H{Des flots de fumée de tabac, s’élançant de la bouche de tous} +\xdef\ipsum@sentence@FR@I{Mme de Rênal, se promenant avec M Valenod et le sous-préfet} +%==[EN] +\xdef\ipsum@sentence@EN@A{I saw also piles of Bibles, which were to be distributed in the church} +\xdef\ipsum@sentence@EN@B{I saw an object moving for several moments at the bows, but it turned out} +\xdef\ipsum@sentence@EN@C{I returned by the boulevards on the starboard side, avoiding contact with} +\xdef\ipsum@sentence@EN@D{Everything was finished by evening; not a trace of mud was visible on the} +\xdef\ipsum@sentence@EN@E{A black mire that British mud which is so rarely absent from the pavement} +\xdef\ipsum@sentence@EN@F{What were we against the husband, the master? Nothing} +\xdef\ipsum@sentence@EN@G{I, following the general example, staked my dollar, and fate allotted me} +\xdef\ipsum@sentence@EN@H{Numerous vessels, brigs and schooners, were awaiting the tide; steamers} +\xdef\ipsum@sentence@EN@I{Beside the Great Eastern, these three-mast ships looked like barges; their} +%==[DE] +\xdef\ipsum@sentence@DE@A{ersten Stockwerk blieb Hans Castorp plötzlich stehen festgebannt} +\xdef\ipsum@sentence@DE@B{erdem sei sie kDEschsüchtig wie übrigens die meisten} +\xdef\ipsum@sentence@DE@C{siehst die Baumgrenze fast überall sie markiert sich ja auffallend} +\xdef\ipsum@sentence@DE@D{Verlobter war bei ihr englischer Marineoffizier aber er benahm} +\xdef\ipsum@sentence@DE@E{Joachim hatte das Deckenlicht eingeschaltet und in seiner zitternden} +\xdef\ipsum@sentence@DE@F{Schwebend zwischen ihnen und dem Unbekannten fragte} +\xdef\ipsum@sentence@DE@G{hielt an einer kleinen Station es war Davos Dorf wie Hans Castorp} +\xdef\ipsum@sentence@DE@H{ungefähr fünfunddrei ig Jahre alt breitschultrig fett bedeutend} +\xdef\ipsum@sentence@DE@I{spielt oder um jedes Präsens geflissentlich zu vermeiden} +%==[ES] +\xdef\ipsum@sentence@ES@A{Juanito Santa Cruz y Miquis llevaron un día una sartén} +\xdef\ipsum@sentence@ES@B{sublime es el más discreto y las bocas más elocuentes aquellas} +\xdef\ipsum@sentence@ES@C{innovador fue Senquá del cual puede decirse que representaba} +\xdef\ipsum@sentence@ES@D{Fedro y Cicerón no se hubieran incomodado si estuvieran oyendo} +\xdef\ipsum@sentence@ES@E{verle uníase el temor de que le sorbieran aquellos gabachos} +\xdef\ipsum@sentence@ES@F{compensar las pérdidas de la quemazón urgía plantear} +\xdef\ipsum@sentence@ES@G{Eulalia Muñoz era muy vanidosa y decía que no había} +\xdef\ipsum@sentence@ES@H{auxiliar eficacísimo de Casarredonda en sus valiosas contratas} +\xdef\ipsum@sentence@ES@I{Baldomero no lo decía así pero sus vagas ideas sobre el asunto} +%==[IT] +\xdef\ipsum@sentence@IT@A{quando tu sarai nel dolce mondo priegoti ch a la mente altrui} +\xdef\ipsum@sentence@IT@B{Così andammo infino a la lumera parlando cose che l tacere} +\xdef\ipsum@sentence@IT@C{Semiramìs di cui si legge che succedette a Nino e fu sua sposa} +\xdef\ipsum@sentence@IT@D{Allor fu la paura un poco queta che nel lago del cor m era durata} +\xdef\ipsum@sentence@IT@E{vizio di lussuria fu sì rotta che libito fé licito in sua legge} +\xdef\ipsum@sentence@IT@F{altra è colei che s ancise amorosa e ruppe fede al cener} +\xdef\ipsum@sentence@IT@G{Disse Beatrice loda di Dio vera ché non soccorri} +\xdef\ipsum@sentence@IT@H{conoscer la prima radice del nostro amor tu hai cotanto affetto} +\xdef\ipsum@sentence@IT@I{Tutti lo miran tutti onor li fanno quivi vid ïo Socrate e PITone} +%==[PT] +\xdef\ipsum@sentence@PT@A{espaço immenso Se amada estrella olhar piedoso envia} +\xdef\ipsum@sentence@PT@B{Dorme dorme Vergontea de marfim Mas dize o espelho a imagem} +\xdef\ipsum@sentence@PT@C{Está a porta aberta E vejo alumiada A parte descoberta} +\xdef\ipsum@sentence@PT@D{ainda o pranto corria E o cabello me batia No rosto que me doía} +\xdef\ipsum@sentence@PT@E{quando abraço e beijo O travesseiro e assim Acórdo} +\xdef\ipsum@sentence@PT@F{Girar talvez Em quanto a minha sombra meus amores} +\xdef\ipsum@sentence@PT@G{tempo simplesmente A flôr que vai nascendo e mais valia Seres} +\xdef\ipsum@sentence@PT@H{olhos só elles valem Duas estrellas bem vês Pois vozes} +\xdef\ipsum@sentence@PT@I{Enfeitiçaes que a formosura crêde Não vem da face avelludada} +%==[NL] +\xdef\ipsum@sentence@NL@A{Hertebaan vertoonen zich hier en daar een paar jonge dames} +\xdef\ipsum@sentence@NL@B{zijner majesteit onmiddellijke 15 tegenwoordigheid} +\xdef\ipsum@sentence@NL@C{morgen tweemaal op t bord zijt geschreven eens omdat} +\xdef\ipsum@sentence@NL@D{grooten schreeuw gaaft gij uwe vreugde over het laatste artikel} +\xdef\ipsum@sentence@NL@E{halsboord had 23 het door de warmte het was zeer warm weder} +\xdef\ipsum@sentence@NL@F{konden hoe zouden zij zich op den grappenmaker wreken} +\xdef\ipsum@sentence@NL@G{gewoonlijk hoogrood als hij binnen moet komen om aan oom en tante} +\xdef\ipsum@sentence@NL@H{species rangschikt en men tevens achtslaat op de vreemde vogelen} +\xdef\ipsum@sentence@NL@I{Waagdet gij nog eens een oude anecdote die u veel genoegen verschaft} + +%====COMMANDS +\NewDocumentCommand\ipsum{ D<>{} O{1} }{% + \useKVdefault[ipsumdummy]% + \setKV[ipsumdummy]{#1}% + %RANGE + \IfSubStr{#2}{-}% + {% + \StrCut{#2}{-}{\ipsumrangegeb}{\ipsumrangeend}% + \xintifboolexpr{\ipsumrangegeb < 1}{\xdef\ipsumrangegeb{1}}{}% + \IfEq{\ipsumtype}{par}% + {% + \xintifboolexpr{\ipsumrangeend > 7}{\xdef\ipsumrangeend{7}}{}% + }{}% + \IfEq{\ipsumtype}{sent}% + {% + \xintifboolexpr{\ipsumrangeend > 9}{\xdef\ipsumrangeend{9}}{}% + }{}% + \IfEq{\ipsumtype}{enum}% + {% + \xintifboolexpr{\ipsumrangeend > 9}{\xdef\ipsumrangeend{9}}{}% + }{}% + \IfEq{\ipsumtype}{item}% + {% + \xintifboolexpr{\ipsumrangeend > 9}{\xdef\ipsumrangeend{9}}{}% + }{}% + \xdef\ipsumrange{}% + \xintFor* ##1 in {\xintSeq{\ipsumrangegeb}{\ipsumrangeend}}\do{\xdef\ipsumrange{\ipsumrange##1}}% + }% + {% + \xintifboolexpr{#2 < 1 'or' #2 > 8}{\xdef\ipsumrange{1}}{\xdef\ipsumrange{#2}}% + }% + %TYPE PAR + \IfEq{\ipsumtype}{par}% + {% + \IfEq{\ipsumlg}{FR}% + {% + \IfSubStr{\ipsumrange}{1}{\ipsum@par@FR@A}{}% + \IfSubStr{\ipsumrange}{2}{\ipsum@par@FR@B}{}% + \IfSubStr{\ipsumrange}{3}{\ipsum@par@FR@C}{}% + \IfSubStr{\ipsumrange}{4}{\ipsum@par@FR@D}{}% + \IfSubStr{\ipsumrange}{5}{\ipsum@par@FR@E}{}% + \IfSubStr{\ipsumrange}{6}{\ipsum@par@FR@F}{}% + \IfSubStr{\ipsumrange}{7}{\ipsum@par@FR@G}{}% + }% + {}% + \IfEq{\ipsumlg}{EN}% + {% + \IfSubStr{\ipsumrange}{1}{\ipsum@par@EN@A}{}% + \IfSubStr{\ipsumrange}{2}{\ipsum@par@EN@B}{}% + \IfSubStr{\ipsumrange}{3}{\ipsum@par@EN@C}{}% + \IfSubStr{\ipsumrange}{4}{\ipsum@par@EN@D}{}% + \IfSubStr{\ipsumrange}{5}{\ipsum@par@EN@E}{}% + \IfSubStr{\ipsumrange}{6}{\ipsum@par@EN@F}{}% + \IfSubStr{\ipsumrange}{7}{\ipsum@par@EN@G}{}% + }% + {}% + \IfEq{\ipsumlg}{DE}% + {% + \IfSubStr{\ipsumrange}{1}{\ipsum@par@DE@A}{}% + \IfSubStr{\ipsumrange}{2}{\ipsum@par@DE@B}{}% + \IfSubStr{\ipsumrange}{3}{\ipsum@par@DE@C}{}% + \IfSubStr{\ipsumrange}{4}{\ipsum@par@DE@D}{}% + \IfSubStr{\ipsumrange}{5}{\ipsum@par@DE@E}{}% + \IfSubStr{\ipsumrange}{6}{\ipsum@par@DE@F}{}% + \IfSubStr{\ipsumrange}{7}{\ipsum@par@DE@G}{}% + }% + {}% + \IfEq{\ipsumlg}{IT}% + {% + \IfSubStr{\ipsumrange}{1}{\ipsum@par@IT@A}{}% + \IfSubStr{\ipsumrange}{2}{\ipsum@par@IT@B}{}% + \IfSubStr{\ipsumrange}{3}{\ipsum@par@IT@C}{}% + \IfSubStr{\ipsumrange}{4}{\ipsum@par@IT@D}{}% + \IfSubStr{\ipsumrange}{5}{\ipsum@par@IT@E}{}% + \IfSubStr{\ipsumrange}{6}{\ipsum@par@IT@F}{}% + \IfSubStr{\ipsumrange}{7}{\ipsum@par@IT@G}{}% + }% + {}% + \IfEq{\ipsumlg}{LAT}% + {% + \IfSubStr{\ipsumrange}{1}{\ipsum@par@LAT@A}{}% + \IfSubStr{\ipsumrange}{2}{\ipsum@par@LAT@B}{}% + \IfSubStr{\ipsumrange}{3}{\ipsum@par@LAT@C}{}% + \IfSubStr{\ipsumrange}{4}{\ipsum@par@LAT@D}{}% + \IfSubStr{\ipsumrange}{5}{\ipsum@par@LAT@E}{}% + \IfSubStr{\ipsumrange}{6}{\ipsum@par@LAT@F}{}% + \IfSubStr{\ipsumrange}{7}{\ipsum@par@LAT@G}{}% + }% + {}% + \IfEq{\ipsumlg}{ES}% + {% + \IfSubStr{\ipsumrange}{1}{\ipsum@par@ES@A}{}% + \IfSubStr{\ipsumrange}{2}{\ipsum@par@ES@B}{}% + \IfSubStr{\ipsumrange}{3}{\ipsum@par@ES@C}{}% + \IfSubStr{\ipsumrange}{4}{\ipsum@par@ES@D}{}% + \IfSubStr{\ipsumrange}{5}{\ipsum@par@ES@E}{}% + \IfSubStr{\ipsumrange}{6}{\ipsum@par@ES@F}{}% + \IfSubStr{\ipsumrange}{7}{\ipsum@par@ES@G}{}% + }% + {}% + \IfEq{\ipsumlg}{PT}% + {% + \IfSubStr{\ipsumrange}{1}{\ipsum@par@PT@A}{}% + \IfSubStr{\ipsumrange}{2}{\ipsum@par@PT@B}{}% + \IfSubStr{\ipsumrange}{3}{\ipsum@par@PT@C}{}% + \IfSubStr{\ipsumrange}{4}{\ipsum@par@PT@D}{}% + \IfSubStr{\ipsumrange}{5}{\ipsum@par@PT@E}{}% + \IfSubStr{\ipsumrange}{6}{\ipsum@par@PT@F}{}% + \IfSubStr{\ipsumrange}{7}{\ipsum@par@PT@G}{}% + }% + {}% + \IfEq{\ipsumlg}{NL}% + {% + \IfSubStr{\ipsumrange}{1}{\ipsum@par@NL@A}{}% + \IfSubStr{\ipsumrange}{2}{\ipsum@par@NL@B}{}% + \IfSubStr{\ipsumrange}{3}{\ipsum@par@NL@C}{}% + \IfSubStr{\ipsumrange}{4}{\ipsum@par@NL@D}{}% + \IfSubStr{\ipsumrange}{5}{\ipsum@par@NL@E}{}% + \IfSubStr{\ipsumrange}{6}{\ipsum@par@NL@F}{}% + \IfSubStr{\ipsumrange}{7}{\ipsum@par@NL@G}{}% + }% + {}% + }% + {} + %TYPE PAR + \IfEq{\ipsumtype}{sent}% + {% + \IfEq{\ipsumlg}{FR}% + {% + \IfSubStr{\ipsumrange}{1}{\ipsum@sentence@FR@A}{}\par% + \IfSubStr{\ipsumrange}{2}{\ipsum@sentence@FR@B}{}\par% + \IfSubStr{\ipsumrange}{3}{\ipsum@sentence@FR@C}{}\par% + \IfSubStr{\ipsumrange}{4}{\ipsum@sentence@FR@D}{}\par% + \IfSubStr{\ipsumrange}{5}{\ipsum@sentence@FR@E}{}\par% + \IfSubStr{\ipsumrange}{6}{\ipsum@sentence@FR@F}{}\par% + \IfSubStr{\ipsumrange}{7}{\ipsum@sentence@FR@G}{}\par% + \IfSubStr{\ipsumrange}{8}{\ipsum@sentence@FR@H}{}\par% + \IfSubStr{\ipsumrange}{9}{\ipsum@sentence@FR@I}{}\par% + }% + {}% + \IfEq{\ipsumlg}{EN}% + {% + \IfSubStr{\ipsumrange}{1}{\ipsum@sentence@EN@A}{}\par% + \IfSubStr{\ipsumrange}{2}{\ipsum@sentence@EN@B}{}\par% + \IfSubStr{\ipsumrange}{3}{\ipsum@sentence@EN@C}{}\par% + \IfSubStr{\ipsumrange}{4}{\ipsum@sentence@EN@D}{}\par% + \IfSubStr{\ipsumrange}{5}{\ipsum@sentence@EN@E}{}\par% + \IfSubStr{\ipsumrange}{6}{\ipsum@sentence@EN@F}{}\par% + \IfSubStr{\ipsumrange}{7}{\ipsum@sentence@EN@G}{}\par% + \IfSubStr{\ipsumrange}{8}{\ipsum@sentence@EN@H}{}\par% + \IfSubStr{\ipsumrange}{9}{\ipsum@sentence@EN@I}{}\par% + }% + {}% + \IfEq{\ipsumlg}{DE}% + {% + \IfSubStr{\ipsumrange}{1}{\ipsum@sentence@DE@A}{}\par% + \IfSubStr{\ipsumrange}{2}{\ipsum@sentence@DE@B}{}\par% + \IfSubStr{\ipsumrange}{3}{\ipsum@sentence@DE@C}{}\par% + \IfSubStr{\ipsumrange}{4}{\ipsum@sentence@DE@D}{}\par% + \IfSubStr{\ipsumrange}{5}{\ipsum@sentence@DE@E}{}\par% + \IfSubStr{\ipsumrange}{6}{\ipsum@sentence@DE@F}{}\par% + \IfSubStr{\ipsumrange}{7}{\ipsum@sentence@DE@G}{}\par% + \IfSubStr{\ipsumrange}{8}{\ipsum@sentence@DE@H}{}\par% + \IfSubStr{\ipsumrange}{9}{\ipsum@sentence@DE@I}{}\par% + }% + {}% + \IfEq{\ipsumlg}{IT}% + {% + \IfSubStr{\ipsumrange}{1}{\ipsum@sentence@IT@A}{}\par% + \IfSubStr{\ipsumrange}{2}{\ipsum@sentence@IT@B}{}\par% + \IfSubStr{\ipsumrange}{3}{\ipsum@sentence@IT@C}{}\par% + \IfSubStr{\ipsumrange}{4}{\ipsum@sentence@IT@D}{}\par% + \IfSubStr{\ipsumrange}{5}{\ipsum@sentence@IT@E}{}\par% + \IfSubStr{\ipsumrange}{6}{\ipsum@sentence@IT@F}{}\par% + \IfSubStr{\ipsumrange}{7}{\ipsum@sentence@IT@G}{}\par% + \IfSubStr{\ipsumrange}{8}{\ipsum@sentence@IT@H}{}\par% + \IfSubStr{\ipsumrange}{9}{\ipsum@sentence@IT@I}{}\par% + }% + {}% + \IfEq{\ipsumlg}{LAT}% + {% + \IfSubStr{\ipsumrange}{1}{\ipsum@sentence@LAT@A}{}\par% + \IfSubStr{\ipsumrange}{2}{\ipsum@sentence@LAT@B}{}\par% + \IfSubStr{\ipsumrange}{3}{\ipsum@sentence@LAT@C}{}\par% + \IfSubStr{\ipsumrange}{4}{\ipsum@sentence@LAT@D}{}\par% + \IfSubStr{\ipsumrange}{5}{\ipsum@sentence@LAT@E}{}\par% + \IfSubStr{\ipsumrange}{6}{\ipsum@sentence@LAT@F}{}\par% + \IfSubStr{\ipsumrange}{7}{\ipsum@sentence@LAT@G}{}\par% + \IfSubStr{\ipsumrange}{8}{\ipsum@sentence@LAT@H}{}\par% + \IfSubStr{\ipsumrange}{9}{\ipsum@sentence@LAT@I}{}\par% + }% + {}% + \IfEq{\ipsumlg}{ES}% + {% + \IfSubStr{\ipsumrange}{1}{\ipsum@sentence@ES@A}{}\par% + \IfSubStr{\ipsumrange}{2}{\ipsum@sentence@ES@B}{}\par% + \IfSubStr{\ipsumrange}{3}{\ipsum@sentence@ES@C}{}\par% + \IfSubStr{\ipsumrange}{4}{\ipsum@sentence@ES@D}{}\par% + \IfSubStr{\ipsumrange}{5}{\ipsum@sentence@ES@E}{}\par% + \IfSubStr{\ipsumrange}{6}{\ipsum@sentence@ES@F}{}\par% + \IfSubStr{\ipsumrange}{7}{\ipsum@sentence@ES@G}{}\par% + \IfSubStr{\ipsumrange}{8}{\ipsum@sentence@ES@H}{}\par% + \IfSubStr{\ipsumrange}{9}{\ipsum@sentence@ES@I}{}\par% + }% + {}% + \IfEq{\ipsumlg}{PT}% + {% + \IfSubStr{\ipsumrange}{1}{\ipsum@sentence@PT@A}{}\par% + \IfSubStr{\ipsumrange}{2}{\ipsum@sentence@PT@B}{}\par% + \IfSubStr{\ipsumrange}{3}{\ipsum@sentence@PT@C}{}\par% + \IfSubStr{\ipsumrange}{4}{\ipsum@sentence@PT@D}{}\par% + \IfSubStr{\ipsumrange}{5}{\ipsum@sentence@PT@E}{}\par% + \IfSubStr{\ipsumrange}{6}{\ipsum@sentence@PT@F}{}\par% + \IfSubStr{\ipsumrange}{7}{\ipsum@sentence@PT@G}{}\par% + \IfSubStr{\ipsumrange}{8}{\ipsum@sentence@PT@H}{}\par% + \IfSubStr{\ipsumrange}{9}{\ipsum@sentence@PT@I}{}\par% + }% + {}% + \IfEq{\ipsumlg}{NL}% + {% + \IfSubStr{\ipsumrange}{1}{\ipsum@sentence@NL@A}{}\par% + \IfSubStr{\ipsumrange}{2}{\ipsum@sentence@NL@B}{}\par% + \IfSubStr{\ipsumrange}{3}{\ipsum@sentence@NL@C}{}\par% + \IfSubStr{\ipsumrange}{4}{\ipsum@sentence@NL@D}{}\par% + \IfSubStr{\ipsumrange}{5}{\ipsum@sentence@NL@E}{}\par% + \IfSubStr{\ipsumrange}{6}{\ipsum@sentence@NL@F}{}\par% + \IfSubStr{\ipsumrange}{7}{\ipsum@sentence@NL@G}{}\par% + \IfSubStr{\ipsumrange}{8}{\ipsum@sentence@NL@H}{}\par% + \IfSubStr{\ipsumrange}{9}{\ipsum@sentence@NL@I}{}\par% + }% + {}% + }% + {}% + \IfEq{\ipsumtype}{enum}% + {% + \begin{enumerate} + \IfEq{\ipsumlg}{FR}% + {% + \IfSubStr{\ipsumrange}{1}{\item \ipsum@sentence@FR@A}{} + \IfSubStr{\ipsumrange}{2}{\item \ipsum@sentence@FR@B}{} + \IfSubStr{\ipsumrange}{3}{\item \ipsum@sentence@FR@C}{} + \IfSubStr{\ipsumrange}{4}{\item \ipsum@sentence@FR@D}{} + \IfSubStr{\ipsumrange}{5}{\item \ipsum@sentence@FR@E}{} + \IfSubStr{\ipsumrange}{6}{\item \ipsum@sentence@FR@F}{} + \IfSubStr{\ipsumrange}{7}{\item \ipsum@sentence@FR@G}{} + \IfSubStr{\ipsumrange}{8}{\item \ipsum@sentence@FR@H}{} + \IfSubStr{\ipsumrange}{9}{\item \ipsum@sentence@FR@I}{} + }% + {}% + \IfEq{\ipsumlg}{EN}% + {% + \IfSubStr{\ipsumrange}{1}{\item \ipsum@sentence@EN@A}{} + \IfSubStr{\ipsumrange}{2}{\item \ipsum@sentence@EN@B}{} + \IfSubStr{\ipsumrange}{3}{\item \ipsum@sentence@EN@C}{} + \IfSubStr{\ipsumrange}{4}{\item \ipsum@sentence@EN@D}{} + \IfSubStr{\ipsumrange}{5}{\item \ipsum@sentence@EN@E}{} + \IfSubStr{\ipsumrange}{6}{\item \ipsum@sentence@EN@F}{} + \IfSubStr{\ipsumrange}{7}{\item \ipsum@sentence@EN@G}{} + \IfSubStr{\ipsumrange}{8}{\item \ipsum@sentence@EN@H}{} + \IfSubStr{\ipsumrange}{9}{\item \ipsum@sentence@EN@I}{} + }% + {}% + \IfEq{\ipsumlg}{DE}% + {% + \IfSubStr{\ipsumrange}{1}{\item \ipsum@sentence@DE@A}{} + \IfSubStr{\ipsumrange}{2}{\item \ipsum@sentence@DE@B}{} + \IfSubStr{\ipsumrange}{3}{\item \ipsum@sentence@DE@C}{} + \IfSubStr{\ipsumrange}{4}{\item \ipsum@sentence@DE@D}{} + \IfSubStr{\ipsumrange}{5}{\item \ipsum@sentence@DE@E}{} + \IfSubStr{\ipsumrange}{6}{\item \ipsum@sentence@DE@F}{} + \IfSubStr{\ipsumrange}{7}{\item \ipsum@sentence@DE@G}{} + \IfSubStr{\ipsumrange}{8}{\item \ipsum@sentence@DE@H}{} + \IfSubStr{\ipsumrange}{9}{\item \ipsum@sentence@DE@I}{} + }% + {}% + \IfEq{\ipsumlg}{IT}% + {% + \IfSubStr{\ipsumrange}{1}{\item \ipsum@sentence@IT@A}{} + \IfSubStr{\ipsumrange}{2}{\item \ipsum@sentence@IT@B}{} + \IfSubStr{\ipsumrange}{3}{\item \ipsum@sentence@IT@C}{} + \IfSubStr{\ipsumrange}{4}{\item \ipsum@sentence@IT@D}{} + \IfSubStr{\ipsumrange}{5}{\item \ipsum@sentence@IT@E}{} + \IfSubStr{\ipsumrange}{6}{\item \ipsum@sentence@IT@F}{} + \IfSubStr{\ipsumrange}{7}{\item \ipsum@sentence@IT@G}{} + \IfSubStr{\ipsumrange}{8}{\item \ipsum@sentence@IT@H}{} + \IfSubStr{\ipsumrange}{9}{\item \ipsum@sentence@IT@I}{} + }% + {}% + \IfEq{\ipsumlg}{LAT}% + {% + \IfSubStr{\ipsumrange}{1}{\item \ipsum@sentence@LAT@A}{} + \IfSubStr{\ipsumrange}{2}{\item \ipsum@sentence@LAT@B}{} + \IfSubStr{\ipsumrange}{3}{\item \ipsum@sentence@LAT@C}{} + \IfSubStr{\ipsumrange}{4}{\item \ipsum@sentence@LAT@D}{} + \IfSubStr{\ipsumrange}{5}{\item \ipsum@sentence@LAT@E}{} + \IfSubStr{\ipsumrange}{6}{\item \ipsum@sentence@LAT@F}{} + \IfSubStr{\ipsumrange}{7}{\item \ipsum@sentence@LAT@G}{} + \IfSubStr{\ipsumrange}{8}{\item \ipsum@sentence@LAT@H}{} + \IfSubStr{\ipsumrange}{9}{\item \ipsum@sentence@LAT@I}{} + }% + {}% + \IfEq{\ipsumlg}{ES}% + {% + \IfSubStr{\ipsumrange}{1}{\item \ipsum@sentence@ES@A}{} + \IfSubStr{\ipsumrange}{2}{\item \ipsum@sentence@ES@B}{} + \IfSubStr{\ipsumrange}{3}{\item \ipsum@sentence@ES@C}{} + \IfSubStr{\ipsumrange}{4}{\item \ipsum@sentence@ES@D}{} + \IfSubStr{\ipsumrange}{5}{\item \ipsum@sentence@ES@E}{} + \IfSubStr{\ipsumrange}{6}{\item \ipsum@sentence@ES@F}{} + \IfSubStr{\ipsumrange}{7}{\item \ipsum@sentence@ES@G}{} + \IfSubStr{\ipsumrange}{8}{\item \ipsum@sentence@ES@H}{} + \IfSubStr{\ipsumrange}{9}{\item \ipsum@sentence@ES@I}{} + }% + {}% + \IfEq{\ipsumlg}{PT}% + {% + \IfSubStr{\ipsumrange}{1}{\item \ipsum@sentence@PT@A}{} + \IfSubStr{\ipsumrange}{2}{\item \ipsum@sentence@PT@B}{} + \IfSubStr{\ipsumrange}{3}{\item \ipsum@sentence@PT@C}{} + \IfSubStr{\ipsumrange}{4}{\item \ipsum@sentence@PT@D}{} + \IfSubStr{\ipsumrange}{5}{\item \ipsum@sentence@PT@E}{} + \IfSubStr{\ipsumrange}{6}{\item \ipsum@sentence@PT@F}{} + \IfSubStr{\ipsumrange}{7}{\item \ipsum@sentence@PT@G}{} + \IfSubStr{\ipsumrange}{8}{\item \ipsum@sentence@PT@H}{} + \IfSubStr{\ipsumrange}{9}{\item \ipsum@sentence@PT@I}{} + }% + {}% + \IfEq{\ipsumlg}{NL}% + {% + \IfSubStr{\ipsumrange}{1}{\item \ipsum@sentence@NL@A}{} + \IfSubStr{\ipsumrange}{2}{\item \ipsum@sentence@NL@B}{} + \IfSubStr{\ipsumrange}{3}{\item \ipsum@sentence@NL@C}{} + \IfSubStr{\ipsumrange}{4}{\item \ipsum@sentence@NL@D}{} + \IfSubStr{\ipsumrange}{5}{\item \ipsum@sentence@NL@E}{} + \IfSubStr{\ipsumrange}{6}{\item \ipsum@sentence@NL@F}{} + \IfSubStr{\ipsumrange}{7}{\item \ipsum@sentence@NL@G}{} + \IfSubStr{\ipsumrange}{8}{\item \ipsum@sentence@NL@H}{} + \IfSubStr{\ipsumrange}{9}{\item \ipsum@sentence@NL@I}{} + }% + {}% + \end{enumerate} + }% + {}% + \IfEq{\ipsumtype}{item}% + {% + \begin{itemize} + \IfEq{\ipsumlg}{FR}% + {% + \IfSubStr{\ipsumrange}{1}{\item \ipsum@sentence@FR@A}{} + \IfSubStr{\ipsumrange}{2}{\item \ipsum@sentence@FR@B}{} + \IfSubStr{\ipsumrange}{3}{\item \ipsum@sentence@FR@C}{} + \IfSubStr{\ipsumrange}{4}{\item \ipsum@sentence@FR@D}{} + \IfSubStr{\ipsumrange}{5}{\item \ipsum@sentence@FR@E}{} + \IfSubStr{\ipsumrange}{6}{\item \ipsum@sentence@FR@F}{} + \IfSubStr{\ipsumrange}{7}{\item \ipsum@sentence@FR@G}{} + \IfSubStr{\ipsumrange}{8}{\item \ipsum@sentence@FR@H}{} + \IfSubStr{\ipsumrange}{9}{\item \ipsum@sentence@FR@I}{} + }% + {}% + \IfEq{\ipsumlg}{EN}% + {% + \IfSubStr{\ipsumrange}{1}{\item \ipsum@sentence@EN@A}{} + \IfSubStr{\ipsumrange}{2}{\item \ipsum@sentence@EN@B}{} + \IfSubStr{\ipsumrange}{3}{\item \ipsum@sentence@EN@C}{} + \IfSubStr{\ipsumrange}{4}{\item \ipsum@sentence@EN@D}{} + \IfSubStr{\ipsumrange}{5}{\item \ipsum@sentence@EN@E}{} + \IfSubStr{\ipsumrange}{6}{\item \ipsum@sentence@EN@F}{} + \IfSubStr{\ipsumrange}{7}{\item \ipsum@sentence@EN@G}{} + \IfSubStr{\ipsumrange}{8}{\item \ipsum@sentence@EN@H}{} + \IfSubStr{\ipsumrange}{9}{\item \ipsum@sentence@EN@I}{} + }% + {}% + \IfEq{\ipsumlg}{DE}% + {% + \IfSubStr{\ipsumrange}{1}{\item \ipsum@sentence@DE@A}{} + \IfSubStr{\ipsumrange}{2}{\item \ipsum@sentence@DE@B}{} + \IfSubStr{\ipsumrange}{3}{\item \ipsum@sentence@DE@C}{} + \IfSubStr{\ipsumrange}{4}{\item \ipsum@sentence@DE@D}{} + \IfSubStr{\ipsumrange}{5}{\item \ipsum@sentence@DE@E}{} + \IfSubStr{\ipsumrange}{6}{\item \ipsum@sentence@DE@F}{} + \IfSubStr{\ipsumrange}{7}{\item \ipsum@sentence@DE@G}{} + \IfSubStr{\ipsumrange}{8}{\item \ipsum@sentence@DE@H}{} + \IfSubStr{\ipsumrange}{9}{\item \ipsum@sentence@DE@I}{} + }% + {}% + \IfEq{\ipsumlg}{IT}% + {% + \IfSubStr{\ipsumrange}{1}{\item \ipsum@sentence@IT@A}{} + \IfSubStr{\ipsumrange}{2}{\item \ipsum@sentence@IT@B}{} + \IfSubStr{\ipsumrange}{3}{\item \ipsum@sentence@IT@C}{} + \IfSubStr{\ipsumrange}{4}{\item \ipsum@sentence@IT@D}{} + \IfSubStr{\ipsumrange}{5}{\item \ipsum@sentence@IT@E}{} + \IfSubStr{\ipsumrange}{6}{\item \ipsum@sentence@IT@F}{} + \IfSubStr{\ipsumrange}{7}{\item \ipsum@sentence@IT@G}{} + \IfSubStr{\ipsumrange}{8}{\item \ipsum@sentence@IT@H}{} + \IfSubStr{\ipsumrange}{9}{\item \ipsum@sentence@IT@I}{} + }% + {}% + \IfEq{\ipsumlg}{LAT}% + {% + \IfSubStr{\ipsumrange}{1}{\item \ipsum@sentence@LAT@A}{} + \IfSubStr{\ipsumrange}{2}{\item \ipsum@sentence@LAT@B}{} + \IfSubStr{\ipsumrange}{3}{\item \ipsum@sentence@LAT@C}{} + \IfSubStr{\ipsumrange}{4}{\item \ipsum@sentence@LAT@D}{} + \IfSubStr{\ipsumrange}{5}{\item \ipsum@sentence@LAT@E}{} + \IfSubStr{\ipsumrange}{6}{\item \ipsum@sentence@LAT@F}{} + \IfSubStr{\ipsumrange}{7}{\item \ipsum@sentence@LAT@G}{} + \IfSubStr{\ipsumrange}{8}{\item \ipsum@sentence@LAT@H}{} + \IfSubStr{\ipsumrange}{9}{\item \ipsum@sentence@LAT@I}{} + }% + {}% + \IfEq{\ipsumlg}{ES}% + {% + \IfSubStr{\ipsumrange}{1}{\item \ipsum@sentence@ES@A}{} + \IfSubStr{\ipsumrange}{2}{\item \ipsum@sentence@ES@B}{} + \IfSubStr{\ipsumrange}{3}{\item \ipsum@sentence@ES@C}{} + \IfSubStr{\ipsumrange}{4}{\item \ipsum@sentence@ES@D}{} + \IfSubStr{\ipsumrange}{5}{\item \ipsum@sentence@ES@E}{} + \IfSubStr{\ipsumrange}{6}{\item \ipsum@sentence@ES@F}{} + \IfSubStr{\ipsumrange}{7}{\item \ipsum@sentence@ES@G}{} + \IfSubStr{\ipsumrange}{8}{\item \ipsum@sentence@ES@H}{} + \IfSubStr{\ipsumrange}{9}{\item \ipsum@sentence@ES@I}{} + }% + {}% + \IfEq{\ipsumlg}{PT}% + {% + \IfSubStr{\ipsumrange}{1}{\item \ipsum@sentence@PT@A}{} + \IfSubStr{\ipsumrange}{2}{\item \ipsum@sentence@PT@B}{} + \IfSubStr{\ipsumrange}{3}{\item \ipsum@sentence@PT@C}{} + \IfSubStr{\ipsumrange}{4}{\item \ipsum@sentence@PT@D}{} + \IfSubStr{\ipsumrange}{5}{\item \ipsum@sentence@PT@E}{} + \IfSubStr{\ipsumrange}{6}{\item \ipsum@sentence@PT@F}{} + \IfSubStr{\ipsumrange}{7}{\item \ipsum@sentence@PT@G}{} + \IfSubStr{\ipsumrange}{8}{\item \ipsum@sentence@PT@H}{} + \IfSubStr{\ipsumrange}{9}{\item \ipsum@sentence@PT@I}{} + }% + {}% + \IfEq{\ipsumlg}{NL}% + {% + \IfSubStr{\ipsumrange}{1}{\item \ipsum@sentence@NL@A}{} + \IfSubStr{\ipsumrange}{2}{\item \ipsum@sentence@NL@B}{} + \IfSubStr{\ipsumrange}{3}{\item \ipsum@sentence@NL@C}{} + \IfSubStr{\ipsumrange}{4}{\item \ipsum@sentence@NL@D}{} + \IfSubStr{\ipsumrange}{5}{\item \ipsum@sentence@NL@E}{} + \IfSubStr{\ipsumrange}{6}{\item \ipsum@sentence@NL@F}{} + \IfSubStr{\ipsumrange}{7}{\item \ipsum@sentence@NL@G}{} + \IfSubStr{\ipsumrange}{8}{\item \ipsum@sentence@NL@H}{} + \IfSubStr{\ipsumrange}{9}{\item \ipsum@sentence@NL@I}{} + }% + {}% + \end{itemize} + }% + {}% +} + +\endinput \ No newline at end of file diff --git a/support/latexmk/CHANGES b/support/latexmk/CHANGES index f43cb57bb7..09e5cd9b2e 100644 --- a/support/latexmk/CHANGES +++ b/support/latexmk/CHANGES @@ -857,5 +857,19 @@ From v. 4.79 to 4.80 Various bug fixes and corrections, improvements in error and warning messages, and corrections to documentation. - +From v. 4.80 to 4.81 + Fix various problems when filenames contain non-ASCII characters, + especially when MSYS is used. + Fix problems with analyzing wrapped lines in log files, especially with + lualatex. + With options like -dvi that set the kind of output file, turn off + settings corresponding to incompatible options. + Improved warning and error messages. + Fix problem when using the $use_make_for_missing_files, with the search + over possible extensions for a missing file. + Add .run.xml to the list of generated extensions in @generated_exts. + Correct the behavior after errors. Previously force_mode didn't work as + documented, terminating processing too early, while in + preview_continuous_mode, incorrect extra runs were sometimes made. + Other bug fixes. diff --git a/support/latexmk/INSTALL b/support/latexmk/INSTALL index fc4b4a0f62..359686d527 100644 --- a/support/latexmk/INSTALL +++ b/support/latexmk/INSTALL @@ -1,6 +1,6 @@ INSTALLING latexmk ================== - (Version 4.80, 4 Apr. 2023) + (Version 4.81, 6 Nov. 2023) John Collins Physics Department diff --git a/support/latexmk/README b/support/latexmk/README index 87b742eb53..72848ce8f3 100644 --- a/support/latexmk/README +++ b/support/latexmk/README @@ -1,4 +1,4 @@ -Latexmk, version 4.80, 4 Apr 2023 +Latexmk, version 4.81, 6 Nov 2023 --------------------------------- Latexmk completely automates the process of generating a LaTeX diff --git a/support/latexmk/example_rcfiles/README-latexmk-rcfiles b/support/latexmk/example_rcfiles/README-latexmk-rcfiles index 19690cf168..1517b35ed5 100644 --- a/support/latexmk/example_rcfiles/README-latexmk-rcfiles +++ b/support/latexmk/example_rcfiles/README-latexmk-rcfiles @@ -26,7 +26,7 @@ NOTES: But it is preferable to leave the quotes in, since they provide safety against special characters in filenames. The double quotes - appear not to cause problems in all situations that I have tried. + appear not to cause problems in all the situations that I have tried. 5. Note that the files for exceltex and pythontex illustrate an answer to an issue that arises in the following generic situation: diff --git a/support/latexmk/example_rcfiles/pdflatex_latexmkrc b/support/latexmk/example_rcfiles/pdflatex_latexmkrc new file mode 100644 index 0000000000..38c7e6670d --- /dev/null +++ b/support/latexmk/example_rcfiles/pdflatex_latexmkrc @@ -0,0 +1,6 @@ +# This shows how to configure latexmk to use pdflatex + +$pdf_mode = 1; +$postscript_mode = $dvi_mode = 0; + + diff --git a/support/latexmk/example_rcfiles/pythontex-latexmkrc b/support/latexmk/example_rcfiles/pythontex-latexmkrc index 825706a630..458c5a4070 100644 --- a/support/latexmk/example_rcfiles/pythontex-latexmkrc +++ b/support/latexmk/example_rcfiles/pythontex-latexmkrc @@ -15,6 +15,13 @@ $clean_ext .= " pythontex-files-%R/* pythontex-files-%R"; push @generated_exts, 'pytxcode'; $pythontex = 'pythontex %O %S'; + +# Specify a rule for running the pythontex program. +# Because of the unusual structure of input and output files, I've used +# an internal hash variable %extra_rule_spec of latexmk to specify the +# rule. Currently the only documentation is in the latexmk source code. +# Probably the following line is stable against future changes in latexmk, +# but that isn't guaranteed. $extra_rule_spec{'pythontex'} = [ 'internal', '', 'mypythontex', "%Y%R.pytxcode", "%Ypythontex-files-%R/%R.pytxmcr", "%R", 1 ]; sub mypythontex { diff --git a/support/latexmk/example_rcfiles/schultz-texshop-latexmkrc b/support/latexmk/example_rcfiles/schultz-texshop-latexmkrc deleted file mode 100644 index 6f43e982ec..0000000000 --- a/support/latexmk/example_rcfiles/schultz-texshop-latexmkrc +++ /dev/null @@ -1,77 +0,0 @@ -# Use of glossaries, extra indexes, epstopdf, and other images conversions -# Thanks to Herb Schulz - - -$pdflatex = 'pdflatex --shell-escape %O %S'; - -# Custom dependency for glossary/glossaries package -# if you make custom glossaries you may have to add items to the @cus_dep_list and corresponding sub-routines -add_cus_dep( 'glo', 'gls', 0, 'makeglo2gls' ); -sub makeglo2gls { - system( "makeindex -s \"$_[0].ist\" -t \"$_[0].glg\" -o \"$_[0].gls\" \"$_[0].glo\"" ); -} -# The glossaries package, with the [acronym] option, produces a .acn file when processed with (xe/pdf)latex and -# then makeindex to process the .acn into .acr and finally runs of (xe/pdf)latex to read in the .acr file. Unfortunately -# the glossary package does just the reverse; i.e. (xe/pdf)latex processing produces a .acr files and makeindex then -# is used to convert the .acr file to a .acn file which is then ... . This dependency assumes the glossaries package. -add_cus_dep( 'acn', 'acr', 0, 'makeacn2acr' ); -sub makeacn2acr { - system( "makeindex -s \"$_[0].ist\" -t \"$_[0].alg\" -o \"$_[0].acr\" \"$_[0].acn\"" ); -} -# for glossary package (Sigh...) --- they can co-exist! -add_cus_dep( 'acr', 'acn', 0, 'makeacr2acn' ); -sub makeacr2acn { - system( "makeindex -s \"$_[0].ist\" -t \"$_[0].alg\" -o \"$_[0].acn\" \"$_[0].acr\"" ); -} -# example of an added custom glossary type that is used in some of the glossary/glossaries example files: -# this is for the new glossary type command \newglossary[nlg]{notation}{not}{ntn}{Notation} from the glossaries package -# NOTE: the glossary package uses a very different command: the and -# are reversed in the calling sequence :-( -add_cus_dep( 'ntn', 'not', 0, 'makentn2not' ); -sub makentn2not { - system("makeindex -s \"$_[0].ist\" -t \"$_[0].nlg\" -o \"$_[0].not\" \"$_[0].ntn\"" ); -} -# for the glossary package (Sigh...) --- they can co-exist! -add_cus_dep( 'not', 'ntn', 0, 'makenot2ntn' ); -sub makenot2ntn { - system("makeindex -s \"$_[0].ist\" -t \"$_[0].nlg\" -o \"$_[0].ntn\" \"$_[0].not\"" ); -} - -# dependencies for custom indexes using the index package -# examples for sample.tex for index package: - add_cus_dep( 'adx', 'and', 0, 'makeadx2and' ); -sub makeadx2and { - system( "makeindex -o \"$_[0].and\" \"$_[0].adx\"" ); -} -add_cus_dep( 'ndx', 'nnd', 0, 'makendx2nnd' ); -sub makendx2nnd { - system( "makeindex -o \"$_[0].nnd\" \"$_[0].ndx\"" ); -} -add_cus_dep( 'ldx', 'lnd', 0, 'makeldx2lnd' ); -sub makeldx2lnd { - system( "makeindex -o \"$_[0].lnd\" \"$_[0].ldx\"" ); -} - -# Custom dependency and function for nomencl package -add_cus_dep( 'nlo', 'nls', 0, 'makenlo2nls' ); -sub makenlo2nls { - system( "makeindex -s nomencl.ist -o \"$_[0].nls\" \"$_[0].nlo\"" ); -} - -# Custom dependency and function(s) for epstopdf package - -# FOR USERS OF epstopf v1.4 and before: should also work with v1.5 and later -# note: you may get extras runs if you use the .eps extension in the \includgraphics command -# deletes an outdated pdf-image, and triggers a pdflatex-run -add_cus_dep( 'eps', 'pdf', 0, 'cus_dep_delete_dest' ); - -# FOR USERS OF epstopdf v1.5 and later only: -# load it as \usepackage[update,prepend]{epstopdf} -# detects an outdated pdf-image, and triggers a pdflatex-run -#add_cus_dep( 'eps', 'pdf', 0, 'cus_dep_require_primary_run' ); - -# Custom dependecy to convert tif to png -add_cus_dep( 'tif', 'png', 0, 'maketif2png' ); -sub maketif2png { - system( "convert \"$_[0].tif\" \"$_[0].png\"" ); -} diff --git a/support/latexmk/example_rcfiles/schulz-texshop-latexmkrc b/support/latexmk/example_rcfiles/schulz-texshop-latexmkrc new file mode 100644 index 0000000000..6f43e982ec --- /dev/null +++ b/support/latexmk/example_rcfiles/schulz-texshop-latexmkrc @@ -0,0 +1,77 @@ +# Use of glossaries, extra indexes, epstopdf, and other images conversions +# Thanks to Herb Schulz + + +$pdflatex = 'pdflatex --shell-escape %O %S'; + +# Custom dependency for glossary/glossaries package +# if you make custom glossaries you may have to add items to the @cus_dep_list and corresponding sub-routines +add_cus_dep( 'glo', 'gls', 0, 'makeglo2gls' ); +sub makeglo2gls { + system( "makeindex -s \"$_[0].ist\" -t \"$_[0].glg\" -o \"$_[0].gls\" \"$_[0].glo\"" ); +} +# The glossaries package, with the [acronym] option, produces a .acn file when processed with (xe/pdf)latex and +# then makeindex to process the .acn into .acr and finally runs of (xe/pdf)latex to read in the .acr file. Unfortunately +# the glossary package does just the reverse; i.e. (xe/pdf)latex processing produces a .acr files and makeindex then +# is used to convert the .acr file to a .acn file which is then ... . This dependency assumes the glossaries package. +add_cus_dep( 'acn', 'acr', 0, 'makeacn2acr' ); +sub makeacn2acr { + system( "makeindex -s \"$_[0].ist\" -t \"$_[0].alg\" -o \"$_[0].acr\" \"$_[0].acn\"" ); +} +# for glossary package (Sigh...) --- they can co-exist! +add_cus_dep( 'acr', 'acn', 0, 'makeacr2acn' ); +sub makeacr2acn { + system( "makeindex -s \"$_[0].ist\" -t \"$_[0].alg\" -o \"$_[0].acn\" \"$_[0].acr\"" ); +} +# example of an added custom glossary type that is used in some of the glossary/glossaries example files: +# this is for the new glossary type command \newglossary[nlg]{notation}{not}{ntn}{Notation} from the glossaries package +# NOTE: the glossary package uses a very different command: the and +# are reversed in the calling sequence :-( +add_cus_dep( 'ntn', 'not', 0, 'makentn2not' ); +sub makentn2not { + system("makeindex -s \"$_[0].ist\" -t \"$_[0].nlg\" -o \"$_[0].not\" \"$_[0].ntn\"" ); +} +# for the glossary package (Sigh...) --- they can co-exist! +add_cus_dep( 'not', 'ntn', 0, 'makenot2ntn' ); +sub makenot2ntn { + system("makeindex -s \"$_[0].ist\" -t \"$_[0].nlg\" -o \"$_[0].ntn\" \"$_[0].not\"" ); +} + +# dependencies for custom indexes using the index package +# examples for sample.tex for index package: + add_cus_dep( 'adx', 'and', 0, 'makeadx2and' ); +sub makeadx2and { + system( "makeindex -o \"$_[0].and\" \"$_[0].adx\"" ); +} +add_cus_dep( 'ndx', 'nnd', 0, 'makendx2nnd' ); +sub makendx2nnd { + system( "makeindex -o \"$_[0].nnd\" \"$_[0].ndx\"" ); +} +add_cus_dep( 'ldx', 'lnd', 0, 'makeldx2lnd' ); +sub makeldx2lnd { + system( "makeindex -o \"$_[0].lnd\" \"$_[0].ldx\"" ); +} + +# Custom dependency and function for nomencl package +add_cus_dep( 'nlo', 'nls', 0, 'makenlo2nls' ); +sub makenlo2nls { + system( "makeindex -s nomencl.ist -o \"$_[0].nls\" \"$_[0].nlo\"" ); +} + +# Custom dependency and function(s) for epstopdf package + +# FOR USERS OF epstopf v1.4 and before: should also work with v1.5 and later +# note: you may get extras runs if you use the .eps extension in the \includgraphics command +# deletes an outdated pdf-image, and triggers a pdflatex-run +add_cus_dep( 'eps', 'pdf', 0, 'cus_dep_delete_dest' ); + +# FOR USERS OF epstopdf v1.5 and later only: +# load it as \usepackage[update,prepend]{epstopdf} +# detects an outdated pdf-image, and triggers a pdflatex-run +#add_cus_dep( 'eps', 'pdf', 0, 'cus_dep_require_primary_run' ); + +# Custom dependecy to convert tif to png +add_cus_dep( 'tif', 'png', 0, 'maketif2png' ); +sub maketif2png { + system( "convert \"$_[0].tif\" \"$_[0].png\"" ); +} diff --git a/support/latexmk/example_rcfiles/xr_latexmkrc b/support/latexmk/example_rcfiles/xr_latexmkrc index 24647ae6e8..bd86085230 100644 --- a/support/latexmk/example_rcfiles/xr_latexmkrc +++ b/support/latexmk/example_rcfiles/xr_latexmkrc @@ -27,10 +27,6 @@ # or extra enhancements to latexmk. # 5. The code uses subroutines copy and fileparse that are loaded by # latexmk from the Perl packages File::Copy and File::Basename. -# 6. It also uses some not-yet-documented features of latexmk: an array -# variable @file_not_found and subroutines popd, pushd, and -# rdb_add_generated. - #-------------------- # Configurable choices for compilation of external documents @@ -72,14 +68,13 @@ sub makeexternaldocument { # aux_dir rather than the one the cus dep is assumed by latexmk # to produce, which is in the same directory as the .tex source # file for this custom dependency.) - # Use not-yet-documented latexmk subroutine rdb_add_generated - # to do this: + # Use the latexmk subroutine rdb_add_generated to do this. # 2. A copy of the .aux file must be in same directory as .tex file # to satisfy latexmk's definition of a custom dependency. rdb_add_generated( "$sub_doc_output/$base_name.aux" ); copy "$sub_doc_output/$base_name.aux", "."; } - popd; + popd(); return $return; } } diff --git a/support/latexmk/latexmk.1 b/support/latexmk/latexmk.1 index b71b559977..0b57ebea1b 100644 --- a/support/latexmk/latexmk.1 +++ b/support/latexmk/latexmk.1 @@ -1,4 +1,4 @@ -.TH LATEXMK 1 "4 April 2023" "" +.TH LATEXMK 1 "6 November 2023" "" .SH NAME latexmk \- generate LaTeX document .SH SYNOPSIS @@ -2732,6 +2732,36 @@ The extension of the file which \fIlatexmk\fR generates to contain a database of information on source files. You will not normally need to change this. +.TP +.B @file_not_found +This an array of Perl regular expressions that are patterns to find +messages in the .log file from a run of *latex that indicate that a file +was looked for and not found. To see the current default set, you should +look at the definition of \fI@file_not_found\fR in the latexmk.pl file. + +In the regular expression, the string for the name of the missing file +should be enclosed in parentheses. That carries the implication that after +latexmk gets a succesful match to the pattern, the variable $1 is set to +the filename, which is then picked up by latexmk. + +If you happen to encounter a package that gives a missing file message of a +different form than one that matches one of the built-in patterns, you can +add another pattern to the array. An example would be + + push @file_not_found, '^No file\\\\s+(.+)\\\\s*$'; + +The regular expression itself is + + ^Missing file\\s+(.+)\\s*$ + +But the corresponding string specification in the push statement has to +have the backslashes doubled. + +This regular expression matches a line that starts with 'No file', then has +one or more white space characters, then any number of characters forming +the filename, then possible white space, and finally the end of the line. +(See documentation on Perl regular expressions for details.) + .TP .B $fls_uses_out_dir [0] This variable determines whether or not the .fls file should be in the @@ -3995,9 +4025,49 @@ dollar signs. .B $$Pdest This gives the name of the main output file if any. Note the double dollar signs. + +.TP +.B pushd( path ), popd() +These subroutines are used when it is needed to temporarily change the +working directory, as in + + pushd( 'some_directory' ); + ... Processing done with 'some_directory' as the working directory + popd() + +They perform exactly the same function as the commands of the same names in +operating system command shells like bash on Unix, and cmd.exe on the +Windows. + +.TP +.B rdb_add_generated( file, ... ) +This subroutine is to be used in the context of a rule, that is, from +within a subroutine that is carrying out processing of a rule. Such is the +case for the subroutine implementing a custom dependency, or the subroutine +invoked by using the "internal" keyword in the command specification like +that in the variable \fI$latex\fR. + +Its arguments are a sequence of filenames which are generated during the +running of the rule. The names might arise from an analysis of the results +of the run, e.g., in a log file, or from knowledge of properties of the +specific rule. Calling \fIrdb_add_generated\fR with these filenames +ensures that these files are flagged as generated by the rule in +\fIlatexmk\fR's internal data structures. Basically, no action is taken if +the files have already been flagged as generated. + +A main purpose of using this subroutine is for the situation when a +generated file is also the source file for some rule, so that \fIlatexmk\fR +can correctly link the dependency information in its network of rules. + +\fINote: Unlike some other subroutines in this section, there is no +argument for a rule for \fRrdb_add_generated\fI. Instead, the subroutine is +to be invoked during the processing of a rule when \fRlatexmk\fI has set up +an appropriate context (i.e., appropriate variables). In contrast, +subroutines with a rule argument can be used also outside a rule context.\fR + .TP .B rdb_ensure_file( $rule, file ) -This a subroutine that ensures that the given file is among the source +This subroutine ensures that the given file is among the source files for the specified rule. It is typically used when, during the processing of a rule, it is known that a particular extra file is among the dependencies that \fIlatexmk\fR should know, but its default @@ -4010,17 +4080,34 @@ For examples of its use, see some of the files in the directory cases that use this subroutine are \fIbib2gls-latexmkrc\fR, \fIexceltex_latexmkrc\fR and \fItexinfo-latexmkrc\fR. These illustrate typical cases where \fIlatexmk\fR's normal processing fails -to detect certain extra source files. +to detect certain extra source files. + +\fINote that \fRrdb_ensure_file\fI only has one filename argument, unlike +other subroutines in this section. If you want to apply its action to +multiple files, you will need one call to \fRrdb_ensure_file\fI for each +file.\fR + .TP .B rdb_remove_files( $rule, file, ... ) This subroutine removes one or more files from the dependency list for the given rule. + +.TP +.B rdb_remove_generated( file, ... ) +This subroutine is to be used in the context of a rule, that is, from +within a subroutine that is carrying out processing of a rule. It performs +the opposite action to \fIrdb_add_generated\fR. Its effect is to ensure +that the given filenames are not listed in \fIlatexmk\fR's internal data +structures as being generated by the rule. + .TP .B rdb_list_source( $rule ) This subroutine returns the list of source files (i.e., the dependency list) for the given rule. + .TP .B rdb_set_source( $rule, file, ... ) + .TP .B rdb_set_source( $rule, @files ) This subroutine sets the dependency list for the given rule to be the @@ -4028,6 +4115,7 @@ specified files. Files that are already in the list have unchanged information. Files that were not in the list are added to it. Files in the previous dependency list that are not in the newly specified list of files are removed from the dependency list. + .TP .B Run_subst( command_spec ) This subroutine runs the command specified by \fIcommand_spec\fR. The @@ -4296,12 +4384,12 @@ e-mail addresses are not written in their standard form to avoid being harvested too easily.) .SH AUTHOR Current version, by John Collins -(Version 4.80). +(Version 4.81). Report bugs etc to his e-mail (jcc8 at psu.edu). Released version can be obtained from CTAN: , and from the -author's website . +author's website . .br Modifications and enhancements by Evan McLean (Version 2.0) .br diff --git a/support/latexmk/latexmk.pdf b/support/latexmk/latexmk.pdf index a746f4cfda..4c2ed70964 100644 Binary files a/support/latexmk/latexmk.pdf and b/support/latexmk/latexmk.pdf differ diff --git a/support/latexmk/latexmk.pl b/support/latexmk/latexmk.pl index 434da3529c..9583f45a3f 100755 --- a/support/latexmk/latexmk.pl +++ b/support/latexmk/latexmk.pl @@ -42,8 +42,8 @@ use warnings; $my_name = 'latexmk'; $My_name = 'Latexmk'; -$version_num = '4.80'; -$version_details = "$My_name, John Collins, 4 Apr. 2023. Version $version_num"; +$version_num = '4.81'; +$version_details = "$My_name, John Collins, 6 Nov. 2023. Version $version_num"; use Config; use File::Basename; @@ -82,7 +82,7 @@ use Cwd "chdir"; # Ensure $ENV{PWD} tracks cwd. use Digest::MD5; # **WARNING**: Don't import time; that overrides core function time(), and messes up -# +# somethings use Time::HiRes; ################################################# @@ -312,6 +312,7 @@ sub fprint8 { # v. pdflatexmk, etc): (our $invoked_name) = fileparseA($0); +# Save name, since I override it if I don't recognize it our $invoked_kind = $invoked_name; print "$My_name: Invoked as '$invoked_name'\n" if ($invoked_name ne 'latexmk'); @@ -360,6 +361,11 @@ else { # It is the parameter max_print_line in the TeX program. (tex.web) $log_wrap = 79; +# Expected biggest construct in log file in bytes. +# Use to limit number of (potentially) wrapped lines to combine into single line. +$max_log_construct = 600; + + ######################################################################### ## Default parsing and file-handling settings @@ -372,8 +378,8 @@ $log_wrap = 79; ## push @file_not_found, '^No data file found `([^\\\']*)\\\''; ## will give match to line starting "No data file found `filename'" @file_not_found = ( - '^No file\\s*(.*)\\.$', - '^No file\\s*(.+)\s*$', + '^No file\\s+(.*)\\.$', + '^No file\\s+(.+)\s*$', '^\\! LaTeX Error: File `([^\\\']*)\\\' not found\\.', '^\\! I can\\\'t find file `([^\\\']*)\\\'\\.', '.*?:\\d*: LaTeX Error: File `([^\\\']*)\\\' not found\\.', @@ -559,7 +565,7 @@ $input_extensions{xelatex} = $input_extensions{pdflatex}; # and because of the possibility of extra bibtex/biber rules with # non-standard basename. @generated_exts = ( 'aux', 'bcf', 'fls', 'idx', 'ind', 'lof', 'lot', - 'out', 'toc', + 'out', 'run.xml', 'toc', 'blg', 'ilg', 'log', 'xdv' ); @@ -1459,7 +1465,7 @@ our $times_are_clock = ($^O eq "MSWin32" ); # Data for 1 run and global (ending in '0'): -our ( $processing_time1, $processing_time0, @timings1, @timings0); +our ( $clock1, $processing_time1, $processing_time0, @timings1, @timings0); &init_timing_all; @@ -1913,8 +1919,21 @@ elsif ($HOME ne '') { %rc_files_read2 = (); # Map **abs** filename to 1; used to check duplicate reads. # Options that are to be obeyed before rc files are read: +# Also under MSWin32 and msys, CL arguments sometimes get quotes in them. +# (Specific example: TeXLive 2023 with msys's perl and arguments containing +# both non-ASCII character, when latexmk.exe invoked from cmd.exe. In some +# other situations (powershell and msys's terminal+bash), it seems that both +# space and non-ASCII character are needed to trigger a problem.) foreach $_ ( @ARGV ) { + if ( ($^O eq "MSWin32") || ($^O eq 'msys') ) { + # "arg" -> arg. + # -..="arg" -> -..=arg. + # In both cases, only do this if there are no other ". Otherwise I + # my run afoul of " that are intended to be there. + s/^\"([^\"]+)\"$/$1/; + s/^(-[^\"=]+=)\"([^\"]+)\"$/$1$2/; + } if (/^-{1,2}norc$/ ) { $auto_rc_use = 0; } @@ -2020,8 +2039,18 @@ while (defined($_ = $ARGV[0])) { elsif (/^-diagnostics/) { $diagnostics = 1; } elsif (/^-dir-report$/) { $aux_out_dir_report = 1; } elsif (/^-dir-report-$/) { $aux_out_dir_report = 0; } - elsif (/^-dvi$/) { $dvi_mode = 1; } - elsif (/^-dvilua$/) { $dvi_mode = 2; } + elsif (/^-dvi$/) { $dvi_mode = 1; + if ( ($pdf_mode != 2) && ($pdf_mode != 3) ) { + # if pdf_mode is not via dvi or pdf, turn it off + $pdf_mode = 0; + } + } + elsif (/^-dvilua$/) { $dvi_mode = 2; + if ( ($pdf_mode != 2) && ($pdf_mode != 3) ) { + # if pdf_mode is not via dvi or pdf, turn it off + $pdf_mode = 0; + } + } elsif (/^-dvi-$/) { $dvi_mode = 0; } elsif ( /^-dvilualatex=(.*)$/ ) { $dvilualatex = $1; @@ -2101,7 +2130,10 @@ while (defined($_ = $ARGV[0])) { my $format = $1; if ($format eq 'dvi' ) { $dvi_mode = 1; - $pdf_mode = $postscript_mode = 0; + if ( ($pdf_mode != 2) && ($pdf_mode != 3) ) { + # if pdf_mode is not via dvi or pdf, turn it off + $pdf_mode = 0; + } } elsif ($format eq 'pdf' ) { $pdf_mode = 1; @@ -2117,12 +2149,12 @@ while (defined($_ = $ARGV[0])) { $preview_mode = 0; } elsif (/^-p-$/) { $printout_mode = 0; } - elsif (/^-pdf$/) { $pdf_mode = 1; } + elsif (/^-pdf$/) { $pdf_mode = 1; $dvi_mode = $postscript_mode = 0; } elsif (/^-pdf-$/) { $pdf_mode = 0; } elsif (/^-pdfdvi$/){ $pdf_mode = 3; } - elsif (/^-pdflua$/){ $pdf_mode = 4; } + elsif (/^-pdflua$/){ $pdf_mode = 4; $dvi_mode = $postscript_mode = 0; } elsif (/^-pdfps$/) { $pdf_mode = 2; } - elsif (/^-pdfxe$/) { $pdf_mode = 5; } + elsif (/^-pdfxe$/) { $pdf_mode = 5; $dvi_mode = $postscript_mode = 0; } elsif (/^-pdflatex$/) { $pdflatex = "pdflatex %O %S"; $pdf_mode = 1; @@ -2150,7 +2182,12 @@ while (defined($_ = $ARGV[0])) { &exit_help("$My_name: unknown print type '$value' in option '$_'"); } } - elsif (/^-ps$/) { $postscript_mode = 1; } + elsif (/^-ps$/) { $postscript_mode = 1; + if ( ($pdf_mode != 2) && ($pdf_mode != 3) ) { + # if pdf_mode is not via dvi or pdf, turn it off + $pdf_mode = 0; + } + } elsif (/^-ps-$/) { $postscript_mode = 0; } elsif (/^-pv$/) { $preview_mode = 1; $preview_continuous_mode = 0; # to avoid conflicts @@ -2391,7 +2428,10 @@ else { push( @file_list, $file) unless ( exists $excl{$file} ); } if ( !@file_list ) { - &exit_help( "No file name specified, and I couldn't find any"); + &exit_help( + "No file name(s) specified on command line, and no files match the\n". + "patterns in the default list." + ); } } @@ -2715,10 +2755,17 @@ foreach $filename ( @file_list ) $failure_msg = ''; # Indicate reason for failure if ( $do_cd ) { - ($filename, $path) = fileparse( $filename ); - print "$My_name: Changing directory to '$path'\n" - if !$silent; - pushd( dirname_no_tail( $path ) ); + # Use my fileparse routine rather than the built-in one, otherwise + # under msys, a directory separator \ won't be recognized by fileparse. + # My routines fix that. At this point, $filename ought to have had its + # \s changed to /s. But I won't leave boobytrapped code. + # I use fileparseB rather than fileparseA, because fileparseA changes + # path './' to '', but fileparseB keeps the fileparse behavior there. + # I have to supply an explicit pattern of '' to keep extension in $filename. + ($filename, $path) = fileparseB( $filename, '' ); + print "$My_name: Changing directory to '$path'\n" + if !$silent; + pushd( dirname_no_tail( $path ) ); } else { $path = ''; @@ -2853,7 +2900,7 @@ foreach $filename ( @file_list ) &init_timing1; if ($compiling_cmd) { Run_subst( $compiling_cmd ); } - $failure = &rdb_make; + $failure = rdb_make(); if ( ( $failure <= 0 ) || $force_mode ) { rdb_for_some( [keys %one_time], \&rdb_run1 ); } @@ -2896,7 +2943,7 @@ continue { push @failed_primaries, $filename; } &ifcd_popd; - if ($show_time) { &show_timing1; }; + if ($show_time && ! $preview_continuous_mode) { &show_timing1; }; print "\n"; } close($deps_handle) if ( $deps_handle ); @@ -2981,6 +3028,7 @@ sub init_timing1 { # Initialize timing for one run. @timings1 = (); $processing_time1 = processing_time(); + $clock1 = Time::HiRes::time(); } ############################ @@ -2997,8 +3045,17 @@ sub init_timing_all { sub show_timing1 { # Show timing for one run. my $processing_time = processing_time() - $processing_time1; + my $invoked_time = 0; + for (@timings1) { + if (/: time = (.*)\s$/) { + $invoked_time += $1; + }} print @timings1, "Processing time = ", - sprintf('%.2f', $processing_time), "\n"; + sprintf('%.2f', $processing_time), + ", of which invoked processes = $invoked_time, other = ", + sprintf( '%.2f', $processing_time-$invoked_time ), ".\n"; + print "Elapsed clock time = ", + sprintf( '%.2f', Time::HiRes::time()-$clock1 ), ".\n"; print "Number of rules run = ", 1+$#timings1, "\n"; } @@ -4194,7 +4251,7 @@ CHANGE: if ($compiling_cmd) { Run_subst( $compiling_cmd ); } - $failure = &rdb_make; + $failure = rdb_make(); if ( $MSWin_fudge_break && ($^O eq "MSWin32") ) { $SIG{BREAK} = $SIG{INT} = 'DEFAULT'; @@ -4381,7 +4438,16 @@ sub process_rc_file { my ($rc_file, $repeat_reaction) = @_; my $abs_rc = abs_path($rc_file); my $ret_code = 0; - if ( exists $rc_files_read2{$abs_rc} ) { + if ( (!-e $rc_file) || ( ! defined $abs_rc ) ) { + warn "$My_name: The rc-file '$rc_file' does not exist\n"; + return 1; + } + elsif ( -d $rc_file ) { + warn "$My_name: The supposed rc-file '$rc_file' is a directory; but it\n", + " should be a normal text file\n"; + return 1; + } + elsif ( exists $rc_files_read2{$abs_rc} ) { if ( $repeat_reaction ) { warn "$My_name: A user -r option asked me to process an rc file an extra time.\n", @@ -4407,16 +4473,7 @@ sub process_rc_file { # current versions of Perl (Nov. 2022), so "do latexmkrc;" for # latexmkrc in cwd fails. # So I'll read the rc file and eval its contents. - if ( !-e $rc_file ) { - warn "$My_name: The rc-file '$rc_file' does not exist\n"; - return 1; - } - elsif ( -d $rc_file ) { - warn "$My_name: The supposed rc-file '$rc_file' is a directory; but it\n", - " should be a normal text file\n"; - return 1; - } - elsif ( open( my $RCH, "<", $rc_file ) ) { + if ( open( my $RCH, "<", $rc_file ) ) { my $code = ''; # Read all contents of file into $code: { local $/ = undef; $code = <$RCH>;} @@ -5188,7 +5245,7 @@ sub set_names { #************************************************** -sub correct_aux_out_files { +sub correct_locations { # Deal with situations after a *latex run where files are in different # directories than expected (specifically aux v. output directory). # Do minimal fix ups to allow latexmk to analyze dependencies with log @@ -5279,7 +5336,7 @@ sub correct_aux_out_files { warn "$My_name: fls file doesn't appear to have been made.\n"; } } -} # END correct_aux_out_files +} # END correct_locations #----------------- @@ -6197,28 +6254,68 @@ sub get_log_file { # ref to array to receive lines, # ref to hash to receive diagnostic etc informaion ) # 3rd argument is optional - # Lines are unwrapped and converted to CS_system. + # Lines are unwrapped and converted to the CS_system coding system (so + # that filenames are suitable for use in file opening calls and on + # command line to invoked programs). + # + # **Complication**: When writing to the .log file, *latex converts + # lines longer than a given length (by default, 79) to a sequence + # of lines with at most the maximum length. + # This subroutine converts such sequences of lines to the original + # unwrapped form. + # **However**, + # 1. The algorithm for line wrapping differs between all of pdflatex, + # xelatex, and lualatex. See below for details. + # 2. It is possible to write an unwrapped line L1 of a relevant + # length followed by a shorter line L2, such that it is impossible + # to distingish it from a wrapped line whose contents were those + # of L1 concatenated with L2. + # So when it is determined that a line is potentially wrapped, + # several possibilities for the unwrapped lines are added to the + # output array of lines (referenced by the second argument), so that + # subsequent scanning of the lines in the subroutine parse_log picks + # up the possible diagnostic messages independently of complications + # in identifying wrapped lines versus unwrapped lines. my ($file, $PAlines, $PHinfo) = @_; - # Where lines are wrapped at. We'll sometimes override. local $log_wrap = $log_wrap; + # Lines held for wrapping: + my @held_lines = (); + # Routine for setting wrapped lines; setup by assignment to keep visibility + # in the enclosing subroutine, and to access its my-variables: + my $Pwrap_sub = + sub { + for ( my $i=0; $i <= $#held_lines; $i++ ) { + my $line = ''; + for ( my $j=$i; $j <= $#held_lines; $j++ ) { + last if ($j-$i > 1 + ($max_log_construct /$log_wrap) ); + $line .= $held_lines[$j]; + push @$PAlines, $line; + } + } + @held_lines = (); + }; + + my $engine = ''; my $tex_distribution = ''; - my ($line_num, $cont, $max_len) = ( 0, 0, 0 ); + my ($line_num, $max_len) = ( 0, 0 ); my $lua_mode = 0; # Whether to use luatex-specific wrapping method. - my $byte_wrapping = 1; # *latex does byte wrapping. Modify if we find - # log file is generated by a tex program that - # wrapping by Unicode code points. - + my $byte_wrapping = 1; # Assume by default that the wrapping occurs at + # a certain number of bytes. Modify this + # variable if we find that the log file was + # generated by a tex program that does wrapping + # at a certain number of Unicode code points. + # The details for the different programs (underlying the *latex programs): # File encoding: pdftex: UTF-8 but with wrapping at $log_wrap BYTES. # (So individual wrapped lines can be malformed # UTF-8, but we get valid UTF-8 after unwrapping.) # luatex: UTF-8 but with wrapping at APPROXIMATELY # $log_wrap bytes. Rest as pdftex # xetex: UTF-8 with wrapping at $log_wrap codepoints. - # So we read file as bytes + # So we read file as bytes. Then # first line gives which program was used and hence whether to wrap # according to byte or codepoint count. # wrapping is always performed on the encoded byte strings, but the @@ -6262,17 +6359,46 @@ sub get_log_file { } if ($len > $max_len) { $max_len = $len } - # Is this line continuation of previous line? - if ($cont) { $$PAlines[$#$PAlines] .= $_; } - else { push @$PAlines, $_ } - # Is this line wrapped? I.e., is next line to be appended to it? - # Allow for fact that luatex doesn't reliably wrap at std place, e.g., 79. - $cont = ($len == $log_wrap) + # 2 cases: + # pdflatex and xelatex wrap at exactly length $log_wrap + # (default 79), and normally append empty line when line + # is exactly of the maximimum length (so we shouldn't have a + # problem of distinguishing a wrapped line from a line of + # length exactly $log_wrap). + # lualatex: Wrap at a variable position dependent in a complicated + # way on contents. With default settings, wrapping occurs + # between 77 and 80 bytes, according to my tests. It preserves + # UTF-8 coding, and doesn't split multi-byte UTF-8 coding of + # a code point between lines, unlike pdflatex. But details + # of exactly where a line is wrapped is not clear. + # It is not possible in all cases to distinguish whether + # a pair of lines arise from wrapping of a longer line + # or from actual writing of a pair of lines. + # Determine whether line is potentially wrapped: + my $cont = ($len == $log_wrap) || ( $lua_mode && ($len >= $log_wrap-2) && ($len <= $log_wrap+1) ); - if ($cont && $diagnostics ) { - print "====Continuing line $line_num of length $len\n$_\n"; + if ($cont) { + # Save lines that may be continued onto @held_lines + print "====Continuing line $line_num of length $len\n$_\n" + if $diagnostics; + push @held_lines, $_; + } + elsif (@held_lines) { + # No more continuation lines after this: + push @held_lines, $_; + # Put possibilities for lines before wrapping onto the main + # array and then clear @held_lines + &$Pwrap_sub(); } + else { + push @$PAlines, $_; + } + } + if (@held_lines) { + # Get here if the last line of the file is of a length that + # it may be a wrapped. + &$Pwrap_sub(); } close($fh); foreach (@$PAlines) { $_ = utf8_to_mine($_); } @@ -6330,7 +6456,7 @@ sub parse_fls { # is produced by MS-Windows program (e.g., in MiKTeX) with CRLF line ends, # but is read by Unix Perl (which treats LF as line end, and preserves CRLF # in read-in lines): - # And convert '\' + # And convert '\' to '/' s/\r?\n$//; s[\\][/]g; $line_no++; @@ -6340,10 +6466,17 @@ sub parse_fls { } else { # Deal with MS-Win issues when system CP isn't UTF-8 - if ( ($^O eq 'MSWin32') && /PWD/ && ! is_valid_utf8($_) ) { - # TeXLive on MSWin produces PWD in CS_system not UTF-8. - # ???? Later get tex_distribution before analyzing fls file, so do better test. - print "PWD line not in UTF-8. This is normal for TeXLive. I will handle it.\n"; + # Situation is that the fls file should be in UTF-8 and + # needs to be converted to system CP to fit with latexmk's + # convention (determined by file-system calls). + # However, under Windows' TeXLive 2021 (and maybe earlier) the + # PWD uses the system CP while the rest of the file is UTF-8. + # In TeXLive 2022 and 2023, the whole file, including the PWD + # line is UTF-8. + # So give special treatment to PWD line under Windows. + # Also to guard against any other problems, check for non-UTF-8 lines. + if ( ($^O eq 'MSWin32') && /PWD/ && ! is_valid_utf8($_) ) { print + "PWD line not in UTF-8. This is normal for older TeXLives (2021 and earlier).\n". "I will handle it.\n"; # Assume in CS_system, no change needed. } elsif ( ! is_valid_utf8($_) ) { @@ -6548,8 +6681,12 @@ sub normalize_filename { sub normalize_filename_abs { # Convert filename to be either # absolute path in canonical form - # or relative to cwd. - return normalize_filename( abs_path($_[0]) ); + # or relative to cwd, if possible. + # abs_path returns undef if it doesn't know how to get an absolute path. + # Just work with the original path in that case. + my $abs = abs_path($_[0]); + if (! defined $abs) { $abs = $_[0]; } + return normalize_filename( $abs ); } #----------------------------- @@ -6770,7 +6907,7 @@ sub parse_bcf { return 2; } - show_array( "$My_name: Bibliography file(s) form .bcf file:", @$Pbib_files ) + show_array( "$My_name: Bibliography file(s) from .bcf file:", @$Pbib_files ) unless $silent; if (@not_found_bib) { show_array( @@ -8175,6 +8312,10 @@ DEP: " I'll try making it with allowed extensions \n"; foreach my $try_ext ( keys %$Pinput_extensions ) { my $new_dest = "$file.$try_ext"; + if (-e $new_dest) { + # A file that exists cannot have been the missing file. + next; + } &Run_subst( "$make $quote$new_dest$quote" ); if ( -e $new_dest ) { print "SUCCESS in making '$new_dest'\n", @@ -8462,31 +8603,27 @@ sub rdb_make { # no error in the run, the source-file-state is **not** updated # after the rule is run. Then on a subsequent pass through # rdb_make's main loop, when the rule is tested for a rerun, any - # change in source file contents is cause for running the rule - # again. - # 8. But after a run giving an error, the state of the generated - # files (i.e., non-user files) is updated to the current state. - # This is because the error (under normal circumstances) must be - # corrected by user action: e.g., correcting a source file, and - # possibly deleting some corrupted auxiliary file. Files (e.g., - # .aux by *latex) generated by the rule just run may well have - # changed, so updating their state to the current state prevents - # another run before a user change. If a file was generated by - # another rule, it won't have changed its state, so updating its - # state won't matter. But a non-generated file is a - # user-created file, and a rerun is entailed if its contents - # changed compared with the start of the run; it's the - # start-of-run contents that were used in the error run. - # 9. Note: an error may be caused by a problem with a file - # generated by another rule, e.g., a bbl file created by bibtex - # and read by *latex, but with no error reported by bibtex. To - # correct the error a source file (possibly more than once - # removed must be changed). That triggers a rerun of the - # producing rule, and after that the resulting change causes a - # rerun of the original rule that had the error. E.g., - # correcting a .bib file causes bibtex to run, producing a - # corrected .bbl file, after which *latex is caused to be run. - # 10. With circular dependencies, there is a choice of which order + # change in source file contents since the start of the previous + # run is cause for running the rule again. + # 8. When there is an error, and force_mode is off, processing of + # all further rules is terminated. A problem is then caused for + # a later invocation of latexmk (or, in -pvc mode, the next + # scanning of source-file status): It may be that a generated + # file from a run of some rule changed compared with its status + # before the run. Because of the termination of processing + # there was no rerun of the rule. New runs should only be made + # after a change in the user-written files, which give the + # possibility of correcting the error. But on a subsequent + # invocation of latexmk it could appear that some rule(s) is/are + # out-of-date because of the changed generated files, which + # would result in unneeded extra runs, which will tend to + # pollute the screen output with misleading downstream + # consequences of the original error. + # To avoid this problem, after an error-generating round of + # compilations, the cached state of generated files is updated + # to their state after the compilations. Then only user-caused + # file changes will be cause for new runs. + # 9. With circular dependencies, there is a choice of which order # to examine the rules. Generally, primary rules are more # time-consuming than most others, so the choice of the order of # examination of rules to check out-of-dateness is to try to @@ -8495,7 +8632,7 @@ sub rdb_make { # graphics. These are normally outside a dependency loop, so # those are left to last. Even if they are inside a dependency # loop, they need the primary rule to have been run first. - # 11. After rdb_make is run, all non-user source files are updated + # 10. After rdb_make is run, all non-user source files are updated # to their current state. Rules are considered up-to-date # here. On a subsequent call to rdb_make, subsequent changes are # relevant to what is to be done. Note: the states of user @@ -8625,7 +8762,7 @@ sub rdb_make { } if ( ($runs > 0) && ! $too_many_passes ) { $retry_msg = 0; - if ( $force_mode || (! $failure) || $switched_primary_output ) { + if ( $force_mode || (! $failure) ) { next PASS; } # Get here on failure, without being in force_mode @@ -8673,7 +8810,31 @@ sub rdb_make { # but do not change primaries. # Problem is that %current_primaries gets altered &rdb_set_rule_net; - } #End PASS + } #End PASS + + if ($failure ) { + # Update state of generated source files, but not non-generated, + # i.e., user source files. Without that, when there was a termination of + # processing because of an error, it could be some generated files changed + # without reruns of the relevant rule(s) being triggered; that's because + # with an error and with force_mode off, the reruns are blocked. + # But that situation would cause reruns either when latexmk is reinvoked + # or at the next examination of file state (in -pvc mode). But those runs + # (almost certainly) won't improve the error situation in the absence of + # a change in user files, since the error is ultimately due to a problem + # with a user file. + # By updating the state of generated source files, reruns are not + # triggered until a user file is changed. + # Also turn $$Pout_of_date off for the rules. It may have been set + # at some point to trigger a rerun, but that information is now + # out-of-date, given that an error occurred. + rdb_for_some( [&rdb_accessible()], + sub{ + &rdb_update_gen_files; + $$Pout_of_date = 0; + } + ); + } rdb_for_some( [@unusual_one_time], \&rdb_make1 ); @@ -8839,7 +9000,7 @@ sub rdb_make1 { # Is this needed? Yes; rdb_make1 is called on a sequence of rules and # if one gives an error, then it provides source files directly or # indirectly to later rules, which should not be run. - if ($failure & ! $force_mode) {return;} + if ($failure && ! $force_mode) {return;} # Rule may have been created since last run. Just in case we didn't, # define $pass{$rule} elsewhere, do it here: @@ -8922,6 +9083,7 @@ sub rdb_make1 { warn_running( "Run number $pass{$rule} of rule '$rule'" ); $return = &rdb_run1; } + if ($$Pchanged) { $newrule_nofile = 1; $return = 0; @@ -8972,15 +9134,6 @@ sub rdb_make1 { if ( !$$Plast_message ) { $$Plast_message = "Run of rule '$rule' gave a non-zero error code"; } - # Update state of generated source files, but not non-generated, - # i.e., user source files. Thus any change in the rule's own - # generated source files during the run will not cause a - # rerun. Files generated by another rule should not have been - # changed during the run, so updating their saved state in this - # rule is a NOP. But any change in user files since the **start** - # of the run is a cause for a rerun, so their saved state must not - # be updated. - rdb_update_gen_files(); } foreach ( keys %$PHsource_rules ) { $$PHsource_rules{$_} = $pass{$_}; @@ -9074,7 +9227,7 @@ sub rdb_run1 { # $$Pout_of_date = $$Pout_of_date_user = 0; if ($latex_like) { - &correct_aux_out_files; + &correct_locations; run_hooks( 'after_xlatex' ); $return = analyze_latex_run( $return ); run_hooks( 'after_xlatex_analysis' ); @@ -9490,7 +9643,6 @@ sub rdb_rerun_needed { # # ???!!!! # Check all uses!!!!!!!!!!!!! - our ($rule, %pass); local our $PHchanges = shift; @@ -9628,9 +9780,7 @@ sub rdb_rerun_needed { } $$Pno_history = 0; # See comments in definition of %rule_db. if ($rerun_needed) { - $$Pout_of_date = 1; push @{$$PHchanges{rules_to_apply}}, $rule; - if (@{$$PHchanges{changed_user}}) {$$Pout_of_date_user = 1;} } return $rerun_needed; } #END rdb_rerun_needed @@ -10500,37 +10650,6 @@ sub Parray { #************************************************************ -sub analyze_string { - # Show information about string: utf8 flag or not, length(s!), byte content - my ($m,$s) = @_; - - print "=== $m "; - my $length = length($s); - if (utf8::is_utf8($s)) { - my $encoded = encode( $CS_system, $s, Encode::FB_WARN | Encode::LEAVE_SRC ); - my $len_chars = 0; - my $len_bytes = 0; - { no bytes; $len_chars = length($s); } - { use bytes; $len_bytes = length($s); } - print "'$encoded':\n", - "utf8, len = $length; chars = $len_chars; bytes = $len_bytes\n"; - } - else { - print "'$s':\n", - "NOT utf8, len = $length\n"; - } - - print join ' ', to_hex($s), "\n"; -} - -#---------------------------- - -sub to_hex { - return map { sprintf('%4X', $_) } unpack( 'U*', shift ); -} - -#================== - sub glob_list1 { # Glob a collection of filenames. # But no sorting or elimination of duplicates @@ -10691,24 +10810,30 @@ sub get_checksum_md5 { # We won't use checksum for directory return 0; } - else { - open( $input, '<:bytes', $source ) - or return 0; - my ($base, $path, $ext) = fileparseA( $source ); - $ext =~ s/^\.//; - if ( exists $hash_calc_ignore_pattern{$ext} ) { - $ignore_pattern = $hash_calc_ignore_pattern{$ext}; - } + open( $input, '<:bytes', $source ) + or return 0; + my ($base, $path, $ext) = fileparseA( $source ); + $ext =~ s/^\.//; + if ( exists $hash_calc_ignore_pattern{$ext} ) { + $ignore_pattern = $hash_calc_ignore_pattern{$ext}; } - if ( defined $ignore_pattern ) { - while (<$input>) { - if ( ! /$ignore_pattern/ ){ - $md5->add($_); + eval { + # Trap any errors that occur during reading, even though the file + # was successfully opened. + # Such errors have been known to occur under OneDrive on macOS. + if ( defined $ignore_pattern ) { + while (<$input>) { + if ( ! /$ignore_pattern/ ){ + $md5->add($_); + } } } - } - else { - $md5->addfile($input); + else { + $md5->addfile($input); + } + }; + if ($@) { + warn "$My_name: Attempt to get md5 of '$source' failed. Error=\n$@"; } close $input; return $md5->hexdigest(); @@ -11184,7 +11309,12 @@ sub ext_no_period { sub fileparseA { # Like fileparse but replace $path for current dir ('./' or '.\') by '' # Also default second argument to get normal extension. + # With msys, change all \ to / in given name since with msys, fileparse + # doesn't recognize \ as directory separator. my $given = $_[0]; + if ( $^O eq 'msys' ) { + $given =~ s[\\][/]g; + } my $pattern = '\.[^\.]*'; if ($#_ > 0 ) { $pattern = $_[1]; } my ($base_name, $path, $ext) = fileparse( $given, $pattern ); @@ -11198,7 +11328,12 @@ sub fileparseA { sub fileparseB { # Like fileparse but with default second argument for normal extension + # With msys, change all \ to / in given name since with msys, fileparse + # doesn't recognize \ as directory separator. my $given = $_[0]; + if ( $^O eq 'msys' ) { + $given =~ s[\\][/]g; + } my $pattern = '\.[^\.]*'; if ($#_ > 0 ) { $pattern = $_[1]; } my ($base_name, $path, $ext) = fileparse( $given, $pattern ); @@ -11551,7 +11686,11 @@ sub cache_good_cwd { } # Normalized if ($normalize_names) { - $cwd = abs_path($cwd); + my $abs = abs_path($cwd); + # It's conceivable that abs_path doesn't know how to convert to an + # absolute path of a standard normalization. Then it returns undef. + # In that case, it's probably good not to try normalizing $cwd. + if (defined $abs) { $cwd = $abs; } } $cache{cwd} = $cwd; } # END cache_good_cwd diff --git a/support/latexmk/latexmk.txt b/support/latexmk/latexmk.txt index 31bcadb0a5..720022a634 100644 --- a/support/latexmk/latexmk.txt +++ b/support/latexmk/latexmk.txt @@ -61,7 +61,7 @@ DESCRIPTION - 4 April 2023 1 + 6 November 2023 1 @@ -127,7 +127,7 @@ LATEXMK OPTIONS AND ARGUMENTS ON COMMAND LINE - 4 April 2023 2 + 6 November 2023 2 @@ -193,7 +193,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 3 + 6 November 2023 3 @@ -259,7 +259,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 4 + 6 November 2023 4 @@ -325,7 +325,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 5 + 6 November 2023 5 @@ -391,7 +391,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 6 + 6 November 2023 6 @@ -457,7 +457,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 7 + 6 November 2023 7 @@ -523,7 +523,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 8 + 6 November 2023 8 @@ -589,7 +589,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 9 + 6 November 2023 9 @@ -655,7 +655,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 10 + 6 November 2023 10 @@ -721,7 +721,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 11 + 6 November 2023 11 @@ -787,7 +787,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 12 + 6 November 2023 12 @@ -853,7 +853,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 13 + 6 November 2023 13 @@ -919,7 +919,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 14 + 6 November 2023 14 @@ -985,7 +985,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 15 + 6 November 2023 15 @@ -1051,7 +1051,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 16 + 6 November 2023 16 @@ -1117,7 +1117,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 17 + 6 November 2023 17 @@ -1183,7 +1183,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 18 + 6 November 2023 18 @@ -1249,7 +1249,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 19 + 6 November 2023 19 @@ -1315,7 +1315,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 20 + 6 November 2023 20 @@ -1381,7 +1381,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 21 + 6 November 2023 21 @@ -1447,7 +1447,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 22 + 6 November 2023 22 @@ -1513,7 +1513,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 23 + 6 November 2023 23 @@ -1579,7 +1579,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 24 + 6 November 2023 24 @@ -1645,7 +1645,7 @@ EXAMPLES - 4 April 2023 25 + 6 November 2023 25 @@ -1711,7 +1711,7 @@ DEALING WITH ERRORS, PROBLEMS, ETC - 4 April 2023 26 + 6 November 2023 26 @@ -1777,7 +1777,7 @@ AUXILIARY AND OUTPUT DIRECTORIES - 4 April 2023 27 + 6 November 2023 27 @@ -1843,7 +1843,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 28 + 6 November 2023 28 @@ -1909,7 +1909,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 29 + 6 November 2023 29 @@ -1975,7 +1975,7 @@ ALLOWING FOR CHANGE OF OUTPUT FILE TYPE - 4 April 2023 30 + 6 November 2023 30 @@ -2041,7 +2041,7 @@ CONFIGURATION/INITIALIZATION (RC) FILES - 4 April 2023 31 + 6 November 2023 31 @@ -2107,7 +2107,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 32 + 6 November 2023 32 @@ -2173,7 +2173,7 @@ FORMAT OF COMMAND SPECIFICATIONS - 4 April 2023 33 + 6 November 2023 33 @@ -2239,7 +2239,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 34 + 6 November 2023 34 @@ -2305,7 +2305,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 35 + 6 November 2023 35 @@ -2371,7 +2371,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 36 + 6 November 2023 36 @@ -2437,7 +2437,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 37 + 6 November 2023 37 @@ -2503,7 +2503,7 @@ LIST OF CONFIGURATION VARIABLES USABLE IN INITIALIZATION FILES - 4 April 2023 38 + 6 November 2023 38 @@ -2569,7 +2569,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 39 + 6 November 2023 39 @@ -2635,7 +2635,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 40 + 6 November 2023 40 @@ -2701,7 +2701,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 41 + 6 November 2023 41 @@ -2767,7 +2767,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 42 + 6 November 2023 42 @@ -2833,7 +2833,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 43 + 6 November 2023 43 @@ -2899,7 +2899,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 44 + 6 November 2023 44 @@ -2965,7 +2965,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 45 + 6 November 2023 45 @@ -3031,7 +3031,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 46 + 6 November 2023 46 @@ -3097,7 +3097,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 47 + 6 November 2023 47 @@ -3163,7 +3163,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 48 + 6 November 2023 48 @@ -3229,7 +3229,7 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - 4 April 2023 49 + 6 November 2023 49 @@ -3271,6 +3271,51 @@ LATEXMK(1) General Commands Manual LATEXMK(1) need to change this. + @file_not_found + This an array of Perl regular expressions that are patterns to + find messages in the .log file from a run of *latex that indi- + cate that a file was looked for and not found. To see the cur- + rent default set, you should look at the definition of + @file_not_found in the latexmk.pl file. + + In the regular expression, the string for the name of the miss- + ing file should be enclosed in parentheses. That carries the + implication that after latexmk gets a succesful match to the + pattern, the variable $1 is set to the filename, which is then + picked up by latexmk. + + If you happen to encounter a package that gives a missing file + message of a different form than one that matches one of the + built-in patterns, you can add another pattern to the array. An + example would be + + push @file_not_found, '^No file\\s+(.+)\\s*$'; + + The regular expression itself is + + + + 6 November 2023 50 + + + + + +LATEXMK(1) General Commands Manual LATEXMK(1) + + + ^Missing file\s+(.+)\s*$ + + But the corresponding string specification in the push statement + has to have the backslashes doubled. + + This regular expression matches a line that starts with 'No + file', then has one or more white space characters, then any + number of characters forming the filename, then possible white + space, and finally the end of the line. (See documentation on + Perl regular expressions for details.) + + $fls_uses_out_dir [0] This variable determines whether or not the .fls file should be in the output directory instead of the natural directory, which @@ -3291,19 +3336,6 @@ LATEXMK(1) General Commands Manual LATEXMK(1) of the .fls file to be generated. - - - - - 4 April 2023 50 - - - - - -LATEXMK(1) General Commands Manual LATEXMK(1) - - $force_mode [0] If nonzero, continue processing past minor latex errors includ- ing unrecognized cross references. Equivalent to specifying the @@ -3325,8 +3357,20 @@ LATEXMK(1) General Commands Manual LATEXMK(1) After initialization of latexmk and the processing of its com- mand line, the items in clean_ext are appended to @gener- - ated_exts. So these two variables have the same meaning (con- - trary to older versions of latexmk). + ated_exts. So these two variables have the same meaning + + + + 6 November 2023 51 + + + + + +LATEXMK(1) General Commands Manual LATEXMK(1) + + + (contrary to older versions of latexmk). The items in @generated_exts are normally extensions of files, whose base name is the same as the main tex file. But it is @@ -3359,17 +3403,6 @@ LATEXMK(1) General Commands Manual LATEXMK(1) If nonzero, process files regardless of timestamps, and is then equivalent to the -g option. - - - 4 April 2023 51 - - - - - -LATEXMK(1) General Commands Manual LATEXMK(1) - - %hash_calc_ignore_pattern !!!This variable is for experts only!!! @@ -3391,6 +3424,18 @@ LATEXMK(1) General Commands Manual LATEXMK(1) This creates a rule for files with extension .eps about lines to ignore. The left-hand side is a Perl idiom for setting an item + + + + 6 November 2023 52 + + + + + +LATEXMK(1) General Commands Manual LATEXMK(1) + + in a hash. Note that the file extension is specified without a period. The value, on the right-hand side, is a string contain- ing a regular expression. (See documentation on Perl for how @@ -3424,18 +3469,6 @@ LATEXMK(1) General Commands Manual LATEXMK(1) This specifies the jobname, i.e., the basename that is used for generated files (.aux, .log, .dvi, .ps, .pdf, etc). If this - - - - 4 April 2023 52 - - - - - -LATEXMK(1) General Commands Manual LATEXMK(1) - - variable is a null string, then the basename is the basename of the main tex file. (At present, the string in $jobname should not contain spaces.) @@ -3458,6 +3491,17 @@ LATEXMK(1) General Commands Manual LATEXMK(1) latexmk -pdf *.tex + + + 6 November 2023 53 + + + + + +LATEXMK(1) General Commands Manual LATEXMK(1) + + both files will be compiled. The .aux, .log, and .pdf files will have basenames test1-MSWin32 ante test2-MSWin32 on a MS- Windows system, test1-darwin and test2-darwin on an OS-X system, @@ -3490,18 +3534,6 @@ LATEXMK(1) General Commands Manual LATEXMK(1) $kpsewhich_show [0] Whether to show diagnostics about invocations of kpsewhich: the - - - - 4 April 2023 53 - - - - - -LATEXMK(1) General Commands Manual LATEXMK(1) - - command line use to invoke it and the results. These diagnos- tics are shown if $kpsewhich_show is non-zero or if diagnostics mode is on. (But in the second case, lots of other diagnostics @@ -3524,6 +3556,18 @@ LATEXMK(1) General Commands Manual LATEXMK(1) To do a coordinated setting of all of $dvilualatex, $latex, $pdflatex, $lualatex, and $xelatex, see the section "Advanced + + + + 6 November 2023 54 + + + + + +LATEXMK(1) General Commands Manual LATEXMK(1) + + Configuration". @@ -3555,22 +3599,10 @@ LATEXMK(1) General Commands Manual LATEXMK(1) add the extension 'asdf to latex_input_extensions. (Naturally with such an extension, you should have made an appropriate cus- - tom dependency for latexmk, and should also have done the - - - - 4 April 2023 54 - - - - - -LATEXMK(1) General Commands Manual LATEXMK(1) - - - appropriate programming in the LaTeX source file to enable the - file to be read. The standard extensions are handled by LaTeX - and its graphics/graphicx packages.) + tom dependency for latexmk, and should also have done the appro- + priate programming in the LaTeX source file to enable the file + to be read. The standard extensions are handled by LaTeX and + its graphics/graphicx packages.) $latex_silent_switch ["-interaction=batchmode"] Switch(es) for the LaTeX processing program when silent mode is @@ -3590,6 +3622,18 @@ LATEXMK(1) General Commands Manual LATEXMK(1) Under MS-Windows (unlike UNIX/Linux), there is no standard pro- gram for printing files. But there are ways you can do it. For example, if you have gsview installed, you could use it with the + + + + 6 November 2023 55 + + + + + +LATEXMK(1) General Commands Manual LATEXMK(1) + + option "/p": $lpr = '"c:/Program Files/Ghostgum/gsview/gsview32.exe" /p'; @@ -3622,18 +3666,6 @@ LATEXMK(1) General Commands Manual LATEXMK(1) $lualatex ["lualatex %O %S"] Specifies the command line for the LaTeX processing program that - - - - 4 April 2023 55 - - - - - -LATEXMK(1) General Commands Manual LATEXMK(1) - - is to be used when the lualatex program is called for (e.g., by the option -lualatex. @@ -3656,6 +3688,18 @@ LATEXMK(1) General Commands Manual LATEXMK(1) fault extensions are 'tex', 'pdf', 'jpg, and 'png'. See details of the %latex_input_extensions for other information + + + + 6 November 2023 56 + + + + + +LATEXMK(1) General Commands Manual LATEXMK(1) + + that equally applies to %lualatex_input_extensions. $lualatex_silent_switch ["-interaction=batchmode"] @@ -3688,18 +3732,6 @@ LATEXMK(1) General Commands Manual LATEXMK(1) bail out, rather than rerunning *latex again to resolve cross- references, etc. The default value covers all normal cases. - - - - 4 April 2023 56 - - - - - -LATEXMK(1) General Commands Manual LATEXMK(1) - - (Note that the "etc" covers a lot of cases where one run of *la- tex generates files to be read in on a later run.) @@ -3721,10 +3753,22 @@ LATEXMK(1) General Commands Manual LATEXMK(1) stitution from "/" to "\", by default. However there are also programs on MS-Windows for which a back - slash "\" is interpreted differently than as a directory separa- - tor; for these the directory separator should be "/". Programs - with this behavior include all the *latex programs in the - TeXLive implementation (but not the MiKTeX implementation). + slash "\" is interpreted differently than as a directory + + + + 6 November 2023 57 + + + + + +LATEXMK(1) General Commands Manual LATEXMK(1) + + + separator; for these the directory separator should be "/". + Programs with this behavior include all the *latex programs in + the TeXLive implementation (but not the MiKTeX implementation). Hence if you use TeXLive on MS-Windows, then $MSWin_back_slash should be set to zero. @@ -3755,17 +3799,6 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - - - 4 April 2023 57 - - - - - -LATEXMK(1) General Commands Manual LATEXMK(1) - - $pdf_mode [0] If zero, do NOT generate a pdf version of the document. If equal to 1, generate a pdf version of the document using pdfla- @@ -3788,6 +3821,17 @@ LATEXMK(1) General Commands Manual LATEXMK(1) Specifies the command line for the LaTeX processing program in a version that makes a pdf file instead of a dvi file. + + + 6 November 2023 58 + + + + + +LATEXMK(1) General Commands Manual LATEXMK(1) + + An example use of this variable is to add certain options to the command line for the program, e.g., @@ -3820,18 +3864,6 @@ LATEXMK(1) General Commands Manual LATEXMK(1) See details of the %latex_input_extensions for other information that equally applies to %pdflatex_input_extensions. - - - - 4 April 2023 58 - - - - - -LATEXMK(1) General Commands Manual LATEXMK(1) - - $pdflatex_silent_switch ["-interaction=batchmode"] Switch(es) for the pdflatex program (specified in the variable $pdflatex) when silent mode is on. @@ -3854,6 +3886,18 @@ LATEXMK(1) General Commands Manual LATEXMK(1) preview, which is quite satisfactory. WARNING: Problem under MS-Windows: if acroread is used as the + + + + 6 November 2023 59 + + + + + +LATEXMK(1) General Commands Manual LATEXMK(1) + + pdf previewer, and it is actually viewing a pdf file, the pdf file cannot be updated. Thus makes acroread a bad choice of previewer if you use latexmk's previous-continuous mode (option @@ -3887,17 +3931,6 @@ LATEXMK(1) General Commands Manual LATEXMK(1) Note that acroread under MS-Windows (but not UNIX) locks the pdf file, so the default value is then 3. - - - 4 April 2023 59 - - - - - -LATEXMK(1) General Commands Manual LATEXMK(1) - - Arranging to use a command to get a previewer explicitly updated requires three variables to be set. For example: @@ -3918,6 +3951,19 @@ LATEXMK(1) General Commands Manual LATEXMK(1) variable $pdf_update_method. The default value is the one ap- propriate for gv on a UNIX system. + + + + + 6 November 2023 60 + + + + + +LATEXMK(1) General Commands Manual LATEXMK(1) + + $pid_position[1 under UNIX, -1 under MS-Windows] The variable $pid_position is used to specify which word in lines of the output from $pscmd corresponds to the process ID. @@ -3953,17 +3999,6 @@ LATEXMK(1) General Commands Manual LATEXMK(1) - - - 4 April 2023 60 - - - - - -LATEXMK(1) General Commands Manual LATEXMK(1) - - $preview_continuous_mode [0] If nonzero, run a previewer to view the document, and continue running latexmk to keep .dvi up-to-date. Equivalent to the -pvc @@ -3982,6 +4017,19 @@ LATEXMK(1) General Commands Manual LATEXMK(1) mended not to be set from an RC file, otherwise you could waste lots of paper. + + + + + 6 November 2023 61 + + + + + +LATEXMK(1) General Commands Manual LATEXMK(1) + + $print_type = ["auto"] Type of file to printout: possibilities are "auto", "dvi", "none", "pdf", or "ps". See the option -print= for the meaning @@ -4018,18 +4066,6 @@ LATEXMK(1) General Commands Manual LATEXMK(1) Note that gv could be used with the -watch option updates its display whenever the postscript file changes, whereas ghostview - - - - 4 April 2023 61 - - - - - -LATEXMK(1) General Commands Manual LATEXMK(1) - - does not. However, different versions of gv have slightly dif- ferent ways of writing this option. You can configure this variable appropriately. @@ -4049,6 +4085,17 @@ LATEXMK(1) General Commands Manual LATEXMK(1) in yourself, whenever it is needed. + + + 6 November 2023 62 + + + + + +LATEXMK(1) General Commands Manual LATEXMK(1) + + $ps_previewer_landscape ["start gv -swap %O %S", but start %O %S under MS-Windows] The command to invoke a ps-previewer in landscape mode. @@ -4085,17 +4132,6 @@ LATEXMK(1) General Commands Manual LATEXMK(1) The period of inactivity, in minutes, after which pvc mode times out. This is used if $pvc_timeout is nonzero. - - - 4 April 2023 62 - - - - - -LATEXMK(1) General Commands Manual LATEXMK(1) - - $pvc_view_file_via_temporary [1] The same as $always_view_file_via_temporary, except that it only applies in preview-continuous mode (-pvc option). @@ -4115,6 +4151,17 @@ LATEXMK(1) General Commands Manual LATEXMK(1) correctly treated by the operating system in passing arguments to programs.) + + + 6 November 2023 63 + + + + + +LATEXMK(1) General Commands Manual LATEXMK(1) + + $rc_report [1] After initialization, whether to give a list of the RC files read. @@ -4150,18 +4197,6 @@ LATEXMK(1) General Commands Manual LATEXMK(1) [Comment to technically savvy readers: *latex doesn't actually need the modified search path. But, surprisingly, dvipdf and - - - - 4 April 2023 63 - - - - - -LATEXMK(1) General Commands Manual LATEXMK(1) - - dvips do, because sometimes graphics files get generated in the output or aux directories.] @@ -4181,6 +4216,18 @@ LATEXMK(1) General Commands Manual LATEXMK(1) Note: On MS Windows, this is clock time. On other OSs it is the CPU time used (by latexmk and the child processes it invokes). + + + + 6 November 2023 64 + + + + + +LATEXMK(1) General Commands Manual LATEXMK(1) + + The OS-dependence is because of a limitation of Windows. If you wish to force the use of clock instead of CPU time, you can set @@ -4217,17 +4264,6 @@ LATEXMK(1) General Commands Manual LATEXMK(1) A value of exactly 0 gives no delay, and typically results in 100% CPU usage, which may not be desirable. - - - 4 April 2023 64 - - - - - -LATEXMK(1) General Commands Manual LATEXMK(1) - - $texfile_search [""] This is an obsolete variable, replaced by the @default_files variable. @@ -4245,10 +4281,22 @@ LATEXMK(1) General Commands Manual LATEXMK(1) while running. The default under MSWindows (including cygwin), is to set $tm- - pdir to the value of the first of whichever of the system envi- - ronment variables TMPDIR or TEMP exists, otherwise to the cur- - rent directory. Under other operating systems (expected to be - UNIX/Linux, including OS-X), the default is the value of the + pdir to the value of the first of whichever of the system + + + + 6 November 2023 65 + + + + + +LATEXMK(1) General Commands Manual LATEXMK(1) + + + environment variables TMPDIR or TEMP exists, otherwise to the + current directory. Under other operating systems (expected to + be UNIX/Linux, including OS-X), the default is the value of the system environment variable TMPDIR if it exists, otherwise "/tmp". @@ -4282,18 +4330,6 @@ LATEXMK(1) General Commands Manual LATEXMK(1) When the variable is non-zero, latexmk at the end of its run will return a non-zero status code to the operating system if - - - - 4 April 2023 65 - - - - - -LATEXMK(1) General Commands Manual LATEXMK(1) - - any of the files processed gives a warning about problems with citations or references (i.e., undefined citations or references or multiply defined references). This is after latexmk has com- @@ -4312,6 +4348,18 @@ LATEXMK(1) General Commands Manual LATEXMK(1) ings as errors that require the overall build process to be aborted. Of course, since multiple runs of *latex are generally needed to resolve references and citations, what matters is not + + + + 6 November 2023 66 + + + + + +LATEXMK(1) General Commands Manual LATEXMK(1) + + the warnings on the first run, but the warnings on the last run; latexmk takes this into account appropriately. @@ -4348,36 +4396,36 @@ LATEXMK(1) General Commands Manual LATEXMK(1) Note about xelatex: latexmk uses xelatex to make an .xdv rather than .pdf file, with the .pdf file being created in a separate + step. This is enforced by the use of the -no-pdf option. If %O + is part of the command for invoking xelatex, then latexmk will + insert the -no-pdf option automatically, otherwise you must pro- + vide the option yourself. See the documentation for the -pdfxe + option for why latexmk makes a .xdv file rather than a .pdf file + when xelatex is used. + To do a coordinated setting of all of $dvilualatex, $latex, + $pdflatex, $lualatex, and $xelatex, see the section "Advanced + Configuration". - 4 April 2023 66 + %xelatex_input_extensions + This variable specifies the extensions tried by latexmk when it + finds that an xelatex run resulted in an error that a file has + not been found, and the file is given without an extension. + This typically happens when LaTeX commands of the form \in- + put{file} or \includegraphics{figure}, when the relevant source + 6 November 2023 67 -LATEXMK(1) General Commands Manual LATEXMK(1) - step. This is enforced by the use of the -no-pdf option. If %O - is part of the command for invoking xelatex, then latexmk will - insert the -no-pdf option automatically, otherwise you must pro- - vide the option yourself. See the documentation for the -pdfxe - option for why latexmk makes a .xdv file rather than a .pdf file - when xelatex is used. - To do a coordinated setting of all of $dvilualatex, $latex, - $pdflatex, $lualatex, and $xelatex, see the section "Advanced - Configuration". +LATEXMK(1) General Commands Manual LATEXMK(1) - %xelatex_input_extensions - This variable specifies the extensions tried by latexmk when it - finds that an xelatex run resulted in an error that a file has - not been found, and the file is given without an extension. - This typically happens when LaTeX commands of the form \in- - put{file} or \includegraphics{figure}, when the relevant source file does not exist. In this situation, latexmk searches for custom dependencies to @@ -4415,17 +4463,6 @@ CUSTOM DEPENDENCIES A better method is to use the subroutines that allow convenient manipu- lations of the custom dependency list. These are - - - 4 April 2023 67 - - - - - -LATEXMK(1) General Commands Manual LATEXMK(1) - - add_cus_dep( fromextension, toextension, must, subroutine ) remove_cus_dep( fromextension, toextension ) show_cus_dep() @@ -4443,6 +4480,18 @@ LATEXMK(1) General Commands Manual LATEXMK(1) must: If non-zero, the file from which we are converting must exist, if it doesn't exist latexmk will give an error message and exit unless the -f option is specified. If must is zero and the file + + + + 6 November 2023 68 + + + + + +LATEXMK(1) General Commands Manual LATEXMK(1) + + we are converting from doesn't exist, then no action is taken. Generally, the appropriate value of must is zero. @@ -4480,18 +4529,6 @@ LATEXMK(1) General Commands Manual LATEXMK(1) rule is invoked, with an argument that is the base name of the files in question. Simple cases just involve a subroutine invoking an external program; this can be done by following the templates below, even by - - - - 4 April 2023 68 - - - - - -LATEXMK(1) General Commands Manual LATEXMK(1) - - those without knowledge of the Perl programming language. Of course, experts could do something much more elaborate. @@ -4509,6 +4546,18 @@ LATEXMK(1) General Commands Manual LATEXMK(1) Note for advanced usage: The operating system's environment variable TEXINPUTS can be used to specify a search path for finding files by la- tex etc. Correspondingly, when a missing file is reported, latexmk + + + + 6 November 2023 69 + + + + + +LATEXMK(1) General Commands Manual LATEXMK(1) + + looks in the directories specified in TEXINPUTS as well as in the cur- rent directory, to find a source file from which an instance of a cus- tom dependency can be used to make the missing file. @@ -4546,18 +4595,6 @@ LATEXMK(1) General Commands Manual LATEXMK(1) of the form of a variable name, $_[0] in this case, is to be substi- tuted by its value. - - - - 4 April 2023 69 - - - - - -LATEXMK(1) General Commands Manual LATEXMK(1) - - If the return value of the subroutine is non-zero, then latexmk will assume an error occurred during the execution of the subroutine. In the above example, no explicit return value is given, and instead the @@ -4575,6 +4612,18 @@ LATEXMK(1) General Commands Manual LATEXMK(1) } Note 1: In the command lines given in the system commands in the above + + + + 6 November 2023 70 + + + + + +LATEXMK(1) General Commands Manual LATEXMK(1) + + examples, double quotes have been inserted around the file names (im- plemented by '\"' in the Perl language). They immunize the running of the program against special characters in filenames. Very often these @@ -4613,17 +4662,6 @@ LATEXMK(1) General Commands Manual LATEXMK(1) remove_cus_dep( 'fig', 'eps' ); - - - 4 April 2023 70 - - - - - -LATEXMK(1) General Commands Manual LATEXMK(1) - - If you have complicated sets of custom dependencies, you may want to get a listing of the custom dependencies. This is done by using the line @@ -4639,13 +4677,25 @@ LATEXMK(1) General Commands Manual LATEXMK(1) file. This method has been available since very old versions of la- texmk, and many examples can be found, e.g., on the web. - However in later versions of latexmk the internal structure of the im- - plementation of its "rules" for the steps of processing, including cus- - tom dependencies, became much more powerful. The function implementing - a custom dependency is executed within a special context where a number - of extra variables and subroutines are defined. Publicly documented - ones, intended to be long-term stable, are listed below, under the - heading "Variables and subroutines for processing a rule". + However in later versions of latexmk the internal structure of the + + + + 6 November 2023 71 + + + + + +LATEXMK(1) General Commands Manual LATEXMK(1) + + + implementation of its "rules" for the steps of processing, including + custom dependencies, became much more powerful. The function imple- + menting a custom dependency is executed within a special context where + a number of extra variables and subroutines are defined. Publicly doc- + umented ones, intended to be long-term stable, are listed below, under + the heading "Variables and subroutines for processing a rule". Examples of their use is given in the following examples, concerning multiple index files and glossaries. @@ -4678,18 +4728,6 @@ LATEXMK(1) General Commands Manual LATEXMK(1) function to simplify the definitions to use a single function: add_cus_dep( 'ndx', 'nnd', 0, 'dx2nd' ); - - - - 4 April 2023 71 - - - - - -LATEXMK(1) General Commands Manual LATEXMK(1) - - add_cus_dep( 'adx', 'and', 0, 'dx2nd' ); sub dx2nd { return Run_subst( "makeindex -o %D %S" ); @@ -4706,6 +4744,18 @@ LATEXMK(1) General Commands Manual LATEXMK(1) push @generated_exts, 'ndx', 'nnd', 'adx', 'and'; This last example uses the command specification in $makeindex, and so + + + + 6 November 2023 72 + + + + + +LATEXMK(1) General Commands Manual LATEXMK(1) + + any customization you have made for the standard index also applies to your extra indexes. @@ -4744,18 +4794,6 @@ LATEXMK(1) General Commands Manual LATEXMK(1) } This method still works, and is almost equivalent to the code given - - - - 4 April 2023 72 - - - - - -LATEXMK(1) General Commands Manual LATEXMK(1) - - earlier that used the add_cus_dep subroutine. However, the old method doesn't delete any previous custom-dependency for the same conversion. So the new method is preferable. @@ -4771,8 +4809,20 @@ Advanced configuration: Some extra resources and advanced tricks See also the section DEALING WITH ERRORS, PROBLEMS, ETC. See also the examples in the directory example_rcfiles in the latexmk distributions. - Even if none of the examples apply to your case, they may give you use- - ful ideas + Even if none of the examples apply to your case, they may give you + + + + 6 November 2023 73 + + + + + +LATEXMK(1) General Commands Manual LATEXMK(1) + + + useful ideas Utility subroutines @@ -4809,20 +4859,8 @@ Advanced configuration: Some extra resources and advanced tricks nal" -- see the section FORMAT OF COMMAND SPECIFICATIONS. When you use a subroutine for processing a rule, all the possibilities - of Perl programming are available, of course. In addition, some of - - - - 4 April 2023 73 - - - - - -LATEXMK(1) General Commands Manual LATEXMK(1) - - - latexmk's internal variables and subroutines are available. The ones + of Perl programming are available, of course. In addition, some of la- + texmk's internal variables and subroutines are available. The ones listed below are intended to be available to (advanced) users, and their specifications will generally have stability under upgrades. Gen- erally, the variables should be treated as read-only: Changing their @@ -4837,17 +4875,87 @@ LATEXMK(1) General Commands Manual LATEXMK(1) This gives the name of the primary source file. Note the double dollar signs. + + + + + 6 November 2023 74 + + + + + +LATEXMK(1) General Commands Manual LATEXMK(1) + + $$Pdest This gives the name of the main output file if any. Note the double dollar signs. + + pushd( path ), popd() + These subroutines are used when it is needed to temporarily + change the working directory, as in + + pushd( 'some_directory' ); + ... Processing done with 'some_directory' as the working + directory + popd() + + They perform exactly the same function as the commands of the + same names in operating system command shells like bash on Unix, + and cmd.exe on the Windows. + + + rdb_add_generated( file, ... ) + This subroutine is to be used in the context of a rule, that is, + from within a subroutine that is carrying out processing of a + rule. Such is the case for the subroutine implementing a custom + dependency, or the subroutine invoked by using the "internal" + keyword in the command specification like that in the variable + $latex. + + Its arguments are a sequence of filenames which are generated + during the running of the rule. The names might arise from an + analysis of the results of the run, e.g., in a log file, or from + knowledge of properties of the specific rule. Calling + rdb_add_generated with these filenames ensures that these files + are flagged as generated by the rule in latexmk's internal data + structures. Basically, no action is taken if the files have al- + ready been flagged as generated. + + A main purpose of using this subroutine is for the situation + when a generated file is also the source file for some rule, so + that latexmk can correctly link the dependency information in + its network of rules. + + Note: Unlike some other subroutines in this section, there is no + argument for a rule for rdb_add_generated. Instead, the subrou- + tine is to be invoked during the processing of a rule when la- + texmk has set up an appropriate context (i.e., appropriate vari- + ables). In contrast, subroutines with a rule argument can be + used also outside a rule context. + + rdb_ensure_file( $rule, file ) - This a subroutine that ensures that the given file is among the - source files for the specified rule. It is typically used when, - during the processing of a rule, it is known that a particular - extra file is among the dependencies that latexmk should know, - but its default methods don't find the dependency. Almost always - the first argument is the name of the rule currently being pro- + This subroutine ensures that the given file is among the source + files for the specified rule. It is typically used when, during + the processing of a rule, it is known that a particular extra + file is among the dependencies that latexmk should know, but its + + + + 6 November 2023 75 + + + + + +LATEXMK(1) General Commands Manual LATEXMK(1) + + + default methods don't find the dependency. Almost always the + first argument is the name of the rule currently being pro- cessed, so it is then appropriate to specify it by $rule. For examples of its use, see some of the files in the directory @@ -4857,16 +4965,34 @@ LATEXMK(1) General Commands Manual LATEXMK(1) where latexmk's normal processing fails to detect certain extra source files. + Note that rdb_ensure_file only has one filename argument, unlike + other subroutines in this section. If you want to apply its ac- + tion to multiple files, you will need one call to rdb_en- + sure_file for each file. + + rdb_remove_files( $rule, file, ... ) - This subroutine removes one or more files from the dependency + This subroutine removes one or more files from the dependency list for the given rule. + + rdb_remove_generated( file, ... ) + This subroutine is to be used in the context of a rule, that is, + from within a subroutine that is carrying out processing of a + rule. It performs the opposite action to rdb_add_generated. + Its effect is to ensure that the given filenames are not listed + in latexmk's internal data structures as being generated by the + rule. + + rdb_list_source( $rule ) This subroutine returns the list of source files (i.e., the de- pendency list) for the given rule. + rdb_set_source( $rule, file, ... ) + rdb_set_source( $rule, @files ) This subroutine sets the dependency list for the given rule to be the specified files. Files that are already in the list have @@ -4876,10 +5002,16 @@ LATEXMK(1) General Commands Manual LATEXMK(1) dency list. + Run_subst( command_spec ) + This subroutine runs the command specified by command_spec. The + specification is a string in the format listed in the section + "Format of Command Specifications". An important action of the + Run_subst is to make substitutions of placeholders, e.g., %S and + %D for source and destination files; these get substituted - 4 April 2023 74 + 6 November 2023 76 @@ -4888,14 +5020,8 @@ LATEXMK(1) General Commands Manual LATEXMK(1) LATEXMK(1) General Commands Manual LATEXMK(1) - Run_subst( command_spec ) - This subroutine runs the command specified by command_spec. The - specification is a string in the format listed in the section - "Format of Command Specifications". An important action of the - Run_subst is to make substitutions of placeholders, e.g., %S and - %D for source and destination files; these get substituted be- - fore the command is run. In addition, the command after substi- - tution is printed to the screen unless latexmk is running in + before the command is run. In addition, the command after sub- + stitution is printed to the screen unless latexmk is running in silent mode. @@ -4942,10 +5068,16 @@ LATEXMK(1) General Commands Manual LATEXMK(1) Note that when '%O' appears after the added option, as here, options provided on the command line to latexmk can override the supplied one. + A more general command line can be set up by using the placeholder '%C' + in CMD_SPEC. The '%C' is substituted by the basic name of the command, + i.e., whichever of 'latex', 'pdflatex', etc is appropriate. (More than + one occurrence of '%C' is allowed.) For example to use the develop- + ment/pre-release versions of latex, etc, which have names, 'latex-dev', + 'pdflatex-dev', etc, you could use - 4 April 2023 75 + 6 November 2023 77 @@ -4954,13 +5086,6 @@ LATEXMK(1) General Commands Manual LATEXMK(1) LATEXMK(1) General Commands Manual LATEXMK(1) - A more general command line can be set up by using the placeholder '%C' - in CMD_SPEC. The '%C' is substituted by the basic name of the command, - i.e., whichever of 'latex', 'pdflatex', etc is appropriate. (More than - one occurrence of '%C' is allowed.) For example to use the develop- - ment/pre-release versions of latex, etc, which have names, 'latex-dev', - 'pdflatex-dev', etc, you could use - set_tex_cmds( '%C-dev %O %S' ); This results in $latex = 'latex-dev %O %S', etc. (The pre-release pro- @@ -5008,10 +5133,17 @@ LATEXMK(1) General Commands Manual LATEXMK(1) suitable Makefile is like .PHONY : FORCE_MAKE + all : try.pdf + %.pdf : %.tex FORCE_MAKE + latexmk -pdf -dvi- -ps- $< + + (Note: the last line must be introduced by a tab for the Makefile to + function correctly!) Naturally, if making try.pdf from its associated + LaTeX file try.tex were the only task to be performed, a direct use of - 4 April 2023 76 + 6 November 2023 78 @@ -5020,13 +5152,6 @@ LATEXMK(1) General Commands Manual LATEXMK(1) LATEXMK(1) General Commands Manual LATEXMK(1) - all : try.pdf - %.pdf : %.tex FORCE_MAKE - latexmk -pdf -dvi- -ps- $< - - (Note: the last line must be introduced by a tab for the Makefile to - function correctly!) Naturally, if making try.pdf from its associated - LaTeX file try.tex were the only task to be performed, a direct use of latexmk without a Makefile would normally be better. The benefit of using a Makefile for a LaTeX document would be in a larger project, where lines such as the above would be only be a small part of a larger @@ -5074,25 +5199,25 @@ LATEXMK(1) General Commands Manual LATEXMK(1) dles automatic dependency tracking of C source files. After each run of latexmk, dependency information is put in a file in + the .deps subdirectory. The Makefile causes these dependency files to + be read by make, which now has the full dependency information for each + target .pdf file. To make things less trivial it is specificed that + two files document1.pdf and document2.pdf are the targets. The depen- + dency files are .deps/document1.pdfP and .deps/document2.pdfP. + There is now no need for the phony prerequisite for the rule to make - 4 April 2023 77 + 6 November 2023 79 -LATEXMK(1) General Commands Manual LATEXMK(1) +LATEXMK(1) General Commands Manual LATEXMK(1) - the .deps subdirectory. The Makefile causes these dependency files to - be read by make, which now has the full dependency information for each - target .pdf file. To make things less trivial it is specificed that - two files document1.pdf and document2.pdf are the targets. The depen- - dency files are .deps/document1.pdfP and .deps/document2.pdfP. - There is now no need for the phony prerequisite for the rule to make .pdf files from .tex files. But I have added a rule to make .pdf files from .fig files produced by the xfig program; these are commonly used for graphics insertions in LaTeX documents. Latexmk is arranged to @@ -5140,24 +5265,23 @@ NON_ASCII CHARACTERS IN FILENAMES, RC FILES, ETC names on Windows, even though there were no corresponding problems on macOS and Linux. These problems are corrected in the present version. + DETAILS TO BE FILLED IN - 4 April 2023 78 - +SEE ALSO + latex(1), bibtex(1), lualatex(1), pdflatex(1), xelatex(1). -LATEXMK(1) General Commands Manual LATEXMK(1) + 6 November 2023 80 - DETAILS TO BE FILLED IN -SEE ALSO - latex(1), bibtex(1), lualatex(1), pdflatex(1), xelatex(1). +LATEXMK(1) General Commands Manual LATEXMK(1) BUGS (SELECTED) @@ -5186,12 +5310,12 @@ THANKS TO dard form to avoid being harvested too easily.) AUTHOR - Current version, by John Collins (Version 4.80). Report bugs etc to + Current version, by John Collins (Version 4.81). Report bugs etc to his e-mail (jcc8 at psu.edu). Released version can be obtained from CTAN: , and from the author's website - . + . Modifications and enhancements by Evan McLean (Version 2.0) Original script called "go" by David J. Musliner (RCS Version 3.2) @@ -5209,6 +5333,14 @@ AUTHOR - 4 April 2023 79 + + + + + + + + + 6 November 2023 81 diff --git a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl index 5c50be51f6..d4c3f95a4f 100644 --- a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl +++ b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl @@ -49,6 +49,7 @@ $mirrors = { }, 'Korea' => { 'http://ftp.ktug.org/tex-archive/' => 1, + 'https://ftp.kaist.ac.kr/pub/tex-archive/' => 1, 'https://kr.mirrors.cicku.me/ctan/' => 1, 'https://lab.uklee.pe.kr/tex-archive/' => 1, 'https://mirror.kakao.com/CTAN/' => 1, diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb b/systems/texlive/tlnet/tlpkg/texlive.tlpdb index 81b712c9b5..2793da89d6 100644 --- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb +++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb @@ -26,7 +26,7 @@ depend container_split_src_files/1 depend frozen/0 depend minrelease/2016 depend release/2023 -depend revision/68742 +depend revision/68744 name 00texlive.image category TLCore @@ -4800,7 +4800,7 @@ depend setting_available_architectures:aarch64-linux amd64-freebsd amd64-netbsd name 00texlive.installer category TLCore -revision 68742 +revision 68744 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 @@ -316586,7 +316586,7 @@ docfiles size=376 name texlive-scripts category TLCore -revision 68742 +revision 68744 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. @@ -316594,10 +316594,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 114240 -containerchecksum be46ed48111cc31cea864f5dce36fadc0a40b03a44b585a9dea444a0a3ab7ab228107a64b340bd6744162cc4de3126b6b7411d3febbd5323065a4edba83e01b7 -doccontainersize 428596 -doccontainerchecksum bd302f4b543682a6e222fbc4425e6007a95bf57f5499469d7654db52797fa0529fa6f84961e9851428ad9002d1582d0c222005b407626f1a1edc0a1eeb4c3d7a +containersize 114252 +containerchecksum 9daf7a2b4995282a640a0834900bbbd4df4127fbc0ca8470c0d02f7b8120d877de3f90ffb101593b6b5cf876de74c94c9837b3f245b496bc475cd2e5a833c781 +doccontainersize 428680 +doccontainerchecksum 04a1f0696e048113a2486bfc1e27213eb23c7c24f3d521eaf3ad4c965669b376bc3c37e8f505bac0cff03ed44ccc9967ceaebdfe398b4a1350c3270ff29e28fb docfiles size=550 doc.html texmf-dist/doc/man/man1/fmtutil-sys.1 diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 index e97dcb13c9..0bd3af6df8 100644 --- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 +++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 @@ -1 +1 @@ -dc9101746a683fe15decaf6787a5b93c texlive.tlpdb +8f5ac2897708c751f143bad146cd8d60 texlive.tlpdb diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 index ec96b504f0..3ec2b25968 100644 --- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 +++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 @@ -1 +1 @@ -d1c11d8dd9103eade5e7d9b2362a32da1423e6755bc5c2889a1a53f4f441eef376e45b32698080b6c67236d17aa378c297ee4b44c2baa479302c770382e1b2c8 texlive.tlpdb +aa326226a8d963ee5a6988b33f8e9b50406d64021857283b29aa27c1516eae162fca0d057a8fcb9d4d67312ac6204225d57799f18a0cb37c86013c0a502124fc texlive.tlpdb diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc index a05a4c8adf..c9aeeff2f9 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+QqiBBqTOGHfhlDjHAFAmVINywACgkQTOGHfhlD -jHAK1wf/ekhFn7k5yTRuiuPheCFbMeVS2OI5p8dLyb2meJmTfNeE0qIi2lQNxLYy -LoVziYbJRPdC5YUmtAoFaqBqDzDqaPos8dwX1xEqaREh18FpzQxAK9sYS3LuLppl -7tTIGWA50YhKREeHefgarrR9BawORkovxEqtM+OhDJgvWI+fTDXSHnAb0bqyxSrg -jOoxHK7H4244p2jYzNgfQY+SpzqER5Sh6XrXFilOQoYZNWrh2gMpkh33rEirQPYV -YsapUCM+3YG38WIymTo54zj9bQAe5dEBNSoiSLiHKtwiHGFozn1tpcWnTiXxORcr -wKuITOFwNA9TuBQabOKpE0mYZ1IJcA== -=9RsX +iQEzBAEBCgAdFiEE2PL4YFeoV+QqiBBqTOGHfhlDjHAFAmVJiF0ACgkQTOGHfhlD +jHBSLQf/WsGlLHiyR058mXOy2zVn2haUyZ+LyPFy5w6zUFUX1xQfaKP8uyBrFphp +ie+B/mZMht69lnrY6gj6Iotowsc2yp8Rz4Bjb9DtoZcMFVnrsHUEJo6rFCNxzFbP +z1SQbnW4Jr/dtqzKDAWHPRBkQjL82+5ZKsvxQwwNq1bDSuUneNsR7oY/Cdb453/a +t2vTmrTBr/6hEDQDID5PPrm7TuLl/sUYKEwWrlxowjtzLpGzovc9Ic82Rb+HO2Sw +xtKVZe8MvWDkz0bWgb2IA8E1ko3fi06IYhGexaZIcio8wBbT4ubTy+Gmut3xSY+f +2etdUWbEtVGf22ujlcnNZukAQ54qJw== +=/0Fa -----END PGP SIGNATURE----- diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz index 1bc69bd1f8..d192450fc9 100644 Binary files a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz and b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz differ diff --git a/timestamp b/timestamp index 0c786cb98e..e231de6743 100644 --- a/timestamp +++ b/timestamp @@ -2,4 +2,4 @@ # The source CTAN of this site's material: dante.ctan.org # The year-month-day-hour-minute of this site's material: -2023-11-07-02-02 +2023-11-08-02-02 -- cgit v1.2.3